ui.gadgets.buttons: memoize the roll button themes pens

It reduces memory usage by about 10% for the #1488 test on my machine
and doesnt seem to have any bad side-effects.
db4
Björn Lindqvist 2015-10-16 09:20:29 +02:00
parent 9af7be2ef9
commit 4812cec634
2 changed files with 21 additions and 11 deletions

View File

@ -1,4 +1,4 @@
USING: accessors models namespaces tools.test ui.gadgets
USING: accessors kernel models namespaces tools.test ui.gadgets
ui.gadgets.buttons ;
IN: ui.gadgets.buttons.tests
@ -18,3 +18,8 @@ IN: ui.gadgets.buttons.tests
{ 2 } [
"religion" get gadget-child control-value
] unit-test
{ t t } [
"but1" [ ] <roll-button> "but2" [ ] <roll-button>
[ [ boundary>> ] bi@ eq? ] [ [ interior>> ] bi@ eq? ] 2bi
] unit-test

View File

@ -1,11 +1,10 @@
! Copyright (C) 2005, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs classes colors colors.constants combinators
combinators.short-circuit combinators.smart fry kernel locals
math.vectors models namespaces sequences ui.commands ui.gadgets
ui.gadgets.borders ui.gadgets.labels ui.gadgets.packs
ui.gadgets.theme ui.gadgets.tracks ui.gadgets.worlds ui.gestures
ui.pens ui.pens.image ui.pens.solid ui.pens.tile ;
USING: accessors assocs colors combinators combinators.short-circuit
combinators.smart fry kernel locals math.vectors memoize models
namespaces sequences ui.commands ui.gadgets ui.gadgets.borders
ui.gadgets.labels ui.gadgets.packs ui.gadgets.theme ui.gadgets.worlds
ui.gestures ui.pens ui.pens.image ui.pens.solid ui.pens.tile ;
FROM: models => change-model ;
IN: ui.gadgets.buttons
@ -60,8 +59,8 @@ button H{
button new-button ;
TUPLE: button-pen
plain rollover
pressed selected pressed-selected ;
plain rollover
pressed selected pressed-selected ;
C: <button-pen> button-pen
@ -103,9 +102,15 @@ M: button-pen pen-foreground
: align-left ( button -- button )
{ 0 1/2 } >>align ; inline
MEMO: button-pen-boundary ( -- button-pen )
f roll-button-rollover-border <solid> dup f f <button-pen> ;
MEMO: button-pen-interior ( -- button-pen )
f f roll-button-selected-background <solid> f f <button-pen> ;
: roll-button-theme ( button -- button )
f roll-button-rollover-border <solid> dup f f <button-pen> >>boundary
f f roll-button-selected-background <solid> f f <button-pen> >>interior
button-pen-boundary >>boundary
button-pen-interior >>interior
align-left ; inline
PRIVATE>