1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-05-09 21:52:10 -05:00

Move the font-preview updating code out into a separate function so

we can call it both when the drawing area changes size and when the
selected font changes. As a result, the preview pane doesn't start
off blank any more.

[originally from svn r7945]
This commit is contained in:
Simon Tatham 2008-03-27 19:53:28 +00:00
parent bb80007da4
commit 638e350e1f

View File

@ -41,7 +41,6 @@
* of the dialog box * of the dialog box
* *
* - consistency and updating issues: * - consistency and updating issues:
* + the preview pane is empty when the dialog comes up
* + we should attempt to preserve font size when switching * + we should attempt to preserve font size when switching
* font family and style (it's currently OK as long as we're * font family and style (it's currently OK as long as we're
* moving between scalable fonts but falls down badly * moving between scalable fonts but falls down badly
@ -1442,6 +1441,37 @@ static void unifontsel_set_filter_buttons(unifontsel_internal *fs)
} }
} }
static void unifontsel_draw_preview_text(unifontsel_internal *fs)
{
unifont *font;
char *sizename;
fontinfo *info = fs->selected;
sizename = info->fontclass->scale_fontname
(GTK_WIDGET(fs->u.window), info->realname, fs->selsize);
font = info->fontclass->create(GTK_WIDGET(fs->u.window),
sizename ? sizename : info->realname,
FALSE, FALSE, 0, 0);
if (font && fs->preview_pixmap) {
GdkGC *gc = gdk_gc_new(fs->preview_pixmap);
gdk_gc_set_foreground(gc, &fs->preview_bg);
gdk_draw_rectangle(fs->preview_pixmap, gc, 1, 0, 0,
fs->preview_width, fs->preview_height);
gdk_gc_set_foreground(gc, &fs->preview_fg);
info->fontclass->draw_text(fs->preview_pixmap, gc, font,
font->width, font->height,
"hello, world", 12,
FALSE, FALSE, font->width);
gdk_gc_unref(gc);
gdk_window_invalidate_rect(fs->preview_area->window, NULL, FALSE);
}
info->fontclass->destroy(font);
sfree(sizename);
}
static void unifontsel_select_font(unifontsel_internal *fs, static void unifontsel_select_font(unifontsel_internal *fs,
fontinfo *info, int size, int leftlist) fontinfo *info, int size, int leftlist)
{ {
@ -1565,37 +1595,7 @@ static void unifontsel_select_font(unifontsel_internal *fs,
gtk_entry_set_editable(GTK_ENTRY(fs->size_entry), fs->selected->size == 0); gtk_entry_set_editable(GTK_ENTRY(fs->size_entry), fs->selected->size == 0);
gtk_widget_set_sensitive(fs->size_entry, fs->selected->size == 0); gtk_widget_set_sensitive(fs->size_entry, fs->selected->size == 0);
/* unifontsel_draw_preview_text(fs);
* Instantiate the font and draw some preview text.
*/
{
unifont *font;
char *sizename;
sizename = info->fontclass->scale_fontname
(GTK_WIDGET(fs->u.window), info->realname, fs->selsize);
font = info->fontclass->create(GTK_WIDGET(fs->u.window),
sizename ? sizename : info->realname,
FALSE, FALSE, 0, 0);
if (font && fs->preview_pixmap) {
GdkGC *gc = gdk_gc_new(fs->preview_pixmap);
gdk_gc_set_foreground(gc, &fs->preview_bg);
gdk_draw_rectangle(fs->preview_pixmap, gc, 1, 0, 0,
fs->preview_width, fs->preview_height);
gdk_gc_set_foreground(gc, &fs->preview_fg);
info->fontclass->draw_text(fs->preview_pixmap, gc, font,
font->width, font->height,
"hello, world", 12,
FALSE, FALSE, font->width);
gdk_gc_unref(gc);
gdk_window_invalidate_rect(fs->preview_area->window, NULL, FALSE);
}
info->fontclass->destroy(font);
sfree(sizename);
}
fs->inhibit_response = FALSE; fs->inhibit_response = FALSE;
} }
@ -1812,7 +1812,6 @@ static gint unifontsel_configure_area(GtkWidget *widget,
GdkEventConfigure *event, gpointer data) GdkEventConfigure *event, gpointer data)
{ {
unifontsel_internal *fs = (unifontsel_internal *)data; unifontsel_internal *fs = (unifontsel_internal *)data;
GdkGC *gc;
int ox, oy, nx, ny, x, y; int ox, oy, nx, ny, x, y;
/* /*
@ -1823,24 +1822,16 @@ static gint unifontsel_configure_area(GtkWidget *widget,
x = event->width; x = event->width;
y = event->height; y = event->height;
if (x > ox || y > oy) { if (x > ox || y > oy) {
GdkPixmap *newpm; if (fs->preview_pixmap)
gdk_pixmap_unref(fs->preview_pixmap);
nx = (x > ox ? x : ox); nx = (x > ox ? x : ox);
ny = (y > oy ? y : oy); ny = (y > oy ? y : oy);
newpm = gdk_pixmap_new(widget->window, nx, ny, -1); fs->preview_pixmap = gdk_pixmap_new(widget->window, nx, ny, -1);
gc = gdk_gc_new(newpm);
gdk_gc_set_foreground(gc, &fs->preview_bg);
gdk_draw_rectangle(newpm, gc, 1, 0, 0, nx, ny);
if (fs->preview_pixmap) {
gdk_draw_pixmap(newpm, gc, fs->preview_pixmap, 0, 0, 0, 0, ox, oy);
gdk_pixmap_unref(fs->preview_pixmap);
}
gdk_gc_unref(gc);
fs->preview_pixmap = newpm;
fs->preview_width = nx; fs->preview_width = nx;
fs->preview_height = ny; fs->preview_height = ny;
unifontsel_draw_preview_text(fs);
} }
gdk_window_invalidate_rect(widget->window, NULL, FALSE); gdk_window_invalidate_rect(widget->window, NULL, FALSE);