From fef68cc7ca9e0dc23f6556ea48de7036de856c0e Mon Sep 17 00:00:00 2001 From: Julian Lehmann Date: Sun, 23 Jun 2024 15:30:00 +0200 Subject: [PATCH] prettier ui design; should work for all display sizes --- src/ComputationalArt/CAOverlay.class.st | 26 ++++-- .../CAOverlayBlockMenu.class.st | 23 +---- .../CAOverlayBrushMenu.class.st | 12 +-- src/ComputationalArt/CAOverlayItem.class.st | 80 +++++------------ src/ComputationalArt/CAOverlayList.class.st | 18 ++-- .../CAOverlayListItem.class.st | 85 +++++++++++++++++++ .../CAOverlayPlayMenu.class.st | 16 ++-- 7 files changed, 143 insertions(+), 117 deletions(-) create mode 100644 src/ComputationalArt/CAOverlayListItem.class.st diff --git a/src/ComputationalArt/CAOverlay.class.st b/src/ComputationalArt/CAOverlay.class.st index 086f539..afd0628 100644 --- a/src/ComputationalArt/CAOverlay.class.st +++ b/src/ComputationalArt/CAOverlay.class.st @@ -1,6 +1,6 @@ Class { #name : #CAOverlay, - #superclass : #Morph, + #superclass : #CAOverlayItem, #instVars : [ 'game' ], @@ -25,17 +25,27 @@ CAOverlay >> game: aCAGame [ { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/19/2024 16:08' + #'squeak_changestamp' : 'JAL 6/23/2024 15:27' } CAOverlay >> initialize [ + | lastHeight menus| super initialize. - "self color: Color black." self color: Color transparent. - self extent: 300@600. - - self addMorph: [|c| c:= CAOverlayPlayMenu new. c initialize. c ] value. - self addMorph: [|c| c:= CAOverlayBlockMenu new. c initialize. c y: 170. c ] value. - self addMorph: [|c| c:= CAOverlayBrushMenu new. c initialize. c y: 920. c ] value. + + menus := OrderedCollection new. + menus add: CAOverlayPlayMenu new. + menus add: CAOverlayBlockMenu new. + menus add: CAOverlayBrushMenu new. + + lastHeight := 0. + menus do: [:m | + m y: lastHeight. + m fitChildren; padding: (Rectangle origin: 10@10 corner: 10@30). + lastHeight := lastHeight + m height. + self addMorph: m]. + self fitChildren. + self padding: (Rectangle origin: 10@10 corner: 10@10). + self color: Color gray. ] diff --git a/src/ComputationalArt/CAOverlayBlockMenu.class.st b/src/ComputationalArt/CAOverlayBlockMenu.class.st index 11e729b..26d7667 100644 --- a/src/ComputationalArt/CAOverlayBlockMenu.class.st +++ b/src/ComputationalArt/CAOverlayBlockMenu.class.st @@ -1,25 +1,19 @@ Class { #name : #CAOverlayBlockMenu, - #superclass : #Morph, - #instVars : [ - 'currentlySelectedBlock' - ], + #superclass : #CAOverlayItem, #category : #ComputationalArt } { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/19/2024 16:06' + #'squeak_changestamp' : 'JAL 6/23/2024 15:03' } CAOverlayBlockMenu >> initialize [ | blockList | super initialize. - "self color: Color black." - self color: Color transparent. - self extent: 300@300. - self addMorph: [|s| s := (CAOverlayItem new) initialize. s contents: 'BlockMenu'. s] value. + self addMorph: [|s| s := (CAOverlayListItem new) initialize. s contents: 'BlockMenu'. s] value. blockList := CAOverlayList new fromListOfStrings: #('Water' 'Sand' 'Stone' 'Air' 'TNT' 'Wood' 'Algae' 'Fire' 'Fish' 'Smoke'). @@ -41,16 +35,5 @@ CAOverlayBlockMenu >> initialize [ self addMorph: blockList. blockList y: 70. - "blockTypes withIndexDo: [:type :i | |item| - Transcript show: type. - item := CAOverlayItem new. - item initialize; contents: type; - onclick: [:evt | - currentlySelectedBlock:= type. - self submorphsDo: [:t| t color: Color white]. - item color: Color green.]. - item y: (i * 70); x: 150. - self addMorph: item ]." - ] diff --git a/src/ComputationalArt/CAOverlayBrushMenu.class.st b/src/ComputationalArt/CAOverlayBrushMenu.class.st index d1a3766..a4a489b 100644 --- a/src/ComputationalArt/CAOverlayBrushMenu.class.st +++ b/src/ComputationalArt/CAOverlayBrushMenu.class.st @@ -1,25 +1,19 @@ Class { #name : #CAOverlayBrushMenu, - #superclass : #Morph, - #instVars : [ - 'currentlySelectedBlock' - ], + #superclass : #CAOverlayItem, #category : #ComputationalArt } { #category : #'as yet unclassified', - #'squeak_changestamp' : 'Sars 6/19/2024 16:31' + #'squeak_changestamp' : 'JAL 6/23/2024 15:03' } CAOverlayBrushMenu >> initialize [ | brushList | super initialize. - "self color: Color black." - self color: Color transparent. - self extent: 300@500. - self addMorph: [|s| s := (CAOverlayItem new) initialize. s contents: 'Brush Size'. s] value. + self addMorph: [|s| s := (CAOverlayListItem new) initialize. s contents: 'Brush Size'. s] value. brushList := CAOverlayList new fromListOfStrings: #('1x1' '3x3' '5x5' '9x9' '15x15'). brushList horizontalWithMargin: 10. diff --git a/src/ComputationalArt/CAOverlayItem.class.st b/src/ComputationalArt/CAOverlayItem.class.st index 40ccc7c..42af199 100644 --- a/src/ComputationalArt/CAOverlayItem.class.st +++ b/src/ComputationalArt/CAOverlayItem.class.st @@ -1,85 +1,43 @@ Class { #name : #CAOverlayItem, #superclass : #Morph, - #instVars : [ - 'onclickhandler', - 'stringmorph' - ], #category : #ComputationalArt } { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/18/2024 12:08' + #'squeak_changestamp' : 'JAL 6/23/2024 15:00' } -CAOverlayItem >> contents [ - ^stringmorph contents -] - -{ - #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/5/2024 16:06' -} -CAOverlayItem >> contents: aString [ - stringmorph contents: aString. - self extent: (stringmorph extent). +CAOverlayItem >> fitChildren [ + |originX originY cornerX cornerY| + originX := 10000. originY := 10000. cornerX := 0. cornerY:= 0. + self submorphsDo: [:s | s bounds corner x < originX + ifTrue: [originX := s bounds origin x]]. + self submorphsDo: [:s | s bounds corner y < originY + ifTrue: [originY := (s bounds origin y)]]. + self submorphsDo: [:s | s bounds corner x > cornerX + ifTrue: [cornerX := s bounds corner x]]. + self submorphsDo: [:s | s bounds corner y > cornerY + ifTrue: [cornerY := (s bounds corner y)]]. + self bounds: (Rectangle origin: originX@originY corner: cornerX@cornerY). ] { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/5/2024 15:11' -} -CAOverlayItem >> handlesMouseDown: evt [ - ^true -] - -{ - #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/5/2024 16:06' + #'squeak_changestamp' : 'JAL 6/23/2024 14:13' } CAOverlayItem >> initialize [ super initialize. - stringmorph := StringMorph new. - self color: Color white. - self addMorph: stringmorph. - self extent: (stringmorph extent). - ^self. -] - -{ - #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/18/2024 12:21' -} -CAOverlayItem >> mouseDown: evt [ - Transcript show: evt. - Transcript show: onclickhandler. - onclickhandler ifNotNil: [onclickhandler value: evt]. + self color: Color transparent. ] { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/5/2024 15:12' + #'squeak_changestamp' : 'JAL 6/23/2024 15:17' } -CAOverlayItem >> mouseUp: evt [ - Transcript show: evt. -] - -{ - #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/5/2024 15:24' -} -CAOverlayItem >> onclick: aBlock [ - onclickhandler := aBlock. - -] - -{ - #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/5/2024 15:27' -} -CAOverlayItem >> onclickhandler [ - ^onclickhandler - +CAOverlayItem >> padding: aRectangle [ + self extent: (self extent + aRectangle origin + aRectangle corner). + self submorphsDo: [:s | s position: (s position + aRectangle origin)] ] diff --git a/src/ComputationalArt/CAOverlayList.class.st b/src/ComputationalArt/CAOverlayList.class.st index e591900..41f44f7 100644 --- a/src/ComputationalArt/CAOverlayList.class.st +++ b/src/ComputationalArt/CAOverlayList.class.st @@ -1,6 +1,6 @@ Class { #name : #CAOverlayList, - #superclass : #Morph, + #superclass : #CAOverlayItem, #instVars : [ 'onClickHandler' ], @@ -9,11 +9,11 @@ Class { { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/18/2024 15:28' + #'squeak_changestamp' : 'JAL 6/23/2024 15:03' } CAOverlayList >> fromListOfStrings: aListOfStrings [ aListOfStrings reverse withIndexDo: [:type :i | |item| - item := CAOverlayItem new. + item := CAOverlayListItem new. item initialize; contents: type; onclick: [:evt | self onItemClick: item]. self addMorph: item ]. @@ -30,22 +30,21 @@ CAOverlayList >> horizontal [ { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/18/2024 11:55' + #'squeak_changestamp' : 'JAL 6/23/2024 15:02' } CAOverlayList >> horizontalWithMargin: aMargin [ | left | left := 0. self submorphsDo: [ :s| s x: left + (s width / 2). left := left + s width + aMargin]. - self width: (left - aMargin). + self fitChildren. ] { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/18/2024 12:00' + #'squeak_changestamp' : 'JAL 6/23/2024 15:01' } CAOverlayList >> initialize [ super initialize. - "self color: Color black." self color: Color transparent. @@ -77,11 +76,12 @@ CAOverlayList >> vertical [ { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/18/2024 11:56' + #'squeak_changestamp' : 'JAL 6/23/2024 15:01' } CAOverlayList >> verticalWithMargin: aMargin [ | top | top := 0. self submorphsDo: [ :s| s y: top. top := top + s height + aMargin]. - self height: (top - aMargin). + "self height: (top - aMargin)." + self fitChildren. ] diff --git a/src/ComputationalArt/CAOverlayListItem.class.st b/src/ComputationalArt/CAOverlayListItem.class.st new file mode 100644 index 0000000..be421e7 --- /dev/null +++ b/src/ComputationalArt/CAOverlayListItem.class.st @@ -0,0 +1,85 @@ +Class { + #name : #CAOverlayListItem, + #superclass : #Morph, + #instVars : [ + 'onclickhandler', + 'stringmorph' + ], + #category : #ComputationalArt +} + +{ + #category : #'as yet unclassified', + #'squeak_changestamp' : 'JAL 6/18/2024 12:08' +} +CAOverlayListItem >> contents [ + ^stringmorph contents +] + +{ + #category : #'as yet unclassified', + #'squeak_changestamp' : 'JAL 6/5/2024 16:06' +} +CAOverlayListItem >> contents: aString [ + stringmorph contents: aString. + self extent: (stringmorph extent). + +] + +{ + #category : #'as yet unclassified', + #'squeak_changestamp' : 'JAL 6/5/2024 15:11' +} +CAOverlayListItem >> handlesMouseDown: evt [ + ^true +] + +{ + #category : #'as yet unclassified', + #'squeak_changestamp' : 'JAL 6/5/2024 16:06' +} +CAOverlayListItem >> initialize [ + super initialize. + stringmorph := StringMorph new. + self color: Color white. + self addMorph: stringmorph. + self extent: (stringmorph extent). + ^self. +] + +{ + #category : #'as yet unclassified', + #'squeak_changestamp' : 'JAL 6/18/2024 12:21' +} +CAOverlayListItem >> mouseDown: evt [ + Transcript show: evt. + Transcript show: onclickhandler. + onclickhandler ifNotNil: [onclickhandler value: evt]. + +] + +{ + #category : #'as yet unclassified', + #'squeak_changestamp' : 'JAL 6/5/2024 15:12' +} +CAOverlayListItem >> mouseUp: evt [ + Transcript show: evt. +] + +{ + #category : #'as yet unclassified', + #'squeak_changestamp' : 'JAL 6/5/2024 15:24' +} +CAOverlayListItem >> onclick: aBlock [ + onclickhandler := aBlock. + +] + +{ + #category : #'as yet unclassified', + #'squeak_changestamp' : 'JAL 6/5/2024 15:27' +} +CAOverlayListItem >> onclickhandler [ + ^onclickhandler + +] diff --git a/src/ComputationalArt/CAOverlayPlayMenu.class.st b/src/ComputationalArt/CAOverlayPlayMenu.class.st index 21e79a9..2ec6ec0 100644 --- a/src/ComputationalArt/CAOverlayPlayMenu.class.st +++ b/src/ComputationalArt/CAOverlayPlayMenu.class.st @@ -1,31 +1,27 @@ Class { #name : #CAOverlayPlayMenu, - #superclass : #Morph, - #instVars : [ - 'isPaused' - ], + #superclass : #CAOverlayItem, #category : #ComputationalArt } { #category : #'as yet unclassified', - #'squeak_changestamp' : 'JAL 6/19/2024 15:54' + #'squeak_changestamp' : 'JAL 6/23/2024 15:03' } CAOverlayPlayMenu >> initialize [ | pauseList | super initialize. - "self color: Color black." - self color: Color transparent. - self extent: 300@300. - self addMorph: [|s| s := (CAOverlayItem new) initialize. s x: 30; contents: 'Pause Menu'. s] value. - pauseList := CAOverlayList new fromListOfStrings: #('>' '+1' '+10'). + self addMorph: [|s| s := (CAOverlayListItem new) initialize. s x: 30; contents: 'Pause Menu'. s] value. + + pauseList := CAOverlayList new fromListOfStrings: #('>' '+1' '+10' 'clear'). pauseList horizontalWithMargin: 10. pauseList setOnclickhandler: [:list :item | item contents = '>' ifTrue: [item contents: '='. self owner game toggleRunning.] ifFalse: [ item contents = '=' ifTrue: [item contents: '>'. self owner game toggleRunning.]]. item contents = '+1' ifTrue: [self owner game skipAhead: 1.]. item contents = '+10' ifTrue: [self owner game skipAhead: 10.]. + item contents = 'clear' ifTrue: [CAGrid clear: (self owner game).]. ]. self addMorph: pauseList. pauseList y: 70.