[squeak-dev] The Trunk: Morphic-mt.758.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Feb 24 08:13:01 UTC 2015
Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.758.mcz
==================== Summary ====================
Name: Morphic-mt.758
Author: mt
Time: 24 February 2015, 9:12:34.081 am
UUID: ff6992c3-f93d-a444-a7c4-c04be3fd34af
Ancestors: Morphic-mt.757
Preferences for gradient* fixed or implemented: Windows, buttons, scrollbars, menus. The gradient fill-styles can now be fully disabled in all standard tools. Default is still "enabled".
=============== Diff against Morphic-mt.757 ===============
Item was changed:
AlignmentMorph subclass: #PluggableButtonMorph
instanceVariableNames: 'model label getStateSelector actionSelector getLabelSelector getMenuSelector shortcutCharacter askBeforeChanging triggerOnMouseDown offColor onColor feedbackColor showSelectionFeedback allButtons arguments argumentsProvider argumentsSelector style'
+ classVariableNames: 'GradientButton RoundedButtonCorners'
- classVariableNames: 'RoundedButtonCorners'
poolDictionaries: ''
category: 'Morphic-Pluggable Widgets'!
!PluggableButtonMorph commentStamp: '<historical>' prior: 0!
A PluggableButtonMorph is a combination of an indicator for a boolean value stored in its model and an action button. The action of a button is often, but not always, to toggle the boolean value that it shows. Its pluggable selectors are:
getStateSelector fetch a boolean value from the model
actionSelector invoke this button's action on the model
getLabelSelector fetch this button's lable from the model
getMenuSelector fetch a pop-up menu for this button from the model
Any of the above selectors can be nil, meaning that the model does not supply behavior for the given action, and the default behavior should be used. For example, if getStateSelector is nil, then this button shows the state of a read-only boolean that is always false.
The model informs its view(s) of changes by sending #changed: to itself with getStateSelector as a parameter. The view tells the model when the button is pressed by sending actionSelector.
If the actionSelector takes one or more arguments, then the following are relevant:
arguments A list of arguments to provide when the actionSelector is called.
argumentsProvider The object that is sent the argumentSelector to obtain arguments, if dynamic
argumentsSelector The message sent to the argumentProvider to obtain the arguments.
Options:
askBeforeChanging have model ask user before allowing a change that could lose edits
triggerOnMouseDown do this button's action on mouse down (vs. up) transition
shortcutCharacter a place to record an optional shortcut key
!
Item was added:
+ ----- Method: PluggableButtonMorph class>>gradientButton (in category 'preferences') -----
+ gradientButton
+ <preference: 'gradientButton'
+ category: 'windows'
+ description: 'If true, buttons will have a gradient look.'
+ type: #Boolean>
+ ^ GradientButton ifNil: [ true ]!
Item was added:
+ ----- Method: PluggableButtonMorph class>>gradientButton: (in category 'preferences') -----
+ gradientButton: aBoolean
+
+ GradientButton := aBoolean.!
Item was changed:
----- Method: PluggableButtonMorph>>drawOn: (in category 'drawing') -----
drawOn: aCanvas
+ | cc gradient borderColor fill |
- | cc gradient borderColor |
cc := self color.
cc isTransparent ifTrue:[cc := Color gray: 0.9].
self enabled ifFalse:[cc := Color lightGray].
cc brightness > 0.9 ifTrue:[cc := cc adjustBrightness: 0.9 - cc brightness].
showSelectionFeedback ifTrue:[
borderColor := cc muchDarker.
gradient := GradientFillStyle ramp: {
0.0 -> cc muchDarker.
0.1-> (cc adjustBrightness: -0.2).
0.5 -> cc.
0.9-> (cc adjustBrightness: -0.1).
+ 1 -> cc muchDarker}.
+ cc := cc muchDarker.
- 1 -> cc muchDarker.
- }.
] ifFalse:[
borderColor := Color lightGray.
gradient := GradientFillStyle ramp: {
0.0 -> Color white.
0.1-> (cc adjustBrightness: 0.05).
+ 0.6 -> (cc darker)}.
- 0.6 -> (cc darker).
- }
].
gradient origin: bounds topLeft.
gradient direction: 0 at self height.
+
+ PluggableButtonMorph gradientButton
+ ifFalse: [fill := SolidFillStyle color: cc]
+ ifTrue: [fill := gradient].
+
^ self roundedButtonCorners
ifTrue: [aCanvas
frameAndFillRoundRect: bounds
radius: 8
+ fillStyle: fill
- fillStyle: gradient
borderWidth: 1
borderColor: borderColor]
ifFalse: [aCanvas
frameAndFillRectangle: self innerBounds
+ fillColor: fill asColor
- fillColor: gradient asColor
borderWidth: 1
borderColor: borderColor darker;
fillRectangle: (self innerBounds insetBy: 1)
+ fillStyle: fill]!
- fillStyle: gradient]!
Item was changed:
----- Method: ScrollBar class>>createArrowOfDirection:size:color: (in category 'images') -----
createArrowOfDirection: aSymbolDirection size: finalSizeInteger color: aColor
"PRIVATE - create an arrow with aSymbolDirectionDirection,
finalSizeInteger and aColor
aSymbolDirectionDirection = #top, #bottom. #left or #right
Try with:
(ScrollBar createArrowOfDirection: #top size: 32 color: Color
lightGreen) asMorph openInHand.
"
| resizeFactor outerBox arrow resizedForm gradient |
resizeFactor := 4.
+ outerBox := RectangleMorph new
+ extent: finalSizeInteger asPoint * resizeFactor;
+ borderWidth: 0;
+ color: aColor.
+
+ Preferences gradientScrollBars ifTrue: [
+ gradient := GradientFillStyle ramp: {
+ 0 -> (Color gray: 0.95).
+ 0.49 -> (Color gray: 0.9).
+ 0.5 -> (Color gray: 0.87).
+ 1 -> (Color gray: 0.93).
+ }.
+ gradient origin: outerBox topLeft.
+ (aSymbolDirection == #left or:[aSymbolDirection == #right])
+ ifTrue:[gradient direction: 0@ outerBox height]
+ ifFalse:[gradient direction: outerBox width @ 0].
+ outerBox fillStyle: gradient].
- outerBox := RectangleMorph new.
- outerBox extent: finalSizeInteger asPoint * resizeFactor;
- borderWidth: 0;
- color: aColor.
- gradient := GradientFillStyle ramp: {
- 0 -> (Color gray: 0.95).
- 0.49 -> (Color gray: 0.9).
- 0.5 -> (Color gray: 0.87).
- 1 -> (Color gray: 0.93).
- }.
- gradient origin: outerBox topLeft.
- (aSymbolDirection == #left or:[aSymbolDirection == #right])
- ifTrue:[gradient direction: 0@ outerBox height]
- ifFalse:[gradient direction: outerBox width @ 0].
- outerBox fillStyle: gradient.
outerBox borderStyle: (BorderStyle width: 4 color: Color lightGray).
""
arrow := self createArrowOfDirection: aSymbolDirection in: (outerBox bounds expandBy: -4).
self updateScrollBarButtonAspect: arrow color: aColor muchDarker.
outerBox addMorphCentered: arrow.
""
resizedForm := outerBox imageForm
magnify: outerBox imageForm boundingBox
by: 1 / resizeFactor
smoothing: 4.
""
^ (resizedForm replaceColor: aColor withColor: Color transparent)
trimBordersOfColor: Color transparent!
Item was changed:
----- Method: ScrollBar class>>createBoxOfSize:color: (in category 'images') -----
createBoxOfSize: finalSizeInteger color: aColor
"PRIVATE - create a box with finalSizeInteger and aColor
Try with:
(ScrollBar createBoxOfSize: 32 color: Color lightGreen) asMorph
openInHand.
"
| resizeFactor outerBox innerBox resizedForm gradient |
resizeFactor := 4.
+ outerBox := RectangleMorph new
+ extent: finalSizeInteger asPoint * resizeFactor;
+ borderWidth: 0;
+ color: aColor.
+ Preferences gradientScrollBars ifTrue: [
+ gradient := GradientFillStyle ramp: {
+ 0 -> (Color gray: 0.95).
+ 0.49 -> (Color gray: 0.9).
+ 0.5 -> (Color gray: 0.87).
+ 1 -> (Color gray: 0.93).
+ }.
+ gradient origin: outerBox topLeft.
+ gradient direction: outerBox width @ 0.
+ outerBox fillStyle: gradient].
- outerBox := RectangleMorph new.
- outerBox extent: finalSizeInteger asPoint * resizeFactor;
- borderWidth: 0;
- color: aColor.
- gradient := GradientFillStyle ramp: {
- 0 -> (Color gray: 0.95).
- 0.49 -> (Color gray: 0.9).
- 0.5 -> (Color gray: 0.87).
- 1 -> (Color gray: 0.93).
- }.
- gradient origin: outerBox topLeft.
- gradient direction: outerBox width @ 0.
- outerBox fillStyle: gradient.
outerBox borderStyle: (BorderStyle width: 4 color: Color lightGray).
""
innerBox := self createBoxIn: (outerBox bounds expandBy: -4).
self updateScrollBarButtonAspect: innerBox color: aColor muchDarker.
outerBox addMorphCentered: innerBox.
""
resizedForm := outerBox imageForm
magnify: outerBox imageForm boundingBox
by: 1 / resizeFactor
smoothing: 4.
""
^ (resizedForm replaceColor: aColor withColor: Color transparent)
trimBordersOfColor: Color transparent!
Item was changed:
----- Method: ScrollBar class>>updateScrollBarButtonAspect:color: (in category 'coloring morphs') -----
updateScrollBarButtonAspect: aMorph color: aColor
"update aMorph with aColor"
| fill direction |
aMorph isNil
ifTrue: [^ self].
""
+ aMorph color: aColor.
- aMorph color: aColor.
Preferences gradientScrollBars
ifFalse: [^ self].
""
+ fill := GradientFillStyle ramp: {
+ 0.0 -> aColor twiceLighter twiceLighter.
+ 1.0 -> aColor twiceDarker}.
- fill := GradientFillStyle ramp: {0.0 -> aColor twiceLighter twiceLighter. 1.0 -> aColor twiceDarker}.
""
direction := ((aMorph width min: aMorph height)
+ ((aMorph width - aMorph height) abs * 0.3)) rounded.
""
fill origin: aMorph topLeft + (direction // 8).
fill direction: direction @ direction.
fill radial: true.
""
aMorph fillStyle: fill!
Item was changed:
----- Method: ScrollBar>>updateSliderColor: (in category 'access') -----
updateSliderColor: aColor
| gradient |
+
+ slider borderStyle: (BorderStyle width: 1 color: Color lightGray).
+ self borderWidth: 0.
+
+ Preferences gradientScrollBars ifFalse: [
+ slider color: aColor.
+ pagingArea color: aColor darker darker.
+ ^ self].
+
+ "Fill the slider."
gradient := GradientFillStyle ramp: {
0 -> (Color gray: 0.95).
0.49 -> (Color gray: 0.9).
0.5 -> (Color gray: 0.87).
1 -> (Color gray: 0.93).
}.
gradient origin: slider topLeft.
gradient direction: (self bounds isWide
ifTrue:[0 at slider height]
ifFalse:[slider width at 0]).
slider fillStyle: gradient.
+
+ "Fill the paging area."
- slider borderStyle: (BorderStyle width: 1 color: Color lightGray).
-
gradient := GradientFillStyle ramp: {
0 -> (Color gray: 0.65).
0.6 -> (Color gray: 0.82).
1 -> (Color gray: 0.88).
}.
gradient origin: self topLeft.
gradient direction: (self bounds isWide
ifTrue:[0 at self height]
ifFalse:[self width at 0]).
- self borderWidth: 0.
pagingArea fillStyle: gradient.!
Item was changed:
MorphicModel subclass: #SystemWindow
instanceVariableNames: 'labelString stripes label closeBox collapseBox activeOnlyOnTop paneMorphs paneRects collapsedFrame fullFrame isCollapsed menuBox mustNotClose labelWidgetAllowance updatablePanes allowReframeHandles labelArea expandBox'
+ classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame CloseBoxImage CollapseBoxImage DoubleClickOnLabelToExpand ExpandBoxFrame ExpandBoxImage GradientWindow HideExpandButton MenuBoxFrame MenuBoxImage ResizeAlongEdges ReuseWindows TopWindow'
- classVariableNames: 'ClickOnLabelToEdit CloseBoxFrame CloseBoxImage CollapseBoxImage DoubleClickOnLabelToExpand ExpandBoxFrame ExpandBoxImage HideExpandButton MenuBoxFrame MenuBoxImage ResizeAlongEdges ReuseWindows TopWindow'
poolDictionaries: ''
category: 'Morphic-Windows'!
!SystemWindow commentStamp: '<historical>' prior: 0!
SystemWindow is the Morphic equivalent of StandardSystemView -- a labelled container for rectangular views, with iconic facilities for close, collapse/expand, and resizing.
The attribute onlyActiveOnTop, if set to true (and any call to activate will set this), determines that only the top member of a collection of such windows on the screen shall be active. To be not active means that a mouse click in any region will only result in bringing the window to the top and then making it active.!
Item was added:
+ ----- Method: SystemWindow class>>gradientWindow (in category 'preferences') -----
+ gradientWindow
+
+ <preference: 'gradientWindow'
+ category: 'windows'
+ description: 'If true, windows will have a gradient look.'
+ type: #Boolean>
+ ^ GradientWindow ifNil: [true]
+ !
Item was added:
+ ----- Method: SystemWindow class>>gradientWindow: (in category 'preferences') -----
+ gradientWindow: aBoolean
+
+ GradientWindow := aBoolean.!
Item was changed:
----- Method: SystemWindow>>setStripeColorsFrom: (in category 'label') -----
setStripeColorsFrom: paneColor
"Set the stripe color based on the given paneColor"
labelArea ifNotNil: [labelArea color: Color transparent].
self updateBoxesColor: (self isActive
ifTrue: [paneColor]
ifFalse: [paneColor muchDarker]).
stripes ifNil: [^self].
+
+ SystemWindow gradientWindow
+ ifTrue: [
+ self fillStyle: (self isActive
+ ifTrue: [self gradientWithColor: paneColor duller "lighter lighter lighter"]
+ ifFalse: [self gradientWithColor: paneColor duller darker])]
+ ifFalse: [
+ self color: (self isActive
+ ifTrue: [paneColor]
+ ifFalse: [paneColor duller])].!
- self isActive
- ifTrue: [self fillStyle: (self gradientWithColor: paneColor duller "lighter lighter lighter")]
- ifFalse: ["This could be much faster"
- self fillStyle: (self gradientWithColor: paneColor duller)].!
Item was changed:
----- Method: SystemWindow>>updateBox:color: (in category 'panes') -----
updateBox: anIconMorph color: aColor
+
| fill |
anIconMorph isNil
ifTrue: [^ self].
anIconMorph
extent: self boxExtent;
useRoundedCorners.
- fill := GradientFillStyle ramp: {0.0 -> aColor muchLighter muchLighter. 1.0 -> aColor twiceDarker}.
-
- fill origin: anIconMorph topLeft + (5 @ 5).
- fill direction: anIconMorph extent.
+ SystemWindow gradientWindow
+ ifFalse: [anIconMorph color: aColor]
+ ifTrue: [
+ fill := GradientFillStyle ramp: {
+ 0.0 -> aColor muchLighter muchLighter.
+ 1.0 -> aColor twiceDarker}.
+ fill origin: anIconMorph topLeft + (5 @ 5).
+ fill direction: anIconMorph extent.
+ anIconMorph fillStyle: fill].
+
+ anIconMorph
+ borderWidth: (Preferences alternativeWindowBoxesLook
+ ifTrue: [1]
+ ifFalse: [0]);
+ borderColor: aColor darker.!
- anIconMorph fillStyle: fill.
- anIconMorph borderWidth: (Preferences alternativeWindowBoxesLook
- ifTrue: [1]
- ifFalse: [0]);
- borderColor: aColor darker!
More information about the Squeak-dev
mailing list
|