<div dir="ltr"><div>Nice,<br></div><div>And maybe do something like this as well, to show that the instruments are changeable.</div><div><br></div><div><img src="cid:ii_l76h2jk92" alt="bild.png" width="395" height="186"><br></div><div>Best,</div><div>Karl</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 23, 2022 at 12:10 PM Thiede, Christoph <<a href="mailto:Christoph.Thiede@student.hpi.uni-potsdam.de">Christoph.Thiede@student.hpi.uni-potsdam.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 class="gmail-msg-6921320146703741706">





<div>


<div dir="ltr">
<div id="gmail-m_-6921320146703741706x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif">
<p>Before:</p>
<p><img size="60550" id="gmail-m_-6921320146703741706x_img524525" style="max-width: 99.9%;" src="cid:182cbc9b794f456b1e51"><br>
</p>
<p><br>
</p>
<p>After:</p>
<p><img size="88935" id="gmail-m_-6921320146703741706x_img266729" style="max-width: 99.9%;" src="cid:182cbc9b795f456b1e52"><br>
</p>
</div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_-6921320146703741706x_divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><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> Dienstag, 23. August 2022 12:09:41<br>
<b>An:</b> <a href="mailto:squeak-dev@lists.squeakfoundation.org" target="_blank">squeak-dev@lists.squeakfoundation.org</a><br>
<b>Betreff:</b> [squeak-dev] The Inbox: MorphicExtras-ct.323.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt">
<div>A new version of MorphicExtras was added to project The Inbox:<br>
<a href="http://source.squeak.org/inbox/MorphicExtras-ct.323.mcz" target="_blank">http://source.squeak.org/inbox/MorphicExtras-ct.323.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: MorphicExtras-ct.323<br>
Author: ct<br>
Time: 23 August 2022, 12:09:37.941308 pm<br>
UUID: ab99afa5-a3f1-d94f-a74e-c525589f0ec0<br>
Ancestors: MorphicExtras-eem.322<br>
<br>
Adds high-dpi support for ScorePlayerMorph.<br>
<br>
Implementation detail: Explicitly specify orientation of sliders to avoid auto-orientation as vertical during first layout run.<br>
<br>
=============== Diff against MorphicExtras-eem.322 ===============<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>defaultBorderWidth (in category 'initialization') -----<br>
  defaultBorderWidth<br>
         "answer the default border width for the receiver"<br>
+        ^ 2 px!<br>
-        ^ 2!<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>initialize (in category 'initialization') -----<br>
  initialize<br>
         "initialize the state of the receiver"<br>
         super initialize.<br>
         ""<br>
         self listDirection: #topToBottom;<br>
                  wrapCentering: #center;<br>
                  cellPositioning: #topCenter;<br>
                  hResizing: #shrinkWrap;<br>
                  vResizing: #shrinkWrap;<br>
                  layoutInset: 3;<br>
                  onScorePlayer: ScorePlayer new initialize;<br>
+                 extent: 20 px @ 20 px.!<br>
-                 extent: 20 @ 20 !<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>makeControls (in category 'layout') -----<br>
  makeControls<br>
  <br>
         | bb r reverbSwitch repeatSwitch |<br>
         r := AlignmentMorph newRow.<br>
         r color: color; borderWidth: 0; layoutInset: 0.<br>
+        r hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 5 px @ 5 px.<br>
-        r hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 5@5.<br>
         bb := SimpleButtonMorph new target: self; borderColor: #raised;<br>
+                        borderWidth: 2 px; color: color.<br>
-                        borderWidth: 2; color: color.<br>
         r addMorphBack: (bb label: 'Menu' translated; actWhen: #buttonDown;<br>
                                                                                                 actionSelector: #invokeMenu).<br>
         bb := SimpleButtonMorph new target: self; borderColor: #raised;<br>
+                        borderWidth: 2 px; color: color.<br>
-                        borderWidth: 2; color: color.<br>
         r addMorphBack: (bb label: 'Piano Roll' translated;             actionSelector: #makePianoRoll).<br>
         bb := SimpleButtonMorph new target: self; borderColor: #raised;<br>
+                        borderWidth: 2 px; color: color.<br>
-                        borderWidth: 2; color: color.<br>
         r addMorphBack: (bb label: 'Rewind' translated;         actionSelector: #rewind).<br>
         bb := SimpleButtonMorph new target: scorePlayer; borderColor: #raised;<br>
+                        borderWidth: 2 px; color: color.<br>
-                        borderWidth: 2; color: color.<br>
         r addMorphBack: (bb label: 'Play' translated;                   actionSelector: #resumePlaying).<br>
         bb := SimpleButtonMorph new target: scorePlayer; borderColor: #raised;<br>
+                        borderWidth: 2 px; color: color.<br>
-                        borderWidth: 2; color: color.<br>
         r addMorphBack: (bb label: 'Pause' translated;                  actionSelector: #pause).<br>
         reverbSwitch := SimpleSwitchMorph new<br>
                 offColor: color;<br>
                 onColor: (Color r: 1.0 g: 0.6 b: 0.6);<br>
+                borderWidth: 2 px;<br>
-                borderWidth: 2;<br>
                 label: 'Reverb Disable' translated;<br>
                 actionSelector: #disableReverb:;<br>
                 target: scorePlayer;<br>
                 setSwitchState: SoundPlayer isReverbOn not.<br>
         r addMorphBack: reverbSwitch.<br>
         scorePlayer ifNotNil:<br>
                 [repeatSwitch := SimpleSwitchMorph new<br>
                         offColor: color;<br>
                         onColor: (Color r: 1.0 g: 0.6 b: 0.6);<br>
+                        borderWidth: 2 px;<br>
-                        borderWidth: 2;<br>
                         label: 'Repeat' translated;<br>
                         actionSelector: #repeat:;<br>
                         target: scorePlayer;<br>
                         setSwitchState: scorePlayer repeat.<br>
                 r addMorphBack: repeatSwitch].<br>
+        ^ r!<br>
-        ^ r<br>
- !<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>onScorePlayer:title: (in category 'initialization') -----<br>
  onScorePlayer: aScorePlayer title: scoreName<br>
         | divider col r |<br>
         scorePlayer := aScorePlayer.<br>
         scorePlayer ifNotNil:<br>
                 [scorePlayer  reset.<br>
                 instrumentSelector := Array new: scorePlayer score tracks size].<br>
  <br>
         self removeAllMorphs.<br>
         self addMorphBack: self makeControls.<br>
         scorePlayer ifNil: [^ self].<br>
  <br>
         r := self makeRow<br>
                 hResizing: #spaceFill;<br>
                 vResizing: #shrinkWrap.<br>
         r addMorphBack: self rateControl;<br>
+                addMorphBack: (Morph newBounds: (0 @ 0 extent: 20 px @ 0) color: Color transparent);<br>
-                addMorphBack: (Morph newBounds: (0@0 extent: 20@0) color: Color transparent);<br>
                 addMorphBack: self volumeControl.<br>
         self addMorphBack: r.<br>
         self addMorphBack: self scrollControl.<br>
+        <br>
- <br>
         col := AlignmentMorph newColumn color: color; layoutInset: 0.<br>
         self addMorphBack: col.<br>
         1 to: scorePlayer trackCount do: [:trackIndex |<br>
                 divider := AlignmentMorph new<br>
+                        extent: 10 px @ 1 px;<br>
-                        extent: 10@1;<br>
                         layoutInset: 0;<br>
+                        borderStyle: (BorderStyle raised width: 1 px);<br>
-                        borderStyle: (BorderStyle raised width: 1);<br>
                         color: color;<br>
                         hResizing: #spaceFill;<br>
                         vResizing: #rigid.<br>
                 col addMorphBack: divider.<br>
                 col addMorphBack: (self trackControlsFor: trackIndex)].<br>
  <br>
         LastMIDIPort ifNotNil: [<br>
                 "use the most recently set MIDI port"<br>
+                scorePlayer openMIDIPort: LastMIDIPort].!<br>
-                scorePlayer openMIDIPort: LastMIDIPort].<br>
- !<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>panAndVolControlsFor: (in category 'layout') -----<br>
  panAndVolControlsFor: trackIndex<br>
  <br>
         | volSlider panSlider c r middleLine pianoRollColor |<br>
         pianoRollColor := (Color wheel: scorePlayer score tracks size) at: trackIndex.
<br>
         volSlider := SimpleSliderMorph new<br>
                 color: color;<br>
                 sliderColor: pianoRollColor;<br>
+                extent: 101 px @ 6 px;<br>
-                extent: 101@6;<br>
                 target: scorePlayer;<br>
                 arguments: (Array with: trackIndex);<br>
                 actionSelector: #volumeForTrack:put:;<br>
+                orientation: #horizontal;<br>
                 minVal: 0.0;<br>
                 maxVal: 1.0;<br>
                 adjustToValue: (scorePlayer volumeForTrack: trackIndex).<br>
         panSlider := SimpleSliderMorph new<br>
                 color: color;<br>
                 sliderColor: pianoRollColor;<br>
+                extent: 101 px @ 6 px;<br>
-                extent: 101@6;<br>
                 target: scorePlayer;<br>
                 arguments: (Array with: trackIndex);<br>
                 actionSelector: #panForTrack:put:;<br>
+                orientation: #horizontal;<br>
                 minVal: 0.0;<br>
                 maxVal: 1.0;            <br>
                 adjustToValue: (scorePlayer panForTrack: trackIndex).<br>
         c := AlignmentMorph newColumn<br>
                 color: color;<br>
                 layoutInset: 0;<br>
                 wrapCentering: #center; cellPositioning: #topCenter;<br>
                 hResizing: #spaceFill;<br>
                 vResizing: #shrinkWrap.<br>
         middleLine := Morph new  "center indicator for pan slider"<br>
                 color: (Color r: 0.4 g: 0.4 b: 0.4);<br>
+                extent: 1 px @ (panSlider height - 4 px);<br>
+                position: panSlider center x @ (panSlider top + 2 px).<br>
-                extent: 1@(panSlider height - 4);<br>
-                position: panSlider center x@(panSlider top + 2).<br>
         panSlider addMorphBack: middleLine.<br>
         r := self makeRow.<br>
         r addMorphBack: (StringMorph contents: '0').<br>
         r addMorphBack: volSlider.<br>
         r addMorphBack: (StringMorph contents: '10').<br>
         c addMorphBack: r.<br>
         r := self makeRow.<br>
         r addMorphBack: (StringMorph contents: 'L' translated).<br>
         r addMorphBack: panSlider.<br>
         r addMorphBack: (StringMorph contents: 'R' translated).<br>
         c addMorphBack: r.<br>
+        ^ c!<br>
-        ^ c<br>
- !<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>rateControl (in category 'layout') -----<br>
  rateControl<br>
  <br>
         | rateSlider middleLine r |<br>
         rateSlider := SimpleSliderMorph new<br>
                 color: color;<br>
                 sliderColor: Color gray;<br>
+                extent: 180 px @ 12 px;<br>
-                extent: 180@12;<br>
                 target: self;<br>
                 actionSelector: #setLogRate:;<br>
+                orientation: #horizontal;<br>
                 minVal: -1.0;<br>
                 maxVal: 1.0;<br>
                 adjustToValue: 0.0.<br>
         middleLine := Morph new  "center indicator for pan slider"<br>
                 color: (Color r: 0.4 g: 0.4 b: 0.4);<br>
+                extent: 1 px @ (rateSlider height - 4 px);<br>
+                position: rateSlider center x @ (rateSlider top + 2 px).<br>
-                extent: 1@(rateSlider height - 4);<br>
-                position: rateSlider center x@(rateSlider top + 2).<br>
         rateSlider addMorphBack: middleLine.<br>
         r := self makeRow<br>
                 hResizing: #spaceFill;<br>
                 vResizing: #rigid;<br>
+                height: 24 px.<br>
-                height: 24.<br>
         r addMorphBack: (StringMorph contents: 'slow ' translated).<br>
         r addMorphBack: rateSlider.<br>
         r addMorphBack: (StringMorph contents: ' fast' translated).<br>
+        ^ r!<br>
-        ^ r<br>
- !<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>scrollControl (in category 'layout') -----<br>
  scrollControl<br>
  <br>
         | r |<br>
         scrollSlider := SimpleSliderMorph new<br>
                 color: color;<br>
                 sliderColor: Color gray;<br>
+                extent: 360 px @ 12 px;<br>
-                extent: 360@12;<br>
                 target: scorePlayer;<br>
+                orientation: #horizontal;<br>
                 actionSelector: #positionInScore:;<br>
                 adjustToValue: scorePlayer positionInScore.<br>
         r := self makeRow<br>
                 hResizing: #spaceFill;<br>
                 vResizing: #rigid;<br>
+                height: 24 px.<br>
-                height: 24.<br>
         r addMorphBack: (StringMorph contents: 'start ' translated).<br>
         r addMorphBack: scrollSlider.<br>
         r addMorphBack: (StringMorph contents: ' end' translated).<br>
+        ^ r!<br>
-        ^ r<br>
- !<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>trackControlsFor: (in category 'layout') -----<br>
  trackControlsFor: trackIndex<br>
  <br>
         | r |<br>
         r := self makeRow<br>
                 hResizing: #spaceFill;<br>
                 vResizing: #shrinkWrap.<br>
         r addMorphBack: (self trackNumAndMuteButtonFor: trackIndex).<br>
+        r addMorphBack: (Morph new extent: 10 px @ 5 px; color: color).  "spacer"<br>
-        r addMorphBack: (Morph new extent: 10@5; color: color).  "spacer"<br>
         r addMorphBack: (self panAndVolControlsFor: trackIndex).<br>
+        ^ r!<br>
-        ^ r<br>
- !<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>trackNumAndMuteButtonFor: (in category 'layout') -----<br>
  trackNumAndMuteButtonFor: trackIndex<br>
  <br>
         | muteButton instSelector pianoRollColor r |<br>
         muteButton := SimpleSwitchMorph new<br>
                 onColor: (Color r: 1.0 g: 0.6 b: 0.6);<br>
                 offColor: color;<br>
                 color: color;<br>
                 label: 'Mute' translated;<br>
                 target: scorePlayer;<br>
                 actionSelector: #mutedForTrack:put:;<br>
                 arguments: (Array with: trackIndex).<br>
         instSelector := PopUpChoiceMorph new<br>
+                extent: 95 px @ 14 px;<br>
-                extent: 95@14;<br>
                 contentsClipped: 'oboe1';<br>
                 target: self;<br>
                 actionSelector: #atTrack:from:selectInstrument:;<br>
                 getItemsSelector: #instrumentChoicesForTrack:;<br>
                 getItemsArgs: (Array with: trackIndex).<br>
         instSelector arguments:<br>
                 (Array with: trackIndex with: instSelector).<br>
         instrumentSelector at: trackIndex put: instSelector.<br>
  <br>
         "select track color using same color list as PianoRollScoreMorph"<br>
+        pianoRollColor := (Color wheel: scorePlayer score tracks size) at: trackIndex.<br>
-        pianoRollColor := (Color wheel: scorePlayer score tracks size) at: trackIndex.
<br>
  <br>
         r := self makeRow<br>
                 hResizing: #spaceFill;<br>
                 vResizing: #spaceFill;<br>
+                extent: 70 px @ 10 px.<br>
-                extent: 70@10.<br>
         r addMorphBack:<br>
                 ((StringMorph<br>
                         contents: trackIndex printString<br>
+                        font: (TextStyle defaultFont asPointSize: TextStyle defaultFont pointSize * 1.57)) color: pianoRollColor).<br>
-                        font: (TextStyle default fontOfSize: 24)) color: pianoRollColor).<br>
         trackIndex < 10<br>
+                ifTrue: [r addMorphBack: (Morph new color: color; extent: 19 px @ 8 px)]  "spacer"<br>
+                ifFalse: [r addMorphBack: (Morph new color: color; extent: 8 px @ 8 px)].  "spacer"<br>
-                ifTrue: [r addMorphBack: (Morph new color: color; extent: 19@8)]  "spacer"<br>
-                ifFalse: [r addMorphBack: (Morph new color: color; extent: 8@8)].  "spacer"<br>
         r addMorphBack:<br>
                 (StringMorph new<br>
+                        extent: 80 px @ 14 px;<br>
-                        extent: 80@14;<br>
                         contentsClipped: (scorePlayer infoForTrack: trackIndex)).<br>
+        r addMorphBack: (Morph new color: color; extent: 8 px @ 8 px).  "spacer"<br>
-        r addMorphBack: (Morph new color: color; extent: 8@8).  "spacer"<br>
         r addMorphBack: instSelector.<br>
         r addMorphBack: (AlignmentMorph newRow color: color).  "spacer"<br>
         r addMorphBack: muteButton.<br>
+        ^ r!<br>
-        ^ r<br>
- !<br>
<br>
Item was changed:<br>
  ----- Method: ScorePlayerMorph>>volumeControl (in category 'layout') -----<br>
  volumeControl<br>
  <br>
         | volumeSlider r |<br>
         volumeSlider := SimpleSliderMorph new<br>
                 color: color;<br>
                 sliderColor: Color gray;<br>
+                extent: 80 px @ 12 px;<br>
-                extent: 80@12;<br>
                 target: scorePlayer;<br>
+                orientation: #horizontal;<br>
                 actionSelector: #overallVolume:;<br>
                 adjustToValue: scorePlayer overallVolume.<br>
         r := self makeRow<br>
                 hResizing: #spaceFill;<br>
                 vResizing: #rigid;<br>
+                height: 24 px.<br>
-                height: 24.<br>
         r addMorphBack: (StringMorph contents: 'soft  ' translated).<br>
         r addMorphBack: volumeSlider.<br>
         r addMorphBack: (StringMorph contents: ' loud' translated).<br>
+        ^ r!<br>
-        ^ r<br>
- !<br>
<br>
<br>
</div>
</span></font>
</div>

<br>
</div></blockquote></div>