From: <kr_...@us...> - 2003-10-07 19:44:15
|
Update of /cvsroot/htoolkit/port/src/cbits/GTK In directory sc8-pr-cvs1:/tmp/cvs-serv25226/src/cbits/GTK Modified Files: Bitmap.c Canvas.c Font.c Window.c Log Message: better support for fonts Index: Bitmap.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Bitmap.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Bitmap.c 7 Apr 2003 20:58:47 -0000 1.5 --- Bitmap.c 7 Oct 2003 19:44:09 -0000 1.6 *************** *** 95,101 **** --- 95,103 ---- CanvasHandle osGetBitmapCanvas(BitmapHandle bitmap) { + Display *display; CanvasHandle canvas; GdkRectangle rectangle; GdkColormap *sys_colormap; + PangoContext *pango_context; rectangle.x = 0; *************** *** 106,112 **** --- 108,119 ---- sys_colormap = gdk_colormap_get_system(); + display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default()); + pango_context = pango_x_get_context(display); + gdk_pango_context_set_colormap(pango_context, sys_colormap); + canvas = rmalloc(sizeof(*canvas)); memset(canvas, 0, sizeof(*canvas)); canvas->drawable = GDK_DRAWABLE(gdk_pixmap_new(NULL, bitmap->width, bitmap->height, sys_colormap->visual->depth)); + canvas->layout = pango_layout_new(pango_context); canvas->region = gdk_region_rectangle(&rectangle); canvas->buffered = 0; *************** *** 134,137 **** --- 141,145 ---- gdk_pixmap_unref(canvas->drawable); if (canvas->region) gdk_region_destroy(canvas->region); + g_object_unref(canvas->layout); } Index: Canvas.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Canvas.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** Canvas.c 25 Aug 2003 20:41:08 -0000 1.14 --- Canvas.c 7 Oct 2003 19:44:09 -0000 1.15 *************** *** 84,88 **** canvas->theFont = font; - osChangeCanvasPen(size,function,pcolor,bcolor,joinStyle,capStyle,lineStyle,lineCustomCount,lineCustomDashes,backDraw,hatchStyle,hatchBitmap,font,canvas); --- 84,87 ---- *************** *** 447,450 **** --- 446,450 ---- canvas->theFont = font; + pango_layout_set_font_description(canvas->layout, font->font_descr); } } *************** *** 510,524 **** } ! static void osSetupFont(FontHandle font, int len) { ! if (font->style & (FONT_UNDERLINED | FONT_STRIKED)) { PangoAttribute *attr; - PangoAttrList *attr_list; ! attr_list = pango_layout_get_attributes(font->layout); ! if (font->style & FONT_UNDERLINED) { attr = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); --- 510,529 ---- } ! static void osSetupFont(CanvasHandle canvas, int len) { ! if (canvas->theFont->style & (FONT_UNDERLINED | FONT_STRIKED)) { PangoAttribute *attr; PangoAttrList *attr_list; ! attr_list = pango_layout_get_attributes(canvas->layout); ! if (!attr_list) ! { ! attr_list = pango_attr_list_new(); ! pango_layout_set_attributes(canvas->layout, attr_list); ! } ! ! if (canvas->theFont->style & FONT_UNDERLINED) { attr = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE); *************** *** 529,533 **** } ! if (font->style & FONT_STRIKED) { attr = pango_attr_strikethrough_new(gtk_true()); --- 534,538 ---- } ! if (canvas->theFont->style & FONT_STRIKED) { attr = pango_attr_strikethrough_new(gtk_true()); *************** *** 544,568 **** if (canvas->drawable) { ! osSetupFont(canvas->theFont, 1); ! ! pango_layout_set_text(canvas->theFont->layout, &c, 1); ! ! y -= pango_font_metrics_get_ascent(canvas->theFont->metrics)/PANGO_SCALE; ! ! if (canvas->backDraw) ! { ! int width, height; ! pango_layout_get_pixel_size(canvas->theFont->layout, &width, &height); ! gdk_draw_rectangle(canvas->drawable, canvas->theEraseGC, TRUE, ! x, y, width, height); ! } ! gdk_draw_layout(canvas->drawable, canvas->theTextGC, x, y, ! canvas->theFont->layout); ! pango_layout_set_text(canvas->theFont->layout, NULL, 0); } } /* osDrawChar */ --- 549,565 ---- if (canvas->drawable) { ! PangoLayoutLine *layout_line; ! osSetupFont(canvas, 1); ! pango_layout_set_text(canvas->layout, &c, 1); ! layout_line = pango_layout_get_line(canvas->layout, 0); ! gdk_draw_layout_line_with_colors (canvas->drawable, canvas->theTextGC, x, y, ! layout_line, ! NULL, canvas->backDraw ? &canvas->backColor : NULL); ! pango_layout_set_text(canvas->layout, NULL, 0); } } /* osDrawChar */ *************** *** 572,596 **** if (canvas->drawable) { ! osSetupFont(canvas->theFont, strlen(string)); ! ! pango_layout_set_text(canvas->theFont->layout, string, -1); ! ! y -= pango_font_metrics_get_ascent(canvas->theFont->metrics)/PANGO_SCALE; ! ! if (canvas->backDraw) ! { ! int width, height; ! pango_layout_get_pixel_size(canvas->theFont->layout, &width, &height); ! gdk_draw_rectangle(canvas->drawable, canvas->theEraseGC, TRUE, ! x, y, width, height); ! } ! gdk_draw_layout(canvas->drawable, canvas->theTextGC, x, y, ! canvas->theFont->layout); ! pango_layout_set_text(canvas->theFont->layout, NULL, 0); } } /* osDrawString */ --- 569,585 ---- if (canvas->drawable) { ! PangoLayoutLine *layout_line; ! osSetupFont(canvas, strlen(string)); ! pango_layout_set_text(canvas->layout, string, -1); ! layout_line = pango_layout_get_line(canvas->layout, 0); ! gdk_draw_layout_line_with_colors (canvas->drawable, canvas->theTextGC, x, y, ! layout_line, ! NULL, canvas->backDraw ? &canvas->backColor : NULL); ! pango_layout_set_text(canvas->layout, NULL, 0); } } /* osDrawString */ *************** *** 643,651 **** CanvasHandle osGetTemporaryCanvas() { CanvasHandle canvas; canvas = rmalloc(sizeof(*canvas)); memset(canvas, 0, sizeof(*canvas)); ! canvas->buffered = 0; --- 632,645 ---- CanvasHandle osGetTemporaryCanvas() { + Display *display; CanvasHandle canvas; + PangoContext *pango_context; + + display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default()); + pango_context = pango_x_get_context(display); canvas = rmalloc(sizeof(*canvas)); memset(canvas, 0, sizeof(*canvas)); ! canvas->layout = pango_layout_new(pango_context); canvas->buffered = 0; *************** *** 655,658 **** --- 649,653 ---- void osReleaseTemporaryCanvas (CanvasHandle canvas) { + g_object_unref(canvas->layout); rfree(canvas); } /* osReleaseTemporaryCanvas */ Index: Font.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Font.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Font.c 25 Aug 2003 20:41:08 -0000 1.6 --- Font.c 7 Oct 2003 19:44:09 -0000 1.7 *************** *** 101,105 **** display = GDK_DISPLAY_XDISPLAY(gdk_display_get_default()); pango_context = pango_x_get_context(display); - font->layout = pango_layout_new(pango_context); font->font_descr = pango_font_description_new(); --- 101,104 ---- *************** *** 109,116 **** pango_font_description_set_size(font->font_descr, size*PANGO_SCALE); - pango_layout_set_font_description(font->layout, font->font_descr); - pango_font = pango_font_map_load_font ! ( pango_x_font_map_for_display(display) , NULL , font->font_descr --- 108,113 ---- pango_font_description_set_size(font->font_descr, size*PANGO_SCALE); pango_font = pango_font_map_load_font ! ( pango_x_font_map_for_display(display) , NULL , font->font_descr *************** *** 120,126 **** font->style = style; - if (font->style & (FONT_UNDERLINED | FONT_STRIKED)) - pango_layout_set_attributes(font->layout, pango_attr_list_new()); - return font; } --- 117,120 ---- *************** *** 130,134 **** pango_font_metrics_unref(font->metrics); pango_font_description_free(font->font_descr); - g_object_unref(font->layout); rfree(font); } /* osDeleteFont */ --- 124,127 ---- *************** *** 156,163 **** int width; ! pango_layout_set_text(canvas->theFont->layout, string, -1); ! pango_layout_get_pixel_size(canvas->theFont->layout, &width, NULL); ! pango_layout_set_text(canvas->theFont->layout, NULL, 0); ! return width; --- 149,155 ---- int width; ! pango_layout_set_text(canvas->layout, string, -1); ! pango_layout_get_pixel_size(canvas->layout, &width, NULL); ! pango_layout_set_text(canvas->layout, NULL, 0); return width; *************** *** 168,174 **** int width; ! pango_layout_set_text(canvas->theFont->layout, &ch, 1); ! pango_layout_get_pixel_size(canvas->theFont->layout, &width, NULL); ! pango_layout_set_text(canvas->theFont->layout, NULL, 0); return width; --- 160,166 ---- int width; ! pango_layout_set_text(canvas->layout, &ch, 1); ! pango_layout_get_pixel_size(canvas->layout, &width, NULL); ! pango_layout_set_text(canvas->layout, NULL, 0); return width; *************** *** 179,185 **** int width; ! pango_layout_set_text(font->layout, string, -1); ! pango_layout_get_pixel_size(font->layout, &width, NULL); ! pango_layout_set_text(font->layout, NULL, 0); return width; --- 171,179 ---- int width; ! pango_layout_set_font_description(canvas->layout, font->font_descr); ! pango_layout_set_text(canvas->layout, string, -1); ! pango_layout_get_pixel_size(canvas->layout, &width, NULL); ! pango_layout_set_text(canvas->layout, NULL, 0); ! pango_layout_set_font_description(canvas->layout, canvas->theFont->font_descr); return width; *************** *** 190,196 **** int width; ! pango_layout_set_text(font->layout, &ch, 1); ! pango_layout_get_pixel_size(font->layout, &width, NULL); ! pango_layout_set_text(font->layout, NULL, 0); return width; --- 184,192 ---- int width; ! pango_layout_set_font_description(canvas->layout, font->font_descr); ! pango_layout_set_text(canvas->layout, &ch, 1); ! pango_layout_get_pixel_size(canvas->layout, &width, NULL); ! pango_layout_set_text(canvas->layout, NULL, 0); ! pango_layout_set_font_description(canvas->layout, canvas->theFont->font_descr); return width; *************** *** 212,215 **** --- 208,213 ---- } gtk_style_unref(gtkstyle); + + *style = FONT_UNDERLINED ; } Index: Window.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Window.c,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** Window.c 7 Oct 2003 17:31:49 -0000 1.32 --- Window.c 7 Oct 2003 19:44:09 -0000 1.33 *************** *** 57,60 **** --- 57,61 ---- memset(canvas, 0, sizeof(*canvas)); canvas->drawable = GDK_DRAWABLE(event->window); + canvas->layout = gtk_widget_create_pango_layout(layout, NULL); canvas->region = gdk_region_copy(event->region); canvas->buffered = (GTK_WIDGET_FLAGS(widget) & GTK_DOUBLE_BUFFERED) ? 2 : 0; *************** *** 65,68 **** --- 66,71 ---- if (canvas->region) gdk_region_destroy(canvas->region); + g_object_unref(canvas->layout); + return gtk_false(); } *************** *** 691,694 **** --- 694,698 ---- memset(canvas, 0, sizeof(*canvas)); canvas->drawable = GDK_DRAWABLE(PORT_LAYOUT(layout)->bin_window); + canvas->layout = gtk_widget_create_pango_layout(layout, NULL); canvas->region = gdk_region_rectangle(&rectangle); canvas->buffered = 0; *************** *** 704,707 **** --- 708,712 ---- gdk_window_unref(GDK_WINDOW(canvas->drawable)); if (canvas->region) gdk_region_destroy(canvas->region); + g_object_unref(canvas->layout); rfree(canvas); } /* osReleaseWindowCanvas */ |