Package com.subgraph.vega.ui.hexeditor

Source Code of com.subgraph.vega.ui.hexeditor.HexEditFonts

/*******************************************************************************
* Copyright (c) 2011 Subgraph.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Subgraph - initial API and implementation
******************************************************************************/
package com.subgraph.vega.ui.hexeditor;

import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;

public class HexEditFonts {
  private final static String HEX_ELEMENT_FONT = "hex-element";
  private final static String HEX_ASCII_FONT = "hex-ascii";
  private final static int FONT_PADDING = 10;
  private final FontRegistry fontRegistry;

  private final int offsetColumnWidth;
  private final int dataColumnWidth;
  private final int asciiColumnWordWidth;
 
  HexEditFonts(Composite parent) {
    fontRegistry = new FontRegistry();
    addFonts(parent.getDisplay());
    offsetColumnWidth = calculateOffsetColumnWidth(parent);
    dataColumnWidth = calculateDataColumnWidth(parent);
    asciiColumnWordWidth = calculateAsciiColumnWordWidth(parent);
  }
 
  private void addFonts(Display display) {
    add(display, HEX_ELEMENT_FONT, 10, "Monospace", "Courier");
    add(display, HEX_ASCII_FONT, 10, "Monospace", "Courier");
  }
 
  private void add(Display display, String tag, int size, String ...names) {
    for(String fontName: names) {
      if(fontNameExists(display, fontName)) {
        fontRegistry.put(tag, new FontData[] { new FontData(fontName, size, SWT.NORMAL) });
      }
    }
  }
 
  boolean fontNameExists(Display display, String name) {
    return display.getFontList(name, true).length > 0 || display.getFontList(name, false).length > 0;
  }
  Font getElementFont() {
    return fontRegistry.get(HEX_ELEMENT_FONT);
  }
 
  Font getAsciiFont() {
    return fontRegistry.get(HEX_ASCII_FONT);
  }
 
  int getOffsetColumnWidth() {
    return offsetColumnWidth;
  }
 
  int getDataColumnWidth() {
    return dataColumnWidth;
  }
 
  int getAsciiColumnWordWidth() {
    return asciiColumnWordWidth;
  }
 
  private int calculateOffsetColumnWidth(Composite composite) {
    final GC gc = new GC(composite);
    return getColumnWidth(HEX_ELEMENT_FONT, "000000", gc);
  }
 
  private int calculateDataColumnWidth(Composite composite) {
    final GC gc = new GC(composite);
    return getColumnWidth(HEX_ELEMENT_FONT, "00", gc);
  }
 
  private int calculateAsciiColumnWordWidth(Composite composite) {
    final GC gc = new GC(composite);
    return getColumnWidth(HEX_ASCII_FONT, "0000", gc);
  }
 
 
  private int getColumnWidth(String fontTag, String str, GC gc) {
    gc.setFont(fontRegistry.get(fontTag));
    Point extent = gc.textExtent(str);
    return extent.x + (FONT_PADDING * 2);
  }
TOP

Related Classes of com.subgraph.vega.ui.hexeditor.HexEditFonts

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.