static void draw_icon() { gboolean tsin_pho_mode(); if (!tray_icon) return; GdkPixbuf *pix = ((! current_CS) || (current_CS->im_state != HIME_STATE_CHINESE)) ? pixbuf : pixbuf_ch; int w = 0, h = 0; iw = gtk_status_icon_get_size(tray_icon), ih = gtk_status_icon_get_size(tray_icon); cairo_surface_t *cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, iw, ih); cr = cairo_create (cst); gdk_cairo_set_source_color (cr, &red_color_fg); if (pix) { gdk_cairo_set_source_pixbuf (cr, pix, 0, 0); cairo_paint (cr); } else { get_text_w_h(inmd[current_CS->in_method].cname, &w, &h); cairo_move_to (cr, 0, 0); pango_cairo_show_layout (cr, pango); } if (current_CS) { gdk_cairo_set_source_color (cr, &red_color_fg); if (current_shape_mode()) { get_text_w_h(full, &w, &h); cairo_move_to (cr, iw - w, ih - h); pango_cairo_show_layout (cr, pango); } if (current_CS->im_state == HIME_STATE_CHINESE && !tsin_pho_mode()) { gdk_cairo_set_source_color (cr, &blue_color_fg); get_text_w_h(engst, &w, &h); cairo_move_to (cr, 0, 0); pango_cairo_show_layout (cr, pango); } } if (gb_output) { gdk_cairo_set_source_color (cr, &red_color_fg); get_text_w_h(sim, &w, &h); cairo_move_to (cr, 0, ih - h); pango_cairo_show_layout (cr, pango); } cairo_destroy(cr); cr = NULL; GdkPixbuf *icon_pixbuf_output = gdk_pixbuf_get_from_surface(cst, 0, 0, iw, ih); cairo_surface_destroy(cst); cst = NULL; gtk_status_icon_set_from_pixbuf(tray_icon, icon_pixbuf_output); g_object_unref(icon_pixbuf_output); icon_pixbuf_output = NULL; pix = NULL; }
static void draw_icon() { gboolean tsin_pho_mode(); // dbg("draw_icon\n"); if (!da) return; GdkPixbuf *pix = ((! current_CS) || (current_CS->im_state != HIME_STATE_CHINESE)) ? pixbuf : pixbuf_ch; #if GTK_CHECK_VERSION(2,17,7) GtkAllocation dwdh; gtk_widget_get_allocation(da, &dwdh); int dw = dwdh.width, dh = dwdh.height; #else int dw = da->allocation.width, dh = da->allocation.height; #endif int w, h; GdkColor color_fg; // dbg("wh %d,%d\n", dw,dh); gdk_color_parse("black", &color_fg); #if !GTK_CHECK_VERSION(2,90,6) gdk_gc_set_rgb_fg_color(gc, &color_fg); #else gc = gdk_cairo_create (tray_da_win); gdk_cairo_set_source_color (gc, &color_fg); #endif if (pix) { int ofs = (dh - gdk_pixbuf_get_height (pix))/2; #if !GTK_CHECK_VERSION(2,90,6) gdk_draw_pixbuf(tray_da_win, NULL, pix, 0, 0, 0, ofs, -1, -1, GDK_RGB_DITHER_NORMAL, 0, 0); #else gdk_cairo_set_source_pixbuf (gc, pix, 0, ofs); cairo_paint (gc); cairo_destroy (gc); #endif } else { get_text_w_h(inmd[current_CS->in_method].cname, &w, &h); #if !GTK_CHECK_VERSION(2,90,6) gdk_draw_layout(tray_da_win, gc, 0, 0, pango); #else cairo_move_to (gc, 0, 0); pango_cairo_show_layout (gc, pango); cairo_destroy (gc); #endif } if (current_CS) { if (current_CS->b_half_full_char || ( #if USE_TSIN current_method_type()==method_type_TSIN && tss.tsin_half_full && #endif current_CS->im_state == HIME_STATE_CHINESE)) { static char full[] = N_("全"); get_text_w_h(full, &w, &h); #if !GTK_CHECK_VERSION(2,90,6) gdk_draw_layout(tray_da_win, gc, dw - w, dh - h, pango); #else cairo_move_to (gc, dw - w, dh - h); pango_cairo_show_layout (gc, pango); cairo_destroy (gc); #endif } if (current_CS->im_state == HIME_STATE_ENG_FULL) { static char efull[] = N_("A全"); get_text_w_h(efull, &w, &h); #if !GTK_CHECK_VERSION(2,90,6) gdk_draw_layout(tray_da_win, gc, 0, 0, pango); #else cairo_move_to (gc, 0, 0); pango_cairo_show_layout (gc, pango); cairo_destroy (gc); #endif } #if USE_TSIN if (((current_method_type()==method_type_TSIN) || (current_method_type()==method_type_MODULE)) && (current_CS->im_state == HIME_STATE_CHINESE) && (! tsin_pho_mode())) { static char efull[] = "ABC"; gdk_color_parse("blue", &color_fg); #if !GTK_CHECK_VERSION(2,90,6) gdk_gc_set_rgb_fg_color(gc, &color_fg); #else gc = gdk_cairo_create (tray_da_win); gdk_cairo_set_source_color (gc, &color_fg); #endif get_text_w_h(efull, &w, &h); #if !GTK_CHECK_VERSION(2,90,6) gdk_draw_layout(tray_da_win, gc, 0, 0, pango); #else cairo_move_to (gc, 0, 0); pango_cairo_show_layout (gc, pango); cairo_destroy (gc); #endif } #endif } gdk_color_parse("red", &color_fg); #if !GTK_CHECK_VERSION(2,90,6) gdk_gc_set_rgb_fg_color(gc, &color_fg); #else gc = gdk_cairo_create (tray_da_win); gdk_cairo_set_source_color (gc, &color_fg); #endif if (gb_output) { static char sim[] = "简"; get_text_w_h(sim, &w, &h); #if !GTK_CHECK_VERSION(2,90,6) gdk_draw_layout(tray_da_win, gc, 0, dh - h, pango); #else cairo_move_to (gc, 0, dh - h); pango_cairo_show_layout (gc, pango); cairo_destroy (gc); #endif } }