3737import org .eclipse .core .runtime .IExtensionPoint ;
3838import org .eclipse .core .runtime .IExtensionRegistry ;
3939import org .eclipse .core .runtime .Platform ;
40+ import org .eclipse .core .runtime .Platform .OS ;
4041import org .eclipse .core .runtime .RegistryFactory ;
4142import org .eclipse .core .runtime .preferences .DefaultScope ;
4243import org .eclipse .core .runtime .preferences .IEclipsePreferences ;
5354import org .eclipse .jface .dialogs .MessageDialog ;
5455import org .eclipse .jface .fieldassist .ControlDecoration ;
5556import org .eclipse .jface .fieldassist .FieldDecorationRegistry ;
57+ import org .eclipse .jface .layout .GridDataFactory ;
5658import org .eclipse .jface .preference .IPreferenceStore ;
5759import org .eclipse .jface .preference .PreferencePage ;
5860import org .eclipse .jface .util .Util ;
7375import org .eclipse .swt .widgets .Composite ;
7476import org .eclipse .swt .widgets .Control ;
7577import org .eclipse .swt .widgets .Display ;
78+ import org .eclipse .swt .widgets .Group ;
7679import org .eclipse .swt .widgets .Label ;
7780import org .eclipse .ui .IWorkbench ;
7881import org .eclipse .ui .IWorkbenchPreferenceConstants ;
@@ -114,6 +117,7 @@ public class ViewsPreferencePage extends PreferencePage implements IWorkbenchPre
114117 private boolean highContrastMode ;
115118
116119 private Button themingEnabled ;
120+ private Button rescaleAtRuntime ;
117121
118122 private Button hideIconsForViewTabs ;
119123 private Button showFullTextForViewTabs ;
@@ -135,6 +139,7 @@ protected Control createContents(Composite parent) {
135139 layout .horizontalSpacing = 10 ;
136140 comp .setLayout (layout );
137141 createThemeIndependentComposits (comp );
142+ createHiDPISettingsGroup (comp );
138143 return comp ;
139144 }
140145
@@ -180,6 +185,8 @@ protected Control createContents(Composite parent) {
180185 createHideIconsForViewTabs (comp );
181186 createDependency (showFullTextForViewTabs , hideIconsForViewTabs );
182187
188+ createHiDPISettingsGroup (comp );
189+
183190 if (currentTheme != null ) {
184191 String colorsAndFontsThemeId = getColorAndFontThemeIdByThemeId (currentTheme .getId ());
185192 if (colorsAndFontsThemeId != null && !currentColorsAndFontsTheme .getId ().equals (colorsAndFontsThemeId )) {
@@ -192,6 +199,30 @@ protected Control createContents(Composite parent) {
192199 return comp ;
193200 }
194201
202+ private void createHiDPISettingsGroup (Composite parent ) {
203+ if (!OS .isWindows ()) {
204+ return ;
205+ }
206+ createLabel (parent , "" ); //$NON-NLS-1$
207+ Group group = new Group (parent , SWT .LEFT );
208+ group .setText (WorkbenchMessages .HiDpiSettingsGroupTitle );
209+
210+ GridData gridData = new GridData (SWT .FILL , SWT .CENTER , true , false );
211+ gridData .horizontalSpan = ((GridLayout ) parent .getLayout ()).numColumns ;
212+ group .setLayoutData (gridData );
213+ group .setFont (parent .getFont ());
214+ GridLayout layout = new GridLayout (1 , false );
215+ group .setLayout (layout );
216+ Label infoLabel = new Label (group , SWT .WRAP );
217+ infoLabel .setText (WorkbenchMessages .RescaleAtRuntimeDisclaimer );
218+ infoLabel .setLayoutData (GridDataFactory .defaultsFor (infoLabel ).create ());
219+ createLabel (group , "" ); //$NON-NLS-1$
220+
221+ boolean initialStateRescaleAtRuntime = PrefUtil .getAPIPreferenceStore ()
222+ .getBoolean (IWorkbenchPreferenceConstants .RESCALING_AT_RUNTIME );
223+ rescaleAtRuntime = createCheckButton (group , WorkbenchMessages .RescaleAtRuntimeEnabled , initialStateRescaleAtRuntime );
224+ }
225+
195226 private void createThemeIndependentComposits (Composite comp ) {
196227 createUseRoundTabs (comp );
197228 createColoredLabelsPref (comp );
@@ -227,7 +258,6 @@ private void createDependency(Button parent, Button dependent) {
227258 GridData gridData = new GridData ();
228259 gridData .horizontalIndent = 20 ;
229260 dependent .setLayoutData (gridData );
230-
231261 boolean parentState = parent .getSelection ();
232262 dependent .setEnabled (parentState );
233263
@@ -341,6 +371,14 @@ public boolean performOk() {
341371 .getSelection ();
342372 prefs .putBoolean (PartRenderingEngine .ENABLED_THEME_KEY , themingEnabled .getSelection ());
343373
374+ boolean isRescaleAtRuntimeChanged = false ;
375+ if (rescaleAtRuntime != null ) {
376+ boolean initialStateRescaleAtRuntime = PrefUtil .getAPIPreferenceStore ()
377+ .getBoolean (IWorkbenchPreferenceConstants .RESCALING_AT_RUNTIME );
378+ isRescaleAtRuntimeChanged = initialStateRescaleAtRuntime != rescaleAtRuntime .getSelection ();
379+ apiStore .setValue (IWorkbenchPreferenceConstants .RESCALING_AT_RUNTIME , rescaleAtRuntime .getSelection ());
380+ }
381+
344382 prefs .putBoolean (CTabRendering .USE_ROUND_TABS , useRoundTabs .getSelection ());
345383 try {
346384 prefs .flush ();
@@ -367,19 +405,22 @@ public boolean performOk() {
367405 colorFontsDecorator .hide ();
368406
369407 if (themeChanged || colorsAndFontsThemeChanged ) {
370- showRestartDialog ();
408+ showRestartDialog (WorkbenchMessages . ThemeChangeWarningTitle , WorkbenchMessages . ThemeChangeWarningText );
371409 }
372410 }
373411 if (themingEnabledChanged ) {
374- showRestartDialog ();
412+ showRestartDialog (WorkbenchMessages .ThemeChangeWarningTitle , WorkbenchMessages .ThemeChangeWarningText );
413+ }
414+ if (isRescaleAtRuntimeChanged ) {
415+ showRestartDialog (WorkbenchMessages .RescaleAtRuntimeSettingChangeWarningTitle ,
416+ WorkbenchMessages .RescaleAtRuntimeSettingChangeWarningText );
375417 }
376418
377419 return super .performOk ();
378420 }
379421
380- private void showRestartDialog () {
381- if (new MessageDialog (null , WorkbenchMessages .ThemeChangeWarningTitle , null ,
382- WorkbenchMessages .ThemeChangeWarningText , MessageDialog .NONE , 2 ,
422+ private void showRestartDialog (String title , String warningText ) {
423+ if (new MessageDialog (null , title , null , warningText , MessageDialog .NONE , 2 ,
383424 WorkbenchMessages .Workbench_RestartButton , WorkbenchMessages .Workbench_DontRestartButton )
384425 .open () == Window .OK ) {
385426 Display .getDefault ().asyncExec (() -> PlatformUI .getWorkbench ().restart ());
0 commit comments