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@slider height] + ifFalse:[slider width@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@self height] + ifFalse:[self width@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@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"! |
Free forum by Nabble | Edit this page |