345 lines
9.1 KiB
Plaintext
345 lines
9.1 KiB
Plaintext
;;File: mwm-buttons.gwm --
|
|
;;Author: colas@mirsa.inria.fr (Colas NAHABOO) -- Bull Research FRANCE
|
|
;;Author: Frederic CHARTON
|
|
;;Revision: 1.0 -- Sep 12 19189
|
|
;;State: Exp
|
|
;;GWM Version: 1.4
|
|
|
|
|
|
|
|
; Drawing of the shadows :
|
|
; ----------------------
|
|
(de draw-shadow (theTile x1 y1 x2 y2 topSC bottomSC)
|
|
(with (foreground topSC)
|
|
(draw-line theTile x1 y1 x2 y1)
|
|
(draw-line theTile x1 y1 x1 y2 )
|
|
)
|
|
(with (foreground bottomSC)
|
|
(draw-line theTile x2 y2 x2 y1 )
|
|
(draw-line theTile x1 y2 x2 y2 )
|
|
)
|
|
theTile
|
|
)
|
|
|
|
|
|
; The FSM of buttons :
|
|
; ------------------
|
|
(: button.fsm
|
|
(fsm-make
|
|
;-----------------------------------------------------------NORMAL
|
|
(: normal (state-make
|
|
(on (user-event 'focus-in) (: wob-tile (# 'activepixmap wob)) )
|
|
(on (user-event 'focus-out) (: wob-tile (# 'pixmap wob)) )
|
|
(on (user-event 'find-button)
|
|
(if (= button-to-find (# 'button-name wob))
|
|
(: button wob)))
|
|
(on (double-button 1 alone)
|
|
(if (and (# 'is-button-menu wob) wMenuButtonClick2) ()))
|
|
(on (buttonpress any any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(do-binding-button (current-event-code)
|
|
(current-event-modifier) 'press '(frame))
|
|
(if (= (current-event-code) (# 'button-to-press wob))
|
|
(send-user-event 'press wob)
|
|
))
|
|
)
|
|
(on (user-event 'press)
|
|
(progn
|
|
(: wob-tile (draw-shadow
|
|
wob-pixmap
|
|
0 0 (- wob-width 1) (- wob-height 1)
|
|
clientActiveBottomShadowColor clientActiveTopShadowColor
|
|
))
|
|
(send-user-event 'goto-pushed wob)
|
|
(if (and (> cerx 0)
|
|
(> cery 0)
|
|
(< cerx wob-width)
|
|
(< cery wob-height)
|
|
)
|
|
(eval (# 'press-action wob))
|
|
(eval (# 'bad-press-action wob))
|
|
)
|
|
)
|
|
)
|
|
(on (buttonrelease any any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(do-binding-button (current-event-code)
|
|
(current-event-modifier) 'release '(frame))
|
|
(if (= (current-event-code) (# 'button-to-press wob))
|
|
(send-user-event 'release wob)
|
|
))
|
|
)
|
|
(on (user-event 'release)
|
|
(progn
|
|
(: wob-tile (draw-shadow
|
|
wob-pixmap
|
|
0 0 (- wob-width 1) (- wob-height 1)
|
|
clientActiveTopShadowColor clientActiveBottomShadowColor
|
|
))
|
|
(send-user-event 'goto-normal wob)
|
|
(if (and (> cerx 0)
|
|
(> cery 0)
|
|
(< cerx wob-width)
|
|
(< cery wob-height)
|
|
)
|
|
(eval (# 'release-action wob))
|
|
(eval (# 'bad-release-action wob))
|
|
)
|
|
)
|
|
)
|
|
(on (user-event 'goto-pushed) () pushed)
|
|
(on (user-event 'depop)
|
|
(if (# 'menu-son wob) (send-user-event 'depop (# 'menu-son wob))))
|
|
))
|
|
;-----------------------------------------------------------PUSHED
|
|
(: pushed (state-make
|
|
(on (user-event 'find-button)
|
|
(if (= button-to-find (# 'button-name wob))
|
|
(: button wob)))
|
|
(on (buttonrelease any any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(do-binding-button (current-event-code)
|
|
(current-event-modifier) 'release '(frame))
|
|
(if (= (current-event-code) (# 'button-to-press wob))
|
|
(send-user-event 'release wob)
|
|
))
|
|
)
|
|
(on (user-event 'release)
|
|
(progn
|
|
(: wob-tile (draw-shadow
|
|
wob-pixmap
|
|
0 0 (- wob-width 1) (- wob-height 1)
|
|
clientActiveTopShadowColor clientActiveBottomShadowColor
|
|
))
|
|
(send-user-event 'goto-normal wob)
|
|
(if (and (> cerx 0)
|
|
(> cery 0)
|
|
(< cerx wob-width)
|
|
(< cery wob-height)
|
|
)
|
|
(eval (# 'release-action wob))
|
|
(eval (# 'bad-release-action wob))
|
|
)
|
|
)
|
|
)
|
|
(on (user-event 'goto-normal) () normal)
|
|
(on (user-event 'button-release)
|
|
(: wob-tile (draw-shadow
|
|
wob-pixmap
|
|
0 0 (- wob-width 1) (- wob-height 1)
|
|
clientActiveTopShadowColor clientActiveBottomShadowColor
|
|
)) normal
|
|
)
|
|
(on (user-event 'depop)
|
|
(if (# 'menu-son wob) (send-user-event 'depop (# 'menu-son wob))))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(de button.draw-pixmap (pixmap mode)
|
|
; mode : t = active / ()
|
|
(draw-shadow
|
|
(: button.pix
|
|
(with (background (if mode clientActiveBackground clientBackground))
|
|
(foreground (if mode clientActiveForeground clientForeground))
|
|
(pixmap-make pixmap)
|
|
))
|
|
0 0 (- (width button.pix) 1) (- (height button.pix) 1)
|
|
(if mode clientActiveTopShadowColor clientTopShadowColor)
|
|
(if mode clientActiveBottomShadowColor clientBottomShadowColor) )
|
|
)
|
|
|
|
|
|
; BUTTON.MAKE :
|
|
; ===========
|
|
; button.button-to-press : mouse button to use
|
|
; button.pixmap : button's pixmap
|
|
; button.press-action
|
|
; button.release-action
|
|
(de button.make ()
|
|
(with (
|
|
fsm button.fsm
|
|
borderwidth 0
|
|
property (+ (list
|
|
'button-to-press button.button-to-press
|
|
'press-action button.press-action
|
|
'bad-press-action button.bad-press-action
|
|
'release-action button.release-action
|
|
'bad-release-action button.bad-release-action
|
|
'pixmap button.pixmap
|
|
'activepixmap button.activepixmap
|
|
'already-popped ()
|
|
'button-name button.name
|
|
) property)
|
|
)
|
|
(plug-make button.pixmap)
|
|
)
|
|
)
|
|
|
|
|
|
; Drawing of the buttons :
|
|
; ----------------------
|
|
(de button.draw (x1 y1 x2 y2 mode)
|
|
; mode : t = active / ()
|
|
(draw-shadow
|
|
(draw-shadow
|
|
(with (foreground (if mode clientActiveBackground clientBackground))
|
|
(pixmap-make button.size button.size)
|
|
)
|
|
x2 y2 x1 y1
|
|
(if mode clientActiveBottomShadowColor clientBottomShadowColor)
|
|
(if mode clientActiveTopShadowColor clientTopShadowColor) )
|
|
0 0 (- button.size 1) (- button.size 1)
|
|
(if mode clientActiveTopShadowColor clientTopShadowColor)
|
|
(if mode clientActiveBottomShadowColor clientBottomShadowColor) )
|
|
)
|
|
|
|
|
|
(with (font clientFontList)
|
|
(: button.size (+ 4 (height "A"))))
|
|
|
|
|
|
|
|
(: menu-activate-by-wob ())
|
|
|
|
;==================================================================
|
|
; THE MWM-LIKE BUTTONS
|
|
;==================================================================
|
|
|
|
; BUTTON-OF-MENU :
|
|
; ==============
|
|
(: button-of-menu
|
|
(with (
|
|
property '(is-button-menu t)
|
|
button.button-to-press 1
|
|
button.pixmap (button.draw
|
|
(/ button.size 5) (- (/ button.size 2) 2)
|
|
(/ (* 4 button.size) 5) (+ (/ button.size 2) 2)
|
|
() )
|
|
button.activepixmap (button.draw
|
|
(/ button.size 5) (- (/ button.size 2) 2)
|
|
(/ (* 4 button.size) 5) (+ (/ button.size 2) 2)
|
|
t )
|
|
button.press-action
|
|
'(with (theMenuWob (menu-wob (window-menu)))
|
|
(if (# 'already-popped wob-property)
|
|
(progn
|
|
(send-user-event 'unselect-item
|
|
(# (current-valid-item theMenuWob)
|
|
(valid-items theMenuWob)))
|
|
(send-user-event 'activate-menu theMenuWob)
|
|
)
|
|
(progn
|
|
(## 'already-popped wob t)
|
|
(with (x wob-x y (+ wob-y wob-height))
|
|
(if (> (+ y (height theMenuWob)) screen-height)
|
|
(: y (- wob-y (height theMenuWob))))
|
|
(if (> (+ x (width theMenuWob)) screen-width)
|
|
(: x (- screen-width (width theMenuWob))))
|
|
(move-window theMenuWob x y)
|
|
(menu.pop (window-menu) 1 'here)
|
|
)
|
|
)
|
|
))
|
|
button.release-action
|
|
(if wMenuButtonClick
|
|
'(with (theMenuWob (menu-wob (window-menu)))
|
|
(with (wob theMenuWob)
|
|
(## 'current-valid-item wob 0))
|
|
(send-user-event 'goto-activable theMenuWob)
|
|
(send-user-event 'select-item
|
|
(# 0 (valid-items theMenuWob)) )
|
|
)
|
|
'(with (theMenuWob (menu-wob (window-menu)))
|
|
(send-user-event 'goto-activable theMenuWob)
|
|
(send-user-event 'unselect-item
|
|
(# (current-valid-item theMenuWob)
|
|
(valid-items theMenuWob)))
|
|
(send-user-event 'depop wob)
|
|
)
|
|
)
|
|
button.bad-release-action
|
|
'(with (theMenuWob (menu-wob (window-menu)))
|
|
(send-user-event 'goto-activable theMenuWob)
|
|
(send-user-event 'unselect-item
|
|
(# (current-valid-item theMenuWob)
|
|
(valid-items theMenuWob)))
|
|
(send-user-event 'depop theMenuWob)
|
|
)
|
|
button.bad-press-action
|
|
'(with (theMenuWob (menu-wob (window-menu)))
|
|
(send-user-event 'unselect-item
|
|
(# (current-valid-item theMenuWob)
|
|
(valid-items theMenuWob)))
|
|
(send-user-event 'activate-menu theMenuWob)
|
|
)
|
|
button.name 'menu
|
|
)
|
|
(button.make)
|
|
)
|
|
)
|
|
|
|
; BUTTON-ICONIFY :
|
|
; ==============
|
|
(: button-iconify
|
|
(with (
|
|
property ()
|
|
coord (/ (- button.size 4) 2)
|
|
button.button-to-press 1
|
|
button.pixmap (button.draw
|
|
coord coord (+ coord 4) (+ coord 4)
|
|
() )
|
|
button.activepixmap (button.draw
|
|
coord coord (+ coord 4) (+ coord 4)
|
|
t )
|
|
button.press-action ()
|
|
button.bad-press-action ()
|
|
button.release-action '(f.minimize)
|
|
button.bad-release-action ()
|
|
button.name 'iconify
|
|
)
|
|
(button.make)
|
|
)
|
|
)
|
|
|
|
; BUTTON-ZOOM :
|
|
; ===========
|
|
(: button-zoom
|
|
(with (
|
|
property (list
|
|
'pushed-pixmap
|
|
(button.draw
|
|
(- button.size 6) (- button.size 6)
|
|
5 5
|
|
() )
|
|
'activepushed-pixmap
|
|
(button.draw
|
|
(- button.size 6) (- button.size 6)
|
|
5 5
|
|
t )
|
|
)
|
|
button.button-to-press 1
|
|
button.pixmap (button.draw
|
|
5 5
|
|
(- button.size 6) (- button.size 6)
|
|
() )
|
|
button.activepixmap (button.draw
|
|
5 5
|
|
(- button.size 6) (- button.size 6)
|
|
t )
|
|
button.press-action ()
|
|
button.bad-press-action ()
|
|
button.release-action '(zoom)
|
|
button.bad-release-action ()
|
|
button.name 'zoom
|
|
)
|
|
(button.make)
|
|
)
|
|
)
|
|
|
|
|