[squeak-dev] The Trunk: Morphic-mt.1202.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Jul 28 09:58:30 UTC 2016


Marcel Taeumel uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-mt.1202.mcz

==================== Summary ====================

Name: Morphic-mt.1202
Author: mt
Time: 28 July 2016, 11:57:51.049147 am
UUID: e61b0d9d-ba29-b74a-a3ac-aaf3d1be624a
Ancestors: Morphic-mt.1201

Add and use pragma-style preference for gradient scroll bars.

=============== Diff against Morphic-mt.1201 ===============

Item was changed:
  Slider subclass: #ScrollBar
  	instanceVariableNames: 'menuButton upButton downButton pagingArea scrollDelta pageDelta interval menuSelector timeOfMouseDown timeOfLastScroll nextPageDirection currentScrollDelay'
+ 	classVariableNames: 'ArrowImagesCache BoxesImagesCache GradientScrollBar RoundedScrollBarLook ScrollBarsWithoutArrowButtons ScrollBarsWithoutMenuButton UpArrow UpArrow8Bit'
- 	classVariableNames: 'ArrowImagesCache BoxesImagesCache RoundedScrollBarLook ScrollBarsWithoutArrowButtons ScrollBarsWithoutMenuButton UpArrow UpArrow8Bit'
  	poolDictionaries: ''
  	category: 'Morphic-Windows'!
  
  !ScrollBar commentStamp: '<historical>' prior: 0!
  Inspired by an oiginal design of Hans-Martin Mosner, this ScrollBar is intended to exercise the handling of input events in Morphic.  With sufficient flexibility in this area, all particular behavior can be concentrated in this single class with no need to specialize any other morphs to achieve button, slider and menu-button behavior.
  
  Once we have this working, put in logic for horizontal operation as well.
  
  CachedImages was added to reduce the number of forms created and thrown away. This will be helpful for Nebraska and others as well.!

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.
  
+ 	self gradientScrollBar ifTrue: [
- 	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 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.
+ 	self gradientScrollBar ifTrue: [
- 	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 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 added:
+ ----- Method: ScrollBar class>>gradientScrollBar (in category 'preferences') -----
+ gradientScrollBar
+ 
+ 	<preference: 'gradientScrollBar'
+ 		categoryList: #(windows scrolling)
+ 		description: 'If true, scroll bars will have a gradient look.'
+ 		type: #Boolean>
+ 	^ GradientScrollBar ifNil: [false]!

Item was added:
+ ----- Method: ScrollBar class>>gradientScrollBar: (in category 'preferences') -----
+ gradientScrollBar: aBoolean
+ 
+ 	GradientScrollBar = aBoolean ifTrue: [^ self].
+ 	GradientScrollBar := aBoolean.
+ 
+ 	ScrollBar allSubInstancesDo: [:ea | ea updateSliderColor].!

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.
+ 	self gradientScrollBar
- 	Preferences gradientScrollBars
  		ifFalse: [^ self].
  	""
  	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>>initializePagingArea (in category 'initialize') -----
  initializePagingArea
  	
  	"Appearance"
  	pagingArea := RectangleMorph
  				newBounds: self totalSliderArea
  				color: (self class roundedScrollBarLook
  					ifTrue: [Color gray: 0.9]
  					ifFalse: [Color r: 0.6 g: 0.6 b: 0.8]).
+ 	self class gradientScrollBar
- 	Preferences gradientScrollBars
  		ifTrue: [pagingArea setBorderWidth: 1 borderColor: (Color lightGray alpha: 0.5)]
  		ifFalse: [pagingArea borderWidth: 0].
  	self addMorphBack: pagingArea.
  			
  	"Interactions"
  	pagingArea
  		on: #mouseDown
  		send: #scrollPageInit:
  		to: self.
  	pagingArea
  		on: #mouseUp
  		send: #finishedScrolling
  		to: self.
  	
  !

Item was added:
+ ----- Method: ScrollBar>>updateSliderColor (in category 'access') -----
+ updateSliderColor
+ 
+ 	self updateSliderColor: self sliderColor.!

Item was changed:
  ----- Method: ScrollBar>>updateSliderColor: (in category 'access') -----
  updateSliderColor: aColor
  
  	| gradient |
+ 	self class gradientScrollBar ifFalse: [
- 	Preferences gradientScrollBars ifFalse: [
  		slider
  			borderColor: (aColor adjustBrightness: -0.3);
  			color: aColor.
  		pagingArea
  			borderColor: (aColor muchDarker alpha: pagingArea borderStyle color alpha);
  			color: (aColor darker alpha: 0.35).
  		^ self].
  
  	slider borderStyle: (BorderStyle width: 1 color: Color lightGray).	
  
  	"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 orientation == #horizontal
  		ifTrue:[0 at slider height]
  		ifFalse:[slider width at 0]).
  	slider fillStyle: gradient.
  	
  	"Fill the paging area."
  	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 orientation == #horizontal
  		ifTrue:[0 at self height]
  		ifFalse:[self width at 0]).
  	pagingArea fillStyle: gradient.!



More information about the Squeak-dev mailing list