Skip to content

Commit

Permalink
Merge pull request #16631 from Rinzwind/togglemenuitemmorph-submenuma…
Browse files Browse the repository at this point in the history
…rker-formset

Backport use of FormSet for ToggleMenuItemMorph submenu markers
  • Loading branch information
jecisc authored May 14, 2024
2 parents 7da194a + 6fd74e7 commit 7efef56
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 49 deletions.
64 changes: 40 additions & 24 deletions src/Morphic-Base/MenuItemMorph.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ Class {
'keyText'
],
#classVars : [
'BottomArrow',
'LeftArrow',
'SubMenuMarker',
'UpArrow'
'BottomArrowFormSet',
'LeftArrowFormSet',
'SubMenuMarkerFormSet',
'UpArrowFormSet'
],
#category : 'Morphic-Base-Menus',
#package : 'Morphic-Base',
Expand All @@ -41,16 +41,26 @@ Class {
{ #category : 'class initialization' }
MenuItemMorph class >> initialize [

| f |
f := Form
extent: 5@9
fromArray: #(2147483648 3221225472 3758096384 4026531840 4160749568 4026531840 3758096384 3221225472 2147483648)
offset: 0@0.

SubMenuMarker := (ColorForm mappingWhiteToTransparentFrom: f) asFormOfDepth: 32.
BottomArrow := SubMenuMarker rotateBy: 90.
LeftArrow := SubMenuMarker rotateBy: 180.
UpArrow := SubMenuMarker rotateBy: 270
| forms rotatedFormSets |

forms := (1 to: 2) collect: [ :scale |
| rectangle |
rectangle := (0 @ -1) corner: (1@2) * 4 * scale + 1.
(FormCanvas extent: (5@9) * scale)
drawPolygon: { rectangle topLeft. rectangle rightCenter. rectangle bottomLeft }
fillStyle: (SolidFillStyle color: Color black);
form ].
SubMenuMarkerFormSet := FormSet forms: forms.
rotatedFormSets := #(90 180 270) collect: [ :degrees |
| form1 form2 |
form1 := forms first rotateBy: degrees.
form2 := (FormCanvas extent: form1 extent * 2)
drawImage: (forms second rotateBy: degrees) at: 0@0;
form.
FormSet forms: { form1. form2 } ].
BottomArrowFormSet := rotatedFormSets first.
LeftArrowFormSet := rotatedFormSets second.
UpArrowFormSet := rotatedFormSets third
]

{ #category : 'grabbing' }
Expand Down Expand Up @@ -135,9 +145,9 @@ MenuItemMorph >> arguments: aCollection [
]

{ #category : 'private' }
MenuItemMorph >> bottomArrow [
MenuItemMorph >> bottomArrowFormSet [

^ BottomArrow
^ BottomArrowFormSet
]

{ #category : 'accessing' }
Expand Down Expand Up @@ -480,9 +490,9 @@ MenuItemMorph >> keyText: anObject [
]

{ #category : 'private' }
MenuItemMorph >> leftArrow [
MenuItemMorph >> leftArrowFormSet [

^ LeftArrow
^ LeftArrowFormSet
]

{ #category : 'drawing' }
Expand Down Expand Up @@ -601,9 +611,9 @@ MenuItemMorph >> onImage [
]

{ #category : 'private' }
MenuItemMorph >> rightArrow [
MenuItemMorph >> rightArrowFormSet [

^ SubMenuMarker
^ SubMenuMarkerFormSet
]

{ #category : 'selecting' }
Expand Down Expand Up @@ -670,8 +680,14 @@ MenuItemMorph >> subMenu: aMenuMorph [

{ #category : 'private' }
MenuItemMorph >> subMenuMarker [
"private - answer the form to be used as submenu marker"
^ self rightArrow

^ self subMenuMarkerFormSet asForm
]

{ #category : 'private' }
MenuItemMorph >> subMenuMarkerFormSet [
"private - answer the form set to be used as submenu marker"
^ self rightArrowFormSet
]

{ #category : 'accessing' }
Expand Down Expand Up @@ -707,9 +723,9 @@ MenuItemMorph >> toggledIconFormSet [
]

{ #category : 'private' }
MenuItemMorph >> upArrow [
MenuItemMorph >> upArrowFormSet [

^ UpArrow
^ UpArrowFormSet
]

{ #category : 'copying' }
Expand Down
15 changes: 9 additions & 6 deletions src/Morphic-Base/ToggleMenuItemMorph.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,12 @@ ToggleMenuItemMorph >> basicDrawOn: aCanvas [
stringBounds := stringBounds top: stringBounds top + stringBounds bottom - self fontToUse height // 2.
stringBounds := stringBounds bottom: stringBounds top + self fontToUse height.
self drawText: contents on: aCanvas in: stringBounds.
self hasSubMenu ifTrue: [ |subMenuMarker|
subMenuMarker := self subMenuMarker deepCopy mapColor: Color black to: stringColor.
self drawSubMenuMarker: subMenuMarker on: aCanvas in: stringBounds]
self hasSubMenu ifTrue: [ |subMenuMarkerFormSet colorMappedFormSet|
subMenuMarkerFormSet := self subMenuMarkerFormSet.
colorMappedFormSet := FormSet extent: subMenuMarkerFormSet extent depth: subMenuMarkerFormSet depth
forms: (subMenuMarkerFormSet forms collect: [ :subMenuMarkerForm |
subMenuMarkerForm deepCopy mapColor: Color black to: stringColor ]).
self drawSubMenuMarker: colorMappedFormSet on: aCanvas in: stringBounds]
]

{ #category : 'private - drawing' }
Expand Down Expand Up @@ -106,12 +109,12 @@ ToggleMenuItemMorph >> drawOn: aCanvas [
]

{ #category : 'private - drawing' }
ToggleMenuItemMorph >> drawSubMenuMarker: aForm on: aCanvas in: aRectangle [
ToggleMenuItemMorph >> drawSubMenuMarker: aFormSet on: aCanvas in: aRectangle [
"Draw the submenu marker on the canvas within the given bounds."

|markerRect|
markerRect := aRectangle topRight + ((aForm width * self displayScaleFactor) negated @ (aRectangle height - (aForm height * self displayScaleFactor) // 2)) extent: aForm extent * self displayScaleFactor.
self drawIcon: (FormSet form: aForm scaledByDisplayScaleFactor) on: aCanvas in: markerRect
markerRect := aRectangle topRight + ((aFormSet width * self displayScaleFactor) negated @ (aRectangle height - (aFormSet height * self displayScaleFactor) // 2)) extent: aFormSet extent * self displayScaleFactor.
self drawIcon: (FormSet extent: aFormSet extent scaledByDisplayScaleFactor truncated depth: aFormSet depth forms: aFormSet forms) on: aCanvas in: markerRect
]

{ #category : 'private - drawing' }
Expand Down
16 changes: 8 additions & 8 deletions src/Morphic-Widgets-Extra/DockingBarMenuItemMorph.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -109,20 +109,20 @@ DockingBarMenuItemMorph >> roundedCorners [
]

{ #category : 'private' }
DockingBarMenuItemMorph >> subMenuMarker [
"private - answer the form to be used as submenu marker"
DockingBarMenuItemMorph >> subMenuMarkerFormSet [
"private - answer the form set to be used as submenu marker"

owner isFloating
ifTrue: [ ^ self bottomArrow ].
ifTrue: [ ^ self bottomArrowFormSet ].
owner isAdheringToTop
ifTrue: [ ^ self bottomArrow ].
ifTrue: [ ^ self bottomArrowFormSet ].
owner isAdheringToBottom
ifTrue: [ ^ self upArrow ].
ifTrue: [ ^ self upArrowFormSet ].
owner isAdheringToLeft
ifTrue: [ ^ self rightArrow ].
ifTrue: [ ^ self rightArrowFormSet ].
owner isAdheringToRight
ifTrue: [ ^ self leftArrow ].
^ self rightArrow
ifTrue: [ ^ self leftArrowFormSet ].
^ self rightArrowFormSet
]

{ #category : 'private' }
Expand Down
22 changes: 11 additions & 11 deletions src/Morphic-Widgets-Extra/DockingBarToggleMenuItemMorph.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,13 @@ DockingBarToggleMenuItemMorph >> drawOn: aCanvas [
]

{ #category : 'private - drawing' }
DockingBarToggleMenuItemMorph >> drawSubMenuMarker: aForm on: aCanvas in: aRectangle [
DockingBarToggleMenuItemMorph >> drawSubMenuMarker: aFormSet on: aCanvas in: aRectangle [
"Draw the submenu marker on the canvas within the given bounds."

|markerRect|
markerRect := aRectangle topRight + (aForm width negated @ (aRectangle height - aForm height // 2)) extent: aForm extent.
markerRect := aRectangle topRight + (aFormSet width negated @ (aRectangle height - aFormSet height // 2)) extent: aFormSet extent.
markerRect translateBy: -4@1.
self drawIcon: (FormSet form: aForm) on: aCanvas in: markerRect
self drawIcon: aFormSet on: aCanvas in: markerRect
]

{ #category : 'events' }
Expand Down Expand Up @@ -180,20 +180,20 @@ DockingBarToggleMenuItemMorph >> stringBoundsToUse [
]

{ #category : 'accessing' }
DockingBarToggleMenuItemMorph >> subMenuMarker [
"private - answer the form to be used as submenu marker"
DockingBarToggleMenuItemMorph >> subMenuMarkerFormSet [
"private - answer the form set to be used as submenu marker"

owner isFloating
ifTrue: [ ^ self bottomArrow ].
ifTrue: [ ^ self bottomArrowFormSet ].
owner isAdheringToTop
ifTrue: [ ^ self bottomArrow ].
ifTrue: [ ^ self bottomArrowFormSet ].
owner isAdheringToBottom
ifTrue: [ ^ self upArrow ].
ifTrue: [ ^ self upArrowFormSet ].
owner isAdheringToLeft
ifTrue: [ ^ self rightArrow ].
ifTrue: [ ^ self rightArrowFormSet ].
owner isAdheringToRight
ifTrue: [ ^ self leftArrow ].
^ self rightArrow
ifTrue: [ ^ self leftArrowFormSet ].
^ self rightArrowFormSet
]

{ #category : 'accessing' }
Expand Down

0 comments on commit 7efef56

Please sign in to comment.