X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fmodel%2Fcomponents%2Fsubmodels%2FSubmodelComponent.java;h=35921284ff79898a33679e14b94d4678bc23636e;hb=HEAD;hp=745597d4766fd6f127d0db05474452745c06fe9a;hpb=2198fbadd2105c47ff4cd65d434616ae329802a1;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java index 745597d4..35921284 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java @@ -1,5 +1,9 @@ package net.mograsim.logic.model.model.components.submodels; +import static net.mograsim.logic.model.preferences.RenderPreferences.DEFAULT_LINE_WIDTH; +import static net.mograsim.logic.model.preferences.RenderPreferences.SUBMODEL_ZOOM_ALPHA_0; +import static net.mograsim.logic.model.preferences.RenderPreferences.SUBMODEL_ZOOM_ALPHA_1; + import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -17,13 +21,13 @@ import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.wires.MovablePin; import net.mograsim.logic.model.model.wires.Pin; import net.mograsim.logic.model.model.wires.PinUsage; +import net.mograsim.logic.model.preferences.RenderPreferences; import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; import net.mograsim.logic.model.serializing.SubmodelComponentParams; import net.mograsim.logic.model.serializing.SubmodelComponentSerializer; import net.mograsim.logic.model.snippets.Renderer; import net.mograsim.logic.model.util.JsonHandler; -import net.mograsim.preferences.Preferences; /** * A {@link ModelComponent} consisting of another model. A SubmodelComponent can have so-called "interface pins" connecting the @@ -138,21 +142,7 @@ public abstract class SubmodelComponent extends ModelComponent String name = supermodelPin.name; // TODO if we upgrade to Java 12, replace with switch-expression - PinUsage submodelPinUsage; - switch (supermodelPin.usage) - { - case INPUT: - submodelPinUsage = PinUsage.OUTPUT; - break; - case OUTPUT: - submodelPinUsage = PinUsage.INPUT; - break; - case TRISTATE: - submodelPinUsage = PinUsage.TRISTATE; - break; - default: - throw new IllegalArgumentException("Unknown enum constant: " + supermodelPin.usage); - } + PinUsage submodelPinUsage = supermodelPin.usage.getOpposite(); MovablePin submodelPin = new MovablePin(submodelModifiable, submodelInterface, name, supermodelPin.logicWidth, submodelPinUsage, supermodelPin.getRelX() / submodelScale, supermodelPin.getRelY() / submodelScale); @@ -357,22 +347,24 @@ public abstract class SubmodelComponent extends ModelComponent } @Override - public void render(GeneralGC gc, Rectangle visibleRegion) + public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { GCConfig conf = new GCConfig(gc); GeneralGC tgc = new TranslatedGC(gc, getPosX(), getPosY(), submodelScale, true); conf.reset(tgc); - double visibleRegionFillRatio = Math.max(getWidth() / visibleRegion.width, getHeight() / visibleRegion.height); + double visibleRegionFillRatio = getWidth() * getHeight() / (visibleRegion.width * visibleRegion.height); /** * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel * starts to be visible. */ - double maxVisibleRegionFillRatioForAlpha0 = Preferences.current().getDouble("net.mograsim.logic.model.submodel.zoomalpha0"); + // TODO add a listener + double maxVisibleRegionFillRatioForAlpha0 = renderPrefs.getDouble(SUBMODEL_ZOOM_ALPHA_0); /** * If this {@link SubmodelComponent} fills at least this amount of the visible region vertically or horizontally, the submodel is * fully visible. */ - double minVisibleRegionFillRatioForAlpha1 = Preferences.current().getDouble("net.mograsim.logic.model.submodel.zoomalpha1"); + // TODO add a listener + double minVisibleRegionFillRatioForAlpha1 = renderPrefs.getDouble(SUBMODEL_ZOOM_ALPHA_1); double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1); alphaFactor = Math.max(0, Math.min(1, alphaFactor)); // we need to take the old alpha into account to support nested submodules better. @@ -382,18 +374,19 @@ public abstract class SubmodelComponent extends ModelComponent if (submodelAlpha != 0) { gc.setAlpha(submodelAlpha); - renderer.render(tgc, visibleRegion.translate(getPosX() / submodelScale, getPosY() / submodelScale, 1 / submodelScale)); + renderer.render(tgc, renderPrefs, + visibleRegion.translate(getPosX() / submodelScale, getPosY() / submodelScale, 1 / submodelScale)); } if (labelAlpha != 0) { gc.setAlpha(labelAlpha); - renderSymbol(gc, visibleRegion); + renderSymbol(gc, renderPrefs, visibleRegion); } conf.reset(gc); // reset line width explicitly to avoid rounding errors causing weird glitches - gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.default")); + gc.setLineWidth(renderPrefs.getDouble(DEFAULT_LINE_WIDTH)); // draw the outline after all other operations to make interface pins look better - renderOutline(gc, visibleRegion); + renderOutline(gc, renderPrefs, visibleRegion); } /** @@ -401,10 +394,10 @@ public abstract class SubmodelComponent extends ModelComponent * * @author Daniel Kirschten */ - protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion) + private void renderSymbol(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { if (symbolRenderer != null) - symbolRenderer.render(gc, visibleRegion); + symbolRenderer.render(gc, renderPrefs, visibleRegion); } /** @@ -412,10 +405,10 @@ public abstract class SubmodelComponent extends ModelComponent * * @author Daniel Kirschten */ - protected void renderOutline(GeneralGC gc, Rectangle visibleRegion) + private void renderOutline(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion) { if (outlineRenderer != null) - outlineRenderer.render(gc, visibleRegion); + outlineRenderer.render(gc, renderPrefs, visibleRegion); } private static double map(double val, double valMin, double valMax, double mapMin, double mapMax)