- merge v0.01 --> Añadido fileselector - Añadidas fuentes de Gem y Pure Data - pix2jpg incluído en Gem. Archivos de construcción de Gem modificados. - Añadido fichero ompiling.txt con instrucciones de compilación
136 lines
5 KiB
Tcl
136 lines
5 KiB
Tcl
|
|
package provide dialog_font 0.1
|
|
|
|
namespace eval ::dialog_font:: {
|
|
variable fontsize 10
|
|
variable stretchval 100
|
|
variable whichstretch 1
|
|
variable canvaswindow
|
|
variable sizes {8 10 12 16 24 36}
|
|
|
|
namespace export pdtk_canvas_dofont
|
|
}
|
|
|
|
# TODO this should use the pd_font_$size fonts created in pd-gui.tcl
|
|
# TODO change pdtk_canvas_dofont to pdtk_font_dialog here and g_editor.c
|
|
|
|
# TODO this should really be changed on the C side so that it doesn't have to
|
|
# work around gfxstub/x_gui.c. The gfxstub stuff assumes that there are
|
|
# multiple panels, for properties panels like this, its much easier to use if
|
|
# there is a single properties panel that adjusts based on which PatchWindow
|
|
# has focus
|
|
|
|
proc ::dialog_font::apply {mytoplevel myfontsize} {
|
|
if {$mytoplevel eq ".pdwindow"} {
|
|
.pdwindow.text configure -font "-size $myfontsize"
|
|
} else {
|
|
variable stretchval
|
|
variable whichstretch
|
|
pdsend "$mytoplevel font $myfontsize $stretchval $whichstretch"
|
|
}
|
|
}
|
|
|
|
proc ::dialog_font::cancel {gfxstub} {
|
|
if {$gfxstub ne ".pdwindow"} {
|
|
pdsend "$gfxstub cancel"
|
|
}
|
|
destroy .font
|
|
}
|
|
|
|
proc ::dialog_font::ok {gfxstub} {
|
|
variable fontsize
|
|
apply $gfxstub $fontsize
|
|
cancel $gfxstub
|
|
}
|
|
|
|
proc ::dialog_font::update_font_dialog {mytoplevel} {
|
|
variable canvaswindow $mytoplevel
|
|
if {[winfo exists .font]} {
|
|
wm title .font [format [_ "%s Font"] [lookup_windowname $mytoplevel]]
|
|
}
|
|
}
|
|
|
|
proc ::dialog_font::arrow_fontchange {change} {
|
|
variable sizes
|
|
variable fontsize
|
|
variable canvaswindow
|
|
set position [expr [lsearch $sizes $fontsize] + $change]
|
|
if {$position < 0} {set position 0}
|
|
set max [llength $sizes]
|
|
if {$position >= $max} {set position [expr $max-1]}
|
|
set fontsize [lindex $sizes $position]
|
|
::dialog_font::apply $canvaswindow $fontsize
|
|
}
|
|
|
|
# this should be called pdtk_font_dialog like the rest of the panels, but it
|
|
# is called from the C side, so we'll leave it be
|
|
proc ::dialog_font::pdtk_canvas_dofont {gfxstub initsize} {
|
|
variable fontsize $initsize
|
|
variable whichstretch 1
|
|
variable stretchval 100
|
|
if {[winfo exists .font]} {
|
|
wm deiconify .font
|
|
raise .font
|
|
# the gfxstub stuff expects multiple font windows, we only have one,
|
|
# so kill the new gfxstub requests as the come in. We'll save the
|
|
# original gfxstub for when the font panel gets closed
|
|
pdsend "$gfxstub cancel"
|
|
} else {
|
|
create_dialog $gfxstub
|
|
}
|
|
}
|
|
|
|
proc ::dialog_font::create_dialog {gfxstub} {
|
|
toplevel .font -class DialogWindow
|
|
.font configure -menu $::dialog_menubar
|
|
.font configure -padx 10 -pady 5
|
|
wm group .font .
|
|
wm resizable .font 0 0
|
|
wm transient .font $::focused_window
|
|
::pd_bindings::dialog_bindings .font "font"
|
|
# replace standard bindings to work around the gfxstub stuff and use
|
|
# break to prevent the close window command from going to other bindings.
|
|
# .font won't exist anymore, so it'll cause errors down the line...
|
|
bind .font <KeyPress-Return> "::dialog_font::ok $gfxstub; break"
|
|
bind .font <KeyPress-Escape> "::dialog_font::cancel $gfxstub; break"
|
|
bind .font <$::modifier-Key-w> "::dialog_font::cancel $gfxstub; break"
|
|
wm protocol .font WM_DELETE_WINDOW "dialog_font::cancel $gfxstub"
|
|
bind .font <Up> "::dialog_font::arrow_fontchange -1"
|
|
bind .font <Down> "::dialog_font::arrow_fontchange 1"
|
|
|
|
frame .font.buttonframe
|
|
pack .font.buttonframe -side bottom -fill x -pady 2m
|
|
button .font.buttonframe.ok -text [_ "OK"] \
|
|
-command "::dialog_font::ok $gfxstub"
|
|
pack .font.buttonframe.ok -side left -expand 1
|
|
|
|
labelframe .font.fontsize -text [_ "Font Size"] -padx 5 -pady 4 -borderwidth 1 \
|
|
-width [::msgcat::mcmax "Font Size"] -labelanchor n
|
|
pack .font.fontsize -side left -padx 5
|
|
|
|
# this is whacky Tcl at its finest, but I couldn't resist...
|
|
foreach size $::dialog_font::sizes {
|
|
radiobutton .font.fontsize.radio$size -value $size -text $size \
|
|
-variable ::dialog_font::fontsize \
|
|
-command [format {::dialog_font::apply $::dialog_font::canvaswindow %s} $size]
|
|
pack .font.fontsize.radio$size -side top -anchor w
|
|
}
|
|
|
|
labelframe .font.stretch -text [_ "Stretch"] -padx 5 -pady 5 -borderwidth 1 \
|
|
-width [::msgcat::mcmax "Stretch"] -labelanchor n
|
|
pack .font.stretch -side left -padx 5 -fill y
|
|
|
|
entry .font.stretch.entry -textvariable ::dialog_font::stretchval -width 5
|
|
pack .font.stretch.entry -side top -pady 5
|
|
|
|
radiobutton .font.stretch.radio1 -text [_ "X and Y"] \
|
|
-value 1 -variable ::dialog_font::whichstretch
|
|
radiobutton .font.stretch.radio2 -text [_ "X only"] \
|
|
-value 2 -variable ::dialog_font::whichstretch
|
|
radiobutton .font.stretch.radio3 -text [_ "Y only"] \
|
|
-value 3 -variable ::dialog_font::whichstretch
|
|
|
|
pack .font.stretch.radio1 -side top -anchor w
|
|
pack .font.stretch.radio2 -side top -anchor w
|
|
pack .font.stretch.radio3 -side top -anchor w
|
|
}
|