Skip to content

Commit 09b3083

Browse files
Thomas Singertmssngr
Thomas Singer
authored andcommittedMar 14, 2025
introduce RendererFactory inside Display which is responsible for creating the renderers
1 parent 5fa9d29 commit 09b3083

File tree

8 files changed

+118
-7
lines changed

8 files changed

+118
-7
lines changed
 

‎bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java

+12
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ enum APPEARANCE {
340340
static Display [] Displays = new Display [1];
341341

342342
/* Skinning support */
343+
private RendererFactory rendererFactory;
343344
static final int GROW_SIZE = 1024;
344345
Widget [] skinList = new Widget [GROW_SIZE];
345346
int skinCount;
@@ -798,6 +799,8 @@ public Display () {
798799
*/
799800
public Display (DeviceData data) {
800801
super (data);
802+
803+
rendererFactory = new DefaultRendererFactory();
801804
}
802805

803806
static void checkDisplay (Thread thread, boolean multiple) {
@@ -6867,4 +6870,13 @@ public boolean setRescalingAtRuntime(boolean activate) {
68676870
// not implemented for Cocoa
68686871
return false;
68696872
}
6873+
6874+
public RendererFactory getRendererFactory() {
6875+
return rendererFactory;
6876+
}
6877+
6878+
public void setRendererFactory(RendererFactory rendererFactory) {
6879+
if (rendererFactory == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
6880+
this.rendererFactory = rendererFactory;
6881+
}
68706882
}

‎bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Button.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,14 @@ public Button(Composite parent, int style) {
115115
super(parent, checkStyle(style));
116116
this.style |= SWT.DOUBLE_BUFFERED;
117117

118+
final RendererFactory rendererFactory = parent.getDisplay().getRendererFactory();
118119
renderer = (this.style & SWT.CHECK) != 0
119-
? new DefaultCheckboxRenderer(this)
120+
? rendererFactory.createCheckboxRenderer(this)
120121
: (this.style & SWT.RADIO) != 0
121-
? new DefaultRadioButtonRenderer(this)
122+
? rendererFactory.createRadioButtonRenderer(this)
122123
: (this.style & SWT.ARROW) != 0
123-
? new DefaultArrowButtonRenderer(this)
124-
: new DefaultButtonRenderer(this);
124+
? rendererFactory.createArrowButtonRenderer(this)
125+
: rendererFactory.createPushToggleButtonRenderer(this);
125126

126127
Listener listener = event -> {
127128
switch (event.type) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2025 Syntevo GmbH and others.
3+
*
4+
* This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Public License 2.0
6+
* which accompanies this distribution, and is available at
7+
* https://www.eclipse.org/legal/epl-2.0/
8+
*
9+
* SPDX-License-Identifier: EPL-2.0
10+
*
11+
* Contributors:
12+
* Thomas Singer (Syntevo) - initial API and implementation
13+
*******************************************************************************/
14+
package org.eclipse.swt.widgets;
15+
16+
public class DefaultRendererFactory implements RendererFactory {
17+
@Override
18+
public ButtonRenderer createCheckboxRenderer(Button button) {
19+
return new DefaultCheckboxRenderer(button);
20+
}
21+
22+
@Override
23+
public ButtonRenderer createRadioButtonRenderer(Button button) {
24+
return new DefaultRadioButtonRenderer(button);
25+
}
26+
27+
@Override
28+
public ButtonRenderer createArrowButtonRenderer(Button button) {
29+
return new DefaultArrowButtonRenderer(button);
30+
}
31+
32+
@Override
33+
public ButtonRenderer createPushToggleButtonRenderer(Button button) {
34+
return new DefaultButtonRenderer(button);
35+
}
36+
37+
@Override
38+
public ScaleRenderer createScaleRenderer(Scale scale) {
39+
return new DefaultScaleRenderer(scale);
40+
}
41+
42+
@Override
43+
public LabelRenderer createLabelRenderer(Label label) {
44+
return new BasicLabelRenderer(label);
45+
}
46+
}

‎bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Label.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ public Label(Composite parent, int style) {
107107
align = SWT.LEFT;
108108
}
109109

110-
renderer = new BasicLabelRenderer(this);
110+
final RendererFactory rendererFactory = parent.getDisplay().getRendererFactory();
111+
renderer = rendererFactory.createLabelRenderer(this);
111112
renderer.setAlign(align);
112113
renderer.setForeground(getForeground());
113114

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2025 Syntevo GmbH and others.
3+
*
4+
* This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Public License 2.0
6+
* which accompanies this distribution, and is available at
7+
* https://www.eclipse.org/legal/epl-2.0/
8+
*
9+
* SPDX-License-Identifier: EPL-2.0
10+
*
11+
* Contributors:
12+
* Thomas Singer (Syntevo) - initial API and implementation
13+
*******************************************************************************/
14+
package org.eclipse.swt.widgets;
15+
16+
public interface RendererFactory {
17+
ButtonRenderer createCheckboxRenderer(Button button);
18+
19+
ButtonRenderer createRadioButtonRenderer(Button button);
20+
21+
ButtonRenderer createArrowButtonRenderer(Button button);
22+
23+
ButtonRenderer createPushToggleButtonRenderer(Button button);
24+
25+
LabelRenderer createLabelRenderer(Label label);
26+
27+
ScaleRenderer createScaleRenderer(Scale scale);
28+
}

‎bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/widgets/Scale.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ public Scale(Composite parent, int style) {
126126
// re-add the horizontal/vertical flags
127127
super.style |= horizontal ? SWT.HORIZONTAL : SWT.VERTICAL;
128128

129-
renderer = new DefaultScaleRenderer(this);
129+
final RendererFactory rendererFactory = parent.getDisplay().getRendererFactory();
130+
renderer = rendererFactory.createScaleRenderer(this);
130131
}
131132

132133

‎bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java

+11
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,7 @@ public void stop() {
502502
static Display [] Displays = new Display [1];
503503

504504
/* Skinning support */
505+
private RendererFactory rendererFactory;
505506
Widget [] skinList = new Widget [GROW_SIZE];
506507
int skinCount;
507508

@@ -631,6 +632,8 @@ public Display () {
631632
*/
632633
public Display (DeviceData data) {
633634
super (data);
635+
636+
rendererFactory = new DefaultRendererFactory();
634637
}
635638

636639
/**
@@ -6308,4 +6311,12 @@ public boolean setRescalingAtRuntime(boolean activate) {
63086311
return false;
63096312
}
63106313

6314+
public RendererFactory getRendererFactory() {
6315+
return rendererFactory;
6316+
}
6317+
6318+
public void setRendererFactory(RendererFactory rendererFactory) {
6319+
if (rendererFactory == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
6320+
this.rendererFactory = rendererFactory;
6321+
}
63116322
}

‎bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,7 @@ public class Display extends Device implements Executor {
532532
static int SWT_OPENDOC;
533533

534534
/* Skinning support */
535+
private RendererFactory rendererFactory;
535536
Widget [] skinList = new Widget [GROW_SIZE];
536537
int skinCount;
537538

@@ -557,7 +558,6 @@ public class Display extends Device implements Executor {
557558
CommonWidgetsDPIChangeHandlers.registerCommonHandlers();
558559
}
559560

560-
561561
/*
562562
* TEMPORARY CODE.
563563
*/
@@ -595,6 +595,8 @@ public Display () {
595595
*/
596596
public Display (DeviceData data) {
597597
super (data);
598+
599+
rendererFactory = new DefaultRendererFactory();
598600
}
599601

600602
Control _getFocusControl () {
@@ -5395,4 +5397,13 @@ private void runWithProperDPIAwareness(Runnable operation) {
53955397
operation.run();
53965398
}
53975399
}
5400+
5401+
public RendererFactory getRendererFactory() {
5402+
return rendererFactory;
5403+
}
5404+
5405+
public void setRendererFactory(RendererFactory rendererFactory) {
5406+
if (rendererFactory == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
5407+
this.rendererFactory = rendererFactory;
5408+
}
53985409
}

0 commit comments

Comments
 (0)