The Inbox: Morphic-ct.1692.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Inbox: Morphic-ct.1692.mcz

commits-2
Christoph Thiede uploaded a new version of Morphic to project The Inbox:
http://source.squeak.org/inbox/Morphic-ct.1692.mcz

==================== Summary ====================

Name: Morphic-ct.1692
Author: ct
Time: 1 October 2020, 3:27:15.197807 am
UUID: 80889aa8-2990-634d-b8f0-b73c6b7f3a02
Ancestors: Morphic-eem.1686

Second version of NewColorPickerMorph rework. Replaces Morphic-ct.1634 which can be moved to the treated inbox.

Changelog:
- Add pick button to NewColorPickerMorph that allows to pick a color from the Display. With this enhancement, NCPM is finally superior to the old ColorPickerMorph and could now replace the latter by the default preferences.
- The color picker keeps live and non-modal; if the picking button is pressed, you can modally choose a color from anywhere on the screen. Press escape, yellow button, or click into the color picker morph to revert to cancel the color picking.
- Make the color picker hi-dpi-sensitive.
- Remove the pixel-costly 'Current selection:' label (it still survives in the balloon text of the color presenter).
- Enable Shout styling in the color expression pane.

Thanks for all your feedback on my first attempt! For the full discussion, see http://forum.world.st/The-Inbox-Morphic-ct-1634-mcz-td5112623.html.

=============== Diff against Morphic-eem.1686 ===============

Item was changed:
  Morph subclass: #NewColorPickerMorph
+ instanceVariableNames: 'target setColorSelector hsvaMorph colorPresenter isPicking'
- instanceVariableNames: 'target setColorSelector hsvaMorph colorPresenter'
  classVariableNames: 'UseIt'
  poolDictionaries: ''
  category: 'Morphic-Widgets'!
 
  !NewColorPickerMorph commentStamp: 'cmm 12/3/2010 13:36' prior: 0!
  A NewColorPickerMorph is a new widget for choosing colors in Morphic.  Instantiate a NewColorPickerMorph:
 
  (NewColorPickerMorph
  on: objectToHaveItsColorSet
  getColorSelector: itsColorGetterSymbol
  setColorSelector: itsColorSetterSymbol) openInWorld
 
  !

Item was added:
+ ----- Method: NewColorPickerMorph>>aboutToStyle:requestor: (in category 'styling') -----
+ aboutToStyle: styler requestor: requestor
+
+ ^ true!

Item was changed:
+ ----- Method: NewColorPickerMorph>>closeButtonLabel (in category 'accessing - labels') -----
- ----- Method: NewColorPickerMorph>>closeButtonLabel (in category 'initialize-release') -----
  closeButtonLabel
  ^ 'Close' translated!

Item was added:
+ ----- Method: NewColorPickerMorph>>colorPresenterLabel (in category 'accessing - labels') -----
+ colorPresenterLabel
+
+ ^ 'Current selection' translated!

Item was changed:
  ----- Method: NewColorPickerMorph>>initialize (in category 'initialize-release') -----
  initialize
+
  super initialize.
+ isPicking := false.
+ self initializeHsvaMorph.!
- self initializeHsvaMorph!

Item was added:
+ ----- Method: NewColorPickerMorph>>isPicking (in category 'accessing') -----
+ isPicking
+
+ ^ isPicking!

Item was added:
+ ----- Method: NewColorPickerMorph>>isPicking: (in category 'picking') -----
+ isPicking: aBoolean
+
+ isPicking := aBoolean.
+ self changed: #isPicking.
+ aBoolean ifTrue: [self pickColor].!

Item was changed:
  ----- Method: NewColorPickerMorph>>newBottomRow (in category 'initialize-release') -----
  newBottomRow
+
  ^ Morph new
+ color: Color transparent;
+ changeTableLayout;
+ listDirection: #leftToRight;
+ hResizing: #spaceFill; vResizing: #shrinkWrap;
+ height: Preferences standardButtonFont height * 1.5;
+ cellGap: 4;
+ addMorphBack: self newPickButton;
+ addMorphBack: self newColorPresenterMorph;
+ addMorphBack: self newCloseButton;
+ yourself!
- color: Color transparent ;
- changeTableLayout ;
- listDirection: #leftToRight ;
- hResizing: #spaceFill; vResizing: #shrinkWrap ;
- height: 20 ;
- cellGap: 4 ;
- addMorph: (StringMorph contents: 'Current selection:' translated) ;
- addMorphBack: self newColorPresenterMorph ;
- addMorphBack: self newCloseButton!

Item was changed:
  ----- Method: NewColorPickerMorph>>newCloseButton (in category 'initialize-release') -----
  newCloseButton
+
  ^ (PluggableButtonMorph
  on: self
  getState: nil
  action: #delete
  label: #closeButtonLabel)
+ vResizing: #spaceFill;
+ hResizing: #spaceFill;
+ yourself!
- vResizing: #spaceFill ;
- hResizing: #spaceFill;
- yourself!

Item was changed:
  ----- Method: NewColorPickerMorph>>newColorExpressionMorph (in category 'initialize-release') -----
  newColorExpressionMorph
+
  | inputField builder |
  builder := ToolBuilder default.
+ inputField := builder build: (builder pluggableInputFieldSpec new
- inputField := (builder build: (builder pluggableInputFieldSpec new
  model: self;
  getText: #colorExpression;
+ setText: #colorExpression:).
- setText: #colorExpression:)).
  inputField
+ hResizing: #spaceFill;
+ vResizing: #rigid;
+ height: Preferences standardButtonFont height * 1.5;
+ useDefaultStyler.
+ self changed: #colorExpression. "Necessary to trigger the styler"
- hResizing: #spaceFill ;
- vResizing: #rigid ;
- height: (Preferences standardDefaultTextFont height * 3/2).
  ^ inputField!

Item was changed:
  ----- Method: NewColorPickerMorph>>newColorPresenterMorph (in category 'initialize-release') -----
  newColorPresenterMorph
+
  ^ (ColorPresenterMorph
  on: hsvaMorph
  color: #selectedColor)
+ vResizing: #spaceFill;
+ hResizing: #spaceFill;
+ balloonText: self colorPresenterLabel;
+ yourself!
- vResizing: #rigid ; height: 20 ;
- hResizing: #spaceFill ;
- yourself!

Item was added:
+ ----- Method: NewColorPickerMorph>>newPickButton (in category 'initialize-release') -----
+ newPickButton
+
+ ^ (PluggableButtonMorph
+ on: self
+ getState: #isPicking
+ action: #togglePicking
+ label: #pickingButtonLabel)
+ vResizing: #spaceFill;
+ hResizing: #spaceFill;
+ yourself!

Item was added:
+ ----- Method: NewColorPickerMorph>>pickColor (in category 'picking') -----
+ pickColor
+
+ | selectedColor |
+ [
+ | previousColor |
+ previousColor := self selectedColor.
+ selectedColor := self pickColorFromDisplay.
+ selectedColor ifNil: [^ self selectedColor: previousColor].
+ ] ensure: [
+ self isPicking: false].
+ self selectedColor: selectedColor.!

Item was added:
+ ----- Method: NewColorPickerMorph>>pickColorFromDisplay (in category 'picking') -----
+ pickColorFromDisplay
+
+ Cursor target showWhile: [
+ | previousColor |
+ previousColor := self selectedColor.
+ [Sensor anyButtonPressed]
+ whileTrue;
+ whileFalse: [
+ | frontMorph |
+ Sensor peekKeyboard = Character escape ifTrue: [
+ ^ nil].
+ frontMorph := (self currentWorld morphsAt: Sensor cursorPoint) at: 1 ifAbsent: [nil].
+ self selectedColor: ((frontMorph isNil or: [(frontMorph == self or: [frontMorph hasOwner: self]) not])
+ ifTrue: [Display colorAt: Sensor cursorPoint]
+ ifFalse: [previousColor]).
+ self world runStepMethods; displayWorldSafely]].
+ Sensor yellowButtonPressed
+ ifTrue: [^ nil].
+ ^ self selectedColor!

Item was added:
+ ----- Method: NewColorPickerMorph>>pickingButtonLabel (in category 'accessing - labels') -----
+ pickingButtonLabel
+
+ ^ 'Picking' translated!

Item was changed:
  ----- Method: NewColorPickerMorph>>setup (in category 'initialize-release') -----
  setup
+
  self
+ color: Color white darker;
+ cornerStyle: #rounded;
+ changeTableLayout;
+ hResizing: #shrinkWrap;
+ vResizing: #shrinkWrap;
+ extent: (240 @ 240) * RealEstateAgent scaleFactor;
+ addMorphBack: hsvaMorph;
+ addMorphBack: self newColorExpressionMorph;
+ addMorphBack: self newBottomRow;
+ layoutInset: 4;
+ cellGap: 2.
+
+ Preferences menuAppearance3d
+ ifTrue: [self addDropShadow].!
- color: (Color white darker) ;
- cornerStyle: #rounded ;
- changeTableLayout ;
- hResizing: #shrinkWrap ;
- vResizing: #shrinkWrap ;
- extent: 240@240 ;
- addMorphBack: hsvaMorph ;
- addMorphBack: self newColorExpressionMorph ;
- addMorphBack: self newBottomRow ;
- layoutInset: 4 ;
- cellGap: 2.
-
- Preferences menuAppearance3d
- ifTrue: [self addDropShadow].
- !

Item was changed:
  ----- Method: NewColorPickerMorph>>setupForProperties (in category 'initialize-release') -----
  setupForProperties
+
  self
+ color: Color white darker;
+ changeTableLayout;
+ hResizing: #shrinkWrap;
+ vResizing: #shrinkWrap;
+ extent: 240@240;
+ addMorphBack: hsvaMorph;
+ layoutInset: 4;
+ cellGap: 2.!
- color: (Color white darker) ;
- changeTableLayout ;
- hResizing: #shrinkWrap ;
- vResizing: #shrinkWrap ;
- extent: 240@240 ;
- addMorphBack: hsvaMorph ;
- layoutInset: 4 ;
- cellGap: 2.!

Item was added:
+ ----- Method: NewColorPickerMorph>>togglePicking (in category 'picking') -----
+ togglePicking
+ self isPicking: self isPicking not!