BorderedMorph
Last updated at 11:45 pm UTC on 8 October 2017
The class BorderedMorph is a subclass of the class Morph, with these additional instance variables:
BorderedMorh new borderStyle: (BorderStyle inset width: 2); openInWorld.
Direct subclasses (2006, update for later versions):
- B3DSceneExplorerMorph
- BorderedSubpaneDividerMorph
- ChessMorph
- ChineseCheckers
- DoCommandOnceMorph
- EllipseMorph (12 subclasses)
- FlashProgressMorph
- FlashThumbnailMorph
- MagnifierMorph (1 subclass)
- MarqueeMorph
- MorphicModel (42 subclasses)
- PasteUpMorph (11 subclasses)
- PolygonMorph (9 subclasses)
- PoohTestMorph
- RectangleMorph (162 subclasses)
- ReferenceMorph (2 subclasses)
- SelectionMorph
- SorterTokenMorph
- TTSampleFontMorph (1 subclass)
- WheelMorph
- WordGameLetterMorph
- WordGamePanelMorph (3 subclasses)
Question: How to change a morphs border style? Rick Zaccone August 14, 2004 I am trying to create a RectangleMorph that has a special border. I would like (say) the top and bottom edges to be black and the left and right edges to be white. In general, opposite edges should be the same color. A simple border is sufficient. It doesn't need to be beveled. It seems that I need to create a subclass of BorderStyle to do this.
Before charging ahead to do this, I tried to understand how the existing styles work. I used
MessageTally tallySends: [RectangleMorph new openInWorld]
Wow! Lots of stuff going on, and I never see the border being drawn! I tried other variations and I'm still not closer to understanding how this works.
Answer: Ned Konz The problem with that is that you won't see the actual drawing. Try this instead:
r := RectangleMorph new openInWorld.
MessageTally tallySends: [ r drawOn: World assuredCanvas ].
or more succinctly:
r := RectangleMorph new openInWorld.
MessageTally tallySendsTo: r borderStyle
inBlock: [r drawOn: World assuredCanvas]
showTree: true
What you'll see is (simplified):
1 RectangleMorph(Morph)>>drawOn:
|1 FormCanvas(Canvas)>>fillRectangle:fillStyle:borderStyle:
| |1 SimpleBorder>>frameRectangle:on:
| | |1 =FormCanvas>>frameAndFillRectangle:fi...Color:bottomRightColor:
| | |1 FormCanvas(Canvas)>>fillRectangle:color:
That is, a BorderedMorph tells the Canvas to frame and fill itself, and that behavior is delegated to the morph's borderStyle.