# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1315779541 0 # Node ID cf934fd39d035f517b9e1857be8375b234c0cdef # Parent 439f276042cc16bbbf9a6cbbd671ef7f96db0739 Implemented dw_pixmap_set_font() on GTK2 and incorporated the same GTK3 fontname fixes to avoid clobbering the default font. diff -r 439f276042cc -r cf934fd39d03 gtk/dw.c --- a/gtk/dw.c Sun Sep 11 22:09:10 2011 +0000 +++ b/gtk/dw.c Sun Sep 11 22:19:01 2011 +0000 @@ -7861,7 +7861,7 @@ #else GdkFont *font; #endif - char *fontname = "fixed"; + char *tmpname, *fontname = "fixed"; if(!text) return; @@ -7869,12 +7869,16 @@ DW_MUTEX_LOCK; if(handle) { - fontname = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_fontname"); + if((tmpname = (char *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_fontname"))) + fontname = tmpname; gc = _set_colors(handle->window); } else if(pixmap) { - fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "_dw_fontname"); + if(pixmap->font) + fontname = pixmap->font; + else if((tmpname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "_dw_fontname"))) + fontname = tmpname; gc = _set_colors(pixmap->pixmap); } if(gc) @@ -8271,6 +8275,30 @@ } /* + * Sets the font used by a specified pixmap. + * Normally the pixmap font is obtained from the associated window handle. + * However this can be used to override that, or for pixmaps with no window. + * Parameters: + * pixmap: Handle to a pixmap returned by dw_pixmap_new() or + * passed to the application via a callback. + * fontname: Name and size of the font in the form "size.fontname" + * Returns: + * DW_ERROR_NONE on success and DW_ERROR_GENERAL on failure. + */ +int API dw_pixmap_set_font(HPIXMAP pixmap, char *fontname) +{ + if(pixmap && fontname && *fontname) + { + char *oldfont = pixmap->font; + pixmap->font = strdup(fontname); + if(oldfont) + free(oldfont); + return DW_ERROR_NONE; + } + return DW_ERROR_GENERAL; +} + +/* * Destroys an allocated pixmap. * Parameters: * pixmap: Handle to a pixmap returned by @@ -8282,6 +8310,8 @@ DW_MUTEX_LOCK; gdk_pixmap_unref(pixmap->pixmap); + if(pixmap->font) + free(pixmap->font); free(pixmap); DW_MUTEX_UNLOCK; } diff -r 439f276042cc -r cf934fd39d03 gtk3/dw.c --- a/gtk3/dw.c Sun Sep 11 22:09:10 2011 +0000 +++ b/gtk3/dw.c Sun Sep 11 22:19:01 2011 +0000 @@ -6853,8 +6853,6 @@ } else if(pixmap) { - char *tmpname; - if(pixmap->font) fontname = pixmap->font; else if(pixmap->handle && (tmpname = (char *)g_object_get_data(G_OBJECT(pixmap->handle), "_dw_fontname")))