package org.xmind.ui.internal.print; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.widgets.Display; import org.xmind.gef.draw2d.RotatableWrapLabel; import org.xmind.ui.resources.FontUtils; import org.xmind.ui.util.UnitConvertor; public class PrintUtils { public static int getHeaderHeight(IDialogSettings settings, int targetDpi) { String headerText = settings.get(PrintConstants.HEADER_TEXT); Font headerFont = getFont(settings, PrintConstants.HEADER_FONT, targetDpi); int headerHeight = getHeight(headerText, headerFont); return headerHeight; } public static int getBottomHeight(IDialogSettings settings, int targetDpi) { int bottomHeight = Math.max(getFooterHeight(settings, targetDpi), getPageNumberHeight(settings, targetDpi)); return bottomHeight; } private static int getFooterHeight(IDialogSettings settings, int targetDpi) { String footerText = settings.get(PrintConstants.FOOTER_TEXT); Font footerFont = getFont(settings, PrintConstants.FOOTER_FONT, targetDpi); return getHeight(footerText, footerFont); } private static int getPageNumberHeight(IDialogSettings settings, int targetDpi) { boolean multiPages = settings.getBoolean(PrintConstants.MULTI_PAGES); if (!multiPages) { return 0; } String pageNumberText = "- 1 -"; //$NON-NLS-1$ Font pageNumberFont = Display.getCurrent().getSystemFont(); pageNumberFont = FontUtils.getNewHeight(pageNumberFont, (pageNumberFont.getFontData())[0].getHeight() * targetDpi / UnitConvertor.getScreenDpi().y); return getHeight(pageNumberText, pageNumberFont); } private static Font getFont(IDialogSettings settings, String fontKey, int targetDpi) { Font font = null; String fontValue = settings.get(fontKey); if (fontValue != null) { FontData[] fontData = FontUtils.toFontData(fontValue); if (fontData != null) { for (FontData fd : fontData) { fd.setHeight(fd.getHeight() * targetDpi / UnitConvertor.getScreenDpi().y); } font = new Font(Display.getCurrent(), fontData); } } if (font == null) { FontData[] defaultFontData = JFaceResources .getDefaultFontDescriptor().getFontData(); int defaultHeight = defaultFontData[0].getHeight(); font = new Font(Display.getCurrent(), FontUtils.newHeight(defaultFontData, defaultHeight * targetDpi / UnitConvertor.getScreenDpi().y)); } return font; } private static int getHeight(String text, Font font) { RotatableWrapLabel label = new RotatableWrapLabel(); label.setText(text); label.setFont(font); return (text == null || text.equals("")) ? 0 //$NON-NLS-1$ : label.getPreferredSize().height; } }