diff --git a/magic/Makefile b/magic/Makefile index 2079bca5..4dc62515 100644 --- a/magic/Makefile +++ b/magic/Makefile @@ -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}" diff --git a/magic/bitmaps/down.png b/magic/bitmaps/down.png new file mode 100644 index 00000000..78c99518 Binary files /dev/null and b/magic/bitmaps/down.png differ diff --git a/magic/bitmaps/left.png b/magic/bitmaps/left.png new file mode 100644 index 00000000..dd63f521 Binary files /dev/null and b/magic/bitmaps/left.png differ diff --git a/magic/bitmaps/right.png b/magic/bitmaps/right.png new file mode 100644 index 00000000..4ae31e9c Binary files /dev/null and b/magic/bitmaps/right.png differ diff --git a/magic/bitmaps/up.png b/magic/bitmaps/up.png new file mode 100644 index 00000000..cbe44973 Binary files /dev/null and b/magic/bitmaps/up.png differ diff --git a/magic/bitmaps/zoom.png b/magic/bitmaps/zoom.png new file mode 100644 index 00000000..7d0f4484 Binary files /dev/null and b/magic/bitmaps/zoom.png differ diff --git a/tcltk/Makefile b/tcltk/Makefile index 5ff09b05..efa12d00 100644 --- a/tcltk/Makefile +++ b/tcltk/Makefile @@ -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 \ diff --git a/tcltk/wrapper.tcl b/tcltk/wrapper.tcl index 3252fea0..2758cd96 100644 --- a/tcltk/wrapper.tcl +++ b/tcltk/wrapper.tcl @@ -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 "magic::setscroll %W %$orient $orient" ${fname}.bar bind centre "magic::scrollview %W $win $orient" ${fname}.bar bind centre "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 "${winname} zoom 0.5"