Mercurial > dwindows
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 /* |