Christoph Thiede uploaded a new version of EToys to project The Trunk: http://source.squeak.org/trunk/EToys-ct.481.mcz
==================== Summary ====================
Name: EToys-ct.481 Author: ct Time: 28 August 2022, 3:41:10.098075 pm UUID: d2de7089-de64-b74c-a3fa-bd61108e1315 Ancestors: EToys-ct.479
Fixes MidiInputMorph so that one can actually select a valid input port instead of an output port (#setMIDIPort). Fixes pan and vol sliders, adds high-dpi support, and uses a DropDownChoiceMorph for the instrument. Note that we might still change the styl the instrument selector later.
=============== Diff against EToys-ct.479 ===============
Item was changed: ----- Method: MidiInputMorph>>addChannelControlsFor: (in category 'accessing') ----- addChannelControlsFor: channelIndex
| r divider col | r := self makeRow hResizing: #shrinkWrap; vResizing: #shrinkWrap. r addMorphBack: (self channelNumAndMuteButtonFor: channelIndex). + 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: channelIndex).
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 := self lastSubmorph. col addMorphBack: divider. + col addMorphBack: r.! - col addMorphBack: r. - !
Item was changed: ----- Method: MidiInputMorph>>channelNumAndMuteButtonFor: (in category 'accessing') ----- channelNumAndMuteButtonFor: channelIndex
| muteButton instSelector r | muteButton := SimpleSwitchMorph new onColor: (Color r: 1.0 g: 0.6 b: 0.6); offColor: color; color: color; label: 'Mute' translated; target: midiSynth; actionSelector: #mutedForChannel:put:; arguments: (Array with: channelIndex). + instSelector := DropDownChoiceMorph new + extent: 120 px @ 18 px; - instSelector := PopUpChoiceMorph new - extent: 95@14; contentsClipped: 'oboe1'; target: self; actionSelector: #atChannel:from:selectInstrument:; getItemsSelector: #instrumentChoicesForChannel:; getItemsArgs: (Array with: channelIndex). instSelector arguments: (Array with: channelIndex with: instSelector). instrumentSelector at: channelIndex put: instSelector.
r := self makeRow + hResizing: #spaceFill; - hResizing: #rigid; vResizing: #spaceFill; + extent: 70 px @ 10 px. - extent: 70@10. r addMorphBack: (StringMorph contents: channelIndex printString + font: (TextStyle defaultFont asPointSize: TextStyle defaultFont pointSize * 1.57)). - font: (TextStyle default fontOfSize: 24)). channelIndex < 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: instSelector. r addMorphBack: (AlignmentMorph newRow color: color). "spacer" r addMorphBack: muteButton. ^ r!
Item was changed: ----- Method: MidiInputMorph>>defaultBorderWidth (in category 'initialization') ----- defaultBorderWidth "answer the default border width for the receiver" + ^ 2 px! - ^ 2!
Item was changed: ----- Method: MidiInputMorph>>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 px. - hResizing: #spaceFill; - vResizing: #spaceFill; - layoutInset: 3. midiPortNumber := nil. midiSynth := MIDISynth new. instrumentSelector := Array new: 16. self removeAllMorphs. self addMorphBack: self makeControls. self addMorphBack: (AlignmentMorph newColumn color: color; layoutInset: 0). self addChannelControlsFor: 1. + self extent: 20 px @ 20 px! - self extent: 20 @ 20!
Item was changed: ----- Method: MidiInputMorph>>makeControls (in category 'initialization') ----- makeControls
| bb r reverbSwitch onOffSwitch | bb := SimpleButtonMorph new target: self; + borderStyle: (BorderStyle raised width: 2 px); - borderStyle: (BorderStyle raised width: 2); color: color. r := AlignmentMorph newRow. r color: bb color; borderWidth: 0; layoutInset: 0. + r hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 5 px @ 5 px. - r hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 5@5. r addMorphBack: ( bb label: '<>'; actWhen: #buttonDown; actionSelector: #invokeMenu). onOffSwitch := SimpleSwitchMorph new offColor: color; onColor: (Color r: 1.0 g: 0.6 b: 0.6); + borderWidth: 2 px; - borderWidth: 2; label: 'On' translated; actionSelector: #toggleOnOff; target: self; setSwitchState: false. r addMorphBack: onOffSwitch. 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: self; setSwitchState: SoundPlayer isReverbOn not. r addMorphBack: reverbSwitch. ^ r!
Item was changed: ----- Method: MidiInputMorph>>panAndVolControlsFor: (in category 'initialization') ----- panAndVolControlsFor: channelIndex
| volSlider panSlider c r middleLine | volSlider := SimpleSliderMorph new color: color; + extent: 101 px @ 6 px; + minWidth: 101 px; - extent: 101@2; target: midiSynth; arguments: (Array with: channelIndex); + orientation: #horizontal; actionSelector: #volumeForChannel:put:; minVal: 0.0; maxVal: 1.0; adjustToValue: (midiSynth volumeForChannel: channelIndex). panSlider := SimpleSliderMorph new color: color; + extent: 101 px @ 6 px; + minWidth: 101 px; - extent: 101@2; target: midiSynth; arguments: (Array with: channelIndex); actionSelector: #panForChannel:put:; minVal: 0.0; maxVal: 1.0; adjustToValue: (midiSynth panForChannel: channelIndex). 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'). r addMorphBack: panSlider. r addMorphBack: (StringMorph contents: 'R'). c addMorphBack: r. + ^ c! - ^ c - !
Item was changed: ----- Method: MidiInputMorph>>setMIDIPort (in category 'accessing') ----- setMIDIPort
| portNum | + portNum := SimpleMIDIPort inputPortNumFromUser. - portNum := SimpleMIDIPort outputPortNumFromUser. portNum ifNil: [^ self]. midiPortNumber := portNum. !
packages@lists.squeakfoundation.org