From c04ea2b402176abf6b9b26c9ef97467376492ca1 Mon Sep 17 00:00:00 2001
From: Ivica Ico Bukvic <ico@monsoon-hp.(none)>
Date: Sat, 3 Mar 2012 21:41:24 -0500
Subject: [PATCH] settled on zoom (ctrl+mousewheel) which does the same thing
 as font resize simply because doing real zoom is extremely cumbersome with
 tcl/tk (esp. when one considers resizing images and also re-adjusting all
 coordinates inside c code to match newly zoomed state)

---
 src/g_editor.c |   2 +
 src/pd.tk      | 125 +++++++++++++++++++++++++++----------------------
 2 files changed, 70 insertions(+), 57 deletions(-)

diff --git a/src/g_editor.c b/src/g_editor.c
index 080914819..5a3eb4b9b 100644
--- a/src/g_editor.c
+++ b/src/g_editor.c
@@ -2025,6 +2025,7 @@ void canvas_vis(t_canvas *x, t_floatarg f)
                 (int)(x->gl_screeny2 - x->gl_screeny1),
                 (int)(x->gl_screenx1), (int)(x->gl_screeny1),
                 x->gl_edit);
+			sys_vgui("catch {pdtk_canvas_set_font .x%lx %d}\n", x, x->gl_font);
             canvas_reflecttitle(x);
             x->gl_havewindow = 1;
 
@@ -4830,6 +4831,7 @@ static void canvas_font(t_canvas *x, t_floatarg font, t_floatarg resize,
 		if (sys_defaultfont != font)
 			canvas_undo_add(x, 11, "font", canvas_undo_set_font(x, sys_defaultfont));
 		sys_defaultfont = font;
+		canvas_dirty(x2, 1);
 	}
     canvas_dofont(x2, font, realresx, realresy, preview);
 }
diff --git a/src/pd.tk b/src/pd.tk
index b236d0886..f856fc714 100644
--- a/src/pd.tk
+++ b/src/pd.tk
@@ -1992,6 +1992,11 @@ proc menu_findobject {canvas} {
 	}
 }
 
+proc pdtk_canvas_set_font {name size} {
+	if {[info exists ::font($name)]} {
+		set ::font($name) $size
+	}
+}
 
 ############# pdtk_canvas_new -- create a new canvas ###############
 proc pdtk_canvas_new {name width height geometry editable} {
@@ -2039,6 +2044,10 @@ proc pdtk_canvas_new {name width height geometry editable} {
 		set ::redo($name) no
 	}
 
+	if {![info exists ::font($name)]} {
+		set ::font($name) 10
+	}
+
 	if {$::menu($name) == 1} {
     	toplevel $name -menu $name.m
 	} else {
@@ -2545,8 +2554,8 @@ proc pdtk_canvas_new {name width height geometry editable} {
         bind $name.c <Button-5>  "pdtk_canvas_scroll $name.c y +1"
         bind $name.c <Shift-Button-4>  "pdtk_canvas_scroll $name.c x -1"
         bind $name.c <Shift-Button-5>  "pdtk_canvas_scroll $name.c x +1"
-        #bind $name.c <Control-Button-4>  "pdtk_zoom $name 1"
-        #bind $name.c <Control-Button-5>  "pdtk_zoom $name -1"
+        bind $name.c <Control-Button-4>  "pdtk_zoom $name 1"
+        bind $name.c <Control-Button-5>  "pdtk_zoom $name -1"
     } default {
         bind $name.c  <MouseWheel> \
             "pdtk_canvas_scroll $name.c y \[expr -abs(%D)/%D\]"
@@ -3242,7 +3251,7 @@ proc pdtk_canvas_ctrlkey {name key shift} {
         if {$key == "l" || $key == "L"} {menu_clear_console}
         if {$key == "r" || $key == "R"} {menu_toggle_console}
 		if {$key == "E"} {menu_tooltips $topname}
-		#if {$key == "Return"} {pdtk_zoom_reset $topname}
+		if {$key == "Return"} {pdtk_zoom_reset $topname}
 		if {!$ignore} {
 	        if {$key == "w" || $key == "W"} {menu_really_close $topname}
 	        if {$key == "s" || $key == "S"} {menu_saveas $topname}
@@ -3379,74 +3388,76 @@ proc pdtk_canvas_saveas {name initfile initdir} {
     set untitled_directory $directory
 }
 
-# zooming (a subset of dofont)
-
+# 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 dofont_fontsize
-	set index [lsearch $font_array $dofont_fontsize]
+	set index [lsearch $font_array $::font($name)]
 	if { $index == 5 && $direction == 1 || $index == 0 && $direction == -1 } {
 		return
 	} else {
-		set dofont_fontsize [lindex $font_array [expr $index + $direction]]
-		dofont_apply $name $dofont_fontsize 1
+		set ::font($name) [lindex $font_array [expr $index + $direction]]
+		dofont_apply $name $::font($name) 0
 	}
 }
 
 # zooming (a subset of dofont)
-set font_array { 8 10 12 16 24 36 }
-set zoom_fontsize 10
-
-proc pdtk_zoom_reset {name} {
-	global font_array
-	global zoom_fontsize
 
-	if { $zoom_fontsize == 10 } { return }
-	
-	if { $zoom_fontsize < 10 } {
-		pdtk_zoom $name 1
-	} else {
-		while { $zoom_fontsize != 10 } {
-			pdtk_zoom $name -1
-		}
-	}
-}
+#set zoom_fontsize 10
 
-proc pdtk_zoom {name direction} {
-	global font_array
-	global zoom_fontsize
-	global pd_fontlist
-	set index [lsearch $font_array $zoom_fontsize]
-	if { $index == 5 && $direction == 1 || $index == 0 && $direction == -1 } {
-		return
-	} else {
-		set scale [expr {double([lindex $font_array [expr $index + $direction]])/($zoom_fontsize)}]
-		set zoom_fontsize [lindex $font_array [expr $index + $direction]]
-
-		switch -- $zoom_fontsize {
-		    8  { set typeface [lindex $pd_fontlist 0] }
-		    9  { set typeface [lindex $pd_fontlist 1] }
-		    10 { set typeface [lindex $pd_fontlist 2] }
-		    12 { set typeface [lindex $pd_fontlist 3] }
-		    14 { set typeface [lindex $pd_fontlist 4] }
-		    16 { set typeface [lindex $pd_fontlist 5] }
-		    18 { set typeface [lindex $pd_fontlist 6] }
-		    24 { set typeface [lindex $pd_fontlist 7] }
-		    30 { set typeface [lindex $pd_fontlist 8] }
-		    36 { set typeface [lindex $pd_fontlist 9] }
-		}
+#proc pdtk_zoom_reset {name} {
+#	global font_array
+#	global zoom_fontsize
+#
+#	if { $zoom_fontsize == 10 } { return }
+#	
+#	if { $zoom_fontsize < 10 } {
+#		pdtk_zoom $name 1
+#	} else {
+#		while { $zoom_fontsize != 10 } {
+#			pdtk_zoom $name -1
+#		}
+#	}
+#}
 
-		foreach item [$name.c find all] {
-			if {[$name.c type $item] == "text"} {
-				$name.c itemconfigure $item -font $typeface
-			}
-		}
-		$name.c scale all 0 0 $scale $scale
-	}
-	pdtk_canvas_getscroll $name.c
-}
+#proc pdtk_zoom {name direction} {
+#	global font_array
+#	global zoom_fontsize
+#	global dofont_fontsize
+#	global pd_fontlist
+#	set index [lsearch $font_array $zoom_fontsize]
+#	if { $index == 5 && $direction == 1 || $index == 0 && $direction == -1 } {
+#		return
+#	} else {
+#		set scale [expr {double([lindex $font_array [expr $index + $direction]])/($zoom_fontsize)}]
+#		set zoom_fontsize [lindex $font_array [expr $index + $direction]]
+#
+#		switch -- $zoom_fontsize {
+#		    8  { set typeface [lindex $pd_fontlist 0] }
+#		    9  { set typeface [lindex $pd_fontlist 1] }
+#		    10 { set typeface [lindex $pd_fontlist 2] }
+#		    12 { set typeface [lindex $pd_fontlist 3] }
+#		    14 { set typeface [lindex $pd_fontlist 4] }
+#		    16 { set typeface [lindex $pd_fontlist 5] }
+#		    18 { set typeface [lindex $pd_fontlist 6] }
+#		    24 { set typeface [lindex $pd_fontlist 7] }
+#		    30 { set typeface [lindex $pd_fontlist 8] }
+#		    36 { set typeface [lindex $pd_fontlist 9] }
+#		}
+#
+#		foreach item [$name.c find all] {
+#			if {[$name.c type $item] == "text"} {
+#				$name.c itemconfigure $item -font $typeface
+#			}
+#		}
+#		$name.c scale all 0 0 $scale $scale
+#	}
+#	pdtk_canvas_getscroll $name.c
+#    set cmd [concat $name font 0 [expr {double ($zoom_fontsize)/($dofont_fontsize)}] 0 2 \;]
+#    pd $cmd
+#}
 # end zooming
 
 ############ pdtk_canvas_dofont -- run a font and resize dialog #########
-- 
GitLab