blob: 9ebfa62aa0489372e80a8b1f2abddfbe9baca891 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2000, 2021 IBM Corporation and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0.
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
# IBM Corporation - org.eclipse.platform: initial API and implementation
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.ecommons.ui.util;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Control;
public class PixelConverter {
// TODO: check if still required
private final static double FONT_WS_FACTOR;
static {
final String ws = Platform.getWS();
if (ws.equals(Platform.WS_WIN32)) {
FONT_WS_FACTOR = 0.95;
}
else if (ws.equals(Platform.WS_GTK)) {
FONT_WS_FACTOR = 1.15;
}
else {
FONT_WS_FACTOR = 1.00;
}
}
private final FontMetrics fFontMetrics;
private final boolean fMonospace;
public PixelConverter(final Control control) {
final GC gc = new GC(control);
gc.setFont(control.getFont());
fFontMetrics= gc.getFontMetrics();
fMonospace = (gc.stringExtent("i").x == gc.stringExtent("W").x);
gc.dispose();
}
/**
* @see org.eclipse.jface.dialogs.DialogPage#convertHeightInCharsToPixels(int)
*/
public int convertHeightInCharsToPixels(final int chars) {
return Dialog.convertHeightInCharsToPixels(fFontMetrics, chars);
}
/**
* @see org.eclipse.jface.dialogs.DialogPage#convertHorizontalDLUsToPixels(int)
*/
public int convertHorizontalDLUsToPixels(final int dlus) {
return Dialog.convertHorizontalDLUsToPixels(fFontMetrics, dlus);
}
/**
* @see org.eclipse.jface.dialogs.DialogPage#convertVerticalDLUsToPixels(int)
*/
public int convertVerticalDLUsToPixels(final int dlus) {
return Dialog.convertVerticalDLUsToPixels(fFontMetrics, dlus);
}
/**
* @see org.eclipse.jface.dialogs.DialogPage#convertWidthInCharsToPixels(int)
*/
public int convertWidthInCharsToPixels(final int chars) {
if (fMonospace) {
return Dialog.convertWidthInCharsToPixels(fFontMetrics, chars);
}
else {
return (int) (FONT_WS_FACTOR * Dialog.convertWidthInCharsToPixels(fFontMetrics, chars));
}
}
}