comparison gtk3/dw.c @ 1148:439f276042cc

Implemented dw_pixmap_set_font() on GTK3. Better fix for missing font during dw_draw_text() on GTK3... Don't clobber fontname variable.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sun, 11 Sep 2011 22:09:10 +0000
parents 9c47a0245872
children cf934fd39d03
comparison
equal deleted inserted replaced
1147:091ed7c20b3f 1148:439f276042cc
6830 void dw_draw_text(HWND handle, HPIXMAP pixmap, int x, int y, char *text) 6830 void dw_draw_text(HWND handle, HPIXMAP pixmap, int x, int y, char *text)
6831 { 6831 {
6832 int _locked_by_me = FALSE; 6832 int _locked_by_me = FALSE;
6833 cairo_t *cr = NULL; 6833 cairo_t *cr = NULL;
6834 PangoFontDescription *font; 6834 PangoFontDescription *font;
6835 char *fontname = "fixed"; 6835 char *tmpname, *fontname = "fixed";
6836 6836
6837 if(!text) 6837 if(!text)
6838 return; 6838 return;
6839 6839
6840 DW_MUTEX_LOCK; 6840 DW_MUTEX_LOCK;
6846 { 6846 {
6847 DW_MUTEX_UNLOCK; 6847 DW_MUTEX_UNLOCK;
6848 return; 6848 return;
6849 } 6849 }
6850 cr = gdk_cairo_create(window); 6850 cr = gdk_cairo_create(window);
6851 fontname = (char *)g_object_get_data(G_OBJECT(handle), "_dw_fontname"); 6851 if((tmpname = (char *)g_object_get_data(G_OBJECT(handle), "_dw_fontname")))
6852 fontname = tmpname;
6852 } 6853 }
6853 else if(pixmap) 6854 else if(pixmap)
6854 { 6855 {
6855 fontname = (char *)g_object_get_data(G_OBJECT(pixmap->handle), "_dw_fontname"); 6856 char *tmpname;
6857
6858 if(pixmap->font)
6859 fontname = pixmap->font;
6860 else if(pixmap->handle && (tmpname = (char *)g_object_get_data(G_OBJECT(pixmap->handle), "_dw_fontname")))
6861 fontname = tmpname;
6856 cr = cairo_create(pixmap->image); 6862 cr = cairo_create(pixmap->image);
6857 } 6863 }
6858 if(cr) 6864 if(cr)
6859 { 6865 {
6860 font = pango_font_description_from_string(fontname ? fontname : "Sans"); 6866 font = pango_font_description_from_string(fontname);
6861 if(font) 6867 if(font)
6862 { 6868 {
6863 PangoContext *context = pango_cairo_create_context(cr); 6869 PangoContext *context = pango_cairo_create_context(cr);
6864 6870
6865 if(context) 6871 if(context)
7151 void dw_flush(void) 7157 void dw_flush(void)
7152 { 7158 {
7153 } 7159 }
7154 7160
7155 /* 7161 /*
7162 * Sets the font used by a specified pixmap.
7163 * Normally the pixmap font is obtained from the associated window handle.
7164 * However this can be used to override that, or for pixmaps with no window.
7165 * Parameters:
7166 * pixmap: Handle to a pixmap returned by dw_pixmap_new() or
7167 * passed to the application via a callback.
7168 * fontname: Name and size of the font in the form "size.fontname"
7169 * Returns:
7170 * DW_ERROR_NONE on success and DW_ERROR_GENERAL on failure.
7171 */
7172 int API dw_pixmap_set_font(HPIXMAP pixmap, char *fontname)
7173 {
7174 if(pixmap && fontname && *fontname)
7175 {
7176 char *oldfont = pixmap->font;
7177 pixmap->font = strdup(fontname);
7178 if(oldfont)
7179 free(oldfont);
7180 return DW_ERROR_NONE;
7181 }
7182 return DW_ERROR_GENERAL;
7183 }
7184
7185 /*
7156 * Destroys an allocated pixmap. 7186 * Destroys an allocated pixmap.
7157 * Parameters: 7187 * Parameters:
7158 * pixmap: Handle to a pixmap returned by 7188 * pixmap: Handle to a pixmap returned by
7159 * dw_pixmap_new.. 7189 * dw_pixmap_new..
7160 */ 7190 */
7163 int _locked_by_me = FALSE; 7193 int _locked_by_me = FALSE;
7164 7194
7165 DW_MUTEX_LOCK; 7195 DW_MUTEX_LOCK;
7166 g_object_unref(G_OBJECT(pixmap->pixbuf)); 7196 g_object_unref(G_OBJECT(pixmap->pixbuf));
7167 cairo_surface_destroy(pixmap->image); 7197 cairo_surface_destroy(pixmap->image);
7198 if(pixmap->font)
7199 free(pixmap->font);
7168 free(pixmap); 7200 free(pixmap);
7169 DW_MUTEX_UNLOCK; 7201 DW_MUTEX_UNLOCK;
7170 } 7202 }
7171 7203
7172 /* 7204 /*