Further dealing with retinal displays: The scrollbars and related glyphs

now scale with Opts(scale), which is a zoom scalefactor (default 1), and
Opts(toolscale) sets an independent sizing for the toolbar icons, which is
multiplied by the Opts(scale) scalefactor.  Also:  Added GR_LIBS to the
link options for magicexec and magicdnull, to avoid compile-time problems
on some systems (thank you to Charlene of OpenBSD for the patch!).
This commit is contained in:
Tim Edwards 2020-02-17 16:51:30 -05:00
parent 2572421162
commit 6049b7e00e
8 changed files with 67 additions and 36 deletions

View File

@ -19,7 +19,7 @@ EXTRA_LIBS = ${MAGICDIR}/cmwind/libcmwind.o ${MAGICDIR}/commands/libcommands.o \
${MAGICDIR}/plow/libplow.o ${MAGICDIR}/utils/libutils.o \
${MAIN_EXTRA_LIBS}
BITMAPS = up.xbm down.xbm left.xbm right.xbm zoom.xbm lock.xbm
BITMAPS = up.png down.png left.png right.png zoom.png lock.xbm
DEST_XBM = $(BITMAPS:%=$(DESTDIR)${INSTALL_TCLDIR}/bitmaps/%)
DFLAGS += -DMAGIC_DATE="\"`date`\"" -DCAD_DIR="${LIBDIR}"

BIN
magic/bitmaps/down.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

BIN
magic/bitmaps/left.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

BIN
magic/bitmaps/right.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

BIN
magic/bitmaps/up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

BIN
magic/bitmaps/zoom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

View File

@ -49,11 +49,13 @@ install-tcl: magicexec magicdnull ${BIN_FILES} ${TCL_FILES}
magicexec: magicexec.c ${MAGICDIR}/defs.mak
${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS_NOSTUB} ${LDFLAGS} magicexec.c \
-o magicexec ${LD_RUN_PATH} ${LIBS} ${LIB_SPECS_NOSTUB}
-o magicexec ${LD_RUN_PATH} ${LIB_SPECS_NOSTUB} ${LIBS} \
${GR_LIBS}
magicdnull: magicdnull.c ${MAGICDIR}/defs.mak
${CC} ${CFLAGS} ${CPPFLAGS} ${DFLAGS_NOSTUB} ${LDFLAGS} magicdnull.c \
-o magicdnull ${LD_RUN_PATH} ${LIBS} ${LIB_SPECS_NOSTUB}
-o magicdnull ${LD_RUN_PATH} ${LIB_SPECS_NOSTUB} ${LIBS} \
${GR_LIBS}
magic.tcl: magic.tcl.in ${MAGICDIR}/defs.mak
sed -e /TCL_DIR/s%TCL_DIR%${TCLDIR}%g \

View File

@ -22,26 +22,43 @@ if {[lsearch [namespace children] ::tkshell] < 0} {
catch {source ${CAD_ROOT}/magic/tcl/tkshell.tcl}
}
# Button images
proc magic::makeglyphimages {} {
global Opts
global Glyph
global CAD_ROOT
set Glyph(up) [image create bitmap \
-file ${CAD_ROOT}/magic/tcl/bitmaps/up.xbm \
-background gray -foreground steelblue]
set Glyph(down) [image create bitmap \
-file ${CAD_ROOT}/magic/tcl/bitmaps/down.xbm \
-background gray -foreground steelblue]
set Glyph(left) [image create bitmap \
-file ${CAD_ROOT}/magic/tcl/bitmaps/left.xbm \
-background gray -foreground steelblue]
set Glyph(right) [image create bitmap \
-file ${CAD_ROOT}/magic/tcl/bitmaps/right.xbm \
-background gray -foreground steelblue]
set Glyph(zoom) [image create bitmap \
-file ${CAD_ROOT}/magic/tcl/bitmaps/zoom.xbm \
-background gray -foreground steelblue]
set Glyph(lock) [image create bitmap \
# Check if glyphs exist---don't need to make them more than once
if {![catch {set Glyph(up)}]} {return}
# Glyph images
set gsize [expr {int($Opts(scale) * 13)}]
set gscale [expr {int($Opts(scale))}]
image create photo stdglyph -file ${CAD_ROOT}/magic/tcl/bitmaps/up.png
image create photo Glyph(up) -width $gsize -height $gsize
Glyph(up) copy stdglyph -zoom $gscale
image create photo stdglyph -file ${CAD_ROOT}/magic/tcl/bitmaps/down.png
image create photo Glyph(down) -width $gsize -height $gsize
Glyph(down) copy stdglyph -zoom $gscale
image create photo stdglyph -file ${CAD_ROOT}/magic/tcl/bitmaps/left.png
image create photo Glyph(left) -width $gsize -height $gsize
Glyph(left) copy stdglyph -zoom $gscale
image create photo stdglyph -file ${CAD_ROOT}/magic/tcl/bitmaps/right.png
image create photo Glyph(right) -width $gsize -height $gsize
Glyph(right) copy stdglyph -zoom $gscale
image create photo stdglyph -file ${CAD_ROOT}/magic/tcl/bitmaps/zoom.png
image create photo Glyph(zoom) -width $gsize -height $gsize
Glyph(zoom) copy stdglyph -zoom $gscale
image create bitmap Glyph(lock) \
-file ${CAD_ROOT}/magic/tcl/bitmaps/lock.xbm \
-background gray80 -foreground steelblue4]
}
# Menu button callback functions
@ -537,7 +554,8 @@ set Opts(crosshair) 0
set Opts(hidelocked) 0
set Opts(hidespecial) 0
set Opts(toolbar) 0
set Opts(toolsize) 16
set Opts(scale) 1.0
set Opts(toolscale) 1.0
set Opts(drc) 1
set Opts(autobuttontext) 1
@ -723,7 +741,8 @@ proc magic::toolupdate {win {yesno "yes"} {layerlist "none"}} {
proc magic::maketoolimages {} {
global Opts
set tsize $Opts(toolsize)
# Tool size expands with the GUI scale but can also be expanded independently.
set tsize [expr {int($Opts(scale) * $Opts(toolscale) * 16)}]
# Generate a layer image for "space" that will be used when layers are
# invisible.
@ -900,6 +919,8 @@ proc magic::techrebuild {winpath {cmdstr ""}} {
# current view in magic (in pixels)
proc magic::setscrollvalues {win} {
global Opts
set svalues [${win} view get]
set bvalues [${win} view bbox]
@ -926,16 +947,19 @@ proc magic::setscrollvalues {win} {
set ya [expr { $wheight - $ya }]
set yb [expr { $wheight - $yb }]
${framename}.xscroll.bar coords slider $xa 2 $xb 15
${framename}.yscroll.bar coords slider 2 $ya 15 $yb
set swidth [expr {int($Opts(scale) * 13)}]
set slength [expr {$swidth + 2}]
${framename}.xscroll.bar coords slider $xa 2 $xb $slength
${framename}.yscroll.bar coords slider 2 $ya $slength $yb
set xb [expr { 1 + ($xa + $xb) / 2 }]
set xa [expr { $xb - 2 }]
${framename}.xscroll.bar coords centre $xa 4 $xb 13
${framename}.xscroll.bar coords centre $xa 4 $xb $swidth
set yb [expr { 1 + ($ya + $yb) / 2 }]
set ya [expr { $yb - 2 }]
${framename}.yscroll.bar coords centre 4 $ya 13 $yb
${framename}.yscroll.bar coords centre 4 $ya $swidth $yb
}
# Procedure to update scrollbars in response to an internal command
@ -1019,6 +1043,9 @@ proc magic::dragscroll { w v orient } {
proc magic::makescrollbar { fname orient win } {
global scale
global Glyph
global Opts
set swidth [expr {int($Opts(scale) * 13)}]
set scale($orient,update) 0
set scale($orient,origin) 0
@ -1026,19 +1053,19 @@ proc magic::makescrollbar { fname orient win } {
# To be done: add glyphs for the arrows
if { "$orient" == "x" } {
canvas ${fname}.bar -height 13 -relief sunken -borderwidth 1
button ${fname}.lb -image $Glyph(left) -borderwidth 1 \
canvas ${fname}.bar -height $swidth -relief sunken -borderwidth 1
button ${fname}.lb -image Glyph(left) -borderwidth 1 \
-command "${win} scroll left .1 w"
button ${fname}.ub -image $Glyph(right) -borderwidth 1 \
button ${fname}.ub -image Glyph(right) -borderwidth 1 \
-command "${win} scroll right .1 w"
pack ${fname}.lb -side left
pack ${fname}.bar -fill $orient -expand true -side left
pack ${fname}.ub -side right
} else {
canvas ${fname}.bar -width 13 -relief sunken -borderwidth 1
button ${fname}.lb -image $Glyph(down) -borderwidth 1 \
canvas ${fname}.bar -width $swidth -relief sunken -borderwidth 1
button ${fname}.lb -image Glyph(down) -borderwidth 1 \
-command "${win} scroll down .1 w"
button ${fname}.ub -image $Glyph(up) -borderwidth 1 \
button ${fname}.ub -image Glyph(up) -borderwidth 1 \
-command "${win} scroll up .1 w"
pack ${fname}.ub
pack ${fname}.bar -fill $orient -expand true
@ -1054,7 +1081,7 @@ proc magic::makescrollbar { fname orient win } {
# Create a small mark in the center of the scrolling rectangle which aids
# in determining how much the window is being scrolled when the full
# scrollbar extends past the window edges.
${fname}.bar create rect 4 4 13 13 -fill black -width 0 -tag centre
${fname}.bar create rect 4 4 $swidth $swidth -fill black -width 0 -tag centre
${fname}.bar bind centre <Button-1> "magic::setscroll %W %$orient $orient"
${fname}.bar bind centre <ButtonRelease-1> "magic::scrollview %W $win $orient"
${fname}.bar bind centre <B1-Motion> "magic::dragscroll %W %$orient $orient"
@ -1127,12 +1154,14 @@ proc magic::openwrapper {{cell ""} {framename ""}} {
pack ${framename}.pane -side top -fill both -expand true
frame ${layoutframe}.xscroll -height 13
frame ${layoutframe}.yscroll -width 13
set swidth [expr {int($Opts(scale) * 13)}]
frame ${layoutframe}.xscroll -height $swidth
frame ${layoutframe}.yscroll -width $swidth
magic::makeglyphimages
magic::makescrollbar ${layoutframe}.xscroll x ${winname}
magic::makescrollbar ${layoutframe}.yscroll y ${winname}
button ${layoutframe}.zb -image $Glyph(zoom) -borderwidth 1 -command "${winname} zoom 2"
button ${layoutframe}.zb -image Glyph(zoom) -borderwidth 1 -command "${winname} zoom 2"
# Add bindings for mouse buttons 2 and 3 to the zoom button
bind ${layoutframe}.zb <Button-3> "${winname} zoom 0.5"