<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>