comparison pidgin/gtkblist.c @ 15583:ad1ddb31202d

RTL Tooltips. You have no clue how much longer this took than it should have ;)
author Sean Egan <seanegan@gmail.com>
date Thu, 08 Feb 2007 00:39:29 +0000
parents 442128853bdb
children 1dfa6945e13f
comparison
equal deleted inserted replaced
15582:e00b89c00bf6 15583:ad1ddb31202d
2315 int current_height, max_width; 2315 int current_height, max_width;
2316 int max_text_width; 2316 int max_text_width;
2317 int max_avatar_width; 2317 int max_avatar_width;
2318 GList *l; 2318 GList *l;
2319 int prpl_col = 0; 2319 int prpl_col = 0;
2320 2320 GtkTextDirection dir = gtk_widget_get_direction(widget);
2321
2321 if(gtkblist->tooltipdata == NULL) 2322 if(gtkblist->tooltipdata == NULL)
2322 return; 2323 return;
2323 2324
2324 style = gtkblist->tipwindow->style; 2325 style = gtkblist->tipwindow->style;
2325 gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, 2326 gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
2336 MAX(td->width, td->name_width)); 2337 MAX(td->width, td->name_width));
2337 max_avatar_width = MAX(max_avatar_width, td->avatar_width); 2338 max_avatar_width = MAX(max_avatar_width, td->avatar_width);
2338 } 2339 }
2339 2340
2340 max_width = TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + max_text_width + SMALL_SPACE + max_avatar_width + TOOLTIP_BORDER; 2341 max_width = TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + max_text_width + SMALL_SPACE + max_avatar_width + TOOLTIP_BORDER;
2341 prpl_col = TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + max_text_width - PRPL_SIZE; 2342 if (dir == GTK_TEXT_DIR_RTL)
2343 prpl_col = TOOLTIP_BORDER + max_avatar_width + SMALL_SPACE;
2344 else
2345 prpl_col = TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE + max_text_width - PRPL_SIZE;
2342 2346
2343 current_height = 12; 2347 current_height = 12;
2344 for(l = gtkblist->tooltipdata; l; l = l->next) 2348 for(l = gtkblist->tooltipdata; l; l = l->next)
2345 { 2349 {
2346 struct tooltip_data *td = l->data; 2350 struct tooltip_data *td = l->data;
2347 2351
2348 if (td->avatar && pidgin_gdk_pixbuf_is_opaque(td->avatar)) 2352 if (td->avatar && pidgin_gdk_pixbuf_is_opaque(td->avatar))
2349 gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, 2353 if (dir == GTK_TEXT_DIR_RTL)
2350 NULL, gtkblist->tipwindow, "tooltip", 2354 gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
2351 max_width - (td->avatar_width+ TOOLTIP_BORDER)-1, 2355 NULL, gtkblist->tipwindow, "tooltip",
2352 current_height-1,td->avatar_width+2, td->avatar_height+2); 2356 TOOLTIP_BORDER -1, current_height -1, td->avatar_width +2, td->avatar_height + 2);
2357 else
2358 gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
2359 NULL, gtkblist->tipwindow, "tooltip",
2360 max_width - (td->avatar_width+ TOOLTIP_BORDER)-1,
2361 current_height-1,td->avatar_width+2, td->avatar_height+2);
2353 2362
2354 #if GTK_CHECK_VERSION(2,2,0) 2363 #if GTK_CHECK_VERSION(2,2,0)
2355 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon, 2364 if (dir == GTK_TEXT_DIR_RTL)
2356 0, 0, TOOLTIP_BORDER, current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); 2365 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon,
2366 0, 0, max_width - TOOLTIP_BORDER - STATUS_SIZE, current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
2367 else
2368 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon,
2369 0, 0, TOOLTIP_BORDER, current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0);
2357 if(td->avatar) 2370 if(td->avatar)
2358 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 2371 if (dir == GTK_TEXT_DIR_RTL)
2359 td->avatar, 0, 0, max_width - (td->avatar_width + TOOLTIP_BORDER), 2372 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL,
2360 current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); 2373 td->avatar, 0, 0, TOOLTIP_BORDER, current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
2374 else
2375 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL,
2376 td->avatar, 0, 0, max_width - (td->avatar_width + TOOLTIP_BORDER),
2377 current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0);
2361 if (!td->avatar_is_prpl_icon) 2378 if (!td->avatar_is_prpl_icon)
2362 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->prpl_icon, 2379 gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->prpl_icon,
2363 0, 0, 2380 0, 0,
2364 prpl_col, 2381 prpl_col,
2365 current_height + ((td->name_height / 2) - (PRPL_SIZE / 2)), 2382 current_height + ((td->name_height / 2) - (PRPL_SIZE / 2)),
2371 gdk_pixbuf_render_to_drawable(td->avatar, 2388 gdk_pixbuf_render_to_drawable(td->avatar,
2372 GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, 2389 GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0,
2373 max_width - (td->avatar_width + TOOLTIP_BORDER), 2390 max_width - (td->avatar_width + TOOLTIP_BORDER),
2374 current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); 2391 current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
2375 #endif 2392 #endif
2376 2393 if (dir == GTK_TEXT_DIR_RTL) {
2377 gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, 2394 gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
2378 NULL, gtkblist->tipwindow, "tooltip", 2395 NULL, gtkblist->tipwindow, "tooltip",
2379 TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE, current_height, td->name_layout); 2396 max_width -(TOOLTIP_BORDER + STATUS_SIZE +SMALL_SPACE) - PANGO_PIXELS(300000),
2380 2397 current_height, td->name_layout);
2381 gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, 2398 } else {
2382 NULL, gtkblist->tipwindow, "tooltip", 2399 gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
2383 TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE, current_height + td->name_height, td->layout); 2400 NULL, gtkblist->tipwindow, "tooltip",
2401 TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE, current_height, td->name_layout);
2402 }
2403 if (dir != GTK_TEXT_DIR_RTL) {
2404 gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
2405 NULL, gtkblist->tipwindow, "tooltip",
2406 TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE, current_height + td->name_height, td->layout);
2407 } else {
2408 gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
2409 NULL, gtkblist->tipwindow, "tooltip",
2410 max_width - (TOOLTIP_BORDER + STATUS_SIZE + SMALL_SPACE) - PANGO_PIXELS(300000),
2411 current_height + td->name_height,
2412 td->layout);
2413 }
2384 2414
2385 current_height += MAX(td->name_height + td->height, td->avatar_height) + TOOLTIP_BORDER; 2415 current_height += MAX(td->name_height + td->height, td->avatar_height) + TOOLTIP_BORDER;
2386 } 2416 }
2387 } 2417 }
2388 2418