import net.haspamelodica.swt.helper.gcs.GeneralGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.core.LogicObserver;
import net.mograsim.logic.core.components.CoreBitDisplay;
import net.mograsim.logic.model.modeladapter.componentadapters.BitDisplayAdapter;
import net.mograsim.logic.model.serializing.IdentifyParams;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
+import net.mograsim.logic.model.util.TextRenderingHelper;
import net.mograsim.preferences.Preferences;
public class ModelBitDisplay extends ModelComponent
private static final double width = 20;
private static final double height = 10;
private static final double fontHeight = 5;
+ private static final double textMargin = 0.5;
public final int logicWidth;
private final Pin inputPin;
Font oldFont = gc.getFont();
Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
gc.setFont(labelFont);
- Point textExtent = gc.textExtent(label);
Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text");
if (textColor != null)
gc.setForeground(textColor);
- gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
+ TextRenderingHelper.drawTextFitting(gc, label, getBounds(), textMargin, true);
gc.setFont(oldFont);
}
import net.haspamelodica.swt.helper.gcs.GeneralGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.core.types.BitVector;
import net.mograsim.logic.core.types.BitVectorFormatter;
import net.mograsim.logic.model.serializing.IdentifyParams;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
import net.mograsim.logic.model.util.JsonHandler;
+import net.mograsim.logic.model.util.TextRenderingHelper;
import net.mograsim.preferences.Preferences;
public class ModelFixedOutput extends ModelComponent
private static final double width = 20;
private static final double height = 20;
private static final double fontHeight = 5;
+ private static final double textMargin = 0.5;
public final BitVector bits;
Font oldFont = gc.getFont();
Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
gc.setFont(labelFont);
- Point textExtent = gc.textExtent(label);
Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text");
if (textColor != null)
gc.setForeground(textColor);
- gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
+ TextRenderingHelper.drawTextFitting(gc, label, getBounds(), textMargin, true);
gc.setFont(oldFont);
}
import net.haspamelodica.swt.helper.gcs.GeneralGC;
import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
import net.mograsim.logic.core.LogicObserver;
import net.mograsim.logic.core.components.CoreManualSwitch;
import net.mograsim.logic.model.serializing.IdentifyParams;
import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
import net.mograsim.logic.model.snippets.HighLevelStateHandler;
+import net.mograsim.logic.model.util.TextRenderingHelper;
import net.mograsim.preferences.Preferences;
public class ModelManualSwitch extends ModelComponent
private static final double height = 10;
private static final double fontHeight = 5;
private static final double heightMiniButtons = 4; // 0 is disabled
+ private static final double textMargin = 0.5;
public final int logicWidth;
private final Pin outputPin;
Font oldFont = gc.getFont();
Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
gc.setFont(labelFont);
- Point textExtent = gc.textExtent(label);
Color textColor = Preferences.current().getColor("net.mograsim.logic.model.color.text");
if (textColor != null)
gc.setForeground(textColor);
- gc.drawText(label, getPosX() + (width - textExtent.x) / 2, getPosY() + (height - textExtent.y) / 2, true);
+ TextRenderingHelper.drawTextFitting(gc, label, getBounds(), textMargin, true);
gc.setFont(oldFont);
if (manualSwitch != null && logicWidth > 1 && heightMiniButtons > 0 && visibleRegion.y < getPosY() + heightMiniButtons)
--- /dev/null
+package net.mograsim.logic.model.util;
+
+import net.haspamelodica.swt.helper.gcs.GeneralGC;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
+
+public class TextRenderingHelper
+{
+ public static void drawTextFitting(GeneralGC gc, String string, Rectangle box, double margin, boolean isTransparent)
+ {
+ drawTextFitting(gc, string, box.x, box.y, box.width, box.height, margin, isTransparent);
+ }
+
+ public static void drawTextFitting(GeneralGC gc, String string, double x, double y, double width, double height, double margin,
+ boolean isTransparent)
+ {
+ Point textExtentOldFont = gc.textExtent(string);
+ Font oldFont = gc.getFont();
+ double factorX = (width - margin * 2) / textExtentOldFont.x;
+ double factorY = (height - margin * 2) / textExtentOldFont.y;
+ double factor = Math.min(factorX, factorY);
+ gc.setFont(oldFont.scale(factor));
+ Point textExtentCurrentFont = gc.textExtent(string);
+ double xOff = (width - textExtentCurrentFont.x) / 2;
+ double yOff = (height - textExtentCurrentFont.y) / 2;
+ gc.drawText(string, x + xOff, y + yOff, isTransparent);
+ gc.setFont(oldFont);
+ }
+}
\ No newline at end of file