Andreas Raab uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-ar.355.mcz ==================== Summary ==================== Name: Morphic-ar.355 Author: ar Time: 26 February 2010, 4:35:51.83 pm UUID: 3290131d-f753-7a42-9860-6bf8f6eb7b02 Ancestors: Morphic-HenrikSperreJohansen.354 Newspeak-style frame adornments (like triangle in the top right corner to indicate dirty state). Polymorph had a nice procedural version for different colors so we don't need to use the original art. =============== Diff against Morphic-HenrikSperreJohansen.354 =============== Item was added: + ----- Method: PluggableTextMorph>>drawFrameAdornment:on: (in category 'drawing') ----- + drawFrameAdornment: aColor on: aCanvas + "Indicate edit status for the text editor" + + | form | + "The old frame adornment style in case you care" + false ifTrue:[^aCanvas frameRectangle: self innerBounds width: 2 color: aColor]. + + "Class-side adornment cache is currently using pre-multiplied alpha, + so we need to use rule 34 which works for < 32bpp, too." + form := self class adornmentWithColor: aColor. + aCanvas image: form at: (self innerBounds topRight - (form width@0)) + sourceRect: form boundingBox rule: 34. + ! Item was changed: ScrollPane subclass: #PluggableTextMorph instanceVariableNames: 'textMorph getTextSelector setTextSelector getSelectionSelector hasUnacceptedEdits askBeforeDiscardingEdits selectionInterval hasEditingConflicts' + classVariableNames: 'AdornmentCache' - classVariableNames: '' poolDictionaries: '' category: 'Morphic-Pluggable Widgets'! Item was added: + ----- Method: PluggableTextMorph class>>flushAdornmentCache (in category 'frame adornments') ----- + flushAdornmentCache + "Cache for frame adornments" + + AdornmentCache := nil! Item was added: + ----- Method: PluggableTextMorph class>>adornmentCache (in category 'frame adornments') ----- + adornmentCache + "Cache for frame adornments" + + ^AdornmentCache ifNil:[AdornmentCache := Dictionary new].! Item was added: + ----- Method: PluggableTextMorph class>>adornmentWithColor: (in category 'frame adornments') ----- + adornmentWithColor: aColor + "Create and return a frame adornment with the given color" + + | size box form fillStyle | + ^self adornmentCache at: aColor ifAbsentPut:[ + size := 25. + box := 0@0 extent: size asPoint. + form := Form extent: size@size depth: 32. + fillStyle := (GradientFillStyle ramp: { + 0.0->(Color white alpha: 0.01). + 0.8->aColor. + 1.0->aColor}) + origin: box topRight - (size@0); + direction: (size @ size negated) // 4; + radial: false. + form getCanvas drawPolygon: { + box topRight. + box topRight + (0@size). + box topRight - (size@0) + } fillStyle: fillStyle. + form]. + ! Item was changed: ----- Method: PluggableTextMorph>>drawOn: (in category 'drawing') ----- drawOn: aCanvas "Include a thin red inset border for unaccepted edits, or, if the unaccepted edits are known to conflict with a change made somewhere else to the same method (typically), put a thick red frame" super drawOn: aCanvas. self wantsFrameAdornments ifTrue: [(model notNil and: [model refusesToAcceptCode]) ifTrue: "Put up feedback showing that code cannot be submitted in this state" + [self drawFrameAdornment: Color tan on: aCanvas] - [aCanvas frameRectangle: self innerBounds width: 2 color: Color tan] ifFalse: [self hasEditingConflicts ifTrue: + [self drawFrameAdornment: Color red on: aCanvas] - [aCanvas frameRectangle: self innerBounds width: 3 color: Color red] ifFalse: [self hasUnacceptedEdits ifTrue: [model wantsDiffFeedback ifTrue: + [self drawFrameAdornment: Color yellow on: aCanvas] - [aCanvas frameRectangle: self innerBounds width: 3 color: Color green] ifFalse: + [self drawFrameAdornment: Color orange on: aCanvas]] - [aCanvas frameRectangle: self innerBounds width: 1 color: Color red]] ifFalse: [model wantsDiffFeedback ifTrue: + [self drawFrameAdornment: Color green on: aCanvas]]]]]! - [aCanvas frameRectangle: self innerBounds width: 1 color: Color green]]]]]! |
Free forum by Nabble | Edit this page |