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