<div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
                                        
                                        
                                            
                                        
                                        
                                        The ancestry was fine or else you wouldn't see that:<div><br></div><div><span style="font-family: Arial, Helvetica, sans-serif;">Ancestors: Morphic-mt.1546, Morphic-ct.1505, Morphic-ct.1506, Morphic-ct.1507, Morphic-ct.1514, Morphic-ct.1527, Morphic-ct.1530, Morphic-ct.1533, Morphic-ct.1535, Morphic-ct.1536</span><br><div><br></div><div>Those commits did not depend on each other, so I could review them side-by-side and push them all at once to avoid noise on the mailing list. Also, I could copy all your versions to the Trunk.</div><div><br></div><div>Best,</div><div>Marcel</div></div><div class="mb_sig"></div>
                                        
                                        <blockquote class="history_container" type="cite" style="border-left-style: solid;border-width: 1px;margin-top: 20px;margin-left: 0px;padding-left: 10px;min-width: 500px">
                        <p style="color: #AAAAAA; margin-top: 10px;">Am 30.09.2019 11:41:00 schrieb Thiede, Christoph <christoph.thiede@student.hpi.uni-potsdam.de>:</p><div style="font-family:Arial,Helvetica,sans-serif">
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" dir="ltr" style="font-size: 12pt;color: #000000;font-family: Calibri,Helvetica,sans-serif">
<p>Wow, thank you for your effort :-)</p>
<p><br>
</p>
<p>Did I handle the ancestry wrong again or is this excessive merging actually the usual workflow?</p>
<div id="x_Signature">
<div name="x_divtagdefaultwrapper" style="font-family: Calibri,Arial,Helvetica,sans-serif;font-size: ;margin: 0">
<div><span style="font-size: 10pt;color: #808080"></span></div>
</div>
</div>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><span style="font-family: Calibri, sans-serif;color: #000000"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von commits@source.squeak.org <commits@source.squeak.org><br>
<b>Gesendet:</b> Sonntag, 29. September 2019 19:05:47<br>
<b>An:</b> squeak-dev@lists.squeakfoundation.org; packages@lists.squeakfoundation.org<br>
<b>Betreff:</b> [squeak-dev] The Trunk: Morphic-mt.1547.mcz</span>
<div> </div>
</div>
</div>
<span style="font-size: 10pt"><span style="font-size: 10pt">
<div class="PlainText">Marcel Taeumel uploaded a new version of Morphic to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Morphic-mt.1547.mcz">http://source.squeak.org/trunk/Morphic-mt.1547.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Morphic-mt.1547<br>
Author: mt<br>
Time: 29 September 2019, 7:05:40.322524 pm<br>
UUID: d35fe693-b8fc-574c-a20b-0b5ce37208ad<br>
Ancestors: Morphic-mt.1546, Morphic-ct.1505, Morphic-ct.1506, Morphic-ct.1507, Morphic-ct.1514, Morphic-ct.1527, Morphic-ct.1530, Morphic-ct.1533, Morphic-ct.1535, Morphic-ct.1536<br>
<br>
Merge, merge, merge. :-)<br>
<br>
Morphic-ct.1505 - halo scale up in demo mode<br>
Morphic-ct.1506 - window icons scale up in demo mode<br>
Morphic-ct.1507 - bugfix open tool attached to mouse<br>
Morphic-ct.1514 - dialog code clean-up<br>
Morphic-ct.1527 - CollapsedMorph<br>
Morphic-ct.1530 - comments<br>
Morphic-ct.1533 - fix in MorphicProject (fillStyle)<br>
Morphic-ct.1535 - fix in MorphicProject (background)<br>
Morphic-ct.1536 - TextMorph constructors<br>
<br>
=============== Diff against Morphic-mt.1546 ===============<br>
<br>
Item was added:<br>
+ ----- Method: CollapsedMorph class>>createReplacementFor:in: (in category 'instance creation') -----<br>
+ createReplacementFor: aMorph in: anOwner<br>
+ <br>
+        ^ self new<br>
+                beReplacementFor: aMorph in: anOwner;<br>
+                yourself!<br>
<br>
Item was changed:<br>
  ----- Method: CollapsedMorph>>beReplacementFor: (in category 'collapse/expand') -----<br>
  beReplacementFor: aMorph<br>
+        "Encapsulate aMorph with the CollapsedMorph and display the latter"<br>
  <br>
+        | itsWorld |<br>
-        | itsWorld priorPosition |<br>
         (itsWorld := aMorph world) ifNil: [^self].<br>
+        self beReplacementFor: aMorph in: itsWorld.!<br>
-        uncollapsedMorph := aMorph.<br>
-                        <br>
-        self setLabel: aMorph externalName.<br>
-        aMorph delete.<br>
-        itsWorld addMorphFront: self.<br>
-        self collapseOrExpand.<br>
-        (priorPosition := aMorph valueOfProperty: #collapsedPosition ifAbsent: [nil])<br>
-        ifNotNil:<br>
-                [self position: priorPosition].<br>
- !<br>
<br>
Item was added:<br>
+ ----- Method: CollapsedMorph>>beReplacementFor:in: (in category 'collapse/expand') -----<br>
+ beReplacementFor: aMorph in: anOwner<br>
+        "Encapsulate aMorph with the CollapsedMorph and display the latter in anOwner"<br>
+ <br>
+        | priorPosition |<br>
+        uncollapsedMorph := aMorph.<br>
+        <br>
+        self setLabel: aMorph externalName.<br>
+        aMorph delete.<br>
+        self privateOwner: anOwner. "lest RealEstateAgent fail at positioning me"<br>
+        self collapseOrExpand.<br>
+        anOwner addMorphFront: self.<br>
+        (priorPosition := aMorph valueOfProperty: #collapsedPosition ifAbsent: [nil])<br>
+                ifNotNil: [self position: priorPosition].!<br>
<br>
Item was added:<br>
+ ----- Method: CollapsedMorph>>centerWithWrappees: (in category 'adjusting') -----<br>
+ centerWithWrappees: aPoint<br>
+ <br>
+        self center: aPoint.<br>
+        uncollapsedMorph center: aPoint.!<br>
<br>
Item was added:<br>
+ ----- Method: CollapsedMorph>>uncollapsedMorph (in category 'accessing') -----<br>
+ uncollapsedMorph<br>
+ <br>
+        ^ uncollapsedMorph!<br>
<br>
Item was changed:<br>
  ----- Method: DialogWindow>>exploreInvocation (in category 'running') -----<br>
  exploreInvocation<br>
  <br>
+        self exclusive: false.<br>
+        (self findInvocationContext stack collect: #method)<br>
+                explore!<br>
-        | result context |<br>
-        self exclusive: false. "We want to explore."<br>
- <br>
-        result := OrderedCollection new.<br>
-        context := self findInvocationContext.<br>
-        <br>
-        [context sender] whileNotNil: [<br>
-                result add: context method.<br>
-                context := context sender].<br>
-        result add: context method.<br>
- <br>
-        result explore.!<br>
<br>
Item was changed:<br>
  ----- Method: HaloMorph>>addHandlesForWorldHalos (in category 'private') -----<br>
  addHandlesForWorldHalos<br>
         "Add handles for world halos, like the man said"<br>
  <br>
         | box w |<br>
         w := self world ifNil:[target world].<br>
         self removeAllMorphs.  "remove old handles, if any"<br>
         self bounds: target bounds.<br>
         box := w bounds insetBy: self handleSize // 2.<br>
         target addWorldHandlesTo: self box: box.<br>
  <br>
         Preferences uniqueNamesInHalos ifTrue:<br>
                 [innerTarget assureExternalName].<br>
+        self<br>
+                addNameBeneath: ((box insetBy: (0@0 corner: 0@10))<br>
+                        scaleBy: RealEstateAgent scaleFactor)<br>
+                string: innerTarget externalName.<br>
-        self addNameBeneath: (box insetBy: (0@0 corner: 0@10)) string: innerTarget externalName.<br>
         growingOrRotating := false.<br>
         self layoutChanged.<br>
         self changed.<br>
  !<br>
<br>
Item was changed:<br>
  ----- Method: HaloMorph>>basicBox (in category 'private') -----<br>
  basicBox<br>
+        | minSide outset anExtent aBox w |<br>
-        | aBox minSide anExtent w |<br>
         minSide := 4 * self handleSize.<br>
+        outset := 8 * RealEstateAgent scaleFactor.<br>
+        anExtent := (self extent + self handleSize + outset) max: minSide asPoint.<br>
-        anExtent := ((self width + self handleSize + 8) max: minSide) @<br>
-                                ((self height + self handleSize + 8) max: minSide).<br>
         aBox := Rectangle center: self center extent: anExtent.<br>
         w := self world ifNil:[target outermostWorldMorph].<br>
         ^ w<br>
                 ifNil:<br>
                         [aBox]<br>
                 ifNotNil:<br>
                         [aBox intersect: (w viewBox insetBy: self handleSize // 2)]<br>
  !<br>
<br>
Item was changed:<br>
  ----- Method: HaloMorph>>createHandleAt:color:iconName: (in category 'private') -----<br>
  createHandleAt: aPoint color: aColor iconName: iconName <br>
         | bou handle |<br>
         bou := Rectangle center: aPoint extent: self handleSize asPoint.<br>
         Preferences alternateHandlesLook<br>
                 ifTrue: [handle := RectangleMorph newBounds: bou color: aColor.<br>
                         handle useRoundedCorners.<br>
                         self setColor: aColor toHandle: handle]<br>
                 ifFalse: [handle := EllipseMorph newBounds: bou color: aColor].<br>
         handle borderWidth: 0;<br>
                  wantsYellowButtonMenu: false.<br>
         ""<br>
         iconName isNil<br>
                 ifFalse: [| form |<br>
                         form := ScriptingSystem formAtKey: iconName.<br>
                         form isNil<br>
                                 ifFalse: [| image |<br>
                                         image := ImageMorph new.<br>
+                                        image image: form scaleIconToDisplay.<br>
-                                        image image: form.<br>
                                         image color: aColor makeForegroundColor.<br>
                                         image lock.<br>
                                         handle addMorphCentered: image]].<br>
         ""<br>
         ^ handle!<br>
<br>
Item was changed:<br>
  ----- Method: HaloMorph>>handleSize (in category 'private') -----<br>
  handleSize<br>
+        ^ (Preferences biggerHandles<br>
-        ^ Preferences biggerHandles<br>
                 ifTrue: [30]<br>
+                ifFalse: [16]) * RealEstateAgent scaleFactor!<br>
-                ifFalse: [16]!<br>
<br>
Item was changed:<br>
  ----- Method: Morph>>hResizing (in category 'layout-properties') -----<br>
  hResizing<br>
         "Layout specific. This property describes how the receiver should be resized with respect to its owner and its children. Possible values are:<br>
                 #rigid                  -       do not resize the receiver<br>
                 #spaceFill              -       resize to fill owner's available space<br>
+                #shrinkWrap     -       resize to fit children<br>
-                #shrinkWrap     - resize to fit children<br>
         "<br>
         | props |<br>
         props := self layoutProperties.<br>
         ^props ifNil:[#rigid] ifNotNil:[props hResizing].!<br>
<br>
Item was changed:<br>
  ----- Method: MorphicProject>>setAsBackground: (in category 'utilities') -----<br>
  setAsBackground: aFormOrColorOrFillStyle<br>
         "Set  aForm as a background image."<br>
  <br>
         | thisWorld newFill oldFill |<br>
+        thisWorld := self world.<br>
-        thisWorld := self currentWorld.<br>
         <br>
         oldFill := thisWorld fillStyle.<br>
         thisWorld fillStyle: aFormOrColorOrFillStyle.<br>
         newFill := thisWorld fillStyle.<br>
         <br>
         newFill rememberCommand:<br>
                 (Command new cmdWording: 'set background to a picture' translated;<br>
                         undoTarget: thisWorld selector: #fillStyle: argument: oldFill;<br>
                         redoTarget: thisWorld selector: #fillStyle: argument: newFill).<br>
         <br>
+        thisWorld setProperty: #hasCustomBackground toValue: true.!<br>
-        thisWorld setProperty: #hasCustomBackground toValue: true.<br>
- !<br>
<br>
Item was changed:<br>
  ----- Method: MorphicProject>>setWorldBackground: (in category 'initialize') -----<br>
  setWorldBackground: force<br>
  <br>
         ((world hasProperty: #hasCustomBackground) and: [force not])<br>
                 ifTrue: [^ self].<br>
  <br>
         "If the user has a custom background, propagate it into the new project."<br>
         ((Project current ~~ self and: [Project current isMorphic]) and: [Project current world hasProperty: #hasCustomBackground])<br>
                 ifTrue: [<br>
+                        world fillStyle: Project current world fillStyle copy.<br>
-                        world fillStyle: Project current world fillStyle.<br>
                         world setProperty: #hasCustomBackground toValue: true]<br>
                 ifFalse: [<br>
                         world removeProperty: #hasCustomBackground.<br>
                         world fillStyle: (self userInterfaceTheme background ifNil: [self class defaultFill])].!<br>
<br>
Item was changed:<br>
  ----- Method: PasteUpMorph>>setAsBackground: (in category 'visual properties') -----<br>
  setAsBackground: aFormOrColorOrFillStyle<br>
  <br>
+        | project |<br>
+        (self outermostWorldMorph == self and: [(project := self project) isMorphic])<br>
+                ifTrue: [project setAsBackground: aFormOrColorOrFillStyle]<br>
-        (self outermostWorldMorph == self and: [Project current isMorphic])<br>
-                ifTrue: [Project current setAsBackground: aFormOrColorOrFillStyle]<br>
                 ifFalse: [self fillStyle: aFormOrColorOrFillStyle].!<br>
<br>
Item was changed:<br>
  ----- Method: SystemWindow>>createBox: (in category 'initialization') -----<br>
  createBox: aForm<br>
         "create a button with a form to be used in the label area"<br>
         <br>
         | box |<br>
         box := SystemWindowButton new.<br>
         box color: Color transparent;<br>
                  target: self;<br>
                  useSquareCorners;<br>
                  borderWidth: 0;<br>
+                 labelGraphic: aForm scaleIconToDisplay;<br>
-                 labelGraphic: aForm;<br>
                  extent: self boxExtent.<br>
         ^ box!<br>
<br>
Item was changed:<br>
  ----- Method: SystemWindow>>justDroppedInto:event: (in category 'geometry') -----<br>
  justDroppedInto: aMorph event: anEvent<br>
  <br>
         isCollapsed<br>
                 ifTrue: [self position: ((self position max: 0@0) grid: 8@8).<br>
                                 collapsedFrame := self bounds]<br>
                 ifFalse: [fullFrame := self bounds].<br>
  <br>
         self beKeyWindow.<br>
         self hasDropShadow: Preferences menuAppearance3d. "See #startDragFromLabel:."<br>
                         <br>
         aMorph == self world ifTrue: [self assureLabelAreaVisible].<br>
  <br>
         (Project uiManager openToolsAttachedToMouseCursor and: (self hasProperty: #initialDrop))<br>
                 ifTrue: [<br>
                         self removeProperty: #initialDrop.<br>
                         (self submorphs detect: [:m | m isKindOf: BottomRightGripMorph] ifNone: [])<br>
                                 ifNotNil: [:grip | <br>
                                         grip<br>
                                                 referencePoint: anEvent position;<br>
                                                 setProperty: #targetHadDropShadow toValue: true "See MorphicToolBuilder >> #open:".<br>
+                                        self<br>
+                                                hasDropShadow: false;<br>
+                                                lookFocused.<br>
+                                        anEvent hand newMouseFocus: grip.]].<br>
-                                        self hasDropShadow: false.<br>
-                                        anEvent hand newMouseFocus: grip]].<br>
                         <br>
         ^super justDroppedInto: aMorph event: anEvent!<br>
<br>
Item was added:<br>
+ ----- Method: TextMorph class>>string:fontName: (in category 'instance creation') -----<br>
+ string: aString fontName: aName<br>
+ <br>
+        ^ self<br>
+                string: aString<br>
+                fontName: aName<br>
+                size: TextStyle defaultFont pixelSize!<br>
<br>
Item was added:<br>
+ ----- Method: TextMorph class>>string:fontName:size: (in category 'instance creation') -----<br>
+ string: aString fontName: aName size: aSize<br>
+ <br>
+        ^ self<br>
+                string: aString<br>
+                fontName: aName<br>
+                size: aSize<br>
+                wrap: false "...because we don't know the initial width to wrap..."<br>
+ !<br>
<br>
Item was added:<br>
+ ----- Method: TextMorph class>>string:fontName:size:wrap: (in category 'instance creation') -----<br>
+ string: aString fontName: aName size: aSize wrap: shouldWrap<br>
+ <br>
+        ^ self new<br>
+                string: aString fontName: aName size: aSize wrap: shouldWrap;<br>
+                yourself!<br>
<br>
Item was added:<br>
+ ----- Method: TextMorph class>>string:size: (in category 'instance creation') -----<br>
+ string: aString size: pixelSize<br>
+ <br>
+        ^ self<br>
+                string: aString<br>
+                fontName: TextStyle defaultFont familyName<br>
+                size: pixelSize!<br>
<br>
Item was changed:<br>
+ ----- Method: TextMorph>>fontName:pointSize: (in category 'initialization') -----<br>
- ----- Method: TextMorph>>fontName:pointSize: (in category 'accessing') -----<br>
  fontName: fontName pointSize: fontSize<br>
         | newTextStyle |<br>
         newTextStyle := ((TextStyle named: fontName asSymbol) ifNil: [ TextStyle default ]) copy.<br>
         newTextStyle ifNil: [self error: 'font ', fontName, ' not found.'].<br>
  <br>
         textStyle := newTextStyle.<br>
         text addAttribute: (TextFontChange fontNumber: (newTextStyle fontIndexOfPointSize: fontSize)).<br>
+        self releaseParagraph.!<br>
-        paragraph ifNotNil: [paragraph textStyle: newTextStyle]!<br>
<br>
Item was changed:<br>
+ ----- Method: TextMorph>>fontName:size: (in category 'initialization') -----<br>
- ----- Method: TextMorph>>fontName:size: (in category 'accessing') -----<br>
  fontName: fontName size: fontSize<br>
         | newTextStyle |<br>
         newTextStyle := ((TextStyle named: fontName asSymbol) ifNil: [ TextStyle default ]) copy.<br>
         textStyle := newTextStyle.<br>
         text addAttribute: (TextFontChange fontNumber: (newTextStyle fontIndexOfSize: fontSize)).<br>
+        self releaseParagraph.!<br>
-        paragraph ifNotNil: [paragraph textStyle: newTextStyle]!<br>
<br>
Item was changed:<br>
  ----- Method: TextMorph>>string:fontName:size:wrap: (in category 'initialization') -----<br>
  string: aString fontName: aName size: aSize wrap: shouldWrap<br>
  <br>
         shouldWrap<br>
                 ifTrue: [self contentsWrapped: aString]<br>
+                ifFalse: [self contentsAsIs: aString].<br>
+ <br>
-                ifFalse: [self contents: aString].<br>
         self fontName: aName size: aSize!<br>
<br>
<br>
</div>
</span></span>
</div></blockquote></div>