From 051fd72c693bdba927a72cec6567fa222cba8145 Mon Sep 17 00:00:00 2001 From: Ivica Ico Bukvic <ico@monsoon-hp.(none)> Date: Sun, 4 Mar 2012 12:00:40 -0500 Subject: [PATCH] cleaned up font resize and ctrl+mousewheel feature --- src/g_editor.c | 54 +++++++++----------- src/pd.tk | 131 ++++++++++++++++++++++--------------------------- 2 files changed, 82 insertions(+), 103 deletions(-) diff --git a/src/g_editor.c b/src/g_editor.c index 048889fa7..acb537eed 100644 --- a/src/g_editor.c +++ b/src/g_editor.c @@ -55,12 +55,11 @@ static int screenx2; static int screeny2; static int copiedfont; static void canvas_dofont(t_canvas *x, t_floatarg font, t_floatarg xresize, - t_floatarg yresize, int preview); + t_floatarg yresize); extern void canvas_setbounds(t_canvas *x, int x1, int y1, int x2, int y2); int canvas_apply_restore_original_position(t_canvas *x, int orig_pos); extern void canvas_draw_gop_resize_hooks(t_canvas *x); -static void canvas_font(t_canvas *x, t_floatarg font, t_floatarg resize, - t_floatarg oldfont, t_floatarg preview); +static void canvas_font(t_canvas *x, t_floatarg font, t_floatarg oldfont, t_floatarg resize, t_floatarg preview); struct _outlet { @@ -1378,7 +1377,8 @@ void canvas_undo_canvas_apply(t_canvas *x, void *z, int action) //close properties window first t_int properties = gfxstub_haveproperties((void *)x); if (properties) { - sys_vgui("destroy .gfxstub%lx\n", properties); + //sys_vgui("destroy .gfxstub%lx\n", properties); + gfxstub_deleteforkey(x); } //store current canvas values into temporary data holder @@ -1735,7 +1735,11 @@ void canvas_undo_font(t_canvas *x, void *z, int action) t_canvas *x2 = canvas_getrootfor(x); int tmp_font = x2->gl_font; t_float resize = (t_float)sys_fontwidth(u_f->font)/(t_float)sys_fontwidth(x2->gl_font); - canvas_font(x2, u_f->font, 100.0, (t_floatarg)x2->gl_font, -1); + t_int properties = gfxstub_haveproperties((void *)x2); + if (properties) { + sys_vgui(".gfxstub%lx.radiof.radio%d invoke\n", properties, u_f->font); + } + else sys_vgui("dofont_apply .x%lx %d 1\n", x2, u_f->font); u_f->font = tmp_font; } else if (action == UNDO_FREE) @@ -3650,7 +3654,7 @@ static void canvas_menufont(t_canvas *x) char buf[80]; t_canvas *x2 = canvas_getrootfor(x); gfxstub_deleteforkey(x2); - sprintf(buf, "pdtk_canvas_dofont %%s %d\n", x2->gl_font); + sprintf(buf, "pdtk_canvas_dofont %%s .x%lx %d\n", (t_int)x2, x2->gl_font); gfxstub_new(&x2->gl_pd, &x2->gl_pd, buf); } @@ -4209,7 +4213,7 @@ static void canvas_dopaste(t_canvas *x, t_binbuf *b) (int)(x->gl_screeny2 - x->gl_screeny1), (int)(x->gl_screenx1), (int)(x->gl_screeny1)); //hardwired stretchval and whichstretch until we figure out proper resizing - canvas_dofont(x, copiedfont, 100, 1, 1); + canvas_dofont(x, copiedfont, 1, 1); //sys_vgui("pdtk_canvas_checkgeometry .x%lx\n", x); canvas_redraw(x); } @@ -4697,16 +4701,12 @@ void canvas_tooltips(t_canvas *x, t_floatarg fyesplease) /* called by canvas_font below */ static void canvas_dofont(t_canvas *x, t_floatarg font, t_floatarg xresize, - t_floatarg yresize, int preview) + t_floatarg yresize) { t_gobj *y; x->gl_font = font; if (xresize != 1 || yresize != 1) { - //canvas_setundo(x, canvas_undo_move, canvas_undo_set_move(x, 0), - // "motion"); - //if (!preview) - // canvas_undo_add(x, 4, "motion", canvas_undo_set_move(x, 0)); for (y = x->gl_list; y; y = y->g_next) { int x1, x2, y1, y2, nx1, ny1; @@ -4722,36 +4722,28 @@ static void canvas_dofont(t_canvas *x, t_floatarg font, t_floatarg xresize, for (y = x->gl_list; y; y = y->g_next) if (pd_class(&y->g_pd) == canvas_class && !canvas_isabstraction((t_canvas *)y)) - canvas_dofont((t_canvas *)y, font, xresize, yresize, preview); + canvas_dofont((t_canvas *)y, font, xresize, yresize); sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", x); } - /* canvas_menufont calls up a TK dialog which calls this back (0 for apply, 1 for preview) - this is also called by ctrl+mousewheel (0) for faux zoom, as well as undo_font (-1) */ -static void canvas_font(t_canvas *x, t_floatarg font, t_floatarg resize, - t_floatarg oldfont, t_floatarg preview) + /* canvas_menufont calls up a TK dialog which calls this back */ +static void canvas_font(t_canvas *x, t_floatarg font, t_floatarg oldfont, t_floatarg resize, t_floatarg noundo) { - t_float realresize, realresx = 1, realresy = 1; + t_float realresize; t_canvas *x2 = canvas_getrootfor(x); if (!resize) realresize = 1; else - realresize = (t_float)sys_fontwidth(font)/(t_float)sys_fontwidth(oldfont); + realresize = (t_float)sys_fontwidth(font)/(t_float)sys_fontwidth(x2->gl_font); - realresx = realresize; - realresy = realresize; - - if (!preview && font != oldfont) { - canvas_undo_add(x, 11, "font", canvas_undo_set_font(x, oldfont)); - canvas_dirty(x2, 1); + if (!noundo) { + if (!oldfont && font != x2->gl_font) + canvas_undo_add(x, 11, "font", canvas_undo_set_font(x, x2->gl_font)); + else if (oldfont != font) canvas_undo_add(x, 11, "font", canvas_undo_set_font(x, oldfont)); } - t_int properties = gfxstub_haveproperties((void *)x2); - if (preview <= 0 && properties) - gfxstub_deleteforkey(x2); + canvas_dirty(x2, 1); - if (x2->gl_font != (int)font) { - canvas_dofont(x2, font, realresx, realresy, preview); - } + canvas_dofont(x2, font, realresize, realresize); } static t_glist *canvas_last_glist; diff --git a/src/pd.tk b/src/pd.tk index 363870e76..2607784ba 100644 --- a/src/pd.tk +++ b/src/pd.tk @@ -3390,23 +3390,6 @@ proc pdtk_canvas_saveas {name initfile initdir} { set untitled_directory $directory } -# zooming -set font_array { 8 10 12 16 24 36 } - -proc pdtk_zoom {name direction} { - #puts stderr "pdtk_zoom $name $direction" - global font_array - global fontsize - set fontsize $::font($name) - set index [lsearch $font_array $::font($name)] - if { $index == 5 && $direction == 1 || $index == 0 && $direction == -1 } { - return - } else { - set ::font($name) [lindex $font_array [expr $index + $direction]] - dofont_apply $name $::font($name) 0 - } -} - # zooming (a subset of dofont) #set zoom_fontsize 10 @@ -3466,46 +3449,78 @@ proc pdtk_zoom {name direction} { ############ pdtk_canvas_dofont -- run a font and resize dialog ######### -set fontsize 10 -set dofont_fontsize 10 -set stretchval 100 -set whichstretch 1 +set oldfontsize 10 +set previewfontsize 10 +set font_array { 8 10 12 16 24 36 } +set font_properties 0 +set font_canvas 0 + +# zooming (a subset of dofont) +proc pdtk_zoom {name direction} { + + global font_array oldfontsize previewfontsize font_properties font_canvas + + set index [lsearch $font_array $::font($name)] + if { $index == 5 && $direction == 1 || $index == 0 && $direction == -1 } { + return + } else { + set previewfontsize $::font($name) + set ::font($name) [lindex $font_array [expr $index + $direction]] + if { $font_properties != 0 && $font_canvas == $name } { + [format "$font_properties.radiof.radio%d" $::font($name)] invoke + } else { + dofont_apply $name $::font($name) 0 + } + } +} + +proc dofont_apply {name myfontsize noundo} { + global oldfontsize + set cmd [concat $name font $myfontsize $oldfontsize 100 $noundo \;] + pd $cmd + set oldfontsize $myfontsize + set ::font($name) $myfontsize +} -proc dofont_apply {name myfontsize preview} { - global stretchval - global fontsize - set cmd [concat $name font $myfontsize $stretchval $fontsize $preview \;] +proc dofont_preview {name myfontsize} { + global previewfontsize + set cmd [concat $name font $myfontsize 0 100 1 \;] pd $cmd + set previewfontsize $myfontsize } proc dofont_close {name} { + global font_properties font_canvas set cmd [concat $name cancel \;] pd $cmd + set font_properties 0 + set font_canvas 0 } proc dofont_cancel {name} { - global fontsize - dofont_apply $name $fontsize 1 + global oldfontsize + dofont_preview $name $oldfontsize set cmd [concat $name cancel \;] pd $cmd } proc dofont_ok {name} { - global fontsize dofont_fontsize - dofont_apply $name $dofont_fontsize 0 + global previewfontsize font_canvas + dofont_apply $font_canvas $previewfontsize 0 dofont_close $name } -proc pdtk_canvas_dofont {name initsize} { - global fontsize dofont_fontsize pd_nt - set fontsize $initsize - set dofont_fontsize $initsize +proc pdtk_canvas_dofont {name canvas initsize} { + global oldfontsize previewfontsize pd_nt font_properties font_canvas + set oldfontsize $initsize + set previewfontsize $initsize - global stretchval - #set stretchval 100 - - global whichstretch - #set whichstretch 1 + if {[winfo exists $font_properties]} { + destroy $font_properties + } + + set font_properties $name + set font_canvas $canvas toplevel $name match_linux_wm [list $name configure] @@ -3532,22 +3547,22 @@ proc pdtk_canvas_dofont {name initsize} { match_linux_wm [list radiobutton $name.radiof.radio8 -value 8 \ -variable dofont_fontsize -text "8" \ - -command [concat dofont_apply $name 8 1]] + -command [concat dofont_preview $name 8]] match_linux_wm [list radiobutton $name.radiof.radio10 -value 10 \ -variable dofont_fontsize -text "10" \ - -command [concat dofont_apply $name 10 1]] + -command [concat dofont_preview $name 10]] match_linux_wm [list radiobutton $name.radiof.radio12 -value 12 \ -variable dofont_fontsize -text "12" \ - -command [concat dofont_apply $name 12 1]] + -command [concat dofont_preview $name 12]] match_linux_wm [list radiobutton $name.radiof.radio16 -value 16 \ -variable dofont_fontsize -text "16" \ - -command [concat dofont_apply $name 16 1]] + -command [concat dofont_preview $name 16]] match_linux_wm [list radiobutton $name.radiof.radio24 -value 24 \ -variable dofont_fontsize -text "24" \ - -command [concat dofont_apply $name 24 1]] + -command [concat dofont_preview $name 24]] match_linux_wm [list radiobutton $name.radiof.radio36 -value 36 \ -variable dofont_fontsize -text "36" \ - -command [concat dofont_apply $name 36 1]] + -command [concat dofont_preview $name 36]] pack $name.radiof.radio8 -side top -anchor w pack $name.radiof.radio10 -side top -anchor w pack $name.radiof.radio12 -side top -anchor w @@ -3561,34 +3576,6 @@ proc pdtk_canvas_dofont {name initsize} { } else { $current_radiobutton select } - -# match_linux_wm [list frame $name.stretchf] -# pack $name.stretchf -side left -# -# match_linux_wm [list label $name.stretchf.label -text {Stretch:}] -# pack $name.stretchf.label -side top -# match_linux_wm [list entry $name.stretchf.entry -textvariable stretchval -width 5] -# pack $name.stretchf.entry -side left -# -# match_linux_wm [list radiobutton $name.stretchf.radio1 \ -# -value 1 -variable whichstretc -text "X and Y" \ -# -command [concat dofont_apply $name $dofont_fontsize 1]] -# match_linux_wm [list radiobutton $name.stretchf.radio2 \ -# -value 2 -variable whichstretch -text "X only" \ -# -command [concat dofont_apply $name $dofont_fontsize 1]] -# match_linux_wm [list radiobutton $name.stretchf.radio3 \ -# -value 3 -variable whichstretch -text "Y only" \ -# -command [concat dofont_apply $name $dofont_fontsize 1]] -# pack $name.stretchf.radio1 -side top -anchor w -# pack $name.stretchf.radio2 -side top -anchor w -# pack $name.stretchf.radio3 -side top -anchor w -# -# if {[info tclversion] >= 8.5 && $pd_nt == 0} { -# $name.stretchf.radio1 invoke -# } else { -# $name.stretchf.radio1 select -# } - } ############ pdtk_gatom_dialog -- run a gatom dialog ######### -- GitLab