<div dir="ltr">Thank you for crafting the ancestry to be more concise and readable!  This is much better than 8 individual "merge" versions..   :)<div><br></div><div>Best,</div><div>  Chris</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Sep 30, 2019 at 8:48 AM Marcel Taeumel <<a href="mailto:marcel.taeumel@hpi.de" target="_blank">marcel.taeumel@hpi.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div id="gmail-m_-3391785340273942078gmail-m_-1534999584400199949__MailbirdStyleContent" style="font-size:10pt;font-family:Arial;color:rgb(0,0,0)">
                                        
                                        
                                            
                                        
                                        
                                        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></div>
                                        
                                        <blockquote 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:rgb(170,170,170);margin-top:10px">Am 30.09.2019 11:41:00 schrieb Thiede, Christoph <<a href="mailto:christoph.thiede@student.hpi.uni-potsdam.de" target="_blank">christoph.thiede@student.hpi.uni-potsdam.de</a>>:</p><div style="font-family:Arial,Helvetica,sans-serif">


<div dir="ltr">
<div id="gmail-m_-3391785340273942078gmail-m_-1534999584400199949x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);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="gmail-m_-3391785340273942078gmail-m_-1534999584400199949x_Signature">
<div name="x_divtagdefaultwrapper">
<div><span style="font-size:10pt;color:rgb(128,128,128)"></span></div>
</div>
</div>
</div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_-3391785340273942078gmail-m_-1534999584400199949x_divRplyFwdMsg" dir="ltr"><span style="font-family:Calibri,sans-serif;color:rgb(0,0,0)"><b>Von:</b> Squeak-dev <<a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>> im Auftrag von <a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a> <<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>><br>
<b>Gesendet:</b> Sonntag, 29. September 2019 19:05:47<br>
<b>An:</b> <a href="mailto:squeak-dev@lists.squeakfoundation.org" target="_blank">squeak-dev@lists.squeakfoundation.org</a>; <a href="mailto:packages@lists.squeakfoundation.org" target="_blank">packages@lists.squeakfoundation.org</a><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>Marcel Taeumel uploaded a new version of Morphic to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Morphic-mt.1547.mcz" target="_blank">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><br>
</blockquote></div>