A new version of MorphicExtras was added to project The Inbox: http://source.squeak.org/inbox/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 - !
Before:
[cid:43fe5079-42ab-4060-92e7-48b665018c13]
After:
[cid:b4e80403-239c-4edc-ac0a-84412171819a]
________________________________ Von: Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von commits@source.squeak.org commits@source.squeak.org Gesendet: Dienstag, 23. August 2022 12:09:41 An: squeak-dev@lists.squeakfoundation.org Betreff: [squeak-dev] The Inbox: MorphicExtras-ct.323.mcz
A new version of MorphicExtras was added to project The Inbox: http://source.squeak.org/inbox/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 - !
Nice, And maybe do something like this as well, to show that the instruments are changeable.
[image: bild.png] Best, Karl
On Tue, Aug 23, 2022 at 12:10 PM Thiede, Christoph < Christoph.Thiede@student.hpi.uni-potsdam.de> wrote:
Before:
After:
*Von:* Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von commits@source.squeak.org commits@source.squeak.org *Gesendet:* Dienstag, 23. August 2022 12:09:41 *An:* squeak-dev@lists.squeakfoundation.org *Betreff:* [squeak-dev] The Inbox: MorphicExtras-ct.323.mcz
A new version of MorphicExtras was added to project The Inbox: http://source.squeak.org/inbox/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
- !
On 2022-08-23, at 10:43 AM, karl ramberg karlramberg@gmail.com wrote:
Nice, And maybe do something like this as well, to show that the instruments are changeable.
Pull-down menus, surely?
More generically, can we make the system work without having to add #px all over the place? Would it simplify to have the hdpi handling deeper in the system?
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Vacca foeda = Stupid cow
On 23. Aug 2022, at 19:54, tim Rowledge tim@rowledge.org wrote:
On 2022-08-23, at 10:43 AM, karl ramberg karlramberg@gmail.com wrote:
Nice, And maybe do something like this as well, to show that the instruments are changeable.
Pull-down menus, surely?
More generically, can we make the system work without having to add #px all over the place? Would it simplify to have the hdpi handling deeper in the system?
That's reeeeeeeeeeeeeeeeally hard to do, actually. the px or em or cm "workaround" is actually quite simple and clever.
Best regards -Tobias
tim
On 2022-08-23, at 11:03 AM, Tobias Pape Das.Linux@gmx.de wrote:
That's reeeeeeeeeeeeeeeeally hard to do, actually. the px or em or cm "workaround" is actually quite simple and clever.
That's a pity I guess. But having units for line width/font size, curve radius and so on has its virtues.
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: RWD: Rewind Disk
I wish we had such an "implicit high-dpi mode". The simplest solution for this might be a TransformationMorph for the entire world. Unfortunately, everything will look blurry then. Maybe we could have a "SmartTransformationCanvas" in the future that translates font sizes instead of scaling up everything, but that's not reality ... yet. If we had this at some day, disabling the #px/#pt transformations will be simple. For now, my goal is just to adjust some applications for high dpi ...
Best, Christoph
________________________________ Von: Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von tim Rowledge tim@rowledge.org Gesendet: Dienstag, 23. August 2022 20:15 Uhr An: The general-purpose Squeak developers list Betreff: Re: [squeak-dev] The Inbox: MorphicExtras-ct.323.mcz
On 2022-08-23, at 11:03 AM, Tobias Pape Das.Linux@gmx.de wrote:
That's reeeeeeeeeeeeeeeeally hard to do, actually. the px or em or cm "workaround" is actually quite simple and clever.
That's a pity I guess. But having units for line width/font size, curve radius and so on has its virtues.
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: RWD: Rewind Disk
Since such a transformation would entail a severe performance impact, I once thought about replacing one Etoys halo with a "scale this!" to the just scale up that specific morph with a transformation. No need to go "all in" on a global scale.
Best, Marcel Am 25.08.2022 10:30:17 schrieb Thiede, Christoph christoph.thiede@student.hpi.uni-potsdam.de: I wish we had such an "implicit high-dpi mode". The simplest solution for this might be a TransformationMorph for the entire world. Unfortunately, everything will look blurry then. Maybe we could have a "SmartTransformationCanvas" in the future that translates font sizes instead of scaling up everything, but that's not reality ... yet. If we had this at some day, disabling the #px/#pt transformations will be simple. For now, my goal is just to adjust some applications for high dpi ...
Best, Christoph
Von: Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von tim Rowledge tim@rowledge.org Gesendet: Dienstag, 23. August 2022 20:15 Uhr An: The general-purpose Squeak developers list Betreff: Re: [squeak-dev] The Inbox: MorphicExtras-ct.323.mcz
On 2022-08-23, at 11:03 AM, Tobias Pape Das.Linux@gmx.de wrote:
That's reeeeeeeeeeeeeeeeally hard to do, actually. the px or em or cm "workaround" is actually quite simple and clever.
That's a pity I guess. But having units for line width/font size, curve radius and so on has its virtues.
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim [http://www.rowledge.org/tim] Strange OpCodes: RWD: Rewind Disk
For now, my goal is just to adjust some applications for high dpi ...
This is what app developers have to do in other environments as well.
Best, Marcel Am 25.08.2022 10:30:17 schrieb Thiede, Christoph christoph.thiede@student.hpi.uni-potsdam.de: I wish we had such an "implicit high-dpi mode". The simplest solution for this might be a TransformationMorph for the entire world. Unfortunately, everything will look blurry then. Maybe we could have a "SmartTransformationCanvas" in the future that translates font sizes instead of scaling up everything, but that's not reality ... yet. If we had this at some day, disabling the #px/#pt transformations will be simple. For now, my goal is just to adjust some applications for high dpi ...
Best, Christoph
Von: Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von tim Rowledge tim@rowledge.org Gesendet: Dienstag, 23. August 2022 20:15 Uhr An: The general-purpose Squeak developers list Betreff: Re: [squeak-dev] The Inbox: MorphicExtras-ct.323.mcz
On 2022-08-23, at 11:03 AM, Tobias Pape Das.Linux@gmx.de wrote:
That's reeeeeeeeeeeeeeeeally hard to do, actually. the px or em or cm "workaround" is actually quite simple and clever.
That's a pity I guess. But having units for line width/font size, curve radius and so on has its virtues.
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim [http://www.rowledge.org/tim] Strange OpCodes: RWD: Rewind Disk
Afaik, Microsoft Windows (Win32) has such an application-transparent scaling option (override high-dpi scaling - System (enhanced)): https://blogs.windows.com/windowsdeveloper/2017/05/19/improving-high-dpi-exp.... So in theory, it should be possible, shouldn't it? But I understand the efficiency challenges in this. We are very fortunate to have a straightforward API for high-dpi apps at all!
Best,
Christoph
________________________________ Von: Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von Taeumel, Marcel Gesendet: Donnerstag, 25. August 2022 10:40:57 An: squeak-dev Betreff: Re: [squeak-dev] Implicit high-dpi mode (was: The Inbox: MorphicExtras-ct.323.mcz)
For now, my goal is just to adjust some applications for high dpi ...
This is what app developers have to do in other environments as well.
Best, Marcel
Am 25.08.2022 10:30:17 schrieb Thiede, Christoph christoph.thiede@student.hpi.uni-potsdam.de:
I wish we had such an "implicit high-dpi mode". The simplest solution for this might be a TransformationMorph for the entire world. Unfortunately, everything will look blurry then. Maybe we could have a "SmartTransformationCanvas" in the future that translates font sizes instead of scaling up everything, but that's not reality ... yet. If we had this at some day, disabling the #px/#pt transformations will be simple. For now, my goal is just to adjust some applications for high dpi ...
Best, Christoph
________________________________ Von: Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von tim Rowledge tim@rowledge.org Gesendet: Dienstag, 23. August 2022 20:15 Uhr An: The general-purpose Squeak developers list Betreff: Re: [squeak-dev] The Inbox: MorphicExtras-ct.323.mcz
On 2022-08-23, at 11:03 AM, Tobias Pape Das.Linux@gmx.de wrote:
That's reeeeeeeeeeeeeeeeally hard to do, actually. the px or em or cm "workaround" is actually quite simple and clever.
That's a pity I guess. But having units for line width/font size, curve radius and so on has its virtues.
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: RWD: Rewind Disk
On Tue, Aug 23, 2022 at 7:54 PM tim Rowledge tim@rowledge.org wrote:
On 2022-08-23, at 10:43 AM, karl ramberg karlramberg@gmail.com wrote:
Nice, And maybe do something like this as well, to show that the instruments
are changeable.
Pull-down menus, surely?
PopUpChoiceMorph
Best, Karl
More generically, can we make the system work without having to add #px all over the place? Would it simplify to have the hdpi handling deeper in the system?
tim
tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Vacca foeda = Stupid cow
Hi Tim, Hi Karl,
thanks for the pointer, I did not know that the instruments are exchangeable (even though it is logical :D). I have pushed MorphicExtras-ct.329 to the Trunk which uses a DropDownChoiceMorph in favor of a PopUpChoiceMorph for the instrument selection:
[cid:8e98b475-0cb9-42c0-bc92-bd12e11725ab]
Best,
Christoph
________________________________ Von: Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von karl ramberg karlramberg@gmail.com Gesendet: Dienstag, 23. August 2022 21:16:48 An: The general-purpose Squeak developers list Betreff: Re: [squeak-dev] The Inbox: MorphicExtras-ct.323.mcz
On Tue, Aug 23, 2022 at 7:54 PM tim Rowledge <tim@rowledge.orgmailto:tim@rowledge.org> wrote:
On 2022-08-23, at 10:43 AM, karl ramberg <karlramberg@gmail.commailto:karlramberg@gmail.com> wrote:
Nice, And maybe do something like this as well, to show that the instruments are changeable.
Pull-down menus, surely?
PopUpChoiceMorph
Best, Karl
More generically, can we make the system work without having to add #px all over the place? Would it simplify to have the hdpi handling deeper in the system?
tim -- tim Rowledge; tim@rowledge.orgmailto:tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Vacca foeda = Stupid cow
On Thu, Aug 25, 2022 at 3:56 PM Thiede, Christoph < Christoph.Thiede@student.hpi.uni-potsdam.de> wrote:
Hi Tim, Hi Karl,
thanks for the pointer, I did not know that the instruments are exchangeable (even though it is logical :D). I have pushed MorphicExtras-ct.329 to the Trunk which uses a DropDownChoiceMorph in favor of a PopUpChoiceMorph for the instrument selection:
Nice :-) I would still like a slight change in background color to indicate more clearly that the instrument is a changeable item. I'll post a change soon to the inbox
Best, Karl
Best,
Christoph
*Von:* Squeak-dev squeak-dev-bounces@lists.squeakfoundation.org im Auftrag von karl ramberg karlramberg@gmail.com *Gesendet:* Dienstag, 23. August 2022 21:16:48 *An:* The general-purpose Squeak developers list *Betreff:* Re: [squeak-dev] The Inbox: MorphicExtras-ct.323.mcz
On Tue, Aug 23, 2022 at 7:54 PM tim Rowledge tim@rowledge.org wrote:
On 2022-08-23, at 10:43 AM, karl ramberg karlramberg@gmail.com wrote:
Nice, And maybe do something like this as well, to show that the instruments
are changeable.
Pull-down menus, surely?
PopUpChoiceMorph
Best, Karl
More generically, can we make the system work without having to add #px all over the place? Would it simplify to have the hdpi handling deeper in the system?
tim
tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Useful Latin Phrases:- Vacca foeda = Stupid cow
squeak-dev@lists.squeakfoundation.org