[squeak-dev] The Trunk: Morphic-ar.185.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Sep 19 04:58:05 UTC 2009


Andreas Raab uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-ar.185.mcz

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

Name: Morphic-ar.185
Author: ar
Time: 18 September 2009, 9:56:43 am
UUID: f4016c5a-5b16-2243-9dd2-16eb8a0ae612
Ancestors: Morphic-laza.184

Face lift: Changes to default scrollbars, buttons, SystemWindows based on Newspeak's look.

Project refactoring: Introduces MorphicProject as the new representative for Morphic Projects.

=============== Diff against Morphic-laza.184 ===============

Item was added:
+ ----- Method: MorphicProject>>initialize (in category 'initialize') -----
+ initialize
+ 	"Initialize a new Morphic Project"
+ 	super initialize.
+ 	world := PasteUpMorph newWorldForProject: self.
+ 	world color: self class defaultFill.
+ 	Locale switchToID: CurrentProject localeID.
+ 	Preferences useVectorVocabulary ifTrue: [world installVectorVocabulary]!

Item was changed:
  ----- Method: ScrollBar>>sliderThickness (in category 'geometry') -----
  sliderThickness
+ 	^ self width min: self height!
- 	^ self roundedScrollbarLook ifTrue:[15] ifFalse:[super sliderThickness]!

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].
  	self isActive 
+ 		ifTrue: [self fillStyle: (self gradientWithColor: paneColor duller "lighter lighter lighter")] 
- 		ifTrue: [self fillStyle: (self gradientWithColor: paneColor lighter lighter lighter)] 
  		ifFalse: ["This could be much faster"
  				self fillStyle: (self gradientWithColor: paneColor duller)].!

Item was changed:
  ----- Method: TheWorldMenu>>openMVCProject (in category 'commands') -----
  openMVCProject
+ 	"Open a new MVC project (only if MVC is present)"
+ 	Smalltalk at: #MVCProject ifPresent:[:projClass|
+ 		ProjectViewMorph openOn: projClass new.
+ 	].!
- 
- 	ProjectViewMorph newMVCProject openInWorld.
- !

Item was added:
+ Project subclass: #MorphicProject
+ 	instanceVariableNames: ''
+ 	classVariableNames: ''
+ 	poolDictionaries: ''
+ 	category: 'Morphic-Support'!
+ 
+ !MorphicProject commentStamp: 'ar 9/18/2009 21:38' prior: 0!
+ Holds Morphic Projects. Very much in transition.!

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 outerBox arrow resizedForm |
  	resizeFactor := 4.
  	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).
- 	arrow := self createArrowOfDirection: aSymbolDirection in: outerBox bounds.
  	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 added:
+ ----- Method: ProjectViewMorph class>>openOn: (in category 'instance creation') -----
+ openOn: aProject
+ 	"Open a ProjectViewMorph for the project in question"
+ 	ProjectViewOpenNotification signal ifTrue: [
+ 		Preferences projectViewsInWindows ifTrue: [
+ 			(self newProjectViewInAWindowFor: aProject) openInWorld
+ 		] ifFalse: [
+ 			(self on: aProject) openInWorld		"but where??"
+ 		].
+ 	].
+ !

Item was added:
+ ----- Method: MorphicProject class>>defaultFill: (in category 'utilities') -----
+ defaultFill: aFill
+ 	"Answer the default fill to use for new Morphic Worlds"
+ 	DefaultFill := aFill.!

Item was added:
+ ----- Method: MorphicProject class>>convertOldProjects (in category 'class initialization') -----
+ convertOldProjects
+ 	"Convert older Morphic projects to be MorphicProjects"
+ 	Project allInstancesDo:[:p|
+ 		p isMorphic ifTrue:[p primitiveChangeClassTo: self basicNew].
+ 	].!

Item was added:
+ ----- Method: MorphicProject>>isMorphic (in category 'testing') -----
+ isMorphic
+ 	"Duh."
+ 	^true!

Item was changed:
  ----- Method: SystemWindow>>gradientWithColor: (in category 'initialization') -----
  gradientWithColor: aColor
  
+ 	| gradient |
+ 	gradient := GradientFillStyle ramp: {
+ 		0.0 -> Color white. 
+ 		0.33 ->(aColor mixed: 0.5 with: Color white). 
+ 		1.0 -> aColor.
+ 	}.
+ 	gradient origin: self topLeft.
+ 	gradient direction: 0 @ self labelHeight.
+ 	^gradient!
- 	| ramp |
- 	ramp := {0.0 -> Color white. 1.0 -> aColor}.
- 
- 	^ (GradientFillStyle ramp: ramp)
- 		radial: true;
- 		origin: self bounds origin;
- 		direction: 0 @ 223;
- 		normal: 223 @ 0.!

Item was added:
+ ----- Method: MorphicProject>>restore (in category 'display') -----
+ restore
+ 	world fullDrawOn: Display getCanvas.
+ !

Item was changed:
  ----- Method: TheWorldMenu>>openMorphicProject (in category 'commands') -----
  openMorphicProject
  	"Open a morphic project from within a morphic project"
+ 	MorphicProject openViewOn: nil
- 	Project newMorphicOn: nil
  !

Item was added:
+ ----- Method: MorphicProject>>openProject: (in category 'initialize') -----
+ openProject: aProject
+ 	"Create a new for a new project in the context of the receiver"
+ 	ProjectViewMorph openOn: aProject.!

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 outerBox innerBox resizedForm |
  	resizeFactor := 4.
  	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).
- 	innerBox := self createBoxIn: outerBox bounds.
  	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: MorphicProject class>>initialize (in category 'class initialization') -----
+ initialize	"MorphicProject initialize"
+ 	"Initialize the default Morphic Project background"
+ 	self defaultFill: (InfiniteForm with: self defaultBackgroundForm).
+ 	self convertOldProjects.
+ 	Project current isMorphic ifTrue:[
+ 		"Set the default background in the current world"
+ 		Project current world color: self defaultFill.
+ 	].!

Item was changed:
  ----- Method: TheWorldMainDockingBar>>newProject (in category 'menu actions') -----
  newProject
+ 	MorphicProject openViewOn: nil!
- 	Project newMorphicOn: nil!

Item was changed:
  ----- Method: ScrollBar>>sliderColor: (in category 'access') -----
  sliderColor: aColor 
  	"Change the color of the scrollbar to go with aColor."
  	| buttonColor |
  	super sliderColor: aColor.
+ 	self updateSliderColor: aColor.
  	buttonColor := self thumbColor.
  	menuButton
  		ifNotNil: [menuButton color: buttonColor].
  	upButton color: buttonColor.
  	downButton color: buttonColor.
- 	slider color: buttonColor slightlyLighter.
  	
  	self class updateScrollBarButtonsAspect: {menuButton. upButton. downButton} color: buttonColor.
  	
  	self updateMenuButtonImage.
  	self updateUpButtonImage.
+ 	self updateDownButtonImage.!
- 	self updateDownButtonImage.
- 	
- 	self roundedScrollbarLook
- 				ifTrue: [
- 					self color: Color transparent.
- 					pagingArea color: aColor muchLighter.
- 					self borderStyle style == #simple
- 						ifTrue: [self borderColor: aColor darker darker]
- 						ifFalse: [self borderStyle baseColor: aColor]]
- 				ifFalse: [
- 					pagingArea
- 						color: (aColor alphaMixed: 0.3 with: Color white).
- 					self borderWidth: 0]!

Item was added:
+ ----- Method: PluggableButtonMorph>>enabled (in category 'accessing') -----
+ enabled
+ 	^true!

Item was added:
+ ----- Method: MorphicProject>>invalidate (in category 'display') -----
+ invalidate
+ 	"Invalidate the entire project so that a redraw will be forced later."
+ 	world fullRepaintNeeded.!

Item was added:
+ ----- Method: MorphicProject>>subProjects (in category 'utilities') -----
+ subProjects
+ 	"Answer a list of all the subprojects  of the receiver. "
+ 	^world submorphs 
+ 		select: [:m | (m isSystemWindow) and: [m model isKindOf: Project]]
+ 		thenCollect: [:m | m model].!

Item was added:
+ ----- Method: MorphicProject>>makeThumbnail (in category 'menu messages') -----
+ makeThumbnail
+ 	"Make a thumbnail image of this project from the Display."
+ 	world displayWorldSafely. "clean pending damage"
+ 	super makeThumbnail.!

Item was added:
+ ----- Method: MorphicProject class>>defaultBackgroundForm (in category 'class initialization') -----
+ defaultBackgroundForm
+ 	"Answer the default background form"
+ 	^Form fromBinaryStream:
+  '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof
+ Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwh
+ MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAAR
+ CAH0AfQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2YOvoR+FODDPBIpnlk9W4+tOEZH8ZoAky
+ SPvkUgBI++TTSo7ynPtxTQB/fb86AJCjf89DSFGH/LQj6imcf3j+JzRgemfxoAcFP/PWgq3/
+ AD1/SgD0AFKA3pQAwj/ppRgnuT+NPwQD8rfnSEkf3qAGkHun/j1GB2Uf99Upb1DUb1z2/SgB
+ MD+6P++qMjPYfjThIpPVaCV9U/KgBAR/fH50o29dxpAU7Mo/D/69BKnjePwH/wBegAJH94mg
+ kf3Sfwph2+ufwoOMcE/iKAFJH9w0Bh/czUZz2wfwpQG64/HFAEwb/YUfU4pQT/sj231D8398
+ D2xSgerigCbP+0v/AH1S/wDAv/HqjAwPvj/P407Ix95fy/8Ar0AOwO7n86Q+z/rTMntsI+lK
+ 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
+ KAGkYOBRRRQB/9k=' base64Decoded asByteArray readStream!

Item was added:
+ ----- Method: ScrollBar>>updateSliderColor: (in category 'access') -----
+ updateSliderColor: aColor
+ 	| gradient |
+ 	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.
+ 	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 added:
+ ----- Method: MorphicProject>>displaySizeChanged (in category 'display') -----
+ displaySizeChanged
+ 	"Inform the current project that its display size has changed"
+ 	world restoreMorphicDisplay.
+ 	world repositionFlapsAfterScreenSizeChange.!

Item was changed:
  ----- Method: ScrollBar>>initializeMenuButton (in category 'initialize') -----
  initializeMenuButton
  "initialize the receiver's menuButton"
  	"Preferences disable: #scrollBarsWithoutMenuButton"
  	"Preferences enable: #scrollBarsWithoutMenuButton"
  	(Preferences valueOfFlag: #scrollBarsWithoutMenuButton)
+ 		ifTrue: [menuButton := nil .^ self].
+ 	self bounds isWide
  		ifTrue: [menuButton := nil .^ self].
  	menuButton := self roundedScrollbarLook
  		ifTrue: [RectangleMorph
  					newBounds: ((bounds isWide
  							ifTrue: [upButton bounds topRight]
  							ifFalse: [upButton bounds bottomLeft])
  							extent: self buttonExtent)]
  		ifFalse: [RectangleMorph
  					newBounds: (self innerBounds topLeft extent: self buttonExtent)
  					color: self thumbColor].
  	menuButton
  		on: #mouseEnter
  		send: #menuButtonMouseEnter:
  		to: self.
  	menuButton
  		on: #mouseDown
  		send: #menuButtonMouseDown:
  		to: self.
  	menuButton
  		on: #mouseLeave
  		send: #menuButtonMouseLeave:
  		to: self.
  	"menuButton 
  	addMorphCentered: (RectangleMorph 
  	newBounds: (0 @ 0 extent: 4 @ 2) 
  	color: Color black)."
  	self updateMenuButtonImage.
  	self roundedScrollbarLook
  		ifTrue: [menuButton color: Color veryLightGray.
  			menuButton
  				borderStyle: (BorderStyle complexRaised width: 3)]
  		ifFalse: [menuButton setBorderWidth: 1 borderColor: Color lightGray].
  	self addMorph: menuButton!

Item was added:
+ ----- Method: MorphicProject class>>openViewOn: (in category 'instance creation') -----
+ openViewOn: aPasteUpOrNil
+ 	"Create a new Morphic Project and open a view for the project"
+ 	| newProject |
+ 	newProject := self new.
+ 	aPasteUpOrNil ifNotNil: [newProject installPasteUpAsWorld: aPasteUpOrNil].
+ 	ProjectViewMorph openOn: newProject.
+ 	^newProject
+ !

Item was added:
+ ----- Method: MorphicProject class>>defaultFill (in category 'utilities') -----
+ defaultFill
+ 	"Answer the default fill to use for new Morphic Worlds"
+ 	^DefaultFill ifNil:[Color white].
+ !

Item was changed:
  ----- Method: ScrollBar>>mouseDownInSlider: (in category 'other events') -----
  mouseDownInSlider: event
  	interval = 1.0 ifTrue:
  		["make the entire scrollable area visible if a full scrollbar is clicked on"
  		self setValue: 0.
  		self model hideOrShowScrollBars.].
+ "	super mouseDownInSlider: event"
- 	super mouseDownInSlider: event
  !

Item was changed:
  ----- Method: PluggableButtonMorph>>drawOn: (in category 'drawing') -----
  drawOn: aCanvas 
+ 	| cc gradient |
+ 	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:[
+ 		gradient := GradientFillStyle ramp: {
+ 			0 -> (Color gray: 0.75).
+ 			0.5 -> (Color gray: 0.85).
+ 			0.51 -> (Color gray: 0.9).
+ 			1 -> (Color gray: 1).
+ 		}.
+ 	] ifFalse:[
+ 		gradient := GradientFillStyle ramp: {
+ 			0.0 -> Color white.
+ 			0.5 -> (cc).
+ 			0.51-> (cc adjustBrightness: -0.1).
+ 			1 -> (Color gray: 0.95).
+ 		}
+ 	].
+ 	gradient origin: bounds topLeft.
+ 	gradient direction: 0 at self height.
+ 	^aCanvas frameAndFillRoundRect: bounds radius: 6 fillStyle: gradient borderWidth: 1 borderColor: Color lightGray.!
- 
- 	super drawOn: aCanvas.
- 	showSelectionFeedback ifTrue: [
- 		aCanvas frameRectangle: self innerBounds width: 2 color: feedbackColor].
- !

Item was removed:
- ----- Method: ProjectViewMorph class>>newMorphicProjectOn: (in category 'project window creation') -----
- newMorphicProjectOn: aPasteUpOrNil
- 	"Return an instance of me on a new Morphic project (in a SystemWindow)."
- 
- 	self flag: #bob.		"No senders???"
- 	self halt.
- 
- 	"^self newProjectViewInAWindowFor: (Project newMorphicOn: aPasteUpOrNil)"
- !

Item was removed:
- ----- Method: ProjectViewMorph class>>newMorphicProject (in category 'project window creation') -----
- newMorphicProject
- 	"Return an instance of me on a new Morphic project (in a SystemWindow)."
- 
- 	self flag: #bob.		"No senders???"
- 	self halt.
- 
- 	"^self newMorphicProjectOn: nil"!




More information about the Squeak-dev mailing list