Skip to content

Commit 58cde82

Browse files
committed
Added setting to let the World’s OSWorldRenderer set the class’s #canvasScaleFactor automatically when performing #checkForNewScreenSize.
1 parent a45d437 commit 58cde82

File tree

4 files changed

+40
-2
lines changed

4 files changed

+40
-2
lines changed

src/OSWindow-Core/OSNullFormRenderer.class.st

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ Class {
1313
OSNullFormRenderer >> newExtent: anExtent [
1414
]
1515

16+
{ #category : 'accessing' }
17+
OSNullFormRenderer >> outputExtent [
18+
19+
^ 0@0
20+
]
21+
1622
{ #category : 'updating screen' }
1723
OSNullFormRenderer >> updateAll [
1824
"Do nothing"

src/OSWindow-Core/OSWindowFormRenderer.class.st

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ OSWindowFormRenderer >> newExtent: newExtent [
6262
form setExtent: newExtent depth: form depth
6363
]
6464

65+
{ #category : 'accessing' }
66+
OSWindowFormRenderer >> outputExtent [
67+
68+
self subclassResponsibility
69+
]
70+
6571
{ #category : 'accessing' }
6672
OSWindowFormRenderer >> pixelExtent [
6773
^ form ifNotNil: [ form extent ] ifNil: [ 1@1 ]

src/OSWindow-Core/OSWorldRenderer.class.st

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,26 @@ Class {
1212
'previousFrameRenderingTime'
1313
],
1414
#classInstVars : [
15-
'canvasScaleFactor'
15+
'canvasScaleFactor',
16+
'autoSetCanvasScaleFactor'
1617
],
1718
#category : 'OSWindow-Core-Morphic',
1819
#package : 'OSWindow-Core',
1920
#tag : 'Morphic'
2021
}
2122

23+
{ #category : 'accessing' }
24+
OSWorldRenderer class >> autoSetCanvasScaleFactor [
25+
26+
^ autoSetCanvasScaleFactor ifNil: [ autoSetCanvasScaleFactor := false ]
27+
]
28+
29+
{ #category : 'accessing' }
30+
OSWorldRenderer class >> autoSetCanvasScaleFactor: boolean [
31+
32+
autoSetCanvasScaleFactor := boolean
33+
]
34+
2235
{ #category : 'accessing' }
2336
OSWorldRenderer class >> canvasScaleFactor [
2437

@@ -62,7 +75,11 @@ OSWorldRenderer class >> settingsOn: aBuilder [
6275
label: 'Canvas scale factor';
6376
target: self;
6477
domainValues: (1 to: 5);
65-
default: 1 ]
78+
default: 1.
79+
(aBuilder setting: #autoSetCanvasScaleFactor)
80+
label: 'Set canvas scale factor automatically';
81+
target: self;
82+
default: false ]
6683
]
6784

6885
{ #category : 'accessing' }
@@ -102,6 +119,9 @@ OSWorldRenderer >> checkForNewScreenSize [
102119
windowRenderer := self osWindowRenderer.
103120
windowRenderer ifNil: [ ^ self ].
104121

122+
(world == World and: [ self class autoSetCanvasScaleFactor]) ifTrue: [
123+
self class canvasScaleFactor: (windowRenderer outputExtent / self windowExtent) min * self screenScaleFactor ].
124+
105125
(display isNil or: [ display extent = self actualDisplaySize and: [ world worldState realWindowExtent = self actualScreenSize ] ])
106126
ifTrue: [ ^ self ].
107127

src/OSWindow-SDL2/OSSDL2FormRenderer.class.st

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ OSSDL2FormRenderer >> initialize [
7171
mutex := Mutex new
7272
]
7373

74+
{ #category : 'accessing' }
75+
OSSDL2FormRenderer >> outputExtent [
76+
77+
^ renderer outputExtent
78+
]
79+
7480
{ #category : 'private' }
7581
OSSDL2FormRenderer >> primitiveUpdateRectangle: rectangle externalForm: externalForm [
7682

0 commit comments

Comments
 (0)