diff -r bf069aab8a8c -r 39e270e5aa30 StrokingWrapper.st --- a/StrokingWrapper.st Wed May 29 00:43:47 1996 +0200 +++ b/StrokingWrapper.st Wed May 29 00:52:31 1996 +0200 @@ -11,14 +11,14 @@ " -Wrapper subclass:#TranslatingWrapper - instanceVariableNames:'origin' +GeometricWrapper subclass:#StrokingWrapper + instanceVariableNames:'lineWidth lineStyle capStyle joinStyle' classVariableNames:'' poolDictionaries:'' category:'Graphics-Display Objects' ! -!TranslatingWrapper class methodsFor:'documentation'! +!StrokingWrapper class methodsFor:'documentation'! copyright " @@ -37,9 +37,12 @@ documentation " - a wrapper which shifts the origin of its wrapped component. - This allows the wrapped thingy to think & draw in its own 0/0 based - coordinates. + a wrapper for a geometric object, which is to be drawn stroked. + This allows any geometric thingy to be used as a component in a view. + + (background info: geometrics are mathematical objects - they do not + keep any color or lineStyle attributes. Wrappers add this information + and can also be used as components of a view) Notice: this class was implemented using protocol information @@ -49,7 +52,7 @@ describing the incompatibility verbal (i.e. no code) to the ST/X team. [see also:] - Wrapper + FillingWrapper Geometric GraphicsContext [author:] Claus Gittinger @@ -58,7 +61,73 @@ examples " - some components without translatingWrapper + wrap an ellipticArc and display it + (notice, that no automatic redraw is performed): + [exBegin] + |v e component| + + v := (StandardSystemView extent:250@250) openAndWait. + + e := EllipticalArc boundingBox:(10@10 corner:90@90) + startAngle:0 + sweepAngle:270. + component := StrokingWrapper on:e. + + component displayOn:v. + [exEnd] + + wrap a rectangle and an ellipticArc, + and add them as components to a View + (notice, that doing so makes the redraw automatic): + [exBegin] + |v e component| + + v := StandardSystemView extent:250@250. + + e := Rectangle origin:10@10 corner:90@90. + component := FillingWrapper on:e. + component foregroundColor:Color red. + + v addComponent:component. + + e := EllipticalArc boundingBox:(10@10 corner:90@90) + startAngle:0 sweepAngle:360. + component := StrokingWrapper on:e. + component lineWidth:5. + + v addComponent:component. + + v addComponent:(Button label:'hello'). + + v open + [exEnd] + with lineWidth & style: + (notice, that the redraw is automatic): + [exBegin] + |v e| + + v := StandardSystemView extent:250@250. + + e := EllipticalArc boundingBox:(10@10 corner:90@90) + startAngle:0 + sweepAngle:270. + v addComponent:((StrokingWrapper on:e) + lineWidth:5; + lineStyle:#dashed; + foregroundColor:(Color red)). + + e := EllipticalArc boundingBox:(30@30 corner:70@70) + startAngle:90 + sweepAngle:270. + v addComponent:((StrokingWrapper on:e) + lineWidth:5; + lineStyle:#doubleDashed; + foregroundColor:(Color red); + backgroundColor:(Color green)). + v open. + [exEnd] + + scrolling: [exBegin] |t s v e component| @@ -83,48 +152,7 @@ component lineWidth:2. v addComponent:component. - t open - [exEnd] - the same components WITH translatingWrappers - [exBegin] - |t s v e component| - - t := StandardSystemView extent:250@200. - s := HVScrollableView for:View miniScroller:true in:t. - s origin:0.0@0.0 corner:1.0@1.0. - v := s scrolledView. - - e := Rectangle origin:0@0 corner:80@80. - component := FillingWrapper on:e. - component foregroundColor:Color red. - v addComponent:(TranslatingWrapper on:component at:10@10). - - e := EllipticalArc boundingBox:(0@0 corner:80@80) - startAngle:0 sweepAngle:360. - component := StrokingWrapper on:e. - component lineWidth:5. - v addComponent:(TranslatingWrapper on:component at:10@10). - - e := Arrow from:0@0 to:50@150. - component := StrokingWrapper on:e. - component lineWidth:2. - v addComponent:(TranslatingWrapper on:component at:100@100). - - v addComponent:(TranslatingWrapper on:(Image fromFile:'SBrowser.xbm') at:0@100). - - t open - [exEnd] - [exBegin] - |t s v e component| - - t := StandardSystemView extent:250@200. - s := HVScrollableView for:View miniScroller:true in:t. - s origin:0.0@0.0 corner:1.0@1.0. - v := s scrolledView. - - e := LabelAndIcon icon:(Image fromFile:'bitmaps/SBrowser.xbm') - string:'hello'. - v addComponent:(TranslatingWrapper on:e at:10@10). + v addComponent:(Button label:'hello'). t open [exEnd] @@ -132,96 +160,145 @@ " ! ! -!TranslatingWrapper class methodsFor:'instance creation'! +!StrokingWrapper methodsFor:'accessing'! + +bounds + "return the boundary rectangle - here, must take care of the lineWidth" + + ^ component bounds insetBy:(lineWidth // 2 + 1) negated -on:aComponent at:originPoint - "create and return a translatingWrapper, which positions - aComponent at some originPoint" + "Created: 8.5.1996 / 23:22:43 / cg" + "Modified: 26.5.1996 / 13:03:50 / cg" +! - ^ (self on:aComponent) translation:originPoint +capStyle + "return the capStyle" + + ^ capStyle - "Created: 26.5.1996 / 16:07:29 / cg" - "Modified: 26.5.1996 / 16:12:28 / cg" -! ! + "Created: 8.5.1996 / 23:22:04 / cg" + "Modified: 9.5.1996 / 00:09:12 / cg" +! -!TranslatingWrapper methodsFor:'accessing'! +capStyle:aSymbol + "set the capStyle" + + capStyle := aSymbol -translation - "return the origin offset" + "Created: 8.5.1996 / 23:22:13 / cg" + "Modified: 9.5.1996 / 00:09:17 / cg" +! - ^ origin +joinStyle + "return the joinStyle" - "Modified: 26.5.1996 / 16:06:32 / cg" + ^ joinStyle + + "Created: 8.5.1996 / 23:22:04 / cg" + "Modified: 9.5.1996 / 00:09:12 / cg" ! -translation:originPoint - "set the origin offset" +joinStyle:aSymbol + "set the joinStyle" - origin := originPoint + joinStyle := aSymbol - "Modified: 26.5.1996 / 16:06:32 / cg" - "Created: 26.5.1996 / 16:07:47 / cg" -! ! - -!TranslatingWrapper methodsFor:'accessing - bounds'! + "Created: 8.5.1996 / 23:22:13 / cg" + "Modified: 9.5.1996 / 00:09:17 / cg" +! -bounds - ^ component bounds + origin +lineStyle + "return the lineStyle" - "Created: 26.5.1996 / 16:13:05 / cg" - "Modified: 26.5.1996 / 16:44:26 / cg" + ^ lineStyle + + "Created: 8.5.1996 / 23:22:04 / cg" + "Modified: 9.5.1996 / 00:09:12 / cg" ! -bounds:newBounds - component bounds:(newBounds - origin). +lineStyle:aSymbol + "set the lineStyle" + + lineStyle := aSymbol + + "Created: 8.5.1996 / 23:22:13 / cg" + "Modified: 9.5.1996 / 00:09:17 / cg" +! + +lineWidth + "return the lineWidth" - "Created: 26.5.1996 / 16:44:16 / cg" + ^ lineWidth + + "Created: 8.5.1996 / 23:22:04 / cg" + "Modified: 9.5.1996 / 00:09:12 / cg" +! + +lineWidth:aNumber + "set the lineWidth" + + lineWidth := aNumber + + "Created: 8.5.1996 / 23:22:13 / cg" + "Modified: 9.5.1996 / 00:09:17 / cg" ! preferredBounds - ^ component preferredBounds + origin + "return the components bounds as preferredBounds" - "Modified: 26.5.1996 / 16:44:26 / cg" - "Created: 26.5.1996 / 16:44:53 / cg" + ^ self bounds + + "Created: 8.5.1996 / 23:23:00 / cg" + "Modified: 9.5.1996 / 00:09:31 / cg" ! ! -!TranslatingWrapper methodsFor:'displaying'! +!StrokingWrapper methodsFor:'displaying'! displayOn:aGC - |oldTranslation oldPaint oldBgPaint| + "display myself - here, display the geometric object asStroked" + + |prevLineWidth prevLineStyle prevCapStyle prevJoinStyle + prevFg prevBg| - oldTranslation := aGC translation. - oldPaint := aGC paint. - oldBgPaint := aGC backgroundPaint. + prevLineWidth := aGC lineWidth. + prevLineStyle := aGC lineStyle. + prevJoinStyle := aGC joinStyle. + prevCapStyle := aGC capStyle. + prevFg := aGC paint. + prevBg := aGC backgroundPaint. - aGC translation:(origin + aGC translation). + aGC lineWidth:lineWidth. + aGC lineStyle:lineStyle. + aGC joinStyle:joinStyle. + aGC capStyle:capStyle. aGC paint:fgColor on:bgColor. - component displayOn:aGC. + component displayStrokedOn:aGC. - aGC translation:oldTranslation. - aGC paint:oldPaint on:oldBgPaint. + aGC lineWidth:prevLineWidth. + aGC lineStyle:prevLineStyle. + aGC joinStyle:prevJoinStyle. + aGC capStyle:prevCapStyle. + aGC paint:prevFg on:prevBg. - "Created: 26.5.1996 / 15:27:54 / cg" - "Modified: 26.5.1996 / 16:13:44 / cg" + "Created: 8.5.1996 / 23:24:04 / cg" + "Modified: 9.5.1996 / 00:11:17 / cg" ! ! -!TranslatingWrapper methodsFor:'testing'! +!StrokingWrapper methodsFor:'initialization'! -containsPoint:aPoint - ^ component containsPoint:(aPoint - origin) +initialize + "default my lineWidth to one pixel" - "Created: 26.5.1996 / 16:48:14 / cg" -! + super initialize. + lineWidth := 1. -intersects:aRectangle - ^ component intersects:(aRectangle - origin) - - "Created: 26.5.1996 / 16:48:33 / cg" + "Created: 8.5.1996 / 23:49:27 / cg" + "Modified: 9.5.1996 / 00:11:51 / cg" ! ! -!TranslatingWrapper class methodsFor:'documentation'! +!StrokingWrapper class methodsFor:'documentation'! version - ^ '$Header: /cvs/stx/stx/libview2/StrokingWrapper.st,v 1.10 1996-05-28 22:43:43 cg Exp $' + ^ '$Header: /cvs/stx/stx/libview2/StrokingWrapper.st,v 1.11 1996-05-28 22:52:31 cg Exp $' ! !