Mercurial > pidgin.yaz
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 |