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