changeset 1149:cf934fd39d03

Implemented dw_pixmap_set_font() on GTK2 and incorporated the same GTK3 fontname fixes to avoid clobbering the default font.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 11 Sep 2011 22:19:01 +0000
parents 439f276042cc
children 0c073534d722
files gtk/dw.c gtk3/dw.c
diffstat 2 files changed, 33 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }
--- 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")))