From c1c4a34421314de9b077b8fa6927755c5c76c7b5 Mon Sep 17 00:00:00 2001 From: Mike Spallino Date: Wed, 25 Sep 2013 14:27:33 -0400 Subject: [PATCH 01/24] Added Batik to the project dependencies. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0e41fc2f..ecd3259f 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ repositories { } dependencies { - compile 'javax.help:javahelp:2.0.05', 'com.connectina.swing:fontchooser:1.0', 'org.apache.commons:commons-lang3:3.1', 'net.sourceforge.collections:collections-generic:4.01', fileTree(dir: 'libs', include: '*.jar') + compile 'javax.help:javahelp:2.0.05', 'com.connectina.swing:fontchooser:1.0', 'org.apache.commons:commons-lang3:3.1', 'net.sourceforge.collections:collections-generic:4.01', 'org.apache.xmlgraphics:batik-svggen:1.7', fileTree(dir: 'libs', include: '*.jar') testCompile 'junit:junit:4.11' } From c9ef0c41f154ed24d73b1a0a1cf7ef51cb690ad1 Mon Sep 17 00:00:00 2001 From: Mike Spallino Date: Wed, 25 Sep 2013 14:50:34 -0400 Subject: [PATCH 02/24] Added svg swing component. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ecd3259f..093ed517 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ repositories { } dependencies { - compile 'javax.help:javahelp:2.0.05', 'com.connectina.swing:fontchooser:1.0', 'org.apache.commons:commons-lang3:3.1', 'net.sourceforge.collections:collections-generic:4.01', 'org.apache.xmlgraphics:batik-svggen:1.7', fileTree(dir: 'libs', include: '*.jar') + compile 'javax.help:javahelp:2.0.05', 'com.connectina.swing:fontchooser:1.0', 'org.apache.commons:commons-lang3:3.1', 'net.sourceforge.collections:collections-generic:4.01', 'org.apache.xmlgraphics:batik-svggen:1.7', 'org.apache.xmlgraphics:batik-swing:1.7', fileTree(dir: 'libs', include: '*.jar') testCompile 'junit:junit:4.11' } From 042a3f02a3bea5bf31a91175901b1d1f0af3112b Mon Sep 17 00:00:00 2001 From: Ryan Steinmetz Date: Tue, 1 Oct 2013 14:25:04 -0400 Subject: [PATCH 03/24] Added documentation to Startup.parseArgs --- src/main/java/com/cburch/logisim/gui/start/Startup.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/cburch/logisim/gui/start/Startup.java b/src/main/java/com/cburch/logisim/gui/start/Startup.java index af7ff4c1..69150913 100644 --- a/src/main/java/com/cburch/logisim/gui/start/Startup.java +++ b/src/main/java/com/cburch/logisim/gui/start/Startup.java @@ -220,7 +220,11 @@ private void loadTemplate(Loader loader, File templFile, AppPreferences.setTemplateType(AppPreferences.TEMPLATE_PLAIN); } } - + /** + * Parses the command-line arguments to com.cburch.logisim.Main + * @param args + * @return A Startup object + */ public static Startup parseArgs(String[] args) { // see whether we'll be using any graphics boolean isTty = false; From 9f74a6988e9247a2f5ff5f4aa3e35a2fe32ebf3a Mon Sep 17 00:00:00 2001 From: Ryan Steinmetz Date: Tue, 1 Oct 2013 14:37:26 -0400 Subject: [PATCH 04/24] Added gradle command for javadoc to readme. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 005e1d84..2ffdd985 100644 --- a/README.md +++ b/README.md @@ -11,4 +11,5 @@ The build script recognizes the following commands: gradle eclipse # Build Eclipse configuration gradle createExe # Build logisim executable gradle run # Run logisim from gradle + gradle javadoc # Generate Javadoc From 094ab2d5c29ee634e960a64351a26d67f6cb153a Mon Sep 17 00:00:00 2001 From: Ryan Steinmetz Date: Fri, 4 Oct 2013 17:03:48 -0400 Subject: [PATCH 05/24] added javadoc comments to com.cburch.logisim.LogisimVersion --- .../com/cburch/logisim/LogisimVersion.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/main/java/com/cburch/logisim/LogisimVersion.java b/src/main/java/com/cburch/logisim/LogisimVersion.java index 675e22aa..ac63118d 100644 --- a/src/main/java/com/cburch/logisim/LogisimVersion.java +++ b/src/main/java/com/cburch/logisim/LogisimVersion.java @@ -6,14 +6,43 @@ public class LogisimVersion { private static final int FINAL_REVISION = Integer.MAX_VALUE / 4; + /** + * creates a new LogisimVersion object without a revision number + * called in: + * com.cburch.logisim.Main + * com.cburch.logisim.file.XmlReader + * @param major + * @param minor + * @param release + * @return + */ public static LogisimVersion get(int major, int minor, int release) { return get(major, minor, release, FINAL_REVISION); } + /** + * creates a new LogisimVersion object with a revision number + * called in: + * com.cburch.logisim.circuit.SplitterFactory + * com.cburch.logisim.std.plexers.Decoder + * com.cburch.logisim.std.plexers.Demultiplexer + * com.cburch.logisim.std.plexers.Multiplexer + * @param major + * @param minor + * @param release + * @param revision + * @return + */ public static LogisimVersion get(int major, int minor, int release, int revision) { return new LogisimVersion(major, minor, release, revision); } + /** + * breaks up a single string containing the version number into several integers. + * uses "\\." as delimiter. + * @param versionString + * @return + */ public static LogisimVersion parse(String versionString) { String[] parts = versionString.split("\\."); int major = 0; @@ -35,6 +64,13 @@ public static LogisimVersion parse(String versionString) { private int revision; private String repr; + /** + * setter for variables that make up the logisim version number + * @param major + * @param minor + * @param release + * @param revision + */ private LogisimVersion(int major, int minor, int release, int revision) { this.major = major; this.minor = minor; @@ -51,6 +87,9 @@ public int hashCode() { return ret; } + /** + * checks if 2 objects of LogisimVersion are the same + */ @Override public boolean equals(Object other) { if (other instanceof LogisimVersion) { From ca0b56ef8e1dbf3de09c5d9b8b007fb2b3a75398 Mon Sep 17 00:00:00 2001 From: Ryan Steinmetz Date: Mon, 7 Oct 2013 11:18:03 -0400 Subject: [PATCH 06/24] added documentation to com.cburch.logisim.LogisimVersion --- .../com/cburch/logisim/LogisimVersion.java | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/cburch/logisim/LogisimVersion.java b/src/main/java/com/cburch/logisim/LogisimVersion.java index ac63118d..c69bf4b6 100644 --- a/src/main/java/com/cburch/logisim/LogisimVersion.java +++ b/src/main/java/com/cburch/logisim/LogisimVersion.java @@ -2,19 +2,20 @@ * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ package com.cburch.logisim; - +/** + * handles everything involving Logisim's version number + * @author steinmetzr + * + */ public class LogisimVersion { private static final int FINAL_REVISION = Integer.MAX_VALUE / 4; /** * creates a new LogisimVersion object without a revision number - * called in: - * com.cburch.logisim.Main - * com.cburch.logisim.file.XmlReader * @param major * @param minor * @param release - * @return + * @return a LogisimVersion object */ public static LogisimVersion get(int major, int minor, int release) { return get(major, minor, release, FINAL_REVISION); @@ -22,16 +23,11 @@ public static LogisimVersion get(int major, int minor, int release) { /** * creates a new LogisimVersion object with a revision number - * called in: - * com.cburch.logisim.circuit.SplitterFactory - * com.cburch.logisim.std.plexers.Decoder - * com.cburch.logisim.std.plexers.Demultiplexer - * com.cburch.logisim.std.plexers.Multiplexer * @param major * @param minor * @param release * @param revision - * @return + * @return a LogisimVersion object */ public static LogisimVersion get(int major, int minor, int release, int revision) { return new LogisimVersion(major, minor, release, revision); @@ -41,7 +37,7 @@ public static LogisimVersion get(int major, int minor, int release, int revision * breaks up a single string containing the version number into several integers. * uses "\\." as delimiter. * @param versionString - * @return + * @return a LogisimVersion object */ public static LogisimVersion parse(String versionString) { String[] parts = versionString.split("\\."); @@ -65,7 +61,7 @@ public static LogisimVersion parse(String versionString) { private String repr; /** - * setter for variables that make up the logisim version number + * setter for variables that make up the Logisim version number * @param major * @param minor * @param release @@ -79,6 +75,10 @@ private LogisimVersion(int major, int minor, int release, int revision) { this.repr = null; } + /** + * converts version number into a hashCode + * @return ret + */ @Override public int hashCode() { int ret = major * 31 + minor; @@ -88,7 +88,9 @@ public int hashCode() { } /** - * checks if 2 objects of LogisimVersion are the same + * checks if 2 objects of class LogisimVersion are the same + * @param other + * @return boolean value */ @Override public boolean equals(Object other) { @@ -101,6 +103,11 @@ public boolean equals(Object other) { } } + /** + * determines the order of 2 objects of class LogisimVersion by version number + * @param other + * @return a number not equal to 0 if objects are different or 0 if they are the same + */ public int compareTo(LogisimVersion other) { int ret = this.major - other.major; if (ret != 0) { @@ -120,6 +127,10 @@ public int compareTo(LogisimVersion other) { } } + /** + * converts version number into a string + * @return ret + */ @Override public String toString() { String ret = repr; From cbf6c4a3f09ef2f7c39a714c9eb30c79446f815d Mon Sep 17 00:00:00 2001 From: Mike Spallino Date: Mon, 7 Oct 2013 20:41:16 -0400 Subject: [PATCH 07/24] Removed extra code for drawing the background --- .../logisim/gui/start/AboutCredits.java | 231 ------------------ 1 file changed, 231 deletions(-) delete mode 100644 src/main/java/com/cburch/logisim/gui/start/AboutCredits.java diff --git a/src/main/java/com/cburch/logisim/gui/start/AboutCredits.java b/src/main/java/com/cburch/logisim/gui/start/AboutCredits.java deleted file mode 100644 index fc249b74..00000000 --- a/src/main/java/com/cburch/logisim/gui/start/AboutCredits.java +++ /dev/null @@ -1,231 +0,0 @@ -/* Copyright (c) 2010, Carl Burch. License information is located in the - * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ - -package com.cburch.logisim.gui.start; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.GradientPaint; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Image; -import java.awt.Paint; -import java.net.URL; -import java.util.ArrayList; -import static com.cburch.logisim.util.LocaleString._; - -import javax.swing.JComponent; - -class AboutCredits extends JComponent { - /** Time to spend freezing the credits before after after scrolling */ - private static final int MILLIS_FREEZE = 1000; - - /** Speed of how quickly the scrolling occurs */ - private static final int MILLIS_PER_PIXEL = 20; - - /** Path to Hendrix College's logo - if you want your own logo included, - * please add it separately rather than replacing this. */ - private static final String HENDRIX_PATH = "logisim/hendrix.png"; - private static final int HENDRIX_WIDTH = 50; - - private static class CreditsLine { - private int y; - private int type; - private String text; - private Image img; - private int imgWidth; - - public CreditsLine(int type, String text) { - this(type, text, null, 0); - } - - public CreditsLine(int type, String text, Image img, int imgWidth) { - this.y = 0; - this.type = type; - this.text = text; - this.img = img; - this.imgWidth = imgWidth; - } - } - - private Color[] colorBase; - private Paint[] paintSteady; - private Font[] font; - - private int scroll; - private float fadeStop; - - private ArrayList lines; - private int initialLines; // number of lines to show in initial freeze - private int initialHeight; // computed in code based on above - private int linesHeight; // computed in code based on above - - public AboutCredits() { - scroll = 0; - setOpaque(false); - - int prefWidth = About.IMAGE_WIDTH + 2 * About.IMAGE_BORDER; - int prefHeight = About.IMAGE_HEIGHT / 2 + About.IMAGE_BORDER; - setPreferredSize(new Dimension(prefWidth, prefHeight)); - - fadeStop = (float) (About.IMAGE_HEIGHT / 4.0); - - colorBase = new Color[] { - new Color(143, 0, 0), - new Color(48, 0, 96), - new Color(48, 0, 96), - }; - font = new Font[] { - new Font("Sans Serif", Font.ITALIC, 20), - new Font("Sans Serif", Font.BOLD, 24), - new Font("Sans Serif", Font.BOLD, 18), - }; - paintSteady = new Paint[colorBase.length]; - for (int i = 0; i < colorBase.length; i++) { - Color hue = colorBase[i]; - paintSteady[i] = new GradientPaint(0.0f, 0.0f, derive(hue, 0), - 0.0f, fadeStop, hue); - } - - URL url = AboutCredits.class.getClassLoader().getResource(HENDRIX_PATH); - Image hendrixLogo = null; - if (url != null) { - hendrixLogo = getToolkit().createImage(url); - } - - // Logisim's policy concerning who is given credit: - // Past contributors are not acknowledged in the About dialog for the current - // version, but they do appear in the acknowledgements section of the User's - // Guide. Current contributors appear in both locations. - - lines = new ArrayList(); - linesHeight = 0; // computed in paintComponent - lines.add(new CreditsLine(1, "www.cburch.com/logisim/")); - lines.add(new CreditsLine(0, _("creditsRoleLead"), - hendrixLogo, HENDRIX_WIDTH)); - lines.add(new CreditsLine(1, "Carl Burch")); - lines.add(new CreditsLine(2, "Hendrix College")); - initialLines = lines.size(); - lines.add(new CreditsLine(0, _("creditsRoleGerman"))); - lines.add(new CreditsLine(1, "Uwe Zimmerman")); - lines.add(new CreditsLine(2, "Uppsala universitet")); - lines.add(new CreditsLine(0, _("creditsRoleGreek"))); - lines.add(new CreditsLine(1, "Thanos Kakarountas")); - lines.add(new CreditsLine(2, "\u03A4.\u0395.\u0399 \u0399\u03BF\u03BD\u03AF\u03C9\u03BD \u039D\u03AE\u03C3\u03C9\u03BD")); - lines.add(new CreditsLine(0, _("creditsRolePortuguese"))); - lines.add(new CreditsLine(1, "Theldo Cruz Franqueira")); - lines.add(new CreditsLine(2, "PUC Minas")); - lines.add(new CreditsLine(0, _("creditsRoleRussian"))); - lines.add(new CreditsLine(1, "Ilia Lilov")); - lines.add(new CreditsLine(2, "\u041C\u043E\u0441\u043A\u043E\u0432\u0441\u043A\u0438\u0439 \u0433\u043E\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439")); - lines.add(new CreditsLine(2, "\u0443\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442 \u043F\u0435\u0447\u0430\u0442\u0438")); - lines.add(new CreditsLine(0, _("creditsRoleTesting"))); - lines.add(new CreditsLine(1, "Ilia Lilov")); - lines.add(new CreditsLine(2, "\u041C\u043E\u0441\u043A\u043E\u0432\u0441\u043A\u0438\u0439 \u0433\u043E\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439")); - lines.add(new CreditsLine(2, "\u0443\u043D\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442 \u043F\u0435\u0447\u0430\u0442\u0438")); - - /* If you fork Logisim, feel free to change the above lines, but - * please do not change these last four lines! */ - lines.add(new CreditsLine(0, _("creditsRoleOriginal"), - hendrixLogo, HENDRIX_WIDTH)); - lines.add(new CreditsLine(1, "Carl Burch")); - lines.add(new CreditsLine(2, "Hendrix College")); - lines.add(new CreditsLine(1, "www.cburch.com/logisim/")); - } - - public void setScroll(int value) { - scroll = value; - repaint(); - } - - private Color derive(Color base, int alpha) { - return new Color(base.getRed(), base.getGreen(), base.getBlue(), alpha); - } - - @Override - protected void paintComponent(Graphics g) { - FontMetrics[] fms = new FontMetrics[font.length]; - for (int i = 0; i < fms.length; i++) { - fms[i] = g.getFontMetrics(font[i]); - } - if (linesHeight == 0) { - int y = 0; - int index = -1; - for (CreditsLine line : lines) { - index++; - if (index == initialLines) initialHeight = y; - if (line.type == 0) y += 10; - FontMetrics fm = fms[line.type]; - line.y = y + fm.getAscent(); - y += fm.getHeight(); - } - linesHeight = y; - } - - Paint[] paint = paintSteady; - int yPos = 0; - int height = getHeight(); - int initY = Math.min(0, initialHeight - height + About.IMAGE_BORDER); - int maxY = linesHeight - height - initY; - int totalMillis = 2 * MILLIS_FREEZE + (linesHeight + height) * MILLIS_PER_PIXEL; - int offs = scroll % totalMillis; - if (offs >= 0 && offs < MILLIS_FREEZE) { - // frozen before starting the credits scroll - int a = 255 * (MILLIS_FREEZE - offs) / MILLIS_FREEZE; - if (a > 245) { - paint = null; - } else if (a < 15) { - paint = paintSteady; - } else { - paint = new Paint[colorBase.length]; - for (int i = 0; i < paint.length; i++) { - Color hue = colorBase[i]; - paint[i] = new GradientPaint(0.0f, 0.0f, derive(hue, a), - 0.0f, fadeStop, hue); - } - } - yPos = initY; - } else if (offs < MILLIS_FREEZE + maxY * MILLIS_PER_PIXEL) { - // scrolling through credits - yPos = initY + (offs - MILLIS_FREEZE) / MILLIS_PER_PIXEL; - } else if (offs < 2 * MILLIS_FREEZE + maxY * MILLIS_PER_PIXEL) { - // freezing at bottom of scroll - yPos = initY + maxY; - } else if (offs < 2 * MILLIS_FREEZE + (linesHeight - initY) * MILLIS_PER_PIXEL) { - // scrolling bottom off screen - yPos = initY + (offs - 2 * MILLIS_FREEZE) / MILLIS_PER_PIXEL; - } else { - // scrolling next credits onto screen - int millis = offs - 2 * MILLIS_FREEZE - (linesHeight - initY) * MILLIS_PER_PIXEL; - paint = null; - yPos = -height + millis / MILLIS_PER_PIXEL; - } - - int width = getWidth(); - int centerX = width / 2; - maxY = getHeight(); - for (CreditsLine line : lines) { - int y = line.y - yPos; - if (y < -100 || y > maxY + 50) continue; - - int type = line.type; - if (paint == null) { - g.setColor(colorBase[type]); - } else { - ((Graphics2D) g).setPaint(paint[type]); - } - g.setFont(font[type]); - int textWidth = fms[type].stringWidth(line.text); - g.drawString(line.text, centerX - textWidth / 2, line.y - yPos); - - Image img = line.img; - if (img != null) { - int x = width - line.imgWidth - About.IMAGE_BORDER; - int top = y - fms[type].getAscent(); - g.drawImage(img, x, top, this); - } - } - } -} \ No newline at end of file From 08fb58620564aaa2c7e685f7ed0ba4fd9e83fdc6 Mon Sep 17 00:00:00 2001 From: Mike Spallino Date: Mon, 7 Oct 2013 20:41:58 -0400 Subject: [PATCH 08/24] Made an example SVG file to use for the about credits. --- .../com/cburch/logisim/gui/start/About.java | 217 ++---------------- .../logisim/gui/start/SplashScreen.java | 3 +- 2 files changed, 20 insertions(+), 200 deletions(-) diff --git a/src/main/java/com/cburch/logisim/gui/start/About.java b/src/main/java/com/cburch/logisim/gui/start/About.java index 03c0b9ed..d6fb5a98 100644 --- a/src/main/java/com/cburch/logisim/gui/start/About.java +++ b/src/main/java/com/cburch/logisim/gui/start/About.java @@ -13,12 +13,18 @@ import java.awt.Graphics2D; import javax.swing.BorderFactory; +import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.event.AncestorEvent; import javax.swing.event.AncestorListener; +import org.apache.batik.swing.JSVGCanvas; +import org.apache.batik.swing.gvt.GVTTreeRendererAdapter; +import org.apache.batik.swing.svg.GVTTreeBuilderAdapter; +import org.apache.batik.swing.svg.SVGDocumentLoaderAdapter; + import com.cburch.logisim.Main; import com.cburch.logisim.data.Value; import com.cburch.logisim.util.GraphicsUtil; @@ -27,224 +33,37 @@ public class About { static final int IMAGE_BORDER = 10; static final int IMAGE_WIDTH = 380; static final int IMAGE_HEIGHT = 284; + protected static JSVGCanvas svgCanvas =new JSVGCanvas(); - private static class PanelThread extends Thread { - private MyPanel panel; - private boolean running = true; - - PanelThread(MyPanel panel) { - this.panel = panel; - } - - @Override - public void run() { - long start = System.currentTimeMillis(); - while (running) { - long elapse = System.currentTimeMillis() - start; - int count = (int) (elapse / 500) % 4; - panel.upper = (count == 2 || count == 3) ? Value.TRUE : Value.FALSE; - panel.lower = (count == 1 || count == 2) ? Value.TRUE : Value.FALSE; - panel.credits.setScroll((int) elapse); - panel.repaint(); - try { - Thread.sleep(20); - } catch (InterruptedException ex) { } - } - } - } - - private static class MyPanel extends JPanel implements AncestorListener { - private final Color fadeColor = new Color(255, 255, 255, 128); - private final Color headerColor = new Color(143, 0, 0); - private final Color gateColor = Color.DARK_GRAY; - private final Font headerFont = new Font("Monospaced", Font.BOLD, 72); - private final Font versionFont = new Font("Serif", Font.PLAIN | Font.ITALIC, 32); - private final Font copyrightFont = new Font("Serif", Font.ITALIC, 18); - - private Value upper = Value.FALSE; - private Value lower = Value.TRUE; - private AboutCredits credits; - private PanelThread thread = null; + private static class MyPanel extends JPanel{ public MyPanel() { setLayout(null); - int prefWidth = IMAGE_WIDTH + 2 * IMAGE_BORDER; int prefHeight = IMAGE_HEIGHT + 2 * IMAGE_BORDER; setPreferredSize(new Dimension(prefWidth, prefHeight)); setBackground(Color.WHITE); - addAncestorListener(this); - - credits = new AboutCredits(); - credits.setBounds(0, prefHeight / 2, prefWidth, prefHeight / 2); - add(credits); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); - - try { - int x = IMAGE_BORDER; - int y = IMAGE_BORDER; - drawCircuit(g, x + 10, y + 55); - g.setColor(fadeColor); - g.fillRect(x, y, IMAGE_WIDTH, IMAGE_HEIGHT); - drawText(g, x, y); - } catch (Throwable t) { } - } - - private void drawCircuit(Graphics g, int x0, int y0) { - if (g instanceof Graphics2D) { - Graphics2D g2 = (Graphics2D) g; - g2.setStroke(new BasicStroke(5.0f)); - } - drawWires(g, x0, y0); - g.setColor(gateColor); - drawNot(g, x0, y0, 70, 10); - drawNot(g, x0, y0, 70, 110); - drawAnd(g, x0, y0, 130, 30); - drawAnd(g, x0, y0, 130, 90); - drawOr(g, x0, y0, 220, 60); } - - private void drawWires(Graphics g, int x0, int y0) { - Value upperNot = upper.not(); - Value lowerNot = lower.not(); - Value upperAnd = upperNot.and(lower); - Value lowerAnd = lowerNot.and(upper); - Value out = upperAnd.or(lowerAnd); - int x; - int y; - - g.setColor(upper.getColor()); - x = toX(x0, 20); - y = toY(y0, 10); - g.fillOval(x - 7, y - 7, 14, 14); - g.drawLine(toX(x0, 0), y, toX(x0, 40), y); - g.drawLine(x, y, x, toY(y0, 70)); - y = toY(y0, 70); - g.drawLine(x, y, toX(x0, 80), y); - g.setColor(upperNot.getColor()); - y = toY(y0, 10); - g.drawLine(toX(x0, 70), y, toX(x0, 80), y); - - g.setColor(lower.getColor()); - x = toX(x0, 30); - y = toY(y0, 110); - g.fillOval(x - 7, y - 7, 14, 14); - g.drawLine(toX(x0, 0), y, toX(x0, 40), y); - g.drawLine(x, y, x, toY(y0, 50)); - y = toY(y0, 50); - g.drawLine(x, y, toX(x0, 80), y); - g.setColor(lowerNot.getColor()); - y = toY(y0, 110); - g.drawLine(toX(x0, 70), y, toX(x0, 80), y); - - g.setColor(upperAnd.getColor()); - x = toX(x0, 150); - y = toY(y0, 30); - g.drawLine(toX(x0, 130), y, x, y); - g.drawLine(x, y, x, toY(y0, 45)); - y = toY(y0, 45); - g.drawLine(x, y, toX(x0, 174), y); - g.setColor(lowerAnd.getColor()); - y = toY(y0, 90); - g.drawLine(toX(x0, 130), y, x, y); - g.drawLine(x, y, x, toY(y0, 75)); - y = toY(y0, 75); - g.drawLine(x, y, toX(x0, 174), y); - - g.setColor(out.getColor()); - y = toY(y0, 60); - g.drawLine(toX(x0, 220), y, toX(x0, 240), y); - } - - private void drawNot(Graphics g, int x0, int y0, int x, int y) { - int[] xp = new int[4]; - int[] yp = new int[4]; - xp[0] = toX(x0, x - 10); yp[0] = toY(y0, y); - xp[1] = toX(x0, x - 29); yp[1] = toY(y0, y - 7); - xp[2] = xp[1]; yp[2] = toY(y0, y + 7); - xp[3] = xp[0]; yp[3] = yp[0]; - g.drawPolyline(xp, yp, 4); - int diam = toDim(10); - g.drawOval(xp[0], yp[0] - diam / 2, diam, diam); - } - - private void drawAnd(Graphics g, int x0, int y0, int x, int y) { - int[] xp = new int[4]; - int[] yp = new int[4]; - xp[0] = toX(x0, x - 25); yp[0] = toY(y0, y - 25); - xp[1] = toX(x0, x - 50); yp[1] = yp[0]; - xp[2] = xp[1]; yp[2] = toY(y0, y + 25); - xp[3] = xp[0]; yp[3] = yp[2]; - int diam = toDim(50); - g.drawArc(xp[1], yp[1], diam, diam, -90, 180); - g.drawPolyline(xp, yp, 4); - } - - private void drawOr(Graphics g, int x0, int y0, int x, int y) { - int cx = toX(x0, x - 50); - int cd = toDim(62); - GraphicsUtil.drawCenteredArc(g, cx, toY(y0, y - 37), cd, -90, 53); - GraphicsUtil.drawCenteredArc(g, cx, toY(y0, y + 37), cd, 90, -53); - GraphicsUtil.drawCenteredArc(g, toX(x0, x - 93), toY(y0, y), toDim(50), -30, 60); - } - - private static int toX(int x0, int offs) { - return x0 + offs * 3 / 2; - } - - private static int toY(int y0, int offs) { - return y0 + offs * 3 / 2; - } - - private static int toDim(int offs) { - return offs * 3 / 2; - } - - private void drawText(Graphics g, int x, int y) { - FontMetrics fm; - String str; - - g.setColor(headerColor); - g.setFont(headerFont); - g.drawString("Logisim", x, y + 45); - g.setFont(copyrightFont); fm = g.getFontMetrics(); - str = "\u00a9 " + Main.COPYRIGHT_YEAR; - g.drawString(str, x + IMAGE_WIDTH - fm.stringWidth(str), y + 16); - g.setFont(versionFont); fm = g.getFontMetrics(); - str = "Version " + Main.VERSION_NAME; - g.drawString(str, x + IMAGE_WIDTH - fm.stringWidth(str), y + 75); - } - - public void ancestorAdded(AncestorEvent arg0) { - if (thread == null) { - thread = new PanelThread(this); - thread.start(); - } - } - - public void ancestorRemoved(AncestorEvent arg0) { - if (thread != null) { - thread.running = false; - } - } - - public void ancestorMoved(AncestorEvent arg0) { } } - - private About() { } - - public static MyPanel getImagePanel() { - return new MyPanel(); + + public static JComponent createComponents() { + final JPanel panel = new JPanel(new BorderLayout()); + panel.add("Center", svgCanvas); + svgCanvas.setURI(SVGLoader.class.getResource("/logisim/drawing.svg").toString()); + svgCanvas.addSVGDocumentLoaderListener(new SVGDocumentLoaderAdapter() {}); + svgCanvas.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() {}); + svgCanvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {}); + return panel; } public static void showAboutDialog(JFrame owner) { - MyPanel imgPanel = getImagePanel(); JPanel panel = new JPanel(new BorderLayout()); - panel.add(imgPanel); + panel.add(createComponents()); panel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); JOptionPane.showMessageDialog(owner, panel, diff --git a/src/main/java/com/cburch/logisim/gui/start/SplashScreen.java b/src/main/java/com/cburch/logisim/gui/start/SplashScreen.java index 6b0c0116..fb3ecd1b 100644 --- a/src/main/java/com/cburch/logisim/gui/start/SplashScreen.java +++ b/src/main/java/com/cburch/logisim/gui/start/SplashScreen.java @@ -60,7 +60,8 @@ private static class Marker { long startTime = System.currentTimeMillis(); public SplashScreen() { - JPanel imagePanel = About.getImagePanel(); + JPanel imagePanel = new JPanel(); + imagePanel.add(About.createComponents()); imagePanel.setBorder(null); progress.setStringPainted(true); From 87cd6d7893cd1522b83a05bc75c2c654527ae007 Mon Sep 17 00:00:00 2001 From: Mike Spallino Date: Mon, 7 Oct 2013 20:48:03 -0400 Subject: [PATCH 09/24] Example SVG file. --- src/main/java/com/cburch/logisim/gui/start/About.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/cburch/logisim/gui/start/About.java b/src/main/java/com/cburch/logisim/gui/start/About.java index d6fb5a98..039adf8a 100644 --- a/src/main/java/com/cburch/logisim/gui/start/About.java +++ b/src/main/java/com/cburch/logisim/gui/start/About.java @@ -54,7 +54,7 @@ public void paintComponent(Graphics g) { public static JComponent createComponents() { final JPanel panel = new JPanel(new BorderLayout()); panel.add("Center", svgCanvas); - svgCanvas.setURI(SVGLoader.class.getResource("/logisim/drawing.svg").toString()); + svgCanvas.setURI(About.class.getResource("/logisim/drawing.svg").toString()); svgCanvas.addSVGDocumentLoaderListener(new SVGDocumentLoaderAdapter() {}); svgCanvas.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() {}); svgCanvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {}); From 8fa96f881c6869207de0c939c68bfa3e3ed7c865 Mon Sep 17 00:00:00 2001 From: Mike Spallino Date: Mon, 7 Oct 2013 20:50:29 -0400 Subject: [PATCH 10/24] Example SVG file. --- .externalToolBuilders/Launch4j.launch | 8 + src/main/resources/logisim/drawing.svg | 223 +++++++++++++++++++++++++ 2 files changed, 231 insertions(+) create mode 100644 .externalToolBuilders/Launch4j.launch create mode 100644 src/main/resources/logisim/drawing.svg diff --git a/.externalToolBuilders/Launch4j.launch b/.externalToolBuilders/Launch4j.launch new file mode 100644 index 00000000..3281f80b --- /dev/null +++ b/.externalToolBuilders/Launch4j.launch @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/main/resources/logisim/drawing.svg b/src/main/resources/logisim/drawing.svg new file mode 100644 index 00000000..7f5da0b4 --- /dev/null +++ b/src/main/resources/logisim/drawing.svg @@ -0,0 +1,223 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + From 1430396f1f36d33253bd0b74681965ac1952dfa1 Mon Sep 17 00:00:00 2001 From: Ryan Steinmetz Date: Wed, 16 Oct 2013 10:49:49 -0400 Subject: [PATCH 11/24] Removed useless hashCode method, cleaned up compareTo. --- .../com/cburch/logisim/LogisimVersion.java | 60 +++++-------------- 1 file changed, 15 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/cburch/logisim/LogisimVersion.java b/src/main/java/com/cburch/logisim/LogisimVersion.java index c69bf4b6..ab73686b 100644 --- a/src/main/java/com/cburch/logisim/LogisimVersion.java +++ b/src/main/java/com/cburch/logisim/LogisimVersion.java @@ -3,15 +3,15 @@ package com.cburch.logisim; /** - * handles everything involving Logisim's version number - * @author steinmetzr + * Handles everything involving Logisim's version number + * @author Carl Burch, Ryan Steinmetz * */ -public class LogisimVersion { +public class LogisimVersion implements Comparable { private static final int FINAL_REVISION = Integer.MAX_VALUE / 4; /** - * creates a new LogisimVersion object without a revision number + * Creates a new LogisimVersion object without a revision number * @param major * @param minor * @param release @@ -22,7 +22,7 @@ public static LogisimVersion get(int major, int minor, int release) { } /** - * creates a new LogisimVersion object with a revision number + * Creates a new LogisimVersion object with a revision number * @param major * @param minor * @param release @@ -34,8 +34,8 @@ public static LogisimVersion get(int major, int minor, int release, int revision } /** - * breaks up a single string containing the version number into several integers. - * uses "\\." as delimiter. + * Breaks up a single string containing the version number into several integers. + * Uses "." as delimiter. * @param versionString * @return a LogisimVersion object */ @@ -61,7 +61,7 @@ public static LogisimVersion parse(String versionString) { private String repr; /** - * setter for variables that make up the Logisim version number + * Logisim version number constructor. Versions have the form: major.minor.release.revision * @param major * @param minor * @param release @@ -75,23 +75,6 @@ private LogisimVersion(int major, int minor, int release, int revision) { this.repr = null; } - /** - * converts version number into a hashCode - * @return ret - */ - @Override - public int hashCode() { - int ret = major * 31 + minor; - ret = ret * 31 + release; - ret = ret * 31 + revision; - return ret; - } - - /** - * checks if 2 objects of class LogisimVersion are the same - * @param other - * @return boolean value - */ @Override public boolean equals(Object other) { if (other instanceof LogisimVersion) { @@ -103,28 +86,15 @@ public boolean equals(Object other) { } } - /** - * determines the order of 2 objects of class LogisimVersion by version number - * @param other - * @return a number not equal to 0 if objects are different or 0 if they are the same - */ + @Override public int compareTo(LogisimVersion other) { int ret = this.major - other.major; - if (ret != 0) { - return ret; - } else { - ret = this.minor - other.minor; - if (ret != 0) { - return ret; - } else { - ret = this.release - other.release; - if (ret != 0) { - return ret; - } else { - return this.revision - other.revision; - } - } - } + if (ret != 0) return ret; + ret = this.minor - other.minor; + if (ret != 0) return ret; + ret = this.release - other.release; + if (ret != 0) return ret; + return this.revision - other.revision; } /** From bac17a375c26035c31624e4ca7ceb830cf6f8721 Mon Sep 17 00:00:00 2001 From: Joey Lawrance Date: Wed, 16 Oct 2013 20:33:00 -0400 Subject: [PATCH 12/24] Why we work on this. --- README.md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2ffdd985..fde9e029 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,30 @@ # README -Logisim is a circuit simulator, [available here](http://ozark.hendrix.edu/~burch/logisim/). +Logisim is a circuit simulator, [originally available here](http://ozark.hendrix.edu/~burch/logisim/). + +## Why this fork of Logisim? +Carl Burch, the original author of Logisim, abandoned development in 2011 and moved on to a similar successor project, [Toves](http://www.toves.org/) in 2013, because Logisim's code base is in need of a major overhaul. Rather than start from scratch ([something you should never do](http://www.joelonsoftware.com/articles/fog0000000069.html)), this fork of Logisim picks up where Dr. Burch left off to improve Logisim incrementally. + +## What's wrong with Logisim? +Logisim's code itself has numerous smells. Here's an incomplete list of these: + +* No test suite! +* Undocumented packages, classes, methods +* Duplicated and dead code +* No coherent organization (it should be MVC) +* High coupling, low cohesion (it would benefit from IoC). +* Unnecessarily reimplements functionality found in standard or third party libraries (e.g., it has it's own Toolbar classes) +* Code to draw components is too low-level + +Logisim's user interface has numerous gotchas that need to be addressed. Here's some of the more important issues: + +* The file format is not merge-friendly, making it impossible for students to collaborate on circuits. +* Unreasonable defaults +* Limited interaction styles +* Single (graphical) view of circuit + +## What's right with Logisim? +It is arguably the best free tool for teaching circuit design, which is why its development must continue. ## Getting started for developers Logisim developers: Logisim uses the [Gradle build system](http://www.gradle.org), so set that up first before attempting to develop Logisim. Ensure that the gradle executable is in the system path. To build the executable for Windows, you must install [launch4j](http://launch4j.sourceforge.net/) and ensure it is on the system path. @@ -11,5 +35,4 @@ The build script recognizes the following commands: gradle eclipse # Build Eclipse configuration gradle createExe # Build logisim executable gradle run # Run logisim from gradle - gradle javadoc # Generate Javadoc From c0d41fed8b8290ae5eebf1a88619cd8c536db037 Mon Sep 17 00:00:00 2001 From: Ryan Steinmetz Date: Tue, 22 Oct 2013 19:38:31 -0400 Subject: [PATCH 13/24] deleted src/test/java/com.cburch.logisim.util --- .../logisim/instance/InstanceFactory.java | 1 + .../cburch/logisim/util/StringUtilTest.java | 18 ------------------ 2 files changed, 1 insertion(+), 18 deletions(-) delete mode 100644 src/test/java/com/cburch/logisim/util/StringUtilTest.java diff --git a/src/main/java/com/cburch/logisim/instance/InstanceFactory.java b/src/main/java/com/cburch/logisim/instance/InstanceFactory.java index 0d7555ea..191b143f 100644 --- a/src/main/java/com/cburch/logisim/instance/InstanceFactory.java +++ b/src/main/java/com/cburch/logisim/instance/InstanceFactory.java @@ -37,6 +37,7 @@ * relation between classes and instances in Java. Normally, * there is only one ComponentFactory created for any particular category. */ +@SuppressWarnings("deprecation") public abstract class InstanceFactory extends AbstractComponentFactory { private String name; private StringGetter displayName; diff --git a/src/test/java/com/cburch/logisim/util/StringUtilTest.java b/src/test/java/com/cburch/logisim/util/StringUtilTest.java deleted file mode 100644 index f2b26ea0..00000000 --- a/src/test/java/com/cburch/logisim/util/StringUtilTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.cburch.logisim.util; - -import static org.junit.Assert.*; - -import org.junit.Test; - -import com.cburch.logisim.util.StringUtil; - -public class StringUtilTest { - - @Test - public void testStringUtilFormat() { - assertEquals("Hello, Joe! How are you today?", String.format("%s, %s! %s?", "Hello", "Joe", "How are you today")); - assertEquals("Hello, null", String.format("%s, %s", "Hello", null)); - assertEquals("Hi (1 of 3)", String.format("%1$s (%2$d of %3$d)", "Hi", 1,3)); - } - -} From 66e9faa195fe55999b0e662fc338d29a9cf54e04 Mon Sep 17 00:00:00 2001 From: Mike Spallino Date: Tue, 12 Nov 2013 20:48:18 -0500 Subject: [PATCH 14/24] Converted all of the 104 icons to svg and changed the get calls to get the correct file format. --- build.gradle | 2 +- .../cburch/draw/toolbar/ToolbarButton.java | 4 +- .../com/cburch/draw/toolbar/ToolbarItem.java | 2 + .../java/com/cburch/draw/tools/CurveTool.java | 2 +- .../java/com/cburch/draw/tools/LineTool.java | 2 +- .../java/com/cburch/draw/tools/OvalTool.java | 2 +- .../java/com/cburch/draw/tools/PolyTool.java | 4 +- .../com/cburch/draw/tools/RectangleTool.java | 2 +- .../cburch/draw/tools/RoundRectangleTool.java | 2 +- .../java/com/cburch/draw/tools/SVGIcon.java | 70 +++++++++ .../com/cburch/draw/tools/SelectTool.java | 2 +- .../java/com/cburch/draw/tools/TextTool.java | 2 +- .../java/com/cburch/gray/GrayCounter.java | 2 +- .../logisim/circuit/SplitterFactory.java | 2 +- .../comp/AbstractComponentFactory.java | 2 +- .../logisim/comp/ComponentDrawContext.java | 7 +- .../cburch/logisim/gui/generic/LFrame.java | 2 +- .../com/cburch/logisim/gui/main/Canvas.java | 24 +-- .../gui/main/ExplorerToolbarModel.java | 8 +- .../logisim/gui/main/ProjectToolbarModel.java | 12 +- .../gui/main/SimulationToolbarModel.java | 12 +- .../logisim/gui/main/ToolboxToolbarModel.java | 8 +- .../com/cburch/logisim/gui/start/About.java | 16 -- .../com/cburch/logisim/std/arith/Adder.java | 2 +- .../cburch/logisim/std/arith/Arithmetic.java | 18 +-- .../cburch/logisim/std/arith/BitAdder.java | 2 +- .../cburch/logisim/std/arith/BitFinder.java | 2 +- .../cburch/logisim/std/arith/Comparator.java | 2 +- .../com/cburch/logisim/std/arith/Divider.java | 2 +- .../cburch/logisim/std/arith/Multiplier.java | 2 +- .../com/cburch/logisim/std/arith/Negator.java | 2 +- .../com/cburch/logisim/std/arith/Shifter.java | 2 +- .../cburch/logisim/std/arith/Subtractor.java | 2 +- .../com/cburch/logisim/std/base/Text.java | 2 +- .../logisim/std/gates/AbstractGate.java | 7 +- .../com/cburch/logisim/std/gates/AndGate.java | 7 +- .../com/cburch/logisim/std/gates/Buffer.java | 2 +- .../logisim/std/gates/ControlledBuffer.java | 4 +- .../logisim/std/gates/EvenParityGate.java | 2 +- .../cburch/logisim/std/gates/NandGate.java | 2 +- .../com/cburch/logisim/std/gates/NorGate.java | 4 +- .../com/cburch/logisim/std/gates/NotGate.java | 6 +- .../logisim/std/gates/OddParityGate.java | 2 +- .../com/cburch/logisim/std/gates/OrGate.java | 14 +- .../logisim/std/gates/PainterShaped.java | 6 +- .../cburch/logisim/std/gates/XnorGate.java | 2 +- .../com/cburch/logisim/std/gates/XorGate.java | 2 +- .../com/cburch/logisim/std/io/Button.java | 2 +- .../com/cburch/logisim/std/io/DotMatrix.java | 2 +- .../com/cburch/logisim/std/io/HexDigit.java | 2 +- .../java/com/cburch/logisim/std/io/Io.java | 16 +- .../com/cburch/logisim/std/io/Joystick.java | 2 +- .../com/cburch/logisim/std/io/Keyboard.java | 2 +- .../java/com/cburch/logisim/std/io/Led.java | 2 +- .../cburch/logisim/std/io/SevenSegment.java | 2 +- .../java/com/cburch/logisim/std/io/Tty.java | 2 +- .../cburch/logisim/std/memory/Counter.java | 2 +- .../cburch/logisim/std/memory/DFlipFlop.java | 2 +- .../cburch/logisim/std/memory/JKFlipFlop.java | 2 +- .../com/cburch/logisim/std/memory/Memory.java | 20 +-- .../com/cburch/logisim/std/memory/Ram.java | 2 +- .../com/cburch/logisim/std/memory/Random.java | 2 +- .../cburch/logisim/std/memory/Register.java | 2 +- .../com/cburch/logisim/std/memory/Rom.java | 2 +- .../cburch/logisim/std/memory/SRFlipFlop.java | 2 +- .../logisim/std/memory/ShiftRegister.java | 2 +- .../cburch/logisim/std/memory/TFlipFlop.java | 2 +- .../logisim/std/plexers/BitSelector.java | 2 +- .../cburch/logisim/std/plexers/Decoder.java | 2 +- .../logisim/std/plexers/Demultiplexer.java | 2 +- .../logisim/std/plexers/Multiplexer.java | 2 +- .../cburch/logisim/std/plexers/Plexers.java | 10 +- .../logisim/std/plexers/PriorityEncoder.java | 2 +- .../logisim/std/wiring/BitExtender.java | 2 +- .../com/cburch/logisim/std/wiring/Clock.java | 2 +- .../com/cburch/logisim/std/wiring/Ground.java | 2 +- .../com/cburch/logisim/std/wiring/Pin.java | 4 +- .../com/cburch/logisim/std/wiring/Power.java | 2 +- .../com/cburch/logisim/std/wiring/Probe.java | 2 +- .../logisim/std/wiring/PullResistor.java | 4 +- .../cburch/logisim/std/wiring/Transistor.java | 4 +- .../logisim/std/wiring/TransmissionGate.java | 2 +- .../com/cburch/logisim/std/wiring/Tunnel.java | 2 +- .../com/cburch/logisim/std/wiring/Wiring.java | 10 +- .../com/cburch/logisim/tools/PokeTool.java | 2 +- .../com/cburch/logisim/tools/SelectTool.java | 2 +- .../com/cburch/logisim/tools/WiringTool.java | 2 +- .../java/com/cburch/logisim/util/Icons.java | 8 +- src/main/resources/logisim/icons/7seg.gif | Bin 125 -> 0 bytes src/main/resources/logisim/icons/7seg.svg | 143 ++++++++++++++++++ src/main/resources/logisim/icons/adder.gif | Bin 285 -> 0 bytes src/main/resources/logisim/icons/adder.svg | 68 +++++++++ src/main/resources/logisim/icons/andGate.gif | Bin 892 -> 0 bytes src/main/resources/logisim/icons/andGate.svg | 62 ++++++++ .../resources/logisim/icons/andGateRect.gif | Bin 180 -> 0 bytes .../resources/logisim/icons/andGateRect.svg | 74 +++++++++ .../resources/logisim/icons/bitSelector.gif | Bin 167 -> 0 bytes .../resources/logisim/icons/bitSelector.svg | 77 ++++++++++ src/main/resources/logisim/icons/bitadder.gif | Bin 97 -> 0 bytes src/main/resources/logisim/icons/bitadder.svg | 83 ++++++++++ src/main/resources/logisim/icons/bitfindr.gif | Bin 144 -> 0 bytes src/main/resources/logisim/icons/bitfindr.svg | 74 +++++++++ .../resources/logisim/icons/bufferGate.gif | Bin 896 -> 0 bytes .../resources/logisim/icons/bufferGate.svg | 61 ++++++++ src/main/resources/logisim/icons/button.gif | Bin 146 -> 0 bytes src/main/resources/logisim/icons/button.svg | 75 +++++++++ src/main/resources/logisim/icons/clock.gif | Bin 115 -> 0 bytes src/main/resources/logisim/icons/clock.svg | 78 ++++++++++ .../resources/logisim/icons/comparator.gif | Bin 886 -> 0 bytes .../resources/logisim/icons/comparator.svg | 75 +++++++++ src/main/resources/logisim/icons/constant.gif | Bin 92 -> 0 bytes src/main/resources/logisim/icons/constant.svg | 79 ++++++++++ .../logisim/icons/controlledBuffer.gif | Bin 132 -> 0 bytes .../logisim/icons/controlledBuffer.svg | 68 +++++++++ .../logisim/icons/controlledInverter.gif | Bin 136 -> 0 bytes .../logisim/icons/controlledInverter.svg | 78 ++++++++++ src/main/resources/logisim/icons/counter.gif | Bin 104 -> 0 bytes src/main/resources/logisim/icons/counter.svg | 136 +++++++++++++++++ .../resources/logisim/icons/dFlipFlop.gif | Bin 98 -> 0 bytes .../resources/logisim/icons/dFlipFlop.svg | 74 +++++++++ src/main/resources/logisim/icons/decoder.gif | Bin 146 -> 0 bytes src/main/resources/logisim/icons/decoder.svg | 87 +++++++++++ .../resources/logisim/icons/demultiplexer.gif | Bin 150 -> 0 bytes .../resources/logisim/icons/demultiplexer.svg | 92 +++++++++++ src/main/resources/logisim/icons/dff.gif | Bin 222 -> 0 bytes src/main/resources/logisim/icons/dff.svg | 80 ++++++++++ .../resources/logisim/icons/dinAndGate.gif | Bin 890 -> 0 bytes .../resources/logisim/icons/dinAndGate.svg | 77 ++++++++++ .../resources/logisim/icons/dinNandGate.gif | Bin 890 -> 0 bytes .../resources/logisim/icons/dinNandGate.svg | 87 +++++++++++ .../resources/logisim/icons/dinNorGate.gif | Bin 889 -> 0 bytes .../resources/logisim/icons/dinNorGate.svg | 87 +++++++++++ .../resources/logisim/icons/dinNotGate.gif | Bin 889 -> 0 bytes .../resources/logisim/icons/dinNotGate.svg | 82 ++++++++++ .../resources/logisim/icons/dinOrGate.gif | Bin 889 -> 0 bytes .../resources/logisim/icons/dinOrGate.svg | 77 ++++++++++ .../resources/logisim/icons/dinXnorGate.gif | Bin 895 -> 0 bytes .../resources/logisim/icons/dinXnorGate.svg | 92 +++++++++++ .../resources/logisim/icons/dinXorGate.gif | Bin 898 -> 0 bytes .../resources/logisim/icons/dinXorGate.svg | 102 +++++++++++++ src/main/resources/logisim/icons/divider.gif | Bin 879 -> 0 bytes src/main/resources/logisim/icons/divider.svg | 78 ++++++++++ src/main/resources/logisim/icons/dotmat.gif | Bin 122 -> 0 bytes src/main/resources/logisim/icons/dotmat.svg | 133 ++++++++++++++++ src/main/resources/logisim/icons/drawarc.gif | Bin 87 -> 0 bytes src/main/resources/logisim/icons/drawarc.svg | 62 ++++++++ src/main/resources/logisim/icons/drawcurv.gif | Bin 76 -> 0 bytes src/main/resources/logisim/icons/drawcurv.svg | 62 ++++++++ src/main/resources/logisim/icons/drawline.gif | Bin 61 -> 0 bytes src/main/resources/logisim/icons/drawline.svg | 61 ++++++++ src/main/resources/logisim/icons/drawoval.gif | Bin 155 -> 0 bytes src/main/resources/logisim/icons/drawoval.svg | 66 ++++++++ src/main/resources/logisim/icons/drawpin.gif | Bin 130 -> 0 bytes src/main/resources/logisim/icons/drawpin.svg | 72 +++++++++ src/main/resources/logisim/icons/drawplin.gif | Bin 103 -> 0 bytes src/main/resources/logisim/icons/drawplin.svg | 67 ++++++++ src/main/resources/logisim/icons/drawpoly.gif | Bin 151 -> 0 bytes src/main/resources/logisim/icons/drawpoly.svg | 73 +++++++++ src/main/resources/logisim/icons/drawrect.gif | Bin 145 -> 0 bytes src/main/resources/logisim/icons/drawrect.svg | 63 ++++++++ src/main/resources/logisim/icons/drawrrct.gif | Bin 159 -> 0 bytes src/main/resources/logisim/icons/drawrrct.svg | 62 ++++++++ src/main/resources/logisim/icons/extender.gif | Bin 85 -> 0 bytes src/main/resources/logisim/icons/extender.svg | 63 ++++++++ src/main/resources/logisim/icons/ground.gif | Bin 70 -> 0 bytes src/main/resources/logisim/icons/ground.svg | 72 +++++++++ src/main/resources/logisim/icons/hexdig.gif | Bin 122 -> 0 bytes src/main/resources/logisim/icons/hexdig.svg | 113 ++++++++++++++ .../resources/logisim/icons/jkFlipFlop.gif | Bin 101 -> 0 bytes .../resources/logisim/icons/jkFlipFlop.svg | 74 +++++++++ src/main/resources/logisim/icons/joystick.gif | Bin 214 -> 0 bytes src/main/resources/logisim/icons/joystick.svg | 87 +++++++++++ src/main/resources/logisim/icons/keyboard.gif | Bin 238 -> 0 bytes src/main/resources/logisim/icons/keyboard.svg | 73 +++++++++ src/main/resources/logisim/icons/led.gif | Bin 126 -> 0 bytes src/main/resources/logisim/icons/led.svg | 76 ++++++++++ src/main/resources/logisim/icons/menu.gif | Bin 111 -> 0 bytes src/main/resources/logisim/icons/menu.svg | 130 ++++++++++++++++ .../resources/logisim/icons/multiplexer.gif | Bin 149 -> 0 bytes .../resources/logisim/icons/multiplexer.svg | 92 +++++++++++ .../resources/logisim/icons/multiplier.gif | Bin 917 -> 0 bytes .../resources/logisim/icons/multiplier.svg | 83 ++++++++++ src/main/resources/logisim/icons/nandGate.gif | Bin 900 -> 0 bytes src/main/resources/logisim/icons/nandGate.svg | 73 +++++++++ .../resources/logisim/icons/nandGateRect.gif | Bin 186 -> 0 bytes .../resources/logisim/icons/nandGateRect.svg | 84 ++++++++++ src/main/resources/logisim/icons/negator.gif | Bin 887 -> 0 bytes src/main/resources/logisim/icons/negator.svg | 85 +++++++++++ src/main/resources/logisim/icons/norGate.gif | Bin 902 -> 0 bytes src/main/resources/logisim/icons/norGate.svg | 72 +++++++++ .../resources/logisim/icons/norGateRect.gif | Bin 179 -> 0 bytes .../resources/logisim/icons/norGateRect.svg | 89 +++++++++++ src/main/resources/logisim/icons/notGate.gif | Bin 879 -> 0 bytes src/main/resources/logisim/icons/notGate.svg | 72 +++++++++ .../resources/logisim/icons/notGateRect.gif | Bin 115 -> 0 bytes .../resources/logisim/icons/notGateRect.svg | 84 ++++++++++ src/main/resources/logisim/icons/orGate.gif | Bin 895 -> 0 bytes src/main/resources/logisim/icons/orGate.svg | 62 ++++++++ .../resources/logisim/icons/orGateRect.gif | Bin 174 -> 0 bytes .../resources/logisim/icons/orGateRect.svg | 79 ++++++++++ .../logisim/icons/parityEvenGate.gif | Bin 936 -> 0 bytes .../logisim/icons/parityEvenGate.svg | 74 +++++++++ .../resources/logisim/icons/parityOddGate.gif | Bin 951 -> 0 bytes .../resources/logisim/icons/parityOddGate.svg | 85 +++++++++++ src/main/resources/logisim/icons/pinInput.gif | Bin 151 -> 0 bytes src/main/resources/logisim/icons/pinInput.svg | 83 ++++++++++ .../resources/logisim/icons/pinOutput.gif | Bin 152 -> 0 bytes .../resources/logisim/icons/pinOutput.svg | 86 +++++++++++ .../logisim/icons/pinOutputReversed.gif | Bin 152 -> 0 bytes .../logisim/icons/pinOutputReversed.svg | 86 +++++++++++ src/main/resources/logisim/icons/poke.gif | Bin 145 -> 0 bytes src/main/resources/logisim/icons/poke.svg | 63 ++++++++ src/main/resources/logisim/icons/power.gif | Bin 87 -> 0 bytes src/main/resources/logisim/icons/power.svg | 62 ++++++++ src/main/resources/logisim/icons/priencod.gif | Bin 95 -> 0 bytes src/main/resources/logisim/icons/priencod.svg | 75 +++++++++ src/main/resources/logisim/icons/probe.gif | Bin 139 -> 0 bytes src/main/resources/logisim/icons/probe.svg | 76 ++++++++++ src/main/resources/logisim/icons/projadd.gif | Bin 85 -> 0 bytes src/main/resources/logisim/icons/projadd.svg | 73 +++++++++ src/main/resources/logisim/icons/projapp.gif | Bin 116 -> 0 bytes src/main/resources/logisim/icons/projapp.svg | 99 ++++++++++++ src/main/resources/logisim/icons/projdel.gif | Bin 85 -> 0 bytes src/main/resources/logisim/icons/projdel.svg | 68 +++++++++ src/main/resources/logisim/icons/projdown.gif | Bin 83 -> 0 bytes src/main/resources/logisim/icons/projdown.svg | 62 ++++++++ src/main/resources/logisim/icons/projlayo.gif | Bin 110 -> 0 bytes src/main/resources/logisim/icons/projlayo.svg | 134 ++++++++++++++++ src/main/resources/logisim/icons/projsim.gif | Bin 120 -> 0 bytes src/main/resources/logisim/icons/projsim.svg | 136 +++++++++++++++++ src/main/resources/logisim/icons/projtool.gif | Bin 90 -> 0 bytes src/main/resources/logisim/icons/projtool.svg | 96 ++++++++++++ src/main/resources/logisim/icons/projup.gif | Bin 83 -> 0 bytes src/main/resources/logisim/icons/projup.svg | 62 ++++++++ src/main/resources/logisim/icons/pullrect.gif | Bin 83 -> 0 bytes src/main/resources/logisim/icons/pullrect.svg | 80 ++++++++++ src/main/resources/logisim/icons/pullshap.gif | Bin 70 -> 0 bytes src/main/resources/logisim/icons/pullshap.svg | 72 +++++++++ src/main/resources/logisim/icons/ram.gif | Bin 94 -> 0 bytes src/main/resources/logisim/icons/ram.svg | 76 ++++++++++ src/main/resources/logisim/icons/random.gif | Bin 242 -> 0 bytes src/main/resources/logisim/icons/random.svg | 107 +++++++++++++ src/main/resources/logisim/icons/register.gif | Bin 126 -> 0 bytes src/main/resources/logisim/icons/register.svg | 105 +++++++++++++ src/main/resources/logisim/icons/rom.gif | Bin 95 -> 0 bytes src/main/resources/logisim/icons/rom.svg | 76 ++++++++++ src/main/resources/logisim/icons/select.gif | Bin 94 -> 0 bytes src/main/resources/logisim/icons/select.svg | 64 ++++++++ src/main/resources/logisim/icons/shifter.gif | Bin 97 -> 0 bytes src/main/resources/logisim/icons/shifter.svg | 73 +++++++++ src/main/resources/logisim/icons/shiftreg.gif | Bin 97 -> 0 bytes src/main/resources/logisim/icons/shiftreg.svg | 84 ++++++++++ src/main/resources/logisim/icons/simplay.png | Bin 834 -> 0 bytes src/main/resources/logisim/icons/simplay.svg | 74 +++++++++ src/main/resources/logisim/icons/simstep.png | Bin 792 -> 0 bytes src/main/resources/logisim/icons/simstep.svg | 79 ++++++++++ src/main/resources/logisim/icons/simstop.png | Bin 804 -> 0 bytes src/main/resources/logisim/icons/simstop.svg | 78 ++++++++++ src/main/resources/logisim/icons/simtplay.png | Bin 844 -> 0 bytes src/main/resources/logisim/icons/simtplay.svg | 96 ++++++++++++ src/main/resources/logisim/icons/simtstep.png | Bin 853 -> 0 bytes src/main/resources/logisim/icons/simtstep.svg | 102 +++++++++++++ src/main/resources/logisim/icons/simtstop.png | Bin 821 -> 0 bytes src/main/resources/logisim/icons/simtstop.svg | 100 ++++++++++++ src/main/resources/logisim/icons/splitter.gif | Bin 98 -> 0 bytes src/main/resources/logisim/icons/splitter.svg | 84 ++++++++++ .../resources/logisim/icons/srFlipFlop.gif | Bin 105 -> 0 bytes .../resources/logisim/icons/srFlipFlop.svg | 77 ++++++++++ src/main/resources/logisim/icons/subcirc.gif | Bin 302 -> 0 bytes src/main/resources/logisim/icons/subcirc.svg | 125 +++++++++++++++ .../resources/logisim/icons/subtractor.gif | Bin 280 -> 0 bytes .../resources/logisim/icons/subtractor.svg | 77 ++++++++++ .../resources/logisim/icons/tFlipFlop.gif | Bin 97 -> 0 bytes .../resources/logisim/icons/tFlipFlop.svg | 77 ++++++++++ src/main/resources/logisim/icons/text.gif | Bin 145 -> 0 bytes src/main/resources/logisim/icons/text.svg | 69 +++++++++ src/main/resources/logisim/icons/trans0.gif | Bin 75 -> 0 bytes src/main/resources/logisim/icons/trans0.svg | 70 +++++++++ src/main/resources/logisim/icons/trans1.gif | Bin 75 -> 0 bytes src/main/resources/logisim/icons/trans1.svg | 76 ++++++++++ src/main/resources/logisim/icons/transmis.gif | Bin 76 -> 0 bytes src/main/resources/logisim/icons/transmis.svg | 86 +++++++++++ src/main/resources/logisim/icons/tty.gif | Bin 113 -> 0 bytes src/main/resources/logisim/icons/tty.svg | 76 ++++++++++ src/main/resources/logisim/icons/tunnel.gif | Bin 120 -> 0 bytes src/main/resources/logisim/icons/tunnel.svg | 64 ++++++++ src/main/resources/logisim/icons/wiring.gif | Bin 87 -> 0 bytes src/main/resources/logisim/icons/wiring.svg | 84 ++++++++++ src/main/resources/logisim/icons/xnorGate.gif | Bin 909 -> 0 bytes src/main/resources/logisim/icons/xnorGate.svg | 80 ++++++++++ .../resources/logisim/icons/xnorGateRect.gif | Bin 122 -> 0 bytes .../resources/logisim/icons/xnorGateRect.svg | 86 +++++++++++ src/main/resources/logisim/icons/xorGate.gif | Bin 906 -> 0 bytes src/main/resources/logisim/icons/xorGate.svg | 70 +++++++++ .../resources/logisim/icons/xorGateRect.gif | Bin 117 -> 0 bytes .../resources/logisim/icons/xorGateRect.svg | 76 ++++++++++ 296 files changed, 8741 insertions(+), 183 deletions(-) create mode 100644 src/main/java/com/cburch/draw/tools/SVGIcon.java delete mode 100644 src/main/resources/logisim/icons/7seg.gif create mode 100644 src/main/resources/logisim/icons/7seg.svg delete mode 100644 src/main/resources/logisim/icons/adder.gif create mode 100644 src/main/resources/logisim/icons/adder.svg delete mode 100644 src/main/resources/logisim/icons/andGate.gif create mode 100644 src/main/resources/logisim/icons/andGate.svg delete mode 100644 src/main/resources/logisim/icons/andGateRect.gif create mode 100644 src/main/resources/logisim/icons/andGateRect.svg delete mode 100644 src/main/resources/logisim/icons/bitSelector.gif create mode 100644 src/main/resources/logisim/icons/bitSelector.svg delete mode 100644 src/main/resources/logisim/icons/bitadder.gif create mode 100644 src/main/resources/logisim/icons/bitadder.svg delete mode 100644 src/main/resources/logisim/icons/bitfindr.gif create mode 100644 src/main/resources/logisim/icons/bitfindr.svg delete mode 100644 src/main/resources/logisim/icons/bufferGate.gif create mode 100644 src/main/resources/logisim/icons/bufferGate.svg delete mode 100644 src/main/resources/logisim/icons/button.gif create mode 100644 src/main/resources/logisim/icons/button.svg delete mode 100644 src/main/resources/logisim/icons/clock.gif create mode 100644 src/main/resources/logisim/icons/clock.svg delete mode 100644 src/main/resources/logisim/icons/comparator.gif create mode 100644 src/main/resources/logisim/icons/comparator.svg delete mode 100644 src/main/resources/logisim/icons/constant.gif create mode 100644 src/main/resources/logisim/icons/constant.svg delete mode 100644 src/main/resources/logisim/icons/controlledBuffer.gif create mode 100644 src/main/resources/logisim/icons/controlledBuffer.svg delete mode 100644 src/main/resources/logisim/icons/controlledInverter.gif create mode 100644 src/main/resources/logisim/icons/controlledInverter.svg delete mode 100644 src/main/resources/logisim/icons/counter.gif create mode 100644 src/main/resources/logisim/icons/counter.svg delete mode 100644 src/main/resources/logisim/icons/dFlipFlop.gif create mode 100644 src/main/resources/logisim/icons/dFlipFlop.svg delete mode 100644 src/main/resources/logisim/icons/decoder.gif create mode 100644 src/main/resources/logisim/icons/decoder.svg delete mode 100644 src/main/resources/logisim/icons/demultiplexer.gif create mode 100644 src/main/resources/logisim/icons/demultiplexer.svg delete mode 100644 src/main/resources/logisim/icons/dff.gif create mode 100644 src/main/resources/logisim/icons/dff.svg delete mode 100644 src/main/resources/logisim/icons/dinAndGate.gif create mode 100644 src/main/resources/logisim/icons/dinAndGate.svg delete mode 100644 src/main/resources/logisim/icons/dinNandGate.gif create mode 100644 src/main/resources/logisim/icons/dinNandGate.svg delete mode 100644 src/main/resources/logisim/icons/dinNorGate.gif create mode 100644 src/main/resources/logisim/icons/dinNorGate.svg delete mode 100644 src/main/resources/logisim/icons/dinNotGate.gif create mode 100644 src/main/resources/logisim/icons/dinNotGate.svg delete mode 100644 src/main/resources/logisim/icons/dinOrGate.gif create mode 100644 src/main/resources/logisim/icons/dinOrGate.svg delete mode 100644 src/main/resources/logisim/icons/dinXnorGate.gif create mode 100644 src/main/resources/logisim/icons/dinXnorGate.svg delete mode 100644 src/main/resources/logisim/icons/dinXorGate.gif create mode 100644 src/main/resources/logisim/icons/dinXorGate.svg delete mode 100644 src/main/resources/logisim/icons/divider.gif create mode 100644 src/main/resources/logisim/icons/divider.svg delete mode 100644 src/main/resources/logisim/icons/dotmat.gif create mode 100644 src/main/resources/logisim/icons/dotmat.svg delete mode 100644 src/main/resources/logisim/icons/drawarc.gif create mode 100644 src/main/resources/logisim/icons/drawarc.svg delete mode 100644 src/main/resources/logisim/icons/drawcurv.gif create mode 100644 src/main/resources/logisim/icons/drawcurv.svg delete mode 100644 src/main/resources/logisim/icons/drawline.gif create mode 100644 src/main/resources/logisim/icons/drawline.svg delete mode 100644 src/main/resources/logisim/icons/drawoval.gif create mode 100644 src/main/resources/logisim/icons/drawoval.svg delete mode 100644 src/main/resources/logisim/icons/drawpin.gif create mode 100644 src/main/resources/logisim/icons/drawpin.svg delete mode 100644 src/main/resources/logisim/icons/drawplin.gif create mode 100644 src/main/resources/logisim/icons/drawplin.svg delete mode 100644 src/main/resources/logisim/icons/drawpoly.gif create mode 100644 src/main/resources/logisim/icons/drawpoly.svg delete mode 100644 src/main/resources/logisim/icons/drawrect.gif create mode 100644 src/main/resources/logisim/icons/drawrect.svg delete mode 100644 src/main/resources/logisim/icons/drawrrct.gif create mode 100644 src/main/resources/logisim/icons/drawrrct.svg delete mode 100644 src/main/resources/logisim/icons/extender.gif create mode 100644 src/main/resources/logisim/icons/extender.svg delete mode 100644 src/main/resources/logisim/icons/ground.gif create mode 100644 src/main/resources/logisim/icons/ground.svg delete mode 100644 src/main/resources/logisim/icons/hexdig.gif create mode 100644 src/main/resources/logisim/icons/hexdig.svg delete mode 100644 src/main/resources/logisim/icons/jkFlipFlop.gif create mode 100644 src/main/resources/logisim/icons/jkFlipFlop.svg delete mode 100644 src/main/resources/logisim/icons/joystick.gif create mode 100644 src/main/resources/logisim/icons/joystick.svg delete mode 100644 src/main/resources/logisim/icons/keyboard.gif create mode 100644 src/main/resources/logisim/icons/keyboard.svg delete mode 100644 src/main/resources/logisim/icons/led.gif create mode 100644 src/main/resources/logisim/icons/led.svg delete mode 100644 src/main/resources/logisim/icons/menu.gif create mode 100644 src/main/resources/logisim/icons/menu.svg delete mode 100644 src/main/resources/logisim/icons/multiplexer.gif create mode 100644 src/main/resources/logisim/icons/multiplexer.svg delete mode 100644 src/main/resources/logisim/icons/multiplier.gif create mode 100644 src/main/resources/logisim/icons/multiplier.svg delete mode 100644 src/main/resources/logisim/icons/nandGate.gif create mode 100644 src/main/resources/logisim/icons/nandGate.svg delete mode 100644 src/main/resources/logisim/icons/nandGateRect.gif create mode 100644 src/main/resources/logisim/icons/nandGateRect.svg delete mode 100644 src/main/resources/logisim/icons/negator.gif create mode 100644 src/main/resources/logisim/icons/negator.svg delete mode 100644 src/main/resources/logisim/icons/norGate.gif create mode 100644 src/main/resources/logisim/icons/norGate.svg delete mode 100644 src/main/resources/logisim/icons/norGateRect.gif create mode 100644 src/main/resources/logisim/icons/norGateRect.svg delete mode 100644 src/main/resources/logisim/icons/notGate.gif create mode 100644 src/main/resources/logisim/icons/notGate.svg delete mode 100644 src/main/resources/logisim/icons/notGateRect.gif create mode 100644 src/main/resources/logisim/icons/notGateRect.svg delete mode 100644 src/main/resources/logisim/icons/orGate.gif create mode 100644 src/main/resources/logisim/icons/orGate.svg delete mode 100644 src/main/resources/logisim/icons/orGateRect.gif create mode 100644 src/main/resources/logisim/icons/orGateRect.svg delete mode 100644 src/main/resources/logisim/icons/parityEvenGate.gif create mode 100644 src/main/resources/logisim/icons/parityEvenGate.svg delete mode 100644 src/main/resources/logisim/icons/parityOddGate.gif create mode 100644 src/main/resources/logisim/icons/parityOddGate.svg delete mode 100644 src/main/resources/logisim/icons/pinInput.gif create mode 100644 src/main/resources/logisim/icons/pinInput.svg delete mode 100644 src/main/resources/logisim/icons/pinOutput.gif create mode 100644 src/main/resources/logisim/icons/pinOutput.svg delete mode 100644 src/main/resources/logisim/icons/pinOutputReversed.gif create mode 100644 src/main/resources/logisim/icons/pinOutputReversed.svg delete mode 100644 src/main/resources/logisim/icons/poke.gif create mode 100644 src/main/resources/logisim/icons/poke.svg delete mode 100644 src/main/resources/logisim/icons/power.gif create mode 100644 src/main/resources/logisim/icons/power.svg delete mode 100644 src/main/resources/logisim/icons/priencod.gif create mode 100644 src/main/resources/logisim/icons/priencod.svg delete mode 100644 src/main/resources/logisim/icons/probe.gif create mode 100644 src/main/resources/logisim/icons/probe.svg delete mode 100644 src/main/resources/logisim/icons/projadd.gif create mode 100644 src/main/resources/logisim/icons/projadd.svg delete mode 100644 src/main/resources/logisim/icons/projapp.gif create mode 100644 src/main/resources/logisim/icons/projapp.svg delete mode 100644 src/main/resources/logisim/icons/projdel.gif create mode 100644 src/main/resources/logisim/icons/projdel.svg delete mode 100644 src/main/resources/logisim/icons/projdown.gif create mode 100644 src/main/resources/logisim/icons/projdown.svg delete mode 100644 src/main/resources/logisim/icons/projlayo.gif create mode 100644 src/main/resources/logisim/icons/projlayo.svg delete mode 100644 src/main/resources/logisim/icons/projsim.gif create mode 100644 src/main/resources/logisim/icons/projsim.svg delete mode 100644 src/main/resources/logisim/icons/projtool.gif create mode 100644 src/main/resources/logisim/icons/projtool.svg delete mode 100644 src/main/resources/logisim/icons/projup.gif create mode 100644 src/main/resources/logisim/icons/projup.svg delete mode 100644 src/main/resources/logisim/icons/pullrect.gif create mode 100644 src/main/resources/logisim/icons/pullrect.svg delete mode 100644 src/main/resources/logisim/icons/pullshap.gif create mode 100644 src/main/resources/logisim/icons/pullshap.svg delete mode 100644 src/main/resources/logisim/icons/ram.gif create mode 100644 src/main/resources/logisim/icons/ram.svg delete mode 100644 src/main/resources/logisim/icons/random.gif create mode 100644 src/main/resources/logisim/icons/random.svg delete mode 100644 src/main/resources/logisim/icons/register.gif create mode 100644 src/main/resources/logisim/icons/register.svg delete mode 100644 src/main/resources/logisim/icons/rom.gif create mode 100644 src/main/resources/logisim/icons/rom.svg delete mode 100644 src/main/resources/logisim/icons/select.gif create mode 100644 src/main/resources/logisim/icons/select.svg delete mode 100644 src/main/resources/logisim/icons/shifter.gif create mode 100644 src/main/resources/logisim/icons/shifter.svg delete mode 100644 src/main/resources/logisim/icons/shiftreg.gif create mode 100644 src/main/resources/logisim/icons/shiftreg.svg delete mode 100644 src/main/resources/logisim/icons/simplay.png create mode 100644 src/main/resources/logisim/icons/simplay.svg delete mode 100644 src/main/resources/logisim/icons/simstep.png create mode 100644 src/main/resources/logisim/icons/simstep.svg delete mode 100644 src/main/resources/logisim/icons/simstop.png create mode 100644 src/main/resources/logisim/icons/simstop.svg delete mode 100644 src/main/resources/logisim/icons/simtplay.png create mode 100644 src/main/resources/logisim/icons/simtplay.svg delete mode 100644 src/main/resources/logisim/icons/simtstep.png create mode 100644 src/main/resources/logisim/icons/simtstep.svg delete mode 100644 src/main/resources/logisim/icons/simtstop.png create mode 100644 src/main/resources/logisim/icons/simtstop.svg delete mode 100644 src/main/resources/logisim/icons/splitter.gif create mode 100644 src/main/resources/logisim/icons/splitter.svg delete mode 100644 src/main/resources/logisim/icons/srFlipFlop.gif create mode 100644 src/main/resources/logisim/icons/srFlipFlop.svg delete mode 100644 src/main/resources/logisim/icons/subcirc.gif create mode 100644 src/main/resources/logisim/icons/subcirc.svg delete mode 100644 src/main/resources/logisim/icons/subtractor.gif create mode 100644 src/main/resources/logisim/icons/subtractor.svg delete mode 100644 src/main/resources/logisim/icons/tFlipFlop.gif create mode 100644 src/main/resources/logisim/icons/tFlipFlop.svg delete mode 100644 src/main/resources/logisim/icons/text.gif create mode 100644 src/main/resources/logisim/icons/text.svg delete mode 100644 src/main/resources/logisim/icons/trans0.gif create mode 100644 src/main/resources/logisim/icons/trans0.svg delete mode 100644 src/main/resources/logisim/icons/trans1.gif create mode 100644 src/main/resources/logisim/icons/trans1.svg delete mode 100644 src/main/resources/logisim/icons/transmis.gif create mode 100644 src/main/resources/logisim/icons/transmis.svg delete mode 100644 src/main/resources/logisim/icons/tty.gif create mode 100644 src/main/resources/logisim/icons/tty.svg delete mode 100644 src/main/resources/logisim/icons/tunnel.gif create mode 100644 src/main/resources/logisim/icons/tunnel.svg delete mode 100644 src/main/resources/logisim/icons/wiring.gif create mode 100644 src/main/resources/logisim/icons/wiring.svg delete mode 100644 src/main/resources/logisim/icons/xnorGate.gif create mode 100644 src/main/resources/logisim/icons/xnorGate.svg delete mode 100644 src/main/resources/logisim/icons/xnorGateRect.gif create mode 100644 src/main/resources/logisim/icons/xnorGateRect.svg delete mode 100644 src/main/resources/logisim/icons/xorGate.gif create mode 100644 src/main/resources/logisim/icons/xorGate.svg delete mode 100644 src/main/resources/logisim/icons/xorGateRect.gif create mode 100644 src/main/resources/logisim/icons/xorGateRect.svg diff --git a/build.gradle b/build.gradle index 093ed517..e21bcb40 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ repositories { } dependencies { - compile 'javax.help:javahelp:2.0.05', 'com.connectina.swing:fontchooser:1.0', 'org.apache.commons:commons-lang3:3.1', 'net.sourceforge.collections:collections-generic:4.01', 'org.apache.xmlgraphics:batik-svggen:1.7', 'org.apache.xmlgraphics:batik-swing:1.7', fileTree(dir: 'libs', include: '*.jar') + compile 'javax.help:javahelp:2.0.05', 'com.connectina.swing:fontchooser:1.0', 'org.apache.commons:commons-lang3:3.1', 'net.sourceforge.collections:collections-generic:4.01', 'org.apache.xmlgraphics:batik-svggen:1.7', 'org.apache.xmlgraphics:batik-swing:1.7', 'org.apache.xmlgraphics:batik-transcoder:1.7', fileTree(dir: 'libs', include: '*.jar') testCompile 'junit:junit:4.11' } diff --git a/src/main/java/com/cburch/draw/toolbar/ToolbarButton.java b/src/main/java/com/cburch/draw/toolbar/ToolbarButton.java index 04a98a98..85ea93b0 100644 --- a/src/main/java/com/cburch/draw/toolbar/ToolbarButton.java +++ b/src/main/java/com/cburch/draw/toolbar/ToolbarButton.java @@ -11,6 +11,8 @@ import javax.swing.JComponent; +import org.apache.batik.swing.JSVGCanvas; + import com.cburch.logisim.util.GraphicsUtil; class ToolbarButton extends JComponent implements MouseListener { @@ -58,7 +60,7 @@ public void paintComponent(Graphics g) { Graphics g2 = g.create(); g2.translate(BORDER, BORDER); - item.paintIcon(ToolbarButton.this, g2); + item.paintIcon(this, g2); g2.dispose(); // draw selection indicator diff --git a/src/main/java/com/cburch/draw/toolbar/ToolbarItem.java b/src/main/java/com/cburch/draw/toolbar/ToolbarItem.java index 4376add5..8ba03428 100644 --- a/src/main/java/com/cburch/draw/toolbar/ToolbarItem.java +++ b/src/main/java/com/cburch/draw/toolbar/ToolbarItem.java @@ -7,6 +7,8 @@ import java.awt.Dimension; import java.awt.Graphics; +import javax.swing.JPanel; + public interface ToolbarItem { public boolean isSelectable(); public void paintIcon(Component destination, Graphics g); diff --git a/src/main/java/com/cburch/draw/tools/CurveTool.java b/src/main/java/com/cburch/draw/tools/CurveTool.java index 141c3fe1..4184c2f0 100644 --- a/src/main/java/com/cburch/draw/tools/CurveTool.java +++ b/src/main/java/com/cburch/draw/tools/CurveTool.java @@ -47,7 +47,7 @@ public CurveTool(DrawingAttributeSet attrs) { @Override public Icon getIcon() { - return Icons.getIcon("drawcurv.gif"); + return Icons.getIcon("drawcurv.svg"); } @Override diff --git a/src/main/java/com/cburch/draw/tools/LineTool.java b/src/main/java/com/cburch/draw/tools/LineTool.java index 60c499d3..9f88dabe 100644 --- a/src/main/java/com/cburch/draw/tools/LineTool.java +++ b/src/main/java/com/cburch/draw/tools/LineTool.java @@ -42,7 +42,7 @@ public LineTool(DrawingAttributeSet attrs) { @Override public Icon getIcon() { - return Icons.getIcon("drawline.gif"); + return Icons.getIcon("drawline.svg"); } @Override diff --git a/src/main/java/com/cburch/draw/tools/OvalTool.java b/src/main/java/com/cburch/draw/tools/OvalTool.java index 69ae7442..c8e940b4 100644 --- a/src/main/java/com/cburch/draw/tools/OvalTool.java +++ b/src/main/java/com/cburch/draw/tools/OvalTool.java @@ -23,7 +23,7 @@ public OvalTool(DrawingAttributeSet attrs) { @Override public Icon getIcon() { - return Icons.getIcon("drawoval.gif"); + return Icons.getIcon("drawoval.svg"); } @Override diff --git a/src/main/java/com/cburch/draw/tools/PolyTool.java b/src/main/java/com/cburch/draw/tools/PolyTool.java index 3c3cce09..73eb6027 100644 --- a/src/main/java/com/cburch/draw/tools/PolyTool.java +++ b/src/main/java/com/cburch/draw/tools/PolyTool.java @@ -47,9 +47,9 @@ public PolyTool(boolean closed, DrawingAttributeSet attrs) { @Override public Icon getIcon() { if (closed) { - return Icons.getIcon("drawpoly.gif"); + return Icons.getIcon("drawpoly.svg"); } else { - return Icons.getIcon("drawplin.gif"); + return Icons.getIcon("drawplin.svg"); } } diff --git a/src/main/java/com/cburch/draw/tools/RectangleTool.java b/src/main/java/com/cburch/draw/tools/RectangleTool.java index 789d0568..01484ed2 100644 --- a/src/main/java/com/cburch/draw/tools/RectangleTool.java +++ b/src/main/java/com/cburch/draw/tools/RectangleTool.java @@ -23,7 +23,7 @@ public RectangleTool(DrawingAttributeSet attrs) { @Override public Icon getIcon() { - return Icons.getIcon("drawrect.gif"); + return Icons.getIcon("drawrect.svg"); } @Override diff --git a/src/main/java/com/cburch/draw/tools/RoundRectangleTool.java b/src/main/java/com/cburch/draw/tools/RoundRectangleTool.java index 9119d279..2f1e0e65 100644 --- a/src/main/java/com/cburch/draw/tools/RoundRectangleTool.java +++ b/src/main/java/com/cburch/draw/tools/RoundRectangleTool.java @@ -23,7 +23,7 @@ public RoundRectangleTool(DrawingAttributeSet attrs) { @Override public Icon getIcon() { - return Icons.getIcon("drawrrct.gif"); + return Icons.getIcon("drawrrct.svg"); } @Override diff --git a/src/main/java/com/cburch/draw/tools/SVGIcon.java b/src/main/java/com/cburch/draw/tools/SVGIcon.java new file mode 100644 index 00000000..d39d0ccb --- /dev/null +++ b/src/main/java/com/cburch/draw/tools/SVGIcon.java @@ -0,0 +1,70 @@ +package com.cburch.draw.tools; + +import java.awt.Component; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.geom.AffineTransform; +import java.io.IOException; +import java.net.URL; + +import javax.swing.Icon; + +import org.apache.batik.bridge.BridgeContext; +import org.apache.batik.bridge.DocumentLoader; +import org.apache.batik.bridge.GVTBuilder; +import org.apache.batik.bridge.UserAgent; +import org.apache.batik.bridge.UserAgentAdapter; +import org.apache.batik.dom.svg.SAXSVGDocumentFactory; +import org.apache.batik.gvt.GraphicsNode; +import org.apache.batik.util.XMLResourceDescriptor; +import org.w3c.dom.svg.SVGDocument; + +public class SVGIcon implements Icon { + + String path; + GraphicsNode svgIcon = null; + + public SVGIcon(String path) { + try { + this.path = (path.startsWith("/logisim/icons/")) ? path : "/logisim/icons/" + path; // Quick and dirty hack. We should probably use a path resolver. + URL url = SVGIcon.class.getResource(this.path); + String xmlParser = XMLResourceDescriptor.getXMLParserClassName(); + SAXSVGDocumentFactory df = new SAXSVGDocumentFactory(xmlParser); + SVGDocument doc = df.createSVGDocument(url.toString()); + UserAgent userAgent = new UserAgentAdapter(); + DocumentLoader loader = new DocumentLoader(userAgent); + BridgeContext ctx = new BridgeContext(userAgent, loader); + ctx.setDynamicState(BridgeContext.DYNAMIC); + GVTBuilder builder = new GVTBuilder(); + this.svgIcon = builder.build(ctx, doc); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public int getIconHeight() { + return (int)svgIcon.getPrimitiveBounds().getHeight(); + } + + @Override + public int getIconWidth() { + return (int)svgIcon.getPrimitiveBounds().getWidth(); + } + + private void paintSvgIcon(Graphics2D g, int x, int y, double scaleX, double scaleY) { + AffineTransform transform = new AffineTransform(scaleX, 0.0, 0.0, scaleY, x, y); + svgIcon.setTransform(transform); + svgIcon.paint(g); + } + + @Override + public void paintIcon(Component arg0, Graphics g, int x, int y) { +/* Graphics2D g2 = (Graphics2D) g.create(); + arg0.paint(getGraphics()); + g.drawImage(canvas.createImage(canvas.getWidth(), canvas.getHeight()), x, y, arg0);*/ + paintSvgIcon((Graphics2D)g,x,y,1,1); + } + +} diff --git a/src/main/java/com/cburch/draw/tools/SelectTool.java b/src/main/java/com/cburch/draw/tools/SelectTool.java index 18886b76..651bfef8 100644 --- a/src/main/java/com/cburch/draw/tools/SelectTool.java +++ b/src/main/java/com/cburch/draw/tools/SelectTool.java @@ -63,7 +63,7 @@ public SelectTool() { @Override public Icon getIcon() { - return Icons.getIcon("select.gif"); + return Icons.getIcon("select.svg"); } @Override diff --git a/src/main/java/com/cburch/draw/tools/TextTool.java b/src/main/java/com/cburch/draw/tools/TextTool.java index 0bfd97b6..6a038179 100644 --- a/src/main/java/com/cburch/draw/tools/TextTool.java +++ b/src/main/java/com/cburch/draw/tools/TextTool.java @@ -85,7 +85,7 @@ public TextTool(DrawingAttributeSet attrs) { @Override public Icon getIcon() { - return Icons.getIcon("text.gif"); + return Icons.getIcon("text.svg"); } @Override diff --git a/src/main/java/com/cburch/gray/GrayCounter.java b/src/main/java/com/cburch/gray/GrayCounter.java index e44e7337..1e6b71a8 100644 --- a/src/main/java/com/cburch/gray/GrayCounter.java +++ b/src/main/java/com/cburch/gray/GrayCounter.java @@ -46,7 +46,7 @@ public GrayCounter() { // These next two lines set it up so that the explorer window shows a // customized icon representing the component type. This should be a // 16x16 image. - URL url = getClass().getClassLoader().getResource("com/cburch/gray/counter.gif"); + URL url = getClass().getClassLoader().getResource("com/cburch/gray/counter.svg"); if (url != null) setIcon(new ImageIcon(url)); } diff --git a/src/main/java/com/cburch/logisim/circuit/SplitterFactory.java b/src/main/java/com/cburch/logisim/circuit/SplitterFactory.java index 181e4713..0f0b5417 100644 --- a/src/main/java/com/cburch/logisim/circuit/SplitterFactory.java +++ b/src/main/java/com/cburch/logisim/circuit/SplitterFactory.java @@ -30,7 +30,7 @@ public class SplitterFactory extends AbstractComponentFactory { public static final SplitterFactory instance = new SplitterFactory(); - private static final Icon toolIcon = Icons.getIcon("splitter.gif"); + private static final Icon toolIcon = Icons.getIcon("splitter.svg"); private SplitterFactory() { } diff --git a/src/main/java/com/cburch/logisim/comp/AbstractComponentFactory.java b/src/main/java/com/cburch/logisim/comp/AbstractComponentFactory.java index 230e2c3c..938f04ac 100644 --- a/src/main/java/com/cburch/logisim/comp/AbstractComponentFactory.java +++ b/src/main/java/com/cburch/logisim/comp/AbstractComponentFactory.java @@ -21,7 +21,7 @@ import com.cburch.logisim.util.StringUtil; public abstract class AbstractComponentFactory implements ComponentFactory { - private static final Icon toolIcon = Icons.getIcon("subcirc.gif"); + private static final Icon toolIcon = Icons.getIcon("subcirc.svg"); private AttributeSet defaultSet; diff --git a/src/main/java/com/cburch/logisim/comp/ComponentDrawContext.java b/src/main/java/com/cburch/logisim/comp/ComponentDrawContext.java index 8ffcb074..a4ca8f98 100644 --- a/src/main/java/com/cburch/logisim/comp/ComponentDrawContext.java +++ b/src/main/java/com/cburch/logisim/comp/ComponentDrawContext.java @@ -7,6 +7,8 @@ import java.awt.FontMetrics; import java.awt.Graphics; +import org.apache.batik.swing.JSVGCanvas; + import com.cburch.logisim.circuit.Circuit; import com.cburch.logisim.circuit.CircuitState; import com.cburch.logisim.circuit.WireSet; @@ -14,6 +16,7 @@ import com.cburch.logisim.data.Bounds; import com.cburch.logisim.data.Direction; import com.cburch.logisim.data.Location; +import com.cburch.logisim.gui.main.Canvas; import com.cburch.logisim.instance.InstancePainter; import com.cburch.logisim.prefs.AppPreferences; import com.cburch.logisim.util.GraphicsUtil; @@ -48,10 +51,10 @@ public ComponentDrawContext(java.awt.Component dest, this.instancePainter = new InstancePainter(this, null); } - public ComponentDrawContext(java.awt.Component dest, + public ComponentDrawContext(java.awt.Component c, Circuit circuit, CircuitState circuitState, Graphics base, Graphics g) { - this(dest, circuit, circuitState, base, g, false); + this(c, circuit, circuitState, base, g, false); } public void setShowState(boolean value) { diff --git a/src/main/java/com/cburch/logisim/gui/generic/LFrame.java b/src/main/java/com/cburch/logisim/gui/generic/LFrame.java index cf78979e..2889e3b7 100644 --- a/src/main/java/com/cburch/logisim/gui/generic/LFrame.java +++ b/src/main/java/com/cburch/logisim/gui/generic/LFrame.java @@ -28,7 +28,7 @@ public static void attachIcon(Window frame) { List loadedIcons = new ArrayList(); ClassLoader loader = LFrame.class.getClassLoader(); for (int size : SIZES) { - URL url = loader.getResource(PATH + size + ".png"); + URL url = loader.getResource(PATH + size + ".svg"); if (url != null) { ImageIcon icon = new ImageIcon(url); loadedIcons.add(icon.getImage()); diff --git a/src/main/java/com/cburch/logisim/gui/main/Canvas.java b/src/main/java/com/cburch/logisim/gui/main/Canvas.java index 5110450a..16f10ce0 100644 --- a/src/main/java/com/cburch/logisim/gui/main/Canvas.java +++ b/src/main/java/com/cburch/logisim/gui/main/Canvas.java @@ -3,10 +3,12 @@ package com.cburch.logisim.gui.main; +import static com.cburch.logisim.util.LocaleString._; + import java.awt.Color; -import java.awt.Font; import java.awt.Cursor; import java.awt.Dimension; +import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Rectangle; @@ -16,6 +18,15 @@ import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.util.List; +import java.util.Set; + +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JViewport; +import javax.swing.event.MouseInputListener; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; import com.cburch.logisim.circuit.Circuit; import com.cburch.logisim.circuit.CircuitEvent; @@ -58,17 +69,6 @@ import com.cburch.logisim.util.LocaleManager; import com.cburch.logisim.util.StringGetter; -import java.util.List; -import java.util.Set; - -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.JViewport; -import javax.swing.event.MouseInputListener; -import javax.swing.event.PopupMenuEvent; -import javax.swing.event.PopupMenuListener; -import static com.cburch.logisim.util.LocaleString.*; - public class Canvas extends JPanel implements LocaleListener, CanvasPaneContents { public static final Color HALO_COLOR = new Color(192, 255, 255); diff --git a/src/main/java/com/cburch/logisim/gui/main/ExplorerToolbarModel.java b/src/main/java/com/cburch/logisim/gui/main/ExplorerToolbarModel.java index 7ed4d87d..3259248a 100644 --- a/src/main/java/com/cburch/logisim/gui/main/ExplorerToolbarModel.java +++ b/src/main/java/com/cburch/logisim/gui/main/ExplorerToolbarModel.java @@ -26,13 +26,13 @@ class ExplorerToolbarModel extends AbstractToolbarModel public ExplorerToolbarModel(Frame frame, MenuListener menu) { this.frame = frame; - itemToolbox = new LogisimToolbarItem(menu, "projtool.gif", + itemToolbox = new LogisimToolbarItem(menu, "projtool.svg", LogisimMenuBar.VIEW_TOOLBOX, __("projectViewToolboxTip")); - itemSimulation = new LogisimToolbarItem(menu, "projsim.gif", + itemSimulation = new LogisimToolbarItem(menu, "projsim.svg", LogisimMenuBar.VIEW_SIMULATION, __("projectViewSimulationTip")); - itemLayout = new LogisimToolbarItem(menu, "projlayo.gif", + itemLayout = new LogisimToolbarItem(menu, "projlayo.svg", LogisimMenuBar.EDIT_LAYOUT, __("projectEditLayoutTip")); - itemAppearance = new LogisimToolbarItem(menu, "projapp.gif", + itemAppearance = new LogisimToolbarItem(menu, "projapp.svg", LogisimMenuBar.EDIT_APPEARANCE, __("projectEditAppearanceTip")); items = UnmodifiableList.decorate(Arrays.asList(new ToolbarItem[] { diff --git a/src/main/java/com/cburch/logisim/gui/main/ProjectToolbarModel.java b/src/main/java/com/cburch/logisim/gui/main/ProjectToolbarModel.java index e25e2d3f..b01fea26 100644 --- a/src/main/java/com/cburch/logisim/gui/main/ProjectToolbarModel.java +++ b/src/main/java/com/cburch/logisim/gui/main/ProjectToolbarModel.java @@ -28,17 +28,17 @@ class ProjectToolbarModel extends AbstractToolbarModel public ProjectToolbarModel(Frame frame, MenuListener menu) { this.frame = frame; - itemAdd = new LogisimToolbarItem(menu, "projadd.gif", LogisimMenuBar.ADD_CIRCUIT, + itemAdd = new LogisimToolbarItem(menu, "projadd.svg", LogisimMenuBar.ADD_CIRCUIT, __("projectAddCircuitTip")); - itemUp = new LogisimToolbarItem(menu, "projup.gif", LogisimMenuBar.MOVE_CIRCUIT_UP, + itemUp = new LogisimToolbarItem(menu, "projup.svg", LogisimMenuBar.MOVE_CIRCUIT_UP, __("projectMoveCircuitUpTip")); - itemDown = new LogisimToolbarItem(menu, "projdown.gif", LogisimMenuBar.MOVE_CIRCUIT_DOWN, + itemDown = new LogisimToolbarItem(menu, "projdown.svg", LogisimMenuBar.MOVE_CIRCUIT_DOWN, __("projectMoveCircuitDownTip")); - itemDelete = new LogisimToolbarItem(menu, "projdel.gif", LogisimMenuBar.REMOVE_CIRCUIT, + itemDelete = new LogisimToolbarItem(menu, "projdel.svg", LogisimMenuBar.REMOVE_CIRCUIT, __("projectRemoveCircuitTip")); - itemLayout = new LogisimToolbarItem(menu, "projlayo.gif", LogisimMenuBar.EDIT_LAYOUT, + itemLayout = new LogisimToolbarItem(menu, "projlayo.svg", LogisimMenuBar.EDIT_LAYOUT, __("projectEditLayoutTip")); - itemAppearance = new LogisimToolbarItem(menu, "projapp.gif", LogisimMenuBar.EDIT_APPEARANCE, + itemAppearance = new LogisimToolbarItem(menu, "projapp.svg", LogisimMenuBar.EDIT_APPEARANCE, __("projectEditAppearanceTip")); items = UnmodifiableList.decorate(Arrays.asList(new ToolbarItem[] { diff --git a/src/main/java/com/cburch/logisim/gui/main/SimulationToolbarModel.java b/src/main/java/com/cburch/logisim/gui/main/SimulationToolbarModel.java index 8ce04813..63c164d6 100644 --- a/src/main/java/com/cburch/logisim/gui/main/SimulationToolbarModel.java +++ b/src/main/java/com/cburch/logisim/gui/main/SimulationToolbarModel.java @@ -30,13 +30,13 @@ class SimulationToolbarModel extends AbstractToolbarModel public SimulationToolbarModel(Project project, MenuListener menu) { this.project = project; - simEnable = new LogisimToolbarItem(menu, "simplay.png", LogisimMenuBar.SIMULATE_ENABLE, + simEnable = new LogisimToolbarItem(menu, "simplay.svg", LogisimMenuBar.SIMULATE_ENABLE, __("simulateEnableStepsTip")); - simStep = new LogisimToolbarItem(menu, "simstep.png", LogisimMenuBar.SIMULATE_STEP, + simStep = new LogisimToolbarItem(menu, "simstep.svg", LogisimMenuBar.SIMULATE_STEP, __("simulateStepTip")); - tickEnable = new LogisimToolbarItem(menu, "simtplay.png", LogisimMenuBar.TICK_ENABLE, + tickEnable = new LogisimToolbarItem(menu, "simtplay.svg", LogisimMenuBar.TICK_ENABLE, __("simulateEnableTicksTip")); - tickStep = new LogisimToolbarItem(menu, "simtstep.png", LogisimMenuBar.TICK_STEP, + tickStep = new LogisimToolbarItem(menu, "simtstep.svg", LogisimMenuBar.TICK_STEP, __("simulateTickTip")); items = UnmodifiableList.decorate(Arrays.asList(new ToolbarItem[] { @@ -74,10 +74,10 @@ public void stateChanged(ChangeEvent e) { Simulator sim = project.getSimulator(); boolean running = sim != null && sim.isRunning(); boolean ticking = sim != null && sim.isTicking(); - simEnable.setIcon(running ? "simstop.png" : "simplay.png"); + simEnable.setIcon(running ? "simstop.svg" : "simplay.svg"); simEnable.setToolTip(running ? __("simulateDisableStepsTip") : __("simulateEnableStepsTip")); - tickEnable.setIcon(ticking ? "simtstop.png" : "simtplay.png"); + tickEnable.setIcon(ticking ? "simtstop.svg" : "simtplay.svg"); tickEnable.setToolTip(ticking ? __("simulateDisableTicksTip") : __("simulateEnableTicksTip")); fireToolbarAppearanceChanged(); diff --git a/src/main/java/com/cburch/logisim/gui/main/ToolboxToolbarModel.java b/src/main/java/com/cburch/logisim/gui/main/ToolboxToolbarModel.java index c03fd3c5..98b92fc8 100644 --- a/src/main/java/com/cburch/logisim/gui/main/ToolboxToolbarModel.java +++ b/src/main/java/com/cburch/logisim/gui/main/ToolboxToolbarModel.java @@ -22,13 +22,13 @@ class ToolboxToolbarModel extends AbstractToolbarModel private List items; public ToolboxToolbarModel(MenuListener menu) { - itemAdd = new LogisimToolbarItem(menu, "projadd.gif", LogisimMenuBar.ADD_CIRCUIT, + itemAdd = new LogisimToolbarItem(menu, "projadd.svg", LogisimMenuBar.ADD_CIRCUIT, __("projectAddCircuitTip")); - itemUp = new LogisimToolbarItem(menu, "projup.gif", LogisimMenuBar.MOVE_CIRCUIT_UP, + itemUp = new LogisimToolbarItem(menu, "projup.svg", LogisimMenuBar.MOVE_CIRCUIT_UP, __("projectMoveCircuitUpTip")); - itemDown = new LogisimToolbarItem(menu, "projdown.gif", LogisimMenuBar.MOVE_CIRCUIT_DOWN, + itemDown = new LogisimToolbarItem(menu, "projdown.svg", LogisimMenuBar.MOVE_CIRCUIT_DOWN, __("projectMoveCircuitDownTip")); - itemDelete = new LogisimToolbarItem(menu, "projdel.gif", LogisimMenuBar.REMOVE_CIRCUIT, + itemDelete = new LogisimToolbarItem(menu, "projdel.svg", LogisimMenuBar.REMOVE_CIRCUIT, __("projectRemoveCircuitTip")); items = UnmodifiableList.decorate(Arrays.asList(new ToolbarItem[] { diff --git a/src/main/java/com/cburch/logisim/gui/start/About.java b/src/main/java/com/cburch/logisim/gui/start/About.java index 039adf8a..4b4004c6 100644 --- a/src/main/java/com/cburch/logisim/gui/start/About.java +++ b/src/main/java/com/cburch/logisim/gui/start/About.java @@ -35,22 +35,6 @@ public class About { static final int IMAGE_HEIGHT = 284; protected static JSVGCanvas svgCanvas =new JSVGCanvas(); - private static class MyPanel extends JPanel{ - - public MyPanel() { - setLayout(null); - int prefWidth = IMAGE_WIDTH + 2 * IMAGE_BORDER; - int prefHeight = IMAGE_HEIGHT + 2 * IMAGE_BORDER; - setPreferredSize(new Dimension(prefWidth, prefHeight)); - setBackground(Color.WHITE); - } - - @Override - public void paintComponent(Graphics g) { - super.paintComponent(g); - } - } - public static JComponent createComponents() { final JPanel panel = new JPanel(new BorderLayout()); panel.add("Center", svgCanvas); diff --git a/src/main/java/com/cburch/logisim/std/arith/Adder.java b/src/main/java/com/cburch/logisim/std/arith/Adder.java index 0c5f8607..7102c666 100644 --- a/src/main/java/com/cburch/logisim/std/arith/Adder.java +++ b/src/main/java/com/cburch/logisim/std/arith/Adder.java @@ -39,7 +39,7 @@ public Adder() { }); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setOffsetBounds(Bounds.create(-40, -20, 40, 40)); - setIconName("adder.gif"); + setIconName("adder.svg"); Port[] ps = new Port[5]; ps[IN0] = new Port(-40, -10, Port.INPUT, StdAttr.WIDTH); diff --git a/src/main/java/com/cburch/logisim/std/arith/Arithmetic.java b/src/main/java/com/cburch/logisim/std/arith/Arithmetic.java index d9e0c615..c4aa8250 100644 --- a/src/main/java/com/cburch/logisim/std/arith/Arithmetic.java +++ b/src/main/java/com/cburch/logisim/std/arith/Arithmetic.java @@ -13,23 +13,23 @@ public class Arithmetic extends Library { private static FactoryDescription[] DESCRIPTIONS = { new FactoryDescription("Adder", __("adderComponent"), - "adder.gif", "Adder"), + "adder.svg", "Adder"), new FactoryDescription("Subtractor", __("subtractorComponent"), - "subtractor.gif", "Subtractor"), + "subtractor.svg", "Subtractor"), new FactoryDescription("Multiplier", __("multiplierComponent"), - "multiplier.gif", "Multiplier"), + "multiplier.svg", "Multiplier"), new FactoryDescription("Divider", __("dividerComponent"), - "divider.gif", "Divider"), + "divider.svg", "Divider"), new FactoryDescription("Negator", __("negatorComponent"), - "negator.gif", "Negator"), + "negator.svg", "Negator"), new FactoryDescription("Comparator", __("comparatorComponent"), - "comparator.gif", "Comparator"), + "comparator.svg", "Comparator"), new FactoryDescription("Shifter", __("shifterComponent"), - "shifter.gif", "Shifter"), + "shifter.svg", "Shifter"), new FactoryDescription("BitAdder", __("bitAdderComponent"), - "bitadder.gif", "BitAdder"), + "bitadder.svg", "BitAdder"), new FactoryDescription("BitFinder", __("bitFinderComponent"), - "bitfindr.gif", "BitFinder"), + "bitfindr.svg", "BitFinder"), }; private List tools = null; diff --git a/src/main/java/com/cburch/logisim/std/arith/BitAdder.java b/src/main/java/com/cburch/logisim/std/arith/BitAdder.java index bb6cf28a..981d02f9 100644 --- a/src/main/java/com/cburch/logisim/std/arith/BitAdder.java +++ b/src/main/java/com/cburch/logisim/std/arith/BitAdder.java @@ -38,7 +38,7 @@ public BitAdder() { setKeyConfigurator(JoinedConfigurator.create( new IntegerConfigurator(NUM_INPUTS, 1, 32, 0), new BitWidthConfigurator(StdAttr.WIDTH))); - setIconName("bitadder.gif"); + setIconName("bitadder.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/arith/BitFinder.java b/src/main/java/com/cburch/logisim/std/arith/BitFinder.java index db842bb1..a0586456 100644 --- a/src/main/java/com/cburch/logisim/std/arith/BitFinder.java +++ b/src/main/java/com/cburch/logisim/std/arith/BitFinder.java @@ -43,7 +43,7 @@ public BitFinder() { BitWidth.create(8), LOW_ONE }); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); - setIconName("bitfindr.gif"); + setIconName("bitfindr.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/arith/Comparator.java b/src/main/java/com/cburch/logisim/std/arith/Comparator.java index 09f8181d..28dc118a 100644 --- a/src/main/java/com/cburch/logisim/std/arith/Comparator.java +++ b/src/main/java/com/cburch/logisim/std/arith/Comparator.java @@ -40,7 +40,7 @@ public Comparator() { new Object[] { BitWidth.create(8), SIGNED_OPTION }); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setOffsetBounds(Bounds.create(-40, -20, 40, 40)); - setIconName("comparator.gif"); + setIconName("comparator.svg"); Port[] ps = new Port[5]; ps[IN0] = new Port(-40, -10, Port.INPUT, StdAttr.WIDTH); diff --git a/src/main/java/com/cburch/logisim/std/arith/Divider.java b/src/main/java/com/cburch/logisim/std/arith/Divider.java index 4967cd05..e363b2ac 100644 --- a/src/main/java/com/cburch/logisim/std/arith/Divider.java +++ b/src/main/java/com/cburch/logisim/std/arith/Divider.java @@ -36,7 +36,7 @@ public Divider() { new Object[] { BitWidth.create(8) }); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setOffsetBounds(Bounds.create(-40, -20, 40, 40)); - setIconName("divider.gif"); + setIconName("divider.svg"); Port[] ps = new Port[5]; ps[IN0] = new Port(-40, -10, Port.INPUT, StdAttr.WIDTH); diff --git a/src/main/java/com/cburch/logisim/std/arith/Multiplier.java b/src/main/java/com/cburch/logisim/std/arith/Multiplier.java index e508fe09..19eb714a 100644 --- a/src/main/java/com/cburch/logisim/std/arith/Multiplier.java +++ b/src/main/java/com/cburch/logisim/std/arith/Multiplier.java @@ -36,7 +36,7 @@ public Multiplier() { new Object[] { BitWidth.create(8) }); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setOffsetBounds(Bounds.create(-40, -20, 40, 40)); - setIconName("multiplier.gif"); + setIconName("multiplier.svg"); Port[] ps = new Port[5]; ps[IN0] = new Port(-40, -10, Port.INPUT, StdAttr.WIDTH); diff --git a/src/main/java/com/cburch/logisim/std/arith/Negator.java b/src/main/java/com/cburch/logisim/std/arith/Negator.java index cb6e2f2b..2f0638a7 100644 --- a/src/main/java/com/cburch/logisim/std/arith/Negator.java +++ b/src/main/java/com/cburch/logisim/std/arith/Negator.java @@ -26,7 +26,7 @@ public Negator() { new Object[] { BitWidth.create(8) }); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setOffsetBounds(Bounds.create(-40, -20, 40, 40)); - setIconName("negator.gif"); + setIconName("negator.svg"); Port[] ps = new Port[2]; ps[IN] = new Port(-40, 0, Port.INPUT, StdAttr.WIDTH); diff --git a/src/main/java/com/cburch/logisim/std/arith/Shifter.java b/src/main/java/com/cburch/logisim/std/arith/Shifter.java index bd3cab74..8d7da5e1 100644 --- a/src/main/java/com/cburch/logisim/std/arith/Shifter.java +++ b/src/main/java/com/cburch/logisim/std/arith/Shifter.java @@ -52,7 +52,7 @@ public Shifter() { }); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setOffsetBounds(Bounds.create(-40, -20, 40, 40)); - setIconName("shifter.gif"); + setIconName("shifter.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/arith/Subtractor.java b/src/main/java/com/cburch/logisim/std/arith/Subtractor.java index e8dd1865..42db5005 100644 --- a/src/main/java/com/cburch/logisim/std/arith/Subtractor.java +++ b/src/main/java/com/cburch/logisim/std/arith/Subtractor.java @@ -34,7 +34,7 @@ public Subtractor() { new Object[] { BitWidth.create(8) }); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setOffsetBounds(Bounds.create(-40, -20, 40, 40)); - setIconName("subtractor.gif"); + setIconName("subtractor.svg"); Port[] ps = new Port[5]; ps[IN0] = new Port(-40, -10, Port.INPUT, StdAttr.WIDTH); diff --git a/src/main/java/com/cburch/logisim/std/base/Text.java b/src/main/java/com/cburch/logisim/std/base/Text.java index 667e7298..dd9431fd 100644 --- a/src/main/java/com/cburch/logisim/std/base/Text.java +++ b/src/main/java/com/cburch/logisim/std/base/Text.java @@ -52,7 +52,7 @@ public class Text extends InstanceFactory { private Text() { super("Text", __("textComponent")); - setIconName("text.gif"); + setIconName("text.svg"); setShouldSnap(false); } diff --git a/src/main/java/com/cburch/logisim/std/gates/AbstractGate.java b/src/main/java/com/cburch/logisim/std/gates/AbstractGate.java index 24f45532..626b9312 100644 --- a/src/main/java/com/cburch/logisim/std/gates/AbstractGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/AbstractGate.java @@ -10,6 +10,7 @@ import javax.swing.Icon; +import com.cburch.draw.tools.SVGIcon; import com.cburch.logisim.LogisimVersion; import com.cburch.logisim.analyze.model.Expression; import com.cburch.logisim.analyze.model.Expressions; @@ -40,7 +41,7 @@ abstract class AbstractGate extends InstanceFactory { private String[] iconNames = new String[3]; - private Icon[] icons = new Icon[3]; + private SVGIcon[] icons = new SVGIcon[3]; private int bonusWidth = 0; private boolean negateOutput = false; private boolean isXor = false; @@ -230,8 +231,8 @@ protected void setIconNames(String shaped, String rect, String din) { iconNames[2] = din; } - private Icon getIcon(int type) { - Icon ret = icons[type]; + private SVGIcon getIcon(int type) { + SVGIcon ret = icons[type]; if (ret != null) { return ret; } else { diff --git a/src/main/java/com/cburch/logisim/std/gates/AndGate.java b/src/main/java/com/cburch/logisim/std/gates/AndGate.java index 18baaa04..177ef8e8 100644 --- a/src/main/java/com/cburch/logisim/std/gates/AndGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/AndGate.java @@ -3,15 +3,18 @@ package com.cburch.logisim.std.gates; +import static com.cburch.logisim.util.LocaleString.__; + import java.awt.Graphics; +import org.apache.batik.swing.JSVGCanvas; + import com.cburch.logisim.analyze.model.Expression; import com.cburch.logisim.analyze.model.Expressions; import com.cburch.logisim.data.Value; import com.cburch.logisim.instance.InstancePainter; import com.cburch.logisim.instance.InstanceState; import com.cburch.logisim.util.GraphicsUtil; -import static com.cburch.logisim.util.LocaleString.*; class AndGate extends AbstractGate { public static AndGate FACTORY = new AndGate(); @@ -19,7 +22,7 @@ class AndGate extends AbstractGate { private AndGate() { super("AND Gate", __("andGateComponent")); setRectangularLabel("&"); - setIconNames("andGate.gif", "andGateRect.gif", "dinAndGate.gif"); + setIconNames("/logisim/icons/andGate.svg", "/logisim/icons/andGateRect.svg", "/logisim/icons/dinAndGate.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/gates/Buffer.java b/src/main/java/com/cburch/logisim/std/gates/Buffer.java index 396a309b..fe981b66 100644 --- a/src/main/java/com/cburch/logisim/std/gates/Buffer.java +++ b/src/main/java/com/cburch/logisim/std/gates/Buffer.java @@ -38,7 +38,7 @@ private Buffer() { GateAttributes.ATTR_OUTPUT, StdAttr.LABEL, StdAttr.LABEL_FONT }, new Object[] { Direction.EAST, BitWidth.ONE, GateAttributes.OUTPUT_01, "", StdAttr.DEFAULT_LABEL_FONT }); - setIcon(Icons.getIcon("bufferGate.gif")); + setIcon(Icons.getIcon("bufferGate.svg")); setFacingAttribute(StdAttr.FACING); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setPorts(new Port[] { diff --git a/src/main/java/com/cburch/logisim/std/gates/ControlledBuffer.java b/src/main/java/com/cburch/logisim/std/gates/ControlledBuffer.java index 622855af..e5867dcf 100644 --- a/src/main/java/com/cburch/logisim/std/gates/ControlledBuffer.java +++ b/src/main/java/com/cburch/logisim/std/gates/ControlledBuffer.java @@ -45,8 +45,8 @@ class ControlledBuffer extends InstanceFactory { public static ComponentFactory FACTORY_BUFFER = new ControlledBuffer(false); public static ComponentFactory FACTORY_INVERTER = new ControlledBuffer(true); - private static final Icon ICON_BUFFER = Icons.getIcon("controlledBuffer.gif"); - private static final Icon ICON_INVERTER = Icons.getIcon("controlledInverter.gif"); + private static final Icon ICON_BUFFER = Icons.getIcon("controlledBuffer.svg"); + private static final Icon ICON_INVERTER = Icons.getIcon("controlledInverter.svg"); private boolean isInverter; diff --git a/src/main/java/com/cburch/logisim/std/gates/EvenParityGate.java b/src/main/java/com/cburch/logisim/std/gates/EvenParityGate.java index e0e71c7a..de2b28c7 100644 --- a/src/main/java/com/cburch/logisim/std/gates/EvenParityGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/EvenParityGate.java @@ -16,7 +16,7 @@ class EvenParityGate extends AbstractGate { private EvenParityGate() { super("Even Parity", __("evenParityComponent")); setRectangularLabel("2k"); - setIconNames("parityEvenGate.gif"); + setIconNames("parityEvenGate.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/gates/NandGate.java b/src/main/java/com/cburch/logisim/std/gates/NandGate.java index 0665336a..ff393f55 100644 --- a/src/main/java/com/cburch/logisim/std/gates/NandGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/NandGate.java @@ -20,7 +20,7 @@ private NandGate() { super("NAND Gate", __("nandGateComponent")); setNegateOutput(true); setRectangularLabel(AndGate.FACTORY.getRectangularLabel(null)); - setIconNames("nandGate.gif", "nandGateRect.gif", "dinNandGate.gif"); + setIconNames("nandGate.svg", "nandGateRect.svg", "dinNandGate.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/gates/NorGate.java b/src/main/java/com/cburch/logisim/std/gates/NorGate.java index e56b6aa6..31633f6b 100644 --- a/src/main/java/com/cburch/logisim/std/gates/NorGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/NorGate.java @@ -22,7 +22,7 @@ private NorGate() { super("NOR Gate", __("norGateComponent")); setNegateOutput(true); setRectangularLabel(OrGate.FACTORY.getRectangularLabel(null)); - setIconNames("norGate.gif", "norGateRect.gif", "dinNorGate.gif"); + setIconNames("norGate.svg", "norGateRect.svg", "dinNorGate.svg"); setPaintInputLines(true); } @@ -37,7 +37,7 @@ public void paintIconShaped(InstancePainter painter) { @Override protected void paintShape(InstancePainter painter, int width, int height) { - PainterShaped.paintOr(painter, width, height); + //PainterShaped.paintOr(painter, width, height); } @Override diff --git a/src/main/java/com/cburch/logisim/std/gates/NotGate.java b/src/main/java/com/cburch/logisim/std/gates/NotGate.java index f363f8f9..8558985d 100644 --- a/src/main/java/com/cburch/logisim/std/gates/NotGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/NotGate.java @@ -45,9 +45,9 @@ class NotGate extends InstanceFactory { new AttributeOption[] { SIZE_NARROW, SIZE_WIDE }); private static final String RECT_LABEL = "1"; - private static final Icon toolIcon = Icons.getIcon("notGate.gif"); - private static final Icon toolIconRect = Icons.getIcon("notGateRect.gif"); - private static final Icon toolIconDin = Icons.getIcon("dinNotGate.gif"); + private static final Icon toolIcon = Icons.getIcon("notGate.svg"); + private static final Icon toolIconRect = Icons.getIcon("notGateRect.svg"); + private static final Icon toolIconDin = Icons.getIcon("dinNotGate.svg"); public static InstanceFactory FACTORY = new NotGate(); diff --git a/src/main/java/com/cburch/logisim/std/gates/OddParityGate.java b/src/main/java/com/cburch/logisim/std/gates/OddParityGate.java index 86d855fe..922cf238 100644 --- a/src/main/java/com/cburch/logisim/std/gates/OddParityGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/OddParityGate.java @@ -22,7 +22,7 @@ class OddParityGate extends AbstractGate { private OddParityGate() { super("Odd Parity", __("oddParityComponent")); setRectangularLabel("2k+1"); - setIconNames("parityOddGate.gif"); + setIconNames("parityOddGate.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/gates/OrGate.java b/src/main/java/com/cburch/logisim/std/gates/OrGate.java index 73572aec..e36724e6 100644 --- a/src/main/java/com/cburch/logisim/std/gates/OrGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/OrGate.java @@ -3,8 +3,12 @@ package com.cburch.logisim.std.gates; +import static com.cburch.logisim.util.LocaleString.__; + import java.awt.Graphics; +import org.apache.batik.swing.JSVGCanvas; + import com.cburch.logisim.analyze.model.Expression; import com.cburch.logisim.analyze.model.Expressions; import com.cburch.logisim.data.Value; @@ -12,8 +16,6 @@ import com.cburch.logisim.instance.InstancePainter; import com.cburch.logisim.instance.InstanceState; import com.cburch.logisim.tools.WireRepairData; -import com.cburch.logisim.util.GraphicsUtil; -import static com.cburch.logisim.util.LocaleString.*; class OrGate extends AbstractGate { public static OrGate FACTORY = new OrGate(); @@ -21,20 +23,20 @@ class OrGate extends AbstractGate { private OrGate() { super("OR Gate", __("orGateComponent")); setRectangularLabel("\u2265" + "1"); - setIconNames("orGate.gif", "orGateRect.gif", "dinOrGate.gif"); + setIconNames("orGate.svg", "orGateRect.svg", "dinOrGate.svg"); setPaintInputLines(true); } @Override public void paintIconShaped(InstancePainter painter) { Graphics g = painter.getGraphics(); - GraphicsUtil.drawCenteredArc(g, 0, -5, 22, -90, 53); - GraphicsUtil.drawCenteredArc(g, 0, 23, 22, 90, -53); - GraphicsUtil.drawCenteredArc(g, -12, 9, 16, -30, 60); + //g.drawImage(image.createImage(image.getWidth(), image.getHeight()), image.getWidth(), image.getHeight(), null); } @Override protected void paintShape(InstancePainter painter, int width, int height) { + Graphics g = painter.getGraphics(); + //g.drawImage(image.createImage(image.getWidth(), image.getHeight()), image.getWidth(), image.getHeight(), null); PainterShaped.paintOr(painter, width, height); } diff --git a/src/main/java/com/cburch/logisim/std/gates/PainterShaped.java b/src/main/java/com/cburch/logisim/std/gates/PainterShaped.java index c336dc8f..fbcd40c0 100644 --- a/src/main/java/com/cburch/logisim/std/gates/PainterShaped.java +++ b/src/main/java/com/cburch/logisim/std/gates/PainterShaped.java @@ -92,8 +92,8 @@ static void paintOr(InstancePainter painter, int width, int height) { GraphicsUtil.drawCenteredArc(g, -70, -50, 85, -90, 53); GraphicsUtil.drawCenteredArc(g, -70, 50, 85, 90, -53); } - paintShield(g, -width, 0, width, height); - */ + paintShield(g, -width, 0, width, height);*/ + GeneralPath path; if (width < 40) { @@ -136,7 +136,7 @@ static void paintNot(InstancePainter painter) { static void paintXor(InstancePainter painter, int width, int height) { Graphics g = painter.getGraphics(); - paintOr(painter, width - 10, width - 10); + //paintOr(painter, width - 10, width - 10); paintShield(g, -10, width - 10, height); } diff --git a/src/main/java/com/cburch/logisim/std/gates/XnorGate.java b/src/main/java/com/cburch/logisim/std/gates/XnorGate.java index fb4e6e93..3f3722ed 100644 --- a/src/main/java/com/cburch/logisim/std/gates/XnorGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/XnorGate.java @@ -23,7 +23,7 @@ private XnorGate() { super("XNOR Gate", __("xnorGateComponent"), true); setNegateOutput(true); setAdditionalWidth(10); - setIconNames("xnorGate.gif", "xnorGateRect.gif", "dinXnorGate.gif"); + setIconNames("xnorGate.svg", "xnorGateRect.svg", "dinXnorGate.svg"); setPaintInputLines(true); } diff --git a/src/main/java/com/cburch/logisim/std/gates/XorGate.java b/src/main/java/com/cburch/logisim/std/gates/XorGate.java index a08225d9..121753a7 100644 --- a/src/main/java/com/cburch/logisim/std/gates/XorGate.java +++ b/src/main/java/com/cburch/logisim/std/gates/XorGate.java @@ -22,7 +22,7 @@ class XorGate extends AbstractGate { private XorGate() { super("XOR Gate", __("xorGateComponent"), true); setAdditionalWidth(10); - setIconNames("xorGate.gif", "xorGateRect.gif", "dinXorGate.gif"); + setIconNames("xorGate.svg", "xorGateRect.svg", "dinXorGate.svg"); setPaintInputLines(true); } diff --git a/src/main/java/com/cburch/logisim/std/io/Button.java b/src/main/java/com/cburch/logisim/std/io/Button.java index d18205e7..b54667ec 100644 --- a/src/main/java/com/cburch/logisim/std/io/Button.java +++ b/src/main/java/com/cburch/logisim/std/io/Button.java @@ -41,7 +41,7 @@ public Button() { StdAttr.DEFAULT_LABEL_FONT, Color.BLACK }); setFacingAttribute(StdAttr.FACING); - setIconName("button.gif"); + setIconName("button.svg"); setPorts(new Port[] { new Port(0, 0, Port.OUTPUT, 1) }); setInstancePoker(Poker.class); setInstanceLogger(Logger.class); diff --git a/src/main/java/com/cburch/logisim/std/io/DotMatrix.java b/src/main/java/com/cburch/logisim/std/io/DotMatrix.java index a093b6d1..f733158a 100644 --- a/src/main/java/com/cburch/logisim/std/io/DotMatrix.java +++ b/src/main/java/com/cburch/logisim/std/io/DotMatrix.java @@ -63,7 +63,7 @@ public DotMatrix() { INPUT_COLUMN, Integer.valueOf(5), Integer.valueOf(7), Color.GREEN, Color.DARK_GRAY, Integer.valueOf(0), SHAPE_SQUARE }); - setIconName("dotmat.gif"); + setIconName("dotmat.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/io/HexDigit.java b/src/main/java/com/cburch/logisim/std/io/HexDigit.java index 6919c787..7b7ba994 100644 --- a/src/main/java/com/cburch/logisim/std/io/HexDigit.java +++ b/src/main/java/com/cburch/logisim/std/io/HexDigit.java @@ -28,7 +28,7 @@ public HexDigit() { new Port(10, 0, Port.INPUT, 1) }); setOffsetBounds(Bounds.create(-15, -60, 40, 60)); - setIconName("hexdig.gif"); + setIconName("hexdig.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/io/Io.java b/src/main/java/com/cburch/logisim/std/io/Io.java index a0ee88f6..34632075 100644 --- a/src/main/java/com/cburch/logisim/std/io/Io.java +++ b/src/main/java/com/cburch/logisim/std/io/Io.java @@ -39,21 +39,21 @@ public class Io extends Library { private static FactoryDescription[] DESCRIPTIONS = { new FactoryDescription("Button", __("buttonComponent"), - "button.gif", "Button"), + "button.svg", "Button"), new FactoryDescription("Joystick", __("joystickComponent"), - "joystick.gif", "Joystick"), + "joystick.svg", "Joystick"), new FactoryDescription("Keyboard", __("keyboardComponent"), - "keyboard.gif", "Keyboard"), + "keyboard.svg", "Keyboard"), new FactoryDescription("LED", __("ledComponent"), - "led.gif", "Led"), + "led.svg", "Led"), new FactoryDescription("7-Segment Display", __("sevenSegmentComponent"), - "7seg.gif", "SevenSegment"), + "7seg.svg", "SevenSegment"), new FactoryDescription("Hex Digit Display", __("hexDigitComponent"), - "hexdig.gif", "HexDigit"), + "hexdig.svg", "HexDigit"), new FactoryDescription("DotMatrix", __("dotMatrixComponent"), - "dotmat.gif", "DotMatrix"), + "dotmat.svg", "DotMatrix"), new FactoryDescription("TTY", __("ttyComponent"), - "tty.gif", "Tty"), + "tty.svg", "Tty"), }; private List tools = null; diff --git a/src/main/java/com/cburch/logisim/std/io/Joystick.java b/src/main/java/com/cburch/logisim/std/io/Joystick.java index 63e19eb9..eb8d36ff 100644 --- a/src/main/java/com/cburch/logisim/std/io/Joystick.java +++ b/src/main/java/com/cburch/logisim/std/io/Joystick.java @@ -33,7 +33,7 @@ public Joystick() { new Object[] { BitWidth.create(4), Color.RED }); setKeyConfigurator(new BitWidthConfigurator(ATTR_WIDTH, 2, 5)); setOffsetBounds(Bounds.create(-30, -10, 30, 30)); - setIconName("joystick.gif"); + setIconName("joystick.svg"); setPorts(new Port[] { new Port(0, 0, Port.OUTPUT, ATTR_WIDTH), new Port(0, 10, Port.OUTPUT, ATTR_WIDTH), diff --git a/src/main/java/com/cburch/logisim/std/io/Keyboard.java b/src/main/java/com/cburch/logisim/std/io/Keyboard.java index 385f65e5..6f0f8c24 100644 --- a/src/main/java/com/cburch/logisim/std/io/Keyboard.java +++ b/src/main/java/com/cburch/logisim/std/io/Keyboard.java @@ -48,7 +48,7 @@ public Keyboard() { setAttributes(new Attribute[] { ATTR_BUFFER, StdAttr.EDGE_TRIGGER }, new Object[] { Integer.valueOf(32), StdAttr.TRIG_RISING }); setOffsetBounds(Bounds.create(0, -15, WIDTH, HEIGHT)); - setIconName("keyboard.gif"); + setIconName("keyboard.svg"); setInstancePoker(Poker.class); Port[] ps = new Port[5]; diff --git a/src/main/java/com/cburch/logisim/std/io/Led.java b/src/main/java/com/cburch/logisim/std/io/Led.java index 19814ae4..5432bcad 100644 --- a/src/main/java/com/cburch/logisim/std/io/Led.java +++ b/src/main/java/com/cburch/logisim/std/io/Led.java @@ -37,7 +37,7 @@ Direction.WEST, new Color(240, 0, 0), Color.DARK_GRAY, StdAttr.DEFAULT_LABEL_FONT, Color.BLACK }); setFacingAttribute(StdAttr.FACING); - setIconName("led.gif"); + setIconName("led.svg"); setPorts(new Port[] { new Port(0, 0, Port.INPUT, 1) }); setInstanceLogger(Logger.class); } diff --git a/src/main/java/com/cburch/logisim/std/io/SevenSegment.java b/src/main/java/com/cburch/logisim/std/io/SevenSegment.java index 7030eb66..2dc775b3 100644 --- a/src/main/java/com/cburch/logisim/std/io/SevenSegment.java +++ b/src/main/java/com/cburch/logisim/std/io/SevenSegment.java @@ -27,7 +27,7 @@ public SevenSegment() { new Object[] { new Color(240, 0, 0), DEFAULT_OFF, Io.DEFAULT_BACKGROUND, Boolean.TRUE }); setOffsetBounds(Bounds.create(-5, 0, 40, 60)); - setIconName("7seg.gif"); + setIconName("7seg.svg"); setPorts(new Port[] { new Port(20, 0, Port.INPUT, 1), new Port(30, 0, Port.INPUT, 1), diff --git a/src/main/java/com/cburch/logisim/std/io/Tty.java b/src/main/java/com/cburch/logisim/std/io/Tty.java index fc7566ca..9f849180 100644 --- a/src/main/java/com/cburch/logisim/std/io/Tty.java +++ b/src/main/java/com/cburch/logisim/std/io/Tty.java @@ -52,7 +52,7 @@ public Tty() { Integer.valueOf(8), Integer.valueOf(32), StdAttr.TRIG_RISING, Color.BLACK, DEFAULT_BACKGROUND }); - setIconName("tty.gif"); + setIconName("tty.svg"); Port[] ps = new Port[4]; ps[CLR] = new Port(20, 10, Port.INPUT, 1); diff --git a/src/main/java/com/cburch/logisim/std/memory/Counter.java b/src/main/java/com/cburch/logisim/std/memory/Counter.java index c732229e..7b8b4815 100644 --- a/src/main/java/com/cburch/logisim/std/memory/Counter.java +++ b/src/main/java/com/cburch/logisim/std/memory/Counter.java @@ -54,7 +54,7 @@ public class Counter extends InstanceFactory { public Counter() { super("Counter", __("counterComponent")); setOffsetBounds(Bounds.create(-30, -20, 30, 40)); - setIconName("counter.gif"); + setIconName("counter.svg"); setInstancePoker(RegisterPoker.class); setInstanceLogger(RegisterLogger.class); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); diff --git a/src/main/java/com/cburch/logisim/std/memory/DFlipFlop.java b/src/main/java/com/cburch/logisim/std/memory/DFlipFlop.java index ead513f8..5dfbd3d1 100644 --- a/src/main/java/com/cburch/logisim/std/memory/DFlipFlop.java +++ b/src/main/java/com/cburch/logisim/std/memory/DFlipFlop.java @@ -8,7 +8,7 @@ public class DFlipFlop extends AbstractFlipFlop { public DFlipFlop() { - super("D Flip-Flop", "dFlipFlop.gif", + super("D Flip-Flop", "dFlipFlop.svg", __("dFlipFlopComponent"), 1, true); } diff --git a/src/main/java/com/cburch/logisim/std/memory/JKFlipFlop.java b/src/main/java/com/cburch/logisim/std/memory/JKFlipFlop.java index 58e88aac..9ee932c0 100644 --- a/src/main/java/com/cburch/logisim/std/memory/JKFlipFlop.java +++ b/src/main/java/com/cburch/logisim/std/memory/JKFlipFlop.java @@ -8,7 +8,7 @@ public class JKFlipFlop extends AbstractFlipFlop { public JKFlipFlop() { - super("J-K Flip-Flop", "jkFlipFlop.gif", + super("J-K Flip-Flop", "jkFlipFlop.svg", __("jkFlipFlopComponent"), 2, false); } diff --git a/src/main/java/com/cburch/logisim/std/memory/Memory.java b/src/main/java/com/cburch/logisim/std/memory/Memory.java index 73e2b89f..24d03481 100644 --- a/src/main/java/com/cburch/logisim/std/memory/Memory.java +++ b/src/main/java/com/cburch/logisim/std/memory/Memory.java @@ -16,23 +16,23 @@ public class Memory extends Library { private static FactoryDescription[] DESCRIPTIONS = { new FactoryDescription("D Flip-Flop", __("dFlipFlopComponent"), - "dFlipFlop.gif", "DFlipFlop"), + "dFlipFlop.svg", "DFlipFlop"), new FactoryDescription("T Flip-Flop", __("tFlipFlopComponent"), - "tFlipFlop.gif", "TFlipFlop"), + "tFlipFlop.svg", "TFlipFlop"), new FactoryDescription("J-K Flip-Flop", __("jkFlipFlopComponent"), - "jkFlipFlop.gif", "JKFlipFlop"), + "jkFlipFlop.svg", "JKFlipFlop"), new FactoryDescription("S-R Flip-Flop", __("srFlipFlopComponent"), - "srFlipFlop.gif", "SRFlipFlop"), + "srFlipFlop.svg", "SRFlipFlop"), new FactoryDescription("Register", __("registerComponent"), - "register.gif", "Register"), + "register.svg", "Register"), new FactoryDescription("Counter", __("counterComponent"), - "counter.gif", "Counter"), + "counter.svg", "Counter"), new FactoryDescription("Shift Register", __("shiftRegisterComponent"), - "shiftreg.gif", "ShiftRegister"), + "shiftreg.svg", "ShiftRegister"), new FactoryDescription("Random", __("randomComponent"), - "random.gif", "Random"), - new FactoryDescription("RAM", __("ramComponent"), "ram.gif", "Ram"), - new FactoryDescription("ROM", __("romComponent"), "rom.gif", "Rom"), + "random.svg", "Random"), + new FactoryDescription("RAM", __("ramComponent"), "ram.svg", "Ram"), + new FactoryDescription("ROM", __("romComponent"), "rom.svg", "Rom"), }; private List tools = null; diff --git a/src/main/java/com/cburch/logisim/std/memory/Ram.java b/src/main/java/com/cburch/logisim/std/memory/Ram.java index 43e9b6f4..fa50a41a 100644 --- a/src/main/java/com/cburch/logisim/std/memory/Ram.java +++ b/src/main/java/com/cburch/logisim/std/memory/Ram.java @@ -61,7 +61,7 @@ public class Ram extends Mem { public Ram() { super("RAM", __("ramComponent"), 3); - setIconName("ram.gif"); + setIconName("ram.svg"); setInstanceLogger(Logger.class); } diff --git a/src/main/java/com/cburch/logisim/std/memory/Random.java b/src/main/java/com/cburch/logisim/std/memory/Random.java index ef755dc6..fde9dfcf 100644 --- a/src/main/java/com/cburch/logisim/std/memory/Random.java +++ b/src/main/java/com/cburch/logisim/std/memory/Random.java @@ -45,7 +45,7 @@ public Random() { setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setOffsetBounds(Bounds.create(-30, -20, 30, 40)); - setIconName("random.gif"); + setIconName("random.svg"); setInstanceLogger(Logger.class); Port[] ps = new Port[4]; diff --git a/src/main/java/com/cburch/logisim/std/memory/Register.java b/src/main/java/com/cburch/logisim/std/memory/Register.java index 8c4b69ea..8f2274b6 100644 --- a/src/main/java/com/cburch/logisim/std/memory/Register.java +++ b/src/main/java/com/cburch/logisim/std/memory/Register.java @@ -41,7 +41,7 @@ public Register() { }); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); setOffsetBounds(Bounds.create(-30, -20, 30, 40)); - setIconName("register.gif"); + setIconName("register.svg"); setInstancePoker(RegisterPoker.class); setInstanceLogger(RegisterLogger.class); diff --git a/src/main/java/com/cburch/logisim/std/memory/Rom.java b/src/main/java/com/cburch/logisim/std/memory/Rom.java index 1f9a2450..6f8c9d5e 100644 --- a/src/main/java/com/cburch/logisim/std/memory/Rom.java +++ b/src/main/java/com/cburch/logisim/std/memory/Rom.java @@ -38,7 +38,7 @@ public class Rom extends Mem { public Rom() { super("ROM", __("romComponent"), 0); - setIconName("rom.gif"); + setIconName("rom.svg"); memListeners = new WeakHashMap(); } diff --git a/src/main/java/com/cburch/logisim/std/memory/SRFlipFlop.java b/src/main/java/com/cburch/logisim/std/memory/SRFlipFlop.java index fae883e0..248a9a50 100644 --- a/src/main/java/com/cburch/logisim/std/memory/SRFlipFlop.java +++ b/src/main/java/com/cburch/logisim/std/memory/SRFlipFlop.java @@ -8,7 +8,7 @@ public class SRFlipFlop extends AbstractFlipFlop { public SRFlipFlop() { - super("S-R Flip-Flop", "srFlipFlop.gif", + super("S-R Flip-Flop", "srFlipFlop.svg", __("srFlipFlopComponent"), 2, true); } diff --git a/src/main/java/com/cburch/logisim/std/memory/ShiftRegister.java b/src/main/java/com/cburch/logisim/std/memory/ShiftRegister.java index e7156597..1feeae30 100644 --- a/src/main/java/com/cburch/logisim/std/memory/ShiftRegister.java +++ b/src/main/java/com/cburch/logisim/std/memory/ShiftRegister.java @@ -50,7 +50,7 @@ public ShiftRegister() { new IntegerConfigurator(ATTR_LENGTH, 1, 32, 0), new BitWidthConfigurator(StdAttr.WIDTH))); - setIconName("shiftreg.gif"); + setIconName("shiftreg.svg"); setInstanceLogger(ShiftRegisterLogger.class); setInstancePoker(ShiftRegisterPoker.class); } diff --git a/src/main/java/com/cburch/logisim/std/memory/TFlipFlop.java b/src/main/java/com/cburch/logisim/std/memory/TFlipFlop.java index c3d8b341..3ad79107 100644 --- a/src/main/java/com/cburch/logisim/std/memory/TFlipFlop.java +++ b/src/main/java/com/cburch/logisim/std/memory/TFlipFlop.java @@ -8,7 +8,7 @@ public class TFlipFlop extends AbstractFlipFlop { public TFlipFlop() { - super("T Flip-Flop", "tFlipFlop.gif", + super("T Flip-Flop", "tFlipFlop.svg", __("tFlipFlopComponent"), 1, false); } diff --git a/src/main/java/com/cburch/logisim/std/plexers/BitSelector.java b/src/main/java/com/cburch/logisim/std/plexers/BitSelector.java index 19900dbf..b85cdb91 100644 --- a/src/main/java/com/cburch/logisim/std/plexers/BitSelector.java +++ b/src/main/java/com/cburch/logisim/std/plexers/BitSelector.java @@ -40,7 +40,7 @@ public BitSelector() { new BitWidthConfigurator(GROUP_ATTR, 1, Value.MAX_WIDTH, 0), new BitWidthConfigurator(StdAttr.WIDTH))); - setIconName("bitSelector.gif"); + setIconName("bitSelector.svg"); setFacingAttribute(StdAttr.FACING); } diff --git a/src/main/java/com/cburch/logisim/std/plexers/Decoder.java b/src/main/java/com/cburch/logisim/std/plexers/Decoder.java index 525106c4..ba290cac 100644 --- a/src/main/java/com/cburch/logisim/std/plexers/Decoder.java +++ b/src/main/java/com/cburch/logisim/std/plexers/Decoder.java @@ -35,7 +35,7 @@ public Decoder() { Plexers.DEFAULT_TRISTATE, Plexers.DISABLED_FLOATING, Boolean.TRUE }); setKeyConfigurator(new BitWidthConfigurator(Plexers.ATTR_SELECT, 1, 5, 0)); - setIconName("decoder.gif"); + setIconName("decoder.svg"); setFacingAttribute(StdAttr.FACING); } diff --git a/src/main/java/com/cburch/logisim/std/plexers/Demultiplexer.java b/src/main/java/com/cburch/logisim/std/plexers/Demultiplexer.java index 5d6039d5..b682df3e 100644 --- a/src/main/java/com/cburch/logisim/std/plexers/Demultiplexer.java +++ b/src/main/java/com/cburch/logisim/std/plexers/Demultiplexer.java @@ -39,7 +39,7 @@ public Demultiplexer() { new BitWidthConfigurator(Plexers.ATTR_SELECT, 1, 5, 0), new BitWidthConfigurator(StdAttr.WIDTH))); setFacingAttribute(StdAttr.FACING); - setIconName("demultiplexer.gif"); + setIconName("demultiplexer.svg"); } @Override diff --git a/src/main/java/com/cburch/logisim/std/plexers/Multiplexer.java b/src/main/java/com/cburch/logisim/std/plexers/Multiplexer.java index 44dc72e9..16c61b38 100644 --- a/src/main/java/com/cburch/logisim/std/plexers/Multiplexer.java +++ b/src/main/java/com/cburch/logisim/std/plexers/Multiplexer.java @@ -38,7 +38,7 @@ public Multiplexer() { setKeyConfigurator(JoinedConfigurator.create( new BitWidthConfigurator(Plexers.ATTR_SELECT, 1, 5, 0), new BitWidthConfigurator(StdAttr.WIDTH))); - setIconName("multiplexer.gif"); + setIconName("multiplexer.svg"); setFacingAttribute(StdAttr.FACING); } diff --git a/src/main/java/com/cburch/logisim/std/plexers/Plexers.java b/src/main/java/com/cburch/logisim/std/plexers/Plexers.java index 120f3a4f..2e13aa06 100644 --- a/src/main/java/com/cburch/logisim/std/plexers/Plexers.java +++ b/src/main/java/com/cburch/logisim/std/plexers/Plexers.java @@ -51,15 +51,15 @@ public class Plexers extends Library { private static FactoryDescription[] DESCRIPTIONS = { new FactoryDescription("Multiplexer", __("multiplexerComponent"), - "multiplexer.gif", "Multiplexer"), + "multiplexer.svg", "Multiplexer"), new FactoryDescription("Demultiplexer", __("demultiplexerComponent"), - "demultiplexer.gif", "Demultiplexer"), + "demultiplexer.svg", "Demultiplexer"), new FactoryDescription("Decoder", __("decoderComponent"), - "decoder.gif", "Decoder"), + "decoder.svg", "Decoder"), new FactoryDescription("Priority Encoder", __("priorityEncoderComponent"), - "priencod.gif", "PriorityEncoder"), + "priencod.svg", "PriorityEncoder"), new FactoryDescription("BitSelector", __("bitSelectorComponent"), - "bitSelector.gif", "BitSelector"), + "bitSelector.svg", "BitSelector"), }; private List tools = null; diff --git a/src/main/java/com/cburch/logisim/std/plexers/PriorityEncoder.java b/src/main/java/com/cburch/logisim/std/plexers/PriorityEncoder.java index 6dd86042..89a85881 100644 --- a/src/main/java/com/cburch/logisim/std/plexers/PriorityEncoder.java +++ b/src/main/java/com/cburch/logisim/std/plexers/PriorityEncoder.java @@ -36,7 +36,7 @@ public PriorityEncoder() { Direction.EAST, BitWidth.create(3), Plexers.DISABLED_FLOATING }); setKeyConfigurator(new BitWidthConfigurator(Plexers.ATTR_SELECT, 1, 5, 0)); - setIconName("priencod.gif"); + setIconName("priencod.svg"); setFacingAttribute(StdAttr.FACING); } diff --git a/src/main/java/com/cburch/logisim/std/wiring/BitExtender.java b/src/main/java/com/cburch/logisim/std/wiring/BitExtender.java index b5b949ba..39a884f5 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/BitExtender.java +++ b/src/main/java/com/cburch/logisim/std/wiring/BitExtender.java @@ -43,7 +43,7 @@ public class BitExtender extends InstanceFactory { public BitExtender() { super("Bit Extender", __("extenderComponent")); - setIconName("extender.gif"); + setIconName("extender.svg"); setAttributes(new Attribute[] { ATTR_IN_WIDTH, ATTR_OUT_WIDTH, ATTR_TYPE }, new Object[] { diff --git a/src/main/java/com/cburch/logisim/std/wiring/Clock.java b/src/main/java/com/cburch/logisim/std/wiring/Clock.java index 3ca6ec9c..e3082b5f 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/Clock.java +++ b/src/main/java/com/cburch/logisim/std/wiring/Clock.java @@ -42,7 +42,7 @@ public class Clock extends InstanceFactory { public static final Clock FACTORY = new Clock(); - private static final Icon toolIcon = Icons.getIcon("clock.gif"); + private static final Icon toolIcon = Icons.getIcon("clock.svg"); private static class ClockState implements InstanceData, Cloneable { Value sending = Value.FALSE; diff --git a/src/main/java/com/cburch/logisim/std/wiring/Ground.java b/src/main/java/com/cburch/logisim/std/wiring/Ground.java index 3e2b2ed0..c42d7156 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/Ground.java +++ b/src/main/java/com/cburch/logisim/std/wiring/Ground.java @@ -31,7 +31,7 @@ public class Ground extends InstanceFactory { public Ground() { super("Ground", __("groundComponent")); - setIconName("ground.gif"); + setIconName("ground.svg"); setAttributes(new Attribute[] { StdAttr.FACING, StdAttr.WIDTH }, new Object[] { Direction.SOUTH, BitWidth.ONE }); setFacingAttribute(StdAttr.FACING); diff --git a/src/main/java/com/cburch/logisim/std/wiring/Pin.java b/src/main/java/com/cburch/logisim/std/wiring/Pin.java index 65dbe904..5f92868e 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/Pin.java +++ b/src/main/java/com/cburch/logisim/std/wiring/Pin.java @@ -62,8 +62,8 @@ public class Pin extends InstanceFactory { public static final Pin FACTORY = new Pin(); - private static final Icon ICON_IN = Icons.getIcon("pinInput.gif"); - private static final Icon ICON_OUT = Icons.getIcon("pinOutput.gif"); + private static final Icon ICON_IN = Icons.getIcon("pinInput.svg"); + private static final Icon ICON_OUT = Icons.getIcon("pinOutput.svg"); private static final Font ICON_WIDTH_FONT = new Font("SansSerif", Font.BOLD, 9); private static final Color ICON_WIDTH_COLOR = Value.WIDTH_ERROR_COLOR.darker(); diff --git a/src/main/java/com/cburch/logisim/std/wiring/Power.java b/src/main/java/com/cburch/logisim/std/wiring/Power.java index c26edb09..a6a1b9e1 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/Power.java +++ b/src/main/java/com/cburch/logisim/std/wiring/Power.java @@ -31,7 +31,7 @@ public class Power extends InstanceFactory { public Power() { super("Power", __("powerComponent")); - setIconName("power.gif"); + setIconName("power.svg"); setAttributes(new Attribute[] { StdAttr.FACING, StdAttr.WIDTH }, new Object[] { Direction.NORTH, BitWidth.ONE }); setFacingAttribute(StdAttr.FACING); diff --git a/src/main/java/com/cburch/logisim/std/wiring/Probe.java b/src/main/java/com/cburch/logisim/std/wiring/Probe.java index d6a9a63d..eede1af8 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/Probe.java +++ b/src/main/java/com/cburch/logisim/std/wiring/Probe.java @@ -58,7 +58,7 @@ public Value getLogValue(InstanceState state, Object option) { public Probe() { super("Probe", __("probeComponent")); - setIconName("probe.gif"); + setIconName("probe.svg"); setFacingAttribute(StdAttr.FACING); setInstanceLogger(ProbeLogger.class); } diff --git a/src/main/java/com/cburch/logisim/std/wiring/PullResistor.java b/src/main/java/com/cburch/logisim/std/wiring/PullResistor.java index b6d7657b..d29503b4 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/PullResistor.java +++ b/src/main/java/com/cburch/logisim/std/wiring/PullResistor.java @@ -40,8 +40,8 @@ public class PullResistor extends InstanceFactory { public static final PullResistor FACTORY = new PullResistor(); - private static final Icon ICON_SHAPED = Icons.getIcon("pullshap.gif"); - private static final Icon ICON_RECTANGULAR = Icons.getIcon("pullrect.gif"); + private static final Icon ICON_SHAPED = Icons.getIcon("pullshap.svg"); + private static final Icon ICON_RECTANGULAR = Icons.getIcon("pullrect.svg"); public PullResistor() { super("Pull Resistor", __("pullComponent")); diff --git a/src/main/java/com/cburch/logisim/std/wiring/Transistor.java b/src/main/java/com/cburch/logisim/std/wiring/Transistor.java index d6d5b061..78e8899e 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/Transistor.java +++ b/src/main/java/com/cburch/logisim/std/wiring/Transistor.java @@ -48,8 +48,8 @@ public class Transistor extends InstanceFactory { static final int INPUT = 1; static final int GATE = 2; - private static final Icon ICON_N = Icons.getIcon("trans1.gif"); - private static final Icon ICON_P = Icons.getIcon("trans0.gif"); + private static final Icon ICON_N = Icons.getIcon("trans1.svg"); + private static final Icon ICON_P = Icons.getIcon("trans0.svg"); public Transistor() { super("Transistor", __("transistorComponent")); diff --git a/src/main/java/com/cburch/logisim/std/wiring/TransmissionGate.java b/src/main/java/com/cburch/logisim/std/wiring/TransmissionGate.java index cebcbf90..2fd9f681 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/TransmissionGate.java +++ b/src/main/java/com/cburch/logisim/std/wiring/TransmissionGate.java @@ -38,7 +38,7 @@ public class TransmissionGate extends InstanceFactory { public TransmissionGate() { super("Transmission Gate", __("transmissionGateComponent")); - setIconName("transmis.gif"); + setIconName("transmis.svg"); setAttributes(new Attribute[] { StdAttr.FACING, Wiring.ATTR_GATE, StdAttr.WIDTH }, new Object[] { Direction.EAST, Wiring.GATE_TOP_LEFT, BitWidth.ONE }); setFacingAttribute(StdAttr.FACING); diff --git a/src/main/java/com/cburch/logisim/std/wiring/Tunnel.java b/src/main/java/com/cburch/logisim/std/wiring/Tunnel.java index 6aef0468..602ac207 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/Tunnel.java +++ b/src/main/java/com/cburch/logisim/std/wiring/Tunnel.java @@ -34,7 +34,7 @@ public class Tunnel extends InstanceFactory { public Tunnel() { super("Tunnel", __("tunnelComponent")); - setIconName("tunnel.gif"); + setIconName("tunnel.svg"); setFacingAttribute(StdAttr.FACING); setKeyConfigurator(new BitWidthConfigurator(StdAttr.WIDTH)); } diff --git a/src/main/java/com/cburch/logisim/std/wiring/Wiring.java b/src/main/java/com/cburch/logisim/std/wiring/Wiring.java index 9ef9cf8a..cb85b440 100644 --- a/src/main/java/com/cburch/logisim/std/wiring/Wiring.java +++ b/src/main/java/com/cburch/logisim/std/wiring/Wiring.java @@ -38,15 +38,15 @@ public class Wiring extends Library { private static FactoryDescription[] DESCRIPTIONS = { new FactoryDescription("Power", __("powerComponent"), - "power.gif", "Power"), + "power.svg", "Power"), new FactoryDescription("Ground", __("groundComponent"), - "ground.gif", "Ground"), + "ground.svg", "Ground"), new FactoryDescription("Transistor", __("transistorComponent"), - "trans0.gif", "Transistor"), + "trans0.svg", "Transistor"), new FactoryDescription("Transmission Gate", __("transmissionGateComponent"), - "transmis.gif", "TransmissionGate"), + "transmis.svg", "TransmissionGate"), new FactoryDescription("Bit Extender", __("extenderComponent"), - "extender.gif", "BitExtender"), + "extender.svg", "BitExtender"), }; private List tools = null; diff --git a/src/main/java/com/cburch/logisim/tools/PokeTool.java b/src/main/java/com/cburch/logisim/tools/PokeTool.java index 009279f6..c4efe20e 100644 --- a/src/main/java/com/cburch/logisim/tools/PokeTool.java +++ b/src/main/java/com/cburch/logisim/tools/PokeTool.java @@ -31,7 +31,7 @@ import static com.cburch.logisim.util.LocaleString.*; public class PokeTool extends Tool { - private static final Icon toolIcon = Icons.getIcon("poke.gif"); + private static final Icon toolIcon = Icons.getIcon("poke.svg"); private static final Color caretColor = new Color(255, 255, 150); private static class WireCaret extends AbstractCaret { diff --git a/src/main/java/com/cburch/logisim/tools/SelectTool.java b/src/main/java/com/cburch/logisim/tools/SelectTool.java index 1ee71460..aecab66b 100644 --- a/src/main/java/com/cburch/logisim/tools/SelectTool.java +++ b/src/main/java/com/cburch/logisim/tools/SelectTool.java @@ -59,7 +59,7 @@ public class SelectTool extends Tool { private static final int IDLE = 0; private static final int MOVING = 1; private static final int RECT_SELECT = 2; - private static final Icon toolIcon = Icons.getIcon("select.gif"); + private static final Icon toolIcon = Icons.getIcon("select.svg"); private static final Color COLOR_UNMATCHED = new Color(192, 0, 0); private static final Color COLOR_COMPUTING = new Color(96, 192, 96); diff --git a/src/main/java/com/cburch/logisim/tools/WiringTool.java b/src/main/java/com/cburch/logisim/tools/WiringTool.java index 8a1afa47..78dc685a 100644 --- a/src/main/java/com/cburch/logisim/tools/WiringTool.java +++ b/src/main/java/com/cburch/logisim/tools/WiringTool.java @@ -32,7 +32,7 @@ public class WiringTool extends Tool { private static Cursor cursor = Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); - private static final Icon toolIcon = Icons.getIcon("wiring.gif"); + private static final Icon toolIcon = Icons.getIcon("wiring.svg"); private static final int HORIZONTAL = 1; private static final int VERTICAL = 2; diff --git a/src/main/java/com/cburch/logisim/util/Icons.java b/src/main/java/com/cburch/logisim/util/Icons.java index 12ded7e7..31c702de 100644 --- a/src/main/java/com/cburch/logisim/util/Icons.java +++ b/src/main/java/com/cburch/logisim/util/Icons.java @@ -8,8 +8,8 @@ import java.awt.Graphics2D; import javax.swing.Icon; -import javax.swing.ImageIcon; +import com.cburch.draw.tools.SVGIcon; import com.cburch.logisim.data.Direction; public class Icons { @@ -17,10 +17,8 @@ public class Icons { private Icons() { } - public static Icon getIcon(String name) { - java.net.URL url = Icons.class.getClassLoader().getResource(path + "/" + name); - if (url == null) return null; - return new ImageIcon(url); + public static SVGIcon getIcon(String name) { + return new SVGIcon(name); } public static void paintRotated(Graphics g, int x, int y, Direction dir, Icon icon, Component dest) { diff --git a/src/main/resources/logisim/icons/7seg.gif b/src/main/resources/logisim/icons/7seg.gif deleted file mode 100644 index 83eebd685e68bbe0126b2cabd12c785ab903c70a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmZ?wbhEHb6krfwIK;{T1Rod}oQs{E_d9Riy!k&2DE?$&TQ+HF%z>m8THB9jpPz3wX^(JD@nYUu$8g + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/adder.gif b/src/main/resources/logisim/icons/adder.gif deleted file mode 100644 index 4edf626b1dfd3cee831befba277fd3990de88c33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmZ?wbhEHb6krfwSjqqb|NsC0^XCr(D+5Cw!-Jm>PTV}fpwGZ?iJ{_I#rrSs)2F2~ z_%U32e2qbw;n%-k3|tHh>I{!wKRW*9I71}^LjXhb%H~ghK4m}2{`2q8&F?oE5*QeG z85pV=u6@6D`Qc@Tb0G6+2NZv@Fmf^2Gw6VP0`e0Bo7I8&1s*zFj3<@^Rq|NO4^Uqq xxz?|~K_ke!HgDl|orpI}^(F^>j+D7J>2id*x!t_|t3O!V?Xi>o@8ZZ{4FEF}tV;j@ diff --git a/src/main/resources/logisim/icons/adder.svg b/src/main/resources/logisim/icons/adder.svg new file mode 100644 index 00000000..df557a20 --- /dev/null +++ b/src/main/resources/logisim/icons/adder.svg @@ -0,0 +1,68 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/andGate.gif b/src/main/resources/logisim/icons/andGate.gif deleted file mode 100644 index 4007c0ca6e84244c1816bc5df241530549a66897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmV-?1B3iWNk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PC0R0IZNU)&41OO5$1hBxMzX$&!O8i$W zVL^x!CAK>PfFQ<<5!-bf_z~nkNFyJbl&CCaNs}&DN{lJ9B}thlX_^%2aplI8Dl^hU S3H0DX03I|Hb;xvJKma>i^QYwi diff --git a/src/main/resources/logisim/icons/andGate.svg b/src/main/resources/logisim/icons/andGate.svg new file mode 100644 index 00000000..dbf13c88 --- /dev/null +++ b/src/main/resources/logisim/icons/andGate.svg @@ -0,0 +1,62 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/andGateRect.gif b/src/main/resources/logisim/icons/andGateRect.gif deleted file mode 100644 index 20dbe634710ad5ce47c2836c3a283f1286b86543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmZ?wbhEHb6krfwc+3C-|NsAg{P=NbXlPMUQD0x*s#U8jEiI29KMoYf1d9Jeor_Wv zOHxx5$}>wc6hbmm72G|20~i#4vM_Qn@H6Ouj073Zz~b@2)?xM1pr!-6*>7IqWd7JH zZO+kpu`yCga3reV8-^(46O M9n;J3WMQxd073dsIRF3v diff --git a/src/main/resources/logisim/icons/andGateRect.svg b/src/main/resources/logisim/icons/andGateRect.svg new file mode 100644 index 00000000..7e2c1b2b --- /dev/null +++ b/src/main/resources/logisim/icons/andGateRect.svg @@ -0,0 +1,74 @@ + + + + + + + + + + image/svg+xml + + + + + + + + & + + diff --git a/src/main/resources/logisim/icons/bitSelector.gif b/src/main/resources/logisim/icons/bitSelector.gif deleted file mode 100644 index 6489479273b44d70319f686d62e6a5917ab7579b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmZ?wbhEHb6krfwc+AMa5WoNe=NRnm?JqyP{Qv*|`uchXE(Qi(us8;x_)pZiC^fMp zHASI3vm`?yBqLS9-P1RKLGdRGBNqcdgAPaw$Z!T0>klUlmh82V==#m=x-s;gNLw=J yJdNoa-&|y5i4kC8d$aAqYg37Jn>Vp`Y`gM$iAxvL@k{EWp%d+b7O68aSOWmHC@|^( diff --git a/src/main/resources/logisim/icons/bitSelector.svg b/src/main/resources/logisim/icons/bitSelector.svg new file mode 100644 index 00000000..d5fe4d74 --- /dev/null +++ b/src/main/resources/logisim/icons/bitSelector.svg @@ -0,0 +1,77 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/bitadder.gif b/src/main/resources/logisim/icons/bitadder.gif deleted file mode 100644 index 386d617ab15eae993a6abb799cbbb6c45aadb4da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmZ?wbhEHb6krfwSjYeZ|Ns97(+r9~Ss1w(m>6_GT#!5ilhKs^%mZ)tHO&cW%5a<) t{zBFu=8KJDq}lT0wToI?-)+xYdF$qO+5P! + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/bitfindr.gif b/src/main/resources/logisim/icons/bitfindr.gif deleted file mode 100644 index 3304d1d891cc4e3375b003b1f34ef1c493652cb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmZ?wbhEHb6krfwc+AcK1UkCfkx>!VwN-QH&pCbW)SGv&|KkRVKUo;L7&sVoKsrHY zFtFGPob+7HVv$|j|9=5{iJTyVBV!-O2hLSHCoOnb_lB42(4DsChJ(w6c{>*_>JW2U VH*2TLl$$Zz%p!VHy*n8gtN|k{M0EfF diff --git a/src/main/resources/logisim/icons/bitfindr.svg b/src/main/resources/logisim/icons/bitfindr.svg new file mode 100644 index 00000000..73270d9e --- /dev/null +++ b/src/main/resources/logisim/icons/bitfindr.svg @@ -0,0 +1,74 @@ + + + + + + + + + + image/svg+xml + + + + + + + + ? + + diff --git a/src/main/resources/logisim/icons/bufferGate.gif b/src/main/resources/logisim/icons/bufferGate.gif deleted file mode 100644 index ab153e72f6071e66ec0c933168543b5e80742593..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmV-`1AqKSNk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;A04x9i000mG5C8xO zL;(E>97wRB!Gi{YAUp`5;X;A{{@HT)FycRn6d7LJI1zxxjT?agu~pC_$bTY9LOj{= WBSw!1BetxV@u9+pICJ6*2mm`u8>)f; diff --git a/src/main/resources/logisim/icons/bufferGate.svg b/src/main/resources/logisim/icons/bufferGate.svg new file mode 100644 index 00000000..a5b2144d --- /dev/null +++ b/src/main/resources/logisim/icons/bufferGate.svg @@ -0,0 +1,61 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/button.gif b/src/main/resources/logisim/icons/button.gif deleted file mode 100644 index d925d884a304bdf56ec9385be987cd4b44b5e5d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmZ?wbhEHb6krfwc+A1Tz{sGd^~cBeZfS9OS=sef%hw(~@&DidKmTz6#h)yUTnuas zIt)MnGJ}D|{=x~*)r=OeZ4UlSs7RQk-sQj;qrPgB?u>P5Hv39>1Q;i7Z)o^Xe(P(8 d-mJIA%{OPw)=1m1i-+sRnrR`E@^}OptN~PxN5cRB diff --git a/src/main/resources/logisim/icons/button.svg b/src/main/resources/logisim/icons/button.svg new file mode 100644 index 00000000..372e9492 --- /dev/null +++ b/src/main/resources/logisim/icons/button.svg @@ -0,0 +1,75 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/clock.gif b/src/main/resources/logisim/icons/clock.gif deleted file mode 100644 index 444f3d65ce7fa002ac3c996f557673dda0854f57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmZ?wbhEHb6krfwIK%(~|NsAI*uoHcEtDaE;q0BWKrRp{{$yd~Vqj;`0jU6~Wni|b z*mdV0-w97uX2sXM@BTS%PjJ$#S>%+a{(S492Yt64Qp&3mZp%KICzmL})nsIKZ==O3 M3&jgBlo=VU0i^XT!2kdN diff --git a/src/main/resources/logisim/icons/clock.svg b/src/main/resources/logisim/icons/clock.svg new file mode 100644 index 00000000..03f9972a --- /dev/null +++ b/src/main/resources/logisim/icons/clock.svg @@ -0,0 +1,78 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/comparator.gif b/src/main/resources/logisim/icons/comparator.gif deleted file mode 100644 index 718080fee1f1ce1ff362bf040663a57246929df3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 886 zcmV-+1Bv`cNk%w1VGsZi0Ovjc000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000P60R0IZNU)$l00lJAXx{j{pDw diff --git a/src/main/resources/logisim/icons/comparator.svg b/src/main/resources/logisim/icons/comparator.svg new file mode 100644 index 00000000..6afd1d81 --- /dev/null +++ b/src/main/resources/logisim/icons/comparator.svg @@ -0,0 +1,75 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/constant.gif b/src/main/resources/logisim/icons/constant.gif deleted file mode 100644 index f49b50512861fd9a7a5ccceffd9503b4c0367bd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmZ?wbhEHb6krfwSjfOoR8&;3DM9HX!~g&P6@RiYaxpM7=r8~QNS=X7cTWGx)erb( tyA+Oaw(ekW+u#`Stk*vxGq$Dake6NK%LPI_8NZx^9sCnH+Pj$;tN|(=9)$n^ diff --git a/src/main/resources/logisim/icons/constant.svg b/src/main/resources/logisim/icons/constant.svg new file mode 100644 index 00000000..f37b072e --- /dev/null +++ b/src/main/resources/logisim/icons/constant.svg @@ -0,0 +1,79 @@ + + + + + + + + + + image/svg+xml + + + + + + + + 1 + + + diff --git a/src/main/resources/logisim/icons/controlledBuffer.gif b/src/main/resources/logisim/icons/controlledBuffer.gif deleted file mode 100644 index a906f853e1c97a39278fe95cc9361918f1400bee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmZ?wbhEHb6krfwIK;r<;NZZ(!0`Y7|83j0F-!w7AVBe-sB=+jVo7R>LV0FMhC)b2 zs)D + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/controlledInverter.gif b/src/main/resources/logisim/icons/controlledInverter.gif deleted file mode 100644 index 76532341ff5d7aecc9699ef62ceff8a690bd487f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmZ?wbhEHb6krfwIK;r<;NZZ(!0`Y7|83j0?ccwjVH$`H1d9Jeor_WvOHxx5$}>wc z6hbmm72G|20~i#4vM_QnurufYwE>L~U|?W2sn~VrAKwA-S1FD>)tfKKeC>^1&~onw lql1IMvx%$LaL?D0Se)`AWvO#wP$#Fl(6JATQmlj-tO3p_Gz0(u diff --git a/src/main/resources/logisim/icons/controlledInverter.svg b/src/main/resources/logisim/icons/controlledInverter.svg new file mode 100644 index 00000000..da00dac5 --- /dev/null +++ b/src/main/resources/logisim/icons/controlledInverter.svg @@ -0,0 +1,78 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/counter.gif b/src/main/resources/logisim/icons/counter.gif deleted file mode 100644 index 2021b691e110ca0ba40a45463aaa7d858c8da71c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmZ?wbhEHb6krfwSjfyECML6e=eB?U|NQ^|U-2gkBNqcRgAM}_faDpNEa&vET>an? zTZ8bN=WiC9yUR=7ZjV%A^>jEecSh7qp;c4o9>`tEaVSze_@R^5wRW~MmQ0M2k2!5c H7#OSpckU$< diff --git a/src/main/resources/logisim/icons/counter.svg b/src/main/resources/logisim/icons/counter.svg new file mode 100644 index 00000000..bc3311af --- /dev/null +++ b/src/main/resources/logisim/icons/counter.svg @@ -0,0 +1,136 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + 9 + 0 + 1 + 1 + 0 + 2 + + diff --git a/src/main/resources/logisim/icons/dFlipFlop.gif b/src/main/resources/logisim/icons/dFlipFlop.gif deleted file mode 100644 index 8e7849ff5b7e79761e79e915e6f40b9e65b989ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmZ?wbhEHb6krfwSjfZx1m)%B|G_})fdweF~?Ss@$2Som&?-`{&iB1xFvB2+$B@Wv~VSjx{D@ diff --git a/src/main/resources/logisim/icons/dFlipFlop.svg b/src/main/resources/logisim/icons/dFlipFlop.svg new file mode 100644 index 00000000..d9575fa8 --- /dev/null +++ b/src/main/resources/logisim/icons/dFlipFlop.svg @@ -0,0 +1,74 @@ + + + + + + + + + + image/svg+xml + + + + + + + + D + + diff --git a/src/main/resources/logisim/icons/decoder.gif b/src/main/resources/logisim/icons/decoder.gif deleted file mode 100644 index 207c8a58c82471ede3e65f217563710d07e1a2c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmZ?wbhEHb6krfwc+3C>0Sxx`_VxAk|NsBL{O~dZF9X9lhy)f=@h1x-7Xt@_4oD7U z1_O(|z)4R*4pZeq=4;Xh0!OD8DlcSOzG7c0+nz1yUdC&Wg{~83yV+kN@Q?2Vmshw( Y)--*w6OSG>M#$U_$=Z3+L6E^30A!#idjJ3c diff --git a/src/main/resources/logisim/icons/decoder.svg b/src/main/resources/logisim/icons/decoder.svg new file mode 100644 index 00000000..7dc9e468 --- /dev/null +++ b/src/main/resources/logisim/icons/decoder.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/demultiplexer.gif b/src/main/resources/logisim/icons/demultiplexer.gif deleted file mode 100644 index 898115f7e88c74042afe7e26cda710c0af036051..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmZ?wbhEHb6krfwc+3C>0Sxx`_VxAk|NsBL{O~dZ7X!mN1_oXRAQuxT{$yd~V&G@c z0qF#p!NB7D;iRWLhpBxb^EGJ$fuqw4l@~HCU$HMWZO@i;FL%e)hNXY3MU^IVi}6W1 gO!(j&6tG*F<5yCn&N{h{qZ?z_PKy>2VPvod09dd+00000 diff --git a/src/main/resources/logisim/icons/demultiplexer.svg b/src/main/resources/logisim/icons/demultiplexer.svg new file mode 100644 index 00000000..35c48630 --- /dev/null +++ b/src/main/resources/logisim/icons/demultiplexer.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/dff.gif b/src/main/resources/logisim/icons/dff.gif deleted file mode 100644 index 6f9559647cbb37738cca09cc3d6fbd382535122c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmZ?wbhEHb6krfwXyIpIU}O-N5YyAwwYIhL_4kR5k0~rJsH(24Z>;O>?^(Nk&EEZc zPM$vgP diff --git a/src/main/resources/logisim/icons/dff.svg b/src/main/resources/logisim/icons/dff.svg new file mode 100644 index 00000000..f3d4f558 --- /dev/null +++ b/src/main/resources/logisim/icons/dff.svg @@ -0,0 +1,80 @@ + + + + + + + + + + image/svg+xml + + + + + + + + D + + + diff --git a/src/main/resources/logisim/icons/dinAndGate.gif b/src/main/resources/logisim/icons/dinAndGate.gif deleted file mode 100644 index 23bc056cf26bae2364b6ccee692166e5da76c5cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 890 zcmV-=1BLuYNk%w1VGsZi0O$Vz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PA0R0IZNU)&61ONamFlg|>zkkING92je zVY?#$2qxTE(PGAl9Unsa*zloAWh4uRe7G^Czm+IKniNU0C4i9aToUYfQ76TJ^hWv| Qn81UEp%arTB^VF@I~ZlFZ~y=R diff --git a/src/main/resources/logisim/icons/dinAndGate.svg b/src/main/resources/logisim/icons/dinAndGate.svg new file mode 100644 index 00000000..1d870682 --- /dev/null +++ b/src/main/resources/logisim/icons/dinAndGate.svg @@ -0,0 +1,77 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/dinNandGate.gif b/src/main/resources/logisim/icons/dinNandGate.gif deleted file mode 100644 index ae0f4ad3f4336afeb0d96391b3029488d402c1dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 890 zcmV-=1BLuYNk%w1VGsZi0O$Vz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PA0R0IZNU)&61ONamFlg|>zkkING92je zVY?#$2qxTE(PGAl9Unsa*zlprjSNHn+bEHsN|Yr{{u?=vC4i9aNXGnkQD;Gi^hWwD Qn81UEp%arTH5d>8J6kfXIRF3v diff --git a/src/main/resources/logisim/icons/dinNandGate.svg b/src/main/resources/logisim/icons/dinNandGate.svg new file mode 100644 index 00000000..128d3554 --- /dev/null +++ b/src/main/resources/logisim/icons/dinNandGate.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/dinNorGate.gif b/src/main/resources/logisim/icons/dinNorGate.gif deleted file mode 100644 index 1b7d8c2c95b7d678ad4a3552b8920920d9dc5afc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmV-<1BU!ZNk%w1VGsZi0O$Vz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000P90R0IZNU)&61ONamFlg|>zkkING92je zVY?#$2qxV4VB^M#{whBF2Pq>%kq + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/dinNotGate.gif b/src/main/resources/logisim/icons/dinNotGate.gif deleted file mode 100644 index bfce9d49ff862b0f78f158acadb5d65a68bc934c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmV-<1BU!ZNk%w1VGsZi0O$Vz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000P90R0IZNU)&61ONamFlg|>zkkING92je zVY?#$Ci<&rG2=vz4jYyLU3 + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/dinOrGate.gif b/src/main/resources/logisim/icons/dinOrGate.gif deleted file mode 100644 index 4db3e4ffd4246265799f9767458d554eb2cf72ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmV-<1BU!ZNk%w1VGsZi0O$Vz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000P90R0IZNU)&61ONamFlg|>zkkING92je zVY?#$2qxV4VB^M#{whBF2Pq>%kq?!bY&deH$AT#Tshk+I + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/dinXnorGate.gif b/src/main/resources/logisim/icons/dinXnorGate.gif deleted file mode 100644 index e029bfc16433818d10bdf3912ab6e0ec14a074b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 895 zcmV-_1AzQTNk%w1VGsZi0O$Vz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PF0R0IZNU)&61ONamFlg|>zkkING92je zVY?#$2qxTE(PGAl4mSdT^s(W?lgdgK47u^2$dxA_rUdD7Bgugx0d)M=P9;o>7$^F3 VNROn?f(blmI4ZQM(}4j206UFdt;YZW diff --git a/src/main/resources/logisim/icons/dinXnorGate.svg b/src/main/resources/logisim/icons/dinXnorGate.svg new file mode 100644 index 00000000..2c96ddbe --- /dev/null +++ b/src/main/resources/logisim/icons/dinXnorGate.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/dinXorGate.gif b/src/main/resources/logisim/icons/dinXorGate.gif deleted file mode 100644 index c0dab6780fe7c1565cfe5bf0ccd5f7590ae4ddc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmV-|1AY8QNk%w1VGsZi0O$Vz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PI0R0IZNU)&61ONamFlg|>zkkING92je zVY?#$2qxTE@gIP887Dg22mn&Zh7UddQ+Bf8$c-L1x_k)WAxn`l6Pg@I5 + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/divider.gif b/src/main/resources/logisim/icons/divider.gif deleted file mode 100644 index 67f5cd399de145053219a46098a2a784e46d8ad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CabjNk%w1VGsZi0O$Vz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000O~0R0IZNU)$l00{@7c*Amh*9Fgk0DK-l-O}3%aR~PdTjac<4l+?U&_oG@}y6LKnVr} F06T|JrW61G diff --git a/src/main/resources/logisim/icons/divider.svg b/src/main/resources/logisim/icons/divider.svg new file mode 100644 index 00000000..44d4d500 --- /dev/null +++ b/src/main/resources/logisim/icons/divider.svg @@ -0,0 +1,78 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/dotmat.gif b/src/main/resources/logisim/icons/dotmat.gif deleted file mode 100644 index 30b94f7bb3d98547f2bc93304fa6c73a2d478f8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmZ?wbhEHb6krfwIK<2V1iN?dcHZy&9~CJ6WMSlDU}4Y!sQ{^EV7B+zb%)!)>%@T_ z7R^>p5=|FsZyPr)GM~~lb+1lhtGev@m+8gpk6m=Q$m@D%X4MQu-_#tznND&=p`9EG K*E^IL8LR + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/drawarc.gif b/src/main/resources/logisim/icons/drawarc.gif deleted file mode 100644 index d8663cd10f909622448087f75339391c84926708..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmZ?wbhEHb6krfwIK;xhz?{g#ki*DSFUnB<9| + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/drawcurv.gif b/src/main/resources/logisim/icons/drawcurv.gif deleted file mode 100644 index b92c935e822a73013c3dfdaf7ec516ea29fb8f9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76 zcmZ?wbhEHb6krfwSjfb{z>vzokoF%86o0ZXaxpM5=m155vH}bYOtMq@SBmX@!Bdf> b=AG}CsQji>&Un&di>BFL3!lywVXy`OMn@Oi diff --git a/src/main/resources/logisim/icons/drawcurv.svg b/src/main/resources/logisim/icons/drawcurv.svg new file mode 100644 index 00000000..525787a4 --- /dev/null +++ b/src/main/resources/logisim/icons/drawcurv.svg @@ -0,0 +1,62 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/drawline.gif b/src/main/resources/logisim/icons/drawline.gif deleted file mode 100644 index 4ce6bd68d85edd53809f851c778db51147cf84e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61 zcmZ?wbhEHb6krfwXkcXEV95Ue|G(l-7Dg@xMg|=QAOOiQFp2c^uRQ&hKbhgd#aru+ O_MPHydvrsD!5RSP`V%Ms diff --git a/src/main/resources/logisim/icons/drawline.svg b/src/main/resources/logisim/icons/drawline.svg new file mode 100644 index 00000000..193c95ec --- /dev/null +++ b/src/main/resources/logisim/icons/drawline.svg @@ -0,0 +1,61 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/drawoval.gif b/src/main/resources/logisim/icons/drawoval.gif deleted file mode 100644 index c0e5fe5303ff54ed5a03a07b619ffdc7ee2e19e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155 zcmZ?wbhEHb6krfwc+A7Vz?{g1#F?I63E-ZDdVk(_&SS;0!e3J}!K1#`z2{76xko!z3<= diff --git a/src/main/resources/logisim/icons/drawoval.svg b/src/main/resources/logisim/icons/drawoval.svg new file mode 100644 index 00000000..0a8318a6 --- /dev/null +++ b/src/main/resources/logisim/icons/drawoval.svg @@ -0,0 +1,66 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/drawpin.gif b/src/main/resources/logisim/icons/drawpin.gif deleted file mode 100644 index 73849501eaf036debc21995551fec09179932c33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmZ?wbhEHb6krfwc+A7Vz{pU<$+w?R^uLVkLQ9JY4tD?DT&K1)|I5g@(9rmQ)vE8e zZ~jLDia%Kxxfu8vbQpjDWCjC^{)dyAo?a&YjZ+RunU-)%cr{ + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/drawplin.gif b/src/main/resources/logisim/icons/drawplin.gif deleted file mode 100644 index 9333e88b70979208ed7fbd1f128b121c349408c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmZ?wbhEHb6krfwIK;xhz?{g#ki*DSFUnB<9| + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/drawpoly.gif b/src/main/resources/logisim/icons/drawpoly.gif deleted file mode 100644 index 00f02a7cba508994aaebcc5ef089bafb09911deb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmZ?wbhEHb6krfwc+A7Vz?8tvki)=KBg#LH83i>kesCsxeqWMHrc07dIC!vFvP diff --git a/src/main/resources/logisim/icons/drawpoly.svg b/src/main/resources/logisim/icons/drawpoly.svg new file mode 100644 index 00000000..ea4b74bb --- /dev/null +++ b/src/main/resources/logisim/icons/drawpoly.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/drawrect.gif b/src/main/resources/logisim/icons/drawrect.gif deleted file mode 100644 index 7b90bec2096a00f74a49bc744fe3e45fdc12a226..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmZ?wbhEHb6krfwc+A7Vz?jIvkj=nU!@yk3%(R(@VGjfQF$S)STwJ#q_?`;ze`FE) zEhhF4jud~gFmf^QGw3h?0muvn7P}88Jy-9w$mTu95wFn4sKD7hNrj_G#w}3b;LLSz prO$tDUZo@M + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/drawrrct.gif b/src/main/resources/logisim/icons/drawrrct.gif deleted file mode 100644 index 56050d95e91b8eebbd61cf4f51669ad7b344b2fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHb6krfwc+A7Vz?jIvkj=nU!@yk3%(R(@VGjfQF$S)STwJ#q_?`;ze`FE) zEhhF4jud~gFmf^QGw3h?0muvn7M~9%Jy-87XOZ2tzIlQQN0E%%Mc;)+)6%0j8dY@k zG8efzUg?kKJNB8eb^Y8o>4#O5ZPPBSY?hksoGNmoN-R?+a4P#U9*cSWX=nGjFfdpH E0LxS|egFUf diff --git a/src/main/resources/logisim/icons/drawrrct.svg b/src/main/resources/logisim/icons/drawrrct.svg new file mode 100644 index 00000000..c698600a --- /dev/null +++ b/src/main/resources/logisim/icons/drawrrct.svg @@ -0,0 +1,62 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/extender.gif b/src/main/resources/logisim/icons/extender.gif deleted file mode 100644 index a52583b4a93af9f09dd0585fa6047dd5b2bfa660..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmZ?wbhEHb6krfwSjfl#1pi?`@h1x-7XuT64oDOv&%mTMrGMpVt_uPj23?-lZ!f&w eQu;`}Q?0UPd0O8su|+v)u_b@6> + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/ground.gif b/src/main/resources/logisim/icons/ground.gif deleted file mode 100644 index bf17c62369575b96df73bee9032ff5f61147ba5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70 zcmZ?wbhEHb6krfwXkcUjg8%>jEB<6* + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/hexdig.gif b/src/main/resources/logisim/icons/hexdig.gif deleted file mode 100644 index 8cfdd688c2920d876009b0db9e665d29e7649a65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmZ?wbhEHb6krfwIK;{T1Rod}oQs{E_d9Riy!k&2DE?$&rS diff --git a/src/main/resources/logisim/icons/hexdig.svg b/src/main/resources/logisim/icons/hexdig.svg new file mode 100644 index 00000000..5a4379ae --- /dev/null +++ b/src/main/resources/logisim/icons/hexdig.svg @@ -0,0 +1,113 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/jkFlipFlop.gif b/src/main/resources/logisim/icons/jkFlipFlop.gif deleted file mode 100644 index 024484e7c95d67d26abc960e578fa4f755f96f3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 zcmZ?wbhEHb6krfwSjfZx1m)%B|G_}u + + + + + + + + + image/svg+xml + + + + + + + + JK + + diff --git a/src/main/resources/logisim/icons/joystick.gif b/src/main/resources/logisim/icons/joystick.gif deleted file mode 100644 index 6177d6d5b088a31a247260b071f10a1ea7382813..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmZ?wbhEHb6krfwXpvyx6X2;~V33oSUCY3rrmlK}f#DMagNcc;oxPo#n_ECYKxA~p z4tMwT%(UOWrribki;IeC>ua_)H~01RTtF2o5zVCJn{0z!60vxQL91Il2dRHh3=IXF4 taZVDP>7dcy!Q`!!BQ4CCyvSn0<_n!q53$V?Dzb87?+BS?XQ0Sn4FKI+RY?E< diff --git a/src/main/resources/logisim/icons/joystick.svg b/src/main/resources/logisim/icons/joystick.svg new file mode 100644 index 00000000..cda8ef32 --- /dev/null +++ b/src/main/resources/logisim/icons/joystick.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/keyboard.gif b/src/main/resources/logisim/icons/keyboard.gif deleted file mode 100644 index 0886385c11f2d9d655ca764e5e033dfe4d1c0318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmZ?wbhEHb6krfwXc1t@$V$&I$dhV+)zDNQHSzkyN&R!?%}!hSa>c6Uottm(+`Z$( zspFTgUcP((_RE*gzJB}kpG2VelZBBBXq65F5PA}Ge7OC}%&p0ONakU + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/led.gif b/src/main/resources/logisim/icons/led.gif deleted file mode 100644 index 98ec541b9a668a38c2486cb11b536443ba691279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmZ?wbhEHb6krfwIK;}p&%-f=h3PvRLu^{8*IC2=FrfI8g^`Paok52I2taBXn4K$j zS^eQY!TCVah-Kl@=o@N1DGW923X|4cVaTzWcU|i|^TPXURtoPCa!B7jQ*Xn9hG|;g XwDi^6C1Yo + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/menu.gif b/src/main/resources/logisim/icons/menu.gif deleted file mode 100644 index aa195eaf790262b20251ee48675904385a834788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmZ?wbhEHb6krfwIK%(~MMXvb|NjpO2?3IDp!k!8k&A(aK?kG)q?Uo%#ADYT76Yd3 z2|FfeowOE7(CE5f+I#5d!kkRD#auikxwkJ$7f6)+H=WM6HL2I;L{Hku6cq*rYXH4) BEV%#x diff --git a/src/main/resources/logisim/icons/menu.svg b/src/main/resources/logisim/icons/menu.svg new file mode 100644 index 00000000..b59019cb --- /dev/null +++ b/src/main/resources/logisim/icons/menu.svg @@ -0,0 +1,130 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/multiplexer.gif b/src/main/resources/logisim/icons/multiplexer.gif deleted file mode 100644 index e583c0509e3139ef3c646f6f5f60b95584a718f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmZ?wbhEHb6krfwc+9}S5CFss4Cff^?d>l=y!`+F|N8oR1}+8$UIri=6Da; + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/multiplier.gif b/src/main/resources/logisim/icons/multiplier.gif deleted file mode 100644 index 00cc3ac5cd594ea64a62c216aeabdce12599ce58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 917 zcmV;G18V$7Nk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;A04x9i000mG5C8xO zSpfYB97wRBKmZ66DpYvzpTma`9Rg?=vEoF303-r|2qfdbiyk{}{3lW(MUnu3lr)Kv rBf^m^Jv!`|5+cZlB3FK-xN_yqk1$cjtZ4Bh(U=R9A~eX9U_byn)}XNy diff --git a/src/main/resources/logisim/icons/multiplier.svg b/src/main/resources/logisim/icons/multiplier.svg new file mode 100644 index 00000000..b31d40ee --- /dev/null +++ b/src/main/resources/logisim/icons/multiplier.svg @@ -0,0 +1,83 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/nandGate.gif b/src/main/resources/logisim/icons/nandGate.gif deleted file mode 100644 index ae0a408cc58bd78eeb7b1c62f92e0d93017e294c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 900 zcmV-~1AF{ONk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PK0R0IZNU)&41OO5$1hBxMzX$&!O8i$W zVL^x!CAK>PfFQ<<5!-bf_z~nkNFyJbl&DOh%9RlT{Q3o;q)C}HZDwp~QRhUIBw>p5 axN>94mlNrsJbG{;01q0NI-EK%AOJf9PppIh diff --git a/src/main/resources/logisim/icons/nandGate.svg b/src/main/resources/logisim/icons/nandGate.svg new file mode 100644 index 00000000..a94ddd43 --- /dev/null +++ b/src/main/resources/logisim/icons/nandGate.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/nandGateRect.gif b/src/main/resources/logisim/icons/nandGateRect.gif deleted file mode 100644 index afd9a6628400eaf6d6ea4d580a69e84da5c171e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHb6krfwc+3C-|NsAg{P=NbXlPMUQD0x*s#U8jEiI29KMoYf1d9Jeor_Wv zOHxx5$}>wc6hbmm72G|20~i#4vM_Qn@H6Ouj073Zz~c9z(ergpMB7>G6SvfOTG*NH zD2T9qPkj+4vZ}i1NT7n*9>vxJ4<77l5omU3+`*_IFn>nTfk&)!E(9D;o{~3vdp`f; Tzxz%++89 + + + + + + + + + image/svg+xml + + + + + + + + + & + + diff --git a/src/main/resources/logisim/icons/negator.gif b/src/main/resources/logisim/icons/negator.gif deleted file mode 100644 index 2e0b2bb87edee8e0f0c7140e8bd942e18448182c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 887 zcmV--1Bm=bNk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000P70R0IZNU)$l00 + + + + + + + + + image/svg+xml + + + + + + + + x + - + + diff --git a/src/main/resources/logisim/icons/norGate.gif b/src/main/resources/logisim/icons/norGate.gif deleted file mode 100644 index 17c7cd5c5fd8d0ff0fc24a268a6e299b2ff7a0f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 902 zcmV;119|*MNk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PM0R0IZNU)$k00 + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/norGateRect.gif b/src/main/resources/logisim/icons/norGateRect.gif deleted file mode 100644 index 760d2146a53d8e10eb051235ec47a4de3d105260..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmZ?wbhEHb6krfwc+3C-|NsAAwQAMl$B&DOib6v}Wo2di`udI^KMoYf1d9Jeor_Wv zOHxx5$}>wc6hbmm72G|20~i#4vM_Qn@H6Ouj073Zz~cU)(ergpMB7>G6H&(*4^E$W z=)puaH$E4|9#xN`){Ps#m5H#2t}MAIBcLS4^f58CY-wun6rFo3cFUPn-zti|7j^yi Lq=<7fIT)+~3kp%{ diff --git a/src/main/resources/logisim/icons/norGateRect.svg b/src/main/resources/logisim/icons/norGateRect.svg new file mode 100644 index 00000000..d31f0326 --- /dev/null +++ b/src/main/resources/logisim/icons/norGateRect.svg @@ -0,0 +1,89 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + >1 + + + diff --git a/src/main/resources/logisim/icons/notGate.gif b/src/main/resources/logisim/icons/notGate.gif deleted file mode 100644 index f8e78c5d4da36ae33370905b7744e013a23ebdf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CabjNk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000O~0R0IZNU)&6g9d>hJP4rSLV^JP*>d + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/notGateRect.gif b/src/main/resources/logisim/icons/notGateRect.gif deleted file mode 100644 index de1fc93f0450ff940d7592cbe88b108eaaf723be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmZ?wbhEHb6krfwSjYeZ|NsBrzkffFRQxCET$GwvlA5AWo>`Ki5R#Fq;O^-gz@Ye( zg^`PanL!7n9HfzfNqbKJ%G13Ji(B+>bUU7{jGht5+`#&Tm7}R_(aclR)@q(hE5Gr{ N`0F`-9yKloYXAj&DIWj; diff --git a/src/main/resources/logisim/icons/notGateRect.svg b/src/main/resources/logisim/icons/notGateRect.svg new file mode 100644 index 00000000..e51b6408 --- /dev/null +++ b/src/main/resources/logisim/icons/notGateRect.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + 1 + + diff --git a/src/main/resources/logisim/icons/orGate.gif b/src/main/resources/logisim/icons/orGate.gif deleted file mode 100644 index 78dd96742b0c8a401849fb1ba794b0296628821d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 895 zcmV-_1AzQTNk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PF0R0IZNU)$k00 + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/orGateRect.gif b/src/main/resources/logisim/icons/orGateRect.gif deleted file mode 100644 index 17103052f66fca91a431bad3530f58a3380e4223..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmZ?wbhEHb6krfwc+3C-|NsAAwQAMl$B&DOib6v}Wo2di`udI^KMs~eClvpQIv1rT zmZYXAlxLP?D1>CBD!6<41~4f8WMSlD;AhYQ=>Qqdz~c15)?xM1pr!-6*>66nWt@?F z=tJ%@F&-DilAIl-tp~5Fmy586u1w*U5m27@dXw@uxA{s_)aF{nUR$kk`&QKM=^Hee G7_0$6Y&pOH diff --git a/src/main/resources/logisim/icons/orGateRect.svg b/src/main/resources/logisim/icons/orGateRect.svg new file mode 100644 index 00000000..b11a5b65 --- /dev/null +++ b/src/main/resources/logisim/icons/orGateRect.svg @@ -0,0 +1,79 @@ + + + + + + + + + + image/svg+xml + + + + + + + + >1 + + + diff --git a/src/main/resources/logisim/icons/parityEvenGate.gif b/src/main/resources/logisim/icons/parityEvenGate.gif deleted file mode 100644 index 3541e8e8d2c247a36fa81661423bd35fc5466cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmV;Z16TY6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;A04x9i000mG5C8xO zYykcF13<8#L4pDW0{F*};ka=P0VEvAP)?O&s#HasxKNI&aaA&o(CvW1pF&;wa_Y~UR;5lo Kda$d&fB-vS@WP=0 diff --git a/src/main/resources/logisim/icons/parityEvenGate.svg b/src/main/resources/logisim/icons/parityEvenGate.svg new file mode 100644 index 00000000..ed036f05 --- /dev/null +++ b/src/main/resources/logisim/icons/parityEvenGate.svg @@ -0,0 +1,74 @@ + + + + + + + + + + image/svg+xml + + + + + + + + 2K + + diff --git a/src/main/resources/logisim/icons/parityOddGate.gif b/src/main/resources/logisim/icons/parityOddGate.gif deleted file mode 100644 index 023b854d4efded21ebe33e9e9bb93ef67b16e793..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 951 zcmV;o14#TwNk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0SW;A04x9i000mG5C8xO zdjS3U13<8#L4pDW0{F*};ka=P0VEvAP)?O&s#HasxKNI&aaA&o( + + + + + + + + + image/svg+xml + + + + + + + + 2K + +1 + + diff --git a/src/main/resources/logisim/icons/pinInput.gif b/src/main/resources/logisim/icons/pinInput.gif deleted file mode 100644 index 9dd9fb95589d10c32e4dae82d8a1508c7a4f48af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmZ?wbhEHb6krfwc+3C-|NsAAa%+jiE(wOS3=EeTLa&9My>k{Qh!rUQWMSlD;9$@J z=>(a + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/pinOutput.gif b/src/main/resources/logisim/icons/pinOutput.gif deleted file mode 100644 index da15b42a651cfbe3d3df6280844259d898f3bbb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZ?wbhEHb6krfwc+3C-|NsAYaBx_1YYD?yhR|!F43`)fLO_C8f#OdVMlJ>p1|5)2 zkQodtt^y}LSMQBz;x)SED3K$sz{2dv(|94&AwXhFV2?r6^}~q)hKKspmiRU~JAYh$ fk+=HH;+*noM*o$er@4AMJtX + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/pinOutputReversed.gif b/src/main/resources/logisim/icons/pinOutputReversed.gif deleted file mode 100644 index a30be89c924b294c94e2850079a1f31bf59eaaf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZ?wbhEHb6krfwc+3C-|NsAYaBx_1YYD?yhR|!F43`)fLO_C8f#OdVMlJ>p1|5)2 zkQodtt^y}LSMQBz;x)SED3K$sz{2dv(|94&AwXhFV9(S-p3<}XI;0l5D?d + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/poke.gif b/src/main/resources/logisim/icons/poke.gif deleted file mode 100644 index cc352b7196ea192298a624aa2b5cc5f0c9e1e57f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmZ?wbhEHb6krfwIK;s4|Nnmm28P9n-g^qefNVHW{3ovDT$GwvlA5AWo>`Ki5R#Fq z;O^-gpv0i~lZBBBs7VKifrbb$Ffdzl>=HOQfz>dsC6S{#{NCIpg%91mroFVd7hswk nT6kF|y+V8UAD3WBIsPTWeEyD)Ih+lJW}ch8NR366fx#L8Z!$H} diff --git a/src/main/resources/logisim/icons/poke.svg b/src/main/resources/logisim/icons/poke.svg new file mode 100644 index 00000000..4a6ffca4 --- /dev/null +++ b/src/main/resources/logisim/icons/poke.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/power.gif b/src/main/resources/logisim/icons/power.gif deleted file mode 100644 index 57ea5df2378b3af4ee4ba943c759ff305151c503..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmZ?wbhEHb6krfwSjfZx1THQv|G_}YcYC+AJEeV$^_uThlWUvMRgYF(4 diff --git a/src/main/resources/logisim/icons/power.svg b/src/main/resources/logisim/icons/power.svg new file mode 100644 index 00000000..cefeefff --- /dev/null +++ b/src/main/resources/logisim/icons/power.svg @@ -0,0 +1,62 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/priencod.gif b/src/main/resources/logisim/icons/priencod.gif deleted file mode 100644 index cc5e7b70a3675b2002137f3b592ed1026e7a6f11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmZ?wbhEHb6krfwSjfZx1iN?d{tpIG!K%yXd1}1|!{VPxRGAy3L*3tc$ rHPofIusO9dQgf2@i&A-!8E-Xa8@_7$6|*VPl+#J($fAz{3=Gx)_lF`p diff --git a/src/main/resources/logisim/icons/priencod.svg b/src/main/resources/logisim/icons/priencod.svg new file mode 100644 index 00000000..b2a116aa --- /dev/null +++ b/src/main/resources/logisim/icons/priencod.svg @@ -0,0 +1,75 @@ + + + + + + + + + + image/svg+xml + + + + + + + + Pri + + diff --git a/src/main/resources/logisim/icons/probe.gif b/src/main/resources/logisim/icons/probe.gif deleted file mode 100644 index 746506036d71409669b6c71d729eab184e538b6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmZ?wbhEHb6krfwc+A1Tz{p_lV8?Kgp}w)MdspAK9b1>&TKez*9|jyi@h1x-7f_Q9 zNFHPc1B->h3D4DgBl>KMZn#(ETo33-x){pbwJ!K|8=GRlC!IIj&D!_edtSbRv(`T1 U&6A+1MaoNCmA^);7i6#o0B{s6j{pDw diff --git a/src/main/resources/logisim/icons/probe.svg b/src/main/resources/logisim/icons/probe.svg new file mode 100644 index 00000000..7b1ffcf6 --- /dev/null +++ b/src/main/resources/logisim/icons/probe.svg @@ -0,0 +1,76 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/projadd.gif b/src/main/resources/logisim/icons/projadd.gif deleted file mode 100644 index d4bea4ff7ff9a4e264d31d429efcd496014622f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmZ?wbhEHb6krfwSjfb{P|o1e;qo606o0ZXaxpM5=r8~QNS=X7ZA$;j(_-?sI2l|t jR~+3L$C@eE(sA|W)EB#a1*D8_T|YCY_voE-q72pme+?eT diff --git a/src/main/resources/logisim/icons/projadd.svg b/src/main/resources/logisim/icons/projadd.svg new file mode 100644 index 00000000..aeae6046 --- /dev/null +++ b/src/main/resources/logisim/icons/projadd.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/projapp.gif b/src/main/resources/logisim/icons/projapp.gif deleted file mode 100644 index 46e324a8e72d630b19523932cb6fd784ff1cd4b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmZ?wbhEHb6krfwIK%)3DGUsk80OBMd-v|$|Ns9(#1wzBFmf@lGw6W0Ahit4mKD41 z@ECZpdr69kKX6iOIcDe>*}|OIyX5JvH$i(1Tz5Csa@QEY=R25t^#NzT;Zebr$-h(r L+OJGxV6X-Ngi$64 diff --git a/src/main/resources/logisim/icons/projapp.svg b/src/main/resources/logisim/icons/projapp.svg new file mode 100644 index 00000000..50b67f3b --- /dev/null +++ b/src/main/resources/logisim/icons/projapp.svg @@ -0,0 +1,99 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/projdel.gif b/src/main/resources/logisim/icons/projdel.gif deleted file mode 100644 index 8a2658f4fba8d126eae02d0f8d547c1050fb7ef8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmZ?wbhEHb6krfwSjfcif`MUKZNq;sQ2fcl$i=|Kpu+$JAbAERwJH58Pfy&()ZlbU k`QVzW{qrilR>UfwkXZ6#YR2wXHTTG~lb`)sC(d9E0Q{{X9RL6T diff --git a/src/main/resources/logisim/icons/projdel.svg b/src/main/resources/logisim/icons/projdel.svg new file mode 100644 index 00000000..7bdd23de --- /dev/null +++ b/src/main/resources/logisim/icons/projdel.svg @@ -0,0 +1,68 @@ + + + + + + + + + + image/svg+xml + + + + + + + X + + diff --git a/src/main/resources/logisim/icons/projdown.gif b/src/main/resources/logisim/icons/projdown.gif deleted file mode 100644 index ae52e289a549f876e48e2730cf5f3df206149951..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmZ?wbhEHb6krfwSjfb{z;Hh+XUTssQ2fcl$i=|KpaT>I$_g+rFsV%GUwK-He>SrS ii{z@KzqZ9x@_2M|@0^>FDVJSUc8MkVZO?gD25SIU + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/projlayo.gif b/src/main/resources/logisim/icons/projlayo.gif deleted file mode 100644 index ef9127e34987834e2c3e3c5fe411638ca188ef7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmZ?wbhEHb6krfwIK<2V0x1j(ml*z|0>z&!j9d&X3_2hMAhit4#vZ%w@CaClF-bU| wYi|^|U7pIaLvSL?vUJU!C~o$2R&$-RT1oB~mP=kp{Jb?_;^Ly49t;fD0IESKU;qFB diff --git a/src/main/resources/logisim/icons/projlayo.svg b/src/main/resources/logisim/icons/projlayo.svg new file mode 100644 index 00000000..5c109d33 --- /dev/null +++ b/src/main/resources/logisim/icons/projlayo.svg @@ -0,0 +1,134 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/projsim.gif b/src/main/resources/logisim/icons/projsim.gif deleted file mode 100644 index 06055a5a31769a957eb3584dda3faf1fde56b72c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmZ?wbhEHb6krfwIK;{T1g@^G4CM?i9WMX>|F?kw#h)yUTny|CIv^DwwG7O*6}#@N zW3XZ8m{@#u_QTHjHrB@L4HHaiZlrrk8}R6d9B+2mu2KEOitQvL&$14t#odQbtToyC OZ1TluAM4314AubgS0`Tp diff --git a/src/main/resources/logisim/icons/projsim.svg b/src/main/resources/logisim/icons/projsim.svg new file mode 100644 index 00000000..20723ee9 --- /dev/null +++ b/src/main/resources/logisim/icons/projsim.svg @@ -0,0 +1,136 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/projtool.gif b/src/main/resources/logisim/icons/projtool.gif deleted file mode 100644 index a55dfcbd15e9434dc915286874ac96b7d3eb3565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmZ?wbhEHb6krfwSjfy^Y;5e};*yq@W@BTc_>+Z^i-DOzhXDvc@(fJcbNW}Z-#slO rP~Z`j%gv$Q&e{KnWzlAqNlWHvUznEjsLFfpL&+J2W&AQC3=Gx)%dr^g diff --git a/src/main/resources/logisim/icons/projtool.svg b/src/main/resources/logisim/icons/projtool.svg new file mode 100644 index 00000000..9ed7b3b2 --- /dev/null +++ b/src/main/resources/logisim/icons/projtool.svg @@ -0,0 +1,96 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/projup.gif b/src/main/resources/logisim/icons/projup.gif deleted file mode 100644 index 77945e98de0171be48d5487ed44b65f8947d6d89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmZ?wbhEHb6krfwSjfb{z;Hh+XUTssQ2fcl$i=|KpaT>I$_g+rFsV%GUwK;mVgLif jG0*J7k*lu<@*l2DNuL|JYs#DUxR2kiT + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/pullrect.gif b/src/main/resources/logisim/icons/pullrect.gif deleted file mode 100644 index 1e791eefe37cda2be58300800be56f61b7d998f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmZ?wbhEHb6krfwSjfl#1pi?`@h1x-7XuT64oDOv&%mTIg?Hw0-3LmOe06^{wMo1< c5O}XGHRXHjC5~xpr1q{0_1jt-%*tR50J|F>00000 diff --git a/src/main/resources/logisim/icons/pullrect.svg b/src/main/resources/logisim/icons/pullrect.svg new file mode 100644 index 00000000..d8146b91 --- /dev/null +++ b/src/main/resources/logisim/icons/pullrect.svg @@ -0,0 +1,80 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/pullshap.gif b/src/main/resources/logisim/icons/pullshap.gif deleted file mode 100644 index 13f26ea6b4bb05b6837f07ee56a23f0eb8886677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70 zcmZ?wbhEHb6krfwXkcUjg8%>jEB<6*< VYS}oBx`)PP&$leo4rXAm1^`!P6R-dP diff --git a/src/main/resources/logisim/icons/pullshap.svg b/src/main/resources/logisim/icons/pullshap.svg new file mode 100644 index 00000000..0e40f0c3 --- /dev/null +++ b/src/main/resources/logisim/icons/pullshap.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/ram.gif b/src/main/resources/logisim/icons/ram.gif deleted file mode 100644 index f3d81e7bc7ab68df4f111d2fb0be72b9546d4f6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmZ?wbhEHb6krfwSjYeZ|Ns9lDk=h!ia%KxxfqxkbU>mYc?Kr^IsKLg-kxuoGv!#< r)3c^|3w(VUrl~~sJ*!%!aB9`tHI + + + + + + + + + image/svg+xml + + + + + + + + RAM + + diff --git a/src/main/resources/logisim/icons/random.gif b/src/main/resources/logisim/icons/random.gif deleted file mode 100644 index 39a34eca22d460c9f777a38d9750674bdf9dcb93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 242 zcmZ?wbhEHb6krfwXc1r#mykCzv-a~3iA_i-E-vlq?VdSn+KN@nw{72a>dcAjw{G3M zd*<28XYW2e{Qmv^k6+*ZlL!=lvM_Q1thfa z9iN2;#+7%>4?H;dU@8x%LUV*k9}mY-X8{H~DGni%je9I*TAaRBUa*yE(@(tE?7-S{ zOmTyTiCEh;?~4J_T&eE*wH$oBOq{H0fkh0wyq!9nwMEQ2N*%0>)90utGFSruT9tXr diff --git a/src/main/resources/logisim/icons/random.svg b/src/main/resources/logisim/icons/random.svg new file mode 100644 index 00000000..9d493b73 --- /dev/null +++ b/src/main/resources/logisim/icons/random.svg @@ -0,0 +1,107 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/register.gif b/src/main/resources/logisim/icons/register.gif deleted file mode 100644 index 2cf72399d8ce3bd3550ac475eec20fba37e06212..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmZ?wbhEHb6krfwIK<2V1fij!t5&W0j|vojvM_QnurTO=RDjenFgttfy2EYYb>hGd zi{>iF9gGS*x1ISK6>7p(Zdq|^(wwR5mU~A$Y40)#PFs=9$j+2tc>Uy6zcZ>SEiEkZ O&Pl05n=_37 diff --git a/src/main/resources/logisim/icons/register.svg b/src/main/resources/logisim/icons/register.svg new file mode 100644 index 00000000..693b5967 --- /dev/null +++ b/src/main/resources/logisim/icons/register.svg @@ -0,0 +1,105 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/rom.gif b/src/main/resources/logisim/icons/rom.gif deleted file mode 100644 index 5800a754b87ca62bb7d733ff31589c607099061f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmZ?wbhEHb6krfwSjYeZ|Ns97(+r9~Ss1w(m>6_GT#!5ilfjgJ%>!@GH_e%Htn2An r)4T<~z6{e;BKw|ItxDit{c&aGm*0yl)!*6t+U(HA+xjtpfx#L8>@FbL diff --git a/src/main/resources/logisim/icons/rom.svg b/src/main/resources/logisim/icons/rom.svg new file mode 100644 index 00000000..c6e830e5 --- /dev/null +++ b/src/main/resources/logisim/icons/rom.svg @@ -0,0 +1,76 @@ + + + + + + + + + + image/svg+xml + + + + + + + + ROM + + diff --git a/src/main/resources/logisim/icons/select.gif b/src/main/resources/logisim/icons/select.gif deleted file mode 100644 index 255e2b70000d1c4c3f42f224e7e92140ccc5f5be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmZ?wbhEHb6krfwSjfQe|Nnmm1_l-uW*|fHCkrDN12cmTPy{F|z`($yKc{ioZh@1F xsuebQu00fKE!Z+aWZK=-X^*F^TGF|uT_bFoaCe;1$)NR_FPhqKEMj1=1^{qhA@2YH diff --git a/src/main/resources/logisim/icons/select.svg b/src/main/resources/logisim/icons/select.svg new file mode 100644 index 00000000..5f62bebe --- /dev/null +++ b/src/main/resources/logisim/icons/select.svg @@ -0,0 +1,64 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/shifter.gif b/src/main/resources/logisim/icons/shifter.gif deleted file mode 100644 index d47b3ea42aa19cfdf7d26b0e1235f30987513a83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmZ?wbhEHb6krfwSjfl#1poj4pE+|TkW~E1!pOzI%%B4j1<5lo8O`a>Jn(j3)0~i| wh|jVL?2fr}*`gwjPFeJI$-!US7&sPhK3QpQ7pD5&acn+a diff --git a/src/main/resources/logisim/icons/shifter.svg b/src/main/resources/logisim/icons/shifter.svg new file mode 100644 index 00000000..be34f48d --- /dev/null +++ b/src/main/resources/logisim/icons/shifter.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/shiftreg.gif b/src/main/resources/logisim/icons/shiftreg.gif deleted file mode 100644 index 4d857a5d3adaf96ac3508e0509a7551abff0df35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmZ?wbhEHb6krfwSjfZx1T$yO{0|0-KUo;L7?>G!K%yXd1}399{VPw`GAy1GaHG4B tcY1VwXoGp%f(WNMQcO-F2R^*sROY$=NnP&U`^Bkkx?O^gJk+=utN}VsBennl diff --git a/src/main/resources/logisim/icons/shiftreg.svg b/src/main/resources/logisim/icons/shiftreg.svg new file mode 100644 index 00000000..c8933908 --- /dev/null +++ b/src/main/resources/logisim/icons/shiftreg.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/simplay.png b/src/main/resources/logisim/icons/simplay.png deleted file mode 100644 index 46ef2935d566972f4877ef164d2cf8fec66d3aa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmV-I1HJr-P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipP} z5gQC%m_yG100P2EL_t(I%Vm>2Y#VhL#()2h`?NtZtW8it!xU6^Lu@RyfuV@e+2}~5 zj0lMVu`xy=ONEedbzTrsDN<;vX0LRp1+_yVP9mj3(4L(*acoY`-MtLvN`Pni>;3C_ zAH83X;y;L@Xrm~K4@AT-|CCax*7~dE<>e30b43JI2AxjlN|t3?^~;x8ym%4cf1Xd8 zrtEaP{Pf@f*4jp^)w=U9fljA$MQgqFcJmzy3J#t;VLblxxj+~O%+1cC(fn|GlcFdZ ztyb%fh@b(oEZb@{o1BhE>~wd@vYa3Y2!a65_c%Mt*y-+aIv&wzHp#MVs}$E!6m8V& zmrzRcG)eG058wB>Ke^902j5Z&EBL;T=XpF$5|q-^>z9b4Xahj!d46qSVUgrnf@>{~ zwRo<}?jQSHt-s6Hk8cnL0iNsPT1)aQVPRpBJkPHIXuu0A0a>2mI1Y|uaU2H_ZvDK; zo3FjW^@m?h+wnZIA}6c_03LuA5d^_ni!lac4Axo-DX3Lvc>Mb>%v5H${o5wiTC6b$ zf{09Kpp-%t3hOvif}Os3QBd_?;KEB6NRAWUd-Z*cF*uHcDilghFF*s6;b=(U`&eVJ zT4S~5>}CYMs?{p{dwUE9gPY|l=i2SIBuP((!&B+?`qJ+o%JK1uoE)FX;o*_= zdVT5j`Z64zN|N-X-EIpoS02(q9LFo$+jmLRl&}&``&0^)!We_=x`dUGG)>vwzDpd( zE5HGO1z2BSzX33rOukrJdY$?CdBU&)2%s2`M|8Vg9zA+U9LFmqANa>iz>C1*+S=Mj zwOZ{e;EG5&?a9&6(RZt>tDgfqz{&sIcn)*G%YSdEL;>{6vd`Q3FBL&GYM98~9smFU M07*qoM6N<$f^_PG00000 diff --git a/src/main/resources/logisim/icons/simplay.svg b/src/main/resources/logisim/icons/simplay.svg new file mode 100644 index 00000000..f61a3219 --- /dev/null +++ b/src/main/resources/logisim/icons/simplay.svg @@ -0,0 +1,74 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/simstep.png b/src/main/resources/logisim/icons/simstep.png deleted file mode 100644 index 6491f137977c70fe5c757242e9521e8fcdc4b19e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmV+z1LypSP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipP} z5jY!T;<0G}00NjvL_t(I%WacAOjBVLhM(_#_qXNNV2wXZ)j<=1$zTl8S;ORv8#>wm zn`>8>4ulRm$lza;MHdsCMMJ{mrAjmr#1Kr&kM_H^@^NoJho%*c?{?04^W@~bIl>r& z5Q46zr>84vn%*$R_}!im;+K^2K5%PdVuFJbUBJxD%oVNm{H4p685$ZQ69hd|v(;jG zd6|XRuW?=XD)6dUEdBvhDwQiji21SW*O5~4<7N+#&1N`RD3GQpPaZ$U7}JAT z09xz$v9U3Vy;q&SmTJO{G>3OX+05YG?S4KugE*v|4f^W4N zD<97A=8ez!^C^~P;W!Qp3#ZxG$aCcAH~Rbg2?C$Z&CR2uqoXgaBuQ=#3=UGSZQ;8v zA3y$NcsS(g)5BzffNUni*47@LXAyWF^;(^Q!9kKFxtSyh7U1<|v!v|=&+`CST2c%T zhdg|gBM5q7;JPkJn$VZc0(d~@1^`k@q?7<0I^?jj@(X~w_v{|Pacpec{wqf7&(Ohf z8~}1To0F$H+e}Tm{Lga`pc_iz`##d@@Y-#tF2_t1WvA$FDJ*>7r=b*p2C$S;&)-+8 zgkcCmaQ1ALjg1yllP>#7!hV`!%MRFBf-nquU#+5)dagPk3gvRy)M|CpY_^P2u~8~E zySv}b_SUx9+1WLX9}S~aY?{rMsnzPHTrL}+0ALwo)}tsY&dog|junpQB7{IniS0Pp zwvDhX9M2(+6?1dXh@z-CK0dwosdNYU1T_8!=&AtZ4@L~Mfo))&fAkyS W@hdNnj}un_0000IIs diff --git a/src/main/resources/logisim/icons/simstep.svg b/src/main/resources/logisim/icons/simstep.svg new file mode 100644 index 00000000..497e2ca5 --- /dev/null +++ b/src/main/resources/logisim/icons/simstep.svg @@ -0,0 +1,79 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/simstop.png b/src/main/resources/logisim/icons/simstop.png deleted file mode 100644 index 89e8000fdf943aca786b95f25a1eaf5856774bc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 804 zcmV+<1Ka$GP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipP} z5hEs&yf)$h00N{*L_t(I%Vm?lZxlxy#XmDU`}6X{7o>F9vf+}34WUR!T5Qs!OL6W( z8A~qnH>9*2+7uV=YSMrVatnwRB2wHW2WKz^Hnw%=TXwy=+nsL;SjP^pd!z5Xc{B5# z;(zFNyEm=1KZ;0DuPLPpt@Urq%gaBVo)r;PO?tiFwX!TXzP@sW*2Rki!O4D#qM-lm z8Gk-~iZN!f-EQAIBhc&hu4%0|u3!HSLD+fqiY&`d1R9Nq+4JX7DDK|9gSB?C-EQ9# z5i~$qmK%#pOJw;mgBLFmfiMgSf`Bj#5rM&rmt^@di%UzCWw}v{JKb*g=H<&@eKXTM z$L`)P(I&DO0RyUzy%zQ@6v0~QuqR8@5YKm&f%2&rs|=Xr>= z09b4Bd>{Lsi?w*3M`cT*MhM^oXc0jW9LK?N47RG?2~-uvIA^%y7#znz5JUt3t&~Dp zh3mQ)W6qptjC;nBF$ULlQC6YUy95|ul4hwF1OblLRAmW3Ih|s(rkqXzsLB%KIH({X z%~F5~fEkTOx3>p_A6j30Nl_Hc#WCe{%3K^{5$58U>14uO9HX@6qbQ>P&)%F)qShQpB@9gQVT-^zHLN|xoazkev5PDg;*I!HT7lB{fQ z-Y3s z^!t6bw*DeXl9hTM_^(XBCqQd$ZSCh~v-v&XiAe2WG8_*7SY2KH1?U6g588MNv%tCc iA**45!`k-gI{ypNBwAWb|AhSj0000 + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/simtplay.png b/src/main/resources/logisim/icons/simtplay.png deleted file mode 100644 index 9a89c19f77db68b985e147e5d73af1da72d1e76f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 844 zcmV-S1GD^zP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipP} z5jYQdIAs(700PWOL_t(I%bk-;OjHLHhQE970C#412t-MkSd0tO5!7h00ij*BrYjQ@ zjSV2JsF6eibwQIRiln+R_&};@LPA=3#<*!+X-asc3bbKt>LVHy6KFbEbS6-kJ9Fi$*NdinMq9{7w*8%ehwBURD}y zy?ANx@Sy|cv1ruO(|7F~O;b+;-bAAaF%jo%<(GR-tN@s%iD4MnwrwpeM##v_G!`R^ z7sBBXW-Ru)QP*`nCnxuKckk8O>dL*oL|p+sYHB_;?l=ww1?vnmZhJ&kDK9H!eZdDj zdT^f&Ma4`_O))Y$hKQi+?%>xoRXzX}2z=jsqC`{G^Nxro&Ew(d?GDzh&c#Nh&|ie2 zs$^t%nVfit*Xzczto)9jI!`440D*j;uTD{fPs+>q|Lm`1eY*>N@^9Rk>5Pt!P+L<& z-I01e`?La05iHYeTyf3IKekI(PoJ2!EpstT7XKO(DMU^;9hVRNe)+AxUn)lq%Es$e z5}kh`ZEZhD@&v@=aolbmi$3O2C`#kjHIxq5^VOc6 zuUtq5=bBM>| zh_i$(4k?-f2nw*U1VcfC%Hlk{H>&0J3bV8Sbq0e$rvLeu+qZrvH6?`8#ar};yXW%H9W(Dk3b!Z5kWu*gJmgKDwuPU`KZe5J + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/simtstep.png b/src/main/resources/logisim/icons/simtstep.png deleted file mode 100644 index 2edc0f622c30cd2f9ca41f2f9b774f7159559cfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmV-b1FHOqP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipP} z5h5H-tKJa+00PxXL_t(I%bk-=XcT7{$A9zg>_>KXHk$1c$)cNtAjDW}+N~re^-#RD z#e-n6i5f(a3X1Ka@nqUi`{9y}jkNS21nXCVR1t3qQkAyGLxKd<$izJ?LRUz#HYPK> zGrO6$2eVPBm-e|l@bKsNeEfM}F;1TylBdrON&ZiqIX5ixg}mw5j(KwMm;VG&`}zmu z#@3enz=@x3e7bLMTOpqho*(}8bB{-S188NTloX_NQ=OlD-17>+wrwoSqF5|CbMq#8 zIBdTF7bG+WtWOUDFkh; zE!4+X@$mjV)-)xJ(M~LIDltF(m$iY7csf|V` zB3RwngdzmGu8}q-(6kC1$Eg`Sb>?Up05Db)i|tnw$$M?BJWE}n^6*vy>2WH;Ax1`S zv!|rDGP2Qz;O9!ds0}R8Y`->o| zs`B({j*FL`8&qC_QmI6s!cSX!J01l*3q_pO&14=K7=}qAq0^VLP!xr#stD85Hh#Z& z1>i^*a=96NJ|C(O;4V-sl>itWogS>?f6vZp5{YS9g!C{I6B@eiC7rg2MlbR3Q3jv7fpFN1 z@|yoxci`Y>hbosX-v!bqrKGvJ2g5L#HwWZnM^n!Cb$1*~J{zuH;eRavpa!UZ$)(1{ fYyx@UYFYRXSK<}&uj6l?00000NkvXXu0mjfPdSYN diff --git a/src/main/resources/logisim/icons/simtstep.svg b/src/main/resources/logisim/icons/simtstep.svg new file mode 100644 index 00000000..33863577 --- /dev/null +++ b/src/main/resources/logisim/icons/simtstep.svg @@ -0,0 +1,102 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/simtstop.png b/src/main/resources/logisim/icons/simtstop.png deleted file mode 100644 index 4ff9391abd7c814f628b42a3b8f5f9e7bb2e0e03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 821 zcmV-51Iqk~P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipP} z5hVkU;zc6>00Om1L_t(I%bkPo9zLs)g}0XV2f?wxu?Zh{xSG zT5i=jo!Su~Clx3{LPVWdy=ujQG=O0k#9}c_(@g#x9b-yvZftaH^mH^jjFCu81nRo3 zPo0{-zd3kw^V-!by(zx~m|x#;__2xN_{hU+ugrqJEcV2S#CEw+OAMskdKK*S@|3snuf=dL+{%+WM}Ib zhEa6&>b1iu0KkhPuXnq{AuI}1F>>M#d3%?me|U{M*F$^z6EA^bkp}PMx_5E(~5l)Enry|dUh6p zni`xAaM~tnRt3-Q1{wU&M^|%@NMApCNg0v8e!7~+{gVMnQ4oy|lbM-GhNhv3LQE4; z3IL@P4g~ev7N!0GhK3@I;c%EwpTE%7`WTnX1r8?;mxi+Kae!^}<9#U2o&cOYe(d1D zz~I-Oo?h|`3W>+Zk0{d7otANA;9FWn+N4E<8|wEh?e6OS+S=O2tIke(dwa;r%f+^= z@itA9>5G?QnI-_XW#RnmHzJQ7KDg)em1KrOpXR=N+2O2OvJ5R|pgcL0`u&s!7FX`s zwtcIe + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/splitter.gif b/src/main/resources/logisim/icons/splitter.gif deleted file mode 100644 index e8df626be03ffef38b1cdbff52b9d56605c08bc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmZ?wbhEHb6krfwIK;+a6JWy-z|hdp;NalE00fs9{)2(yPZmZl26hG=kRV7c1G9R? ut~+%qZIbi4TEe<>U*BsIO?lY+RI>HaDJP+&X-3aCJ!pRV>)$_425SJ?QzWqf diff --git a/src/main/resources/logisim/icons/splitter.svg b/src/main/resources/logisim/icons/splitter.svg new file mode 100644 index 00000000..9509f022 --- /dev/null +++ b/src/main/resources/logisim/icons/splitter.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/srFlipFlop.gif b/src/main/resources/logisim/icons/srFlipFlop.gif deleted file mode 100644 index 536683c0e6e88412b3d8d34cc22161354e028e8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmZ?wbhEHb6krfwSjfZx1m)%B|G_}Fm03WcS{r6#{2}yp%Pbb@cJc01rV{25SJ2 Co+(lQ diff --git a/src/main/resources/logisim/icons/srFlipFlop.svg b/src/main/resources/logisim/icons/srFlipFlop.svg new file mode 100644 index 00000000..62c3b05d --- /dev/null +++ b/src/main/resources/logisim/icons/srFlipFlop.svg @@ -0,0 +1,77 @@ + + + + + + + + + + image/svg+xml + + + + + + + + SR + + diff --git a/src/main/resources/logisim/icons/subcirc.gif b/src/main/resources/logisim/icons/subcirc.gif deleted file mode 100644 index ea99cd3ea9664bb631a19d157598ad3da3c0ba50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302 zcmZ?wbhEHb6krfwSjqqb|NsC0^XCr(D+5Cw!-Jm>PTV}fpwGZ?iJ{_I#rrSs)2F2~ z_%U32e2qbw;n%-k3|tHh>I{!wKRW*9I71}^LjXhb%H~ghK4m}2{`2q8&F?oE5*QeG z85pV=u6@6D`Qc@Ta|}JNdJ-ljFvK!E{rMDZAvFobpDc`A4E78LNyuyJTBX&>47mriwv;rq=lUh-+`N}KPRZol*pLpH)$>_RQbltVNA;q^-`Yag~ c{NG1-7RMAMG^BW^)dsrtcBf46bY!pw0I^hE`v3p{ diff --git a/src/main/resources/logisim/icons/subcirc.svg b/src/main/resources/logisim/icons/subcirc.svg new file mode 100644 index 00000000..63fb69b8 --- /dev/null +++ b/src/main/resources/logisim/icons/subcirc.svg @@ -0,0 +1,125 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/subtractor.gif b/src/main/resources/logisim/icons/subtractor.gif deleted file mode 100644 index c2420b88abb6ca196264313c2b9dcd9191109df9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmZ?wbhEHb6krfwSjqqb|NsC0^XCr(D+5Cw!-Jm>PTV}fpwGZ?iJ{_I#rrSs)2F2~ z_%U32e2qbw;n%-k3|tHh>I{!wKRW*9I71}^LjXhb%H~ghK4m}2{`2q8&F?oE5*QeG z85pV=u6@6D`Qc@Tb0G6+2NZv@Fmf^2Gw6VP0`e0Bo9Ti11s*zFj3<@^Rq|NO4^Uqq sxz?|~Vb#=CwQ-wc^-E_?={xx#KcXjg_U*jVInw_Yojhh^$iZL@0R14Vg#Z8m diff --git a/src/main/resources/logisim/icons/subtractor.svg b/src/main/resources/logisim/icons/subtractor.svg new file mode 100644 index 00000000..f312dfea --- /dev/null +++ b/src/main/resources/logisim/icons/subtractor.svg @@ -0,0 +1,77 @@ + + + + + + + + + + image/svg+xml + + + + + + + + - + + diff --git a/src/main/resources/logisim/icons/tFlipFlop.gif b/src/main/resources/logisim/icons/tFlipFlop.gif deleted file mode 100644 index 06be0ff2598d1fdcfbb6d29f67cf9e15dd2e3431..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmZ?wbhEHb6krfwSjfZx1THQv|G_}FB9cAvORW95~|ox*db>1&@*6u)h}PWXb6`MKvSJe0T?tO4$=A^HFS diff --git a/src/main/resources/logisim/icons/tFlipFlop.svg b/src/main/resources/logisim/icons/tFlipFlop.svg new file mode 100644 index 00000000..ed3d7000 --- /dev/null +++ b/src/main/resources/logisim/icons/tFlipFlop.svg @@ -0,0 +1,77 @@ + + + + + + + + + + image/svg+xml + + + + + + + + T + + diff --git a/src/main/resources/logisim/icons/text.gif b/src/main/resources/logisim/icons/text.gif deleted file mode 100644 index 93ebb4d5b43c2430bff4c2749dd3642074c836b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmZ?wbhEHb6krfwc+A7V#Ka^eC8epUX>M-r>+2g66O)ydRaaNn-Q7KP>eNMx7VX@* z^FI<${K>+|#lX*?!vF*zGZ + + + + + + + + + image/svg+xml + + + + + + + A + + diff --git a/src/main/resources/logisim/icons/trans0.gif b/src/main/resources/logisim/icons/trans0.gif deleted file mode 100644 index 9e31d6a7a060efd5f716e2d912071d6dbb9732e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmZ?wbhEHb6krfwXkcUjg8%>jEB<6* + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/trans1.gif b/src/main/resources/logisim/icons/trans1.gif deleted file mode 100644 index 523ae5d5a65cebc7f4961977bd81f133e6425284..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmZ?wbhEHb6krfwXkcUjg8%>jEB<6* + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/transmis.gif b/src/main/resources/logisim/icons/transmis.gif deleted file mode 100644 index 9ebb02019ad6dc48bf9937c6909f48de43954dd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76 zcmZ?wbhEHb6krfwXkcUjg8%>jEB<6* + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/tty.gif b/src/main/resources/logisim/icons/tty.gif deleted file mode 100644 index 4f60bb9214a7543e6d20b2bee8b5bcb73cd5b61d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmZ?wbhEHb6krfwSjfZx0!tYFgMs2dLFb~>#FEq$h4Rdj31pDc`A3``6< zAeA6Z3{1LH`d6Nw%dog5y(yt_OE0r0HdbUgO_>$`Wv9`eX=+^)XD)dkGQW_c Jy@`pz8US7rDPjNs diff --git a/src/main/resources/logisim/icons/tty.svg b/src/main/resources/logisim/icons/tty.svg new file mode 100644 index 00000000..3206a8eb --- /dev/null +++ b/src/main/resources/logisim/icons/tty.svg @@ -0,0 +1,76 @@ + + + + + + + + + + image/svg+xml + + + + + + + + abc + + diff --git a/src/main/resources/logisim/icons/tunnel.gif b/src/main/resources/logisim/icons/tunnel.gif deleted file mode 100644 index 463f2797aa3e07dbdf527e7f11a96c4d657723af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmZ?wbhEHb6krfwIK<2V1hZz%TDfxNe^j9OPtdt2HL)Z$MWH;iBtya7(>H)Y@h1x- z7Xu4}4oDlw00w3ak6m~E8JzNL*n2}yq3yrIf`WvXoel}JGPbuZ{>_(UbJ=Iv^^o`f JC$cbD0{}@6Gu;3H diff --git a/src/main/resources/logisim/icons/tunnel.svg b/src/main/resources/logisim/icons/tunnel.svg new file mode 100644 index 00000000..9a105240 --- /dev/null +++ b/src/main/resources/logisim/icons/tunnel.svg @@ -0,0 +1,64 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/main/resources/logisim/icons/wiring.gif b/src/main/resources/logisim/icons/wiring.gif deleted file mode 100644 index 81e21ef1864edd30c9cf53d54d5c140ba60a0e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmZ?wbhEHb6krfwSjfQ8y1G?2UzZ_(;s5{tia%KxxfqxkbQpjDB+tO4F{gj!>9?E* pj2$~ZG;G~;^{(dqHpz + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/xnorGate.gif b/src/main/resources/logisim/icons/xnorGate.gif deleted file mode 100644 index 6384e6dbd16e7984f09882a6c165371bf2ec4a8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmV;819JRFNk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PT0R0IZNU)$k00#jm>|&50LI8XAAZ#d5 z;wu3EY$>F8@Zg?*|0GhB=nCV%dm1S|1PL + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/xnorGateRect.gif b/src/main/resources/logisim/icons/xnorGateRect.gif deleted file mode 100644 index 917b2f7371e3a83df32323e0a126199245f845bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmZ?wbhEHb6krfwSjYeZ|NsBrzkffFRQxCET$GwvlA5AWo>`Ki5R#Fq;O^-gz@Ye( zg^`PanL!7n9Hfzf$w;QJ@~{}ca)zH5S4!LF+`7uZ4-;=hDEWALH5qJtDc%1f=%)Yn US9e|-cQ);rvu=gQCoTqS0Qf8|2mk;8 diff --git a/src/main/resources/logisim/icons/xnorGateRect.svg b/src/main/resources/logisim/icons/xnorGateRect.svg new file mode 100644 index 00000000..a2485ce7 --- /dev/null +++ b/src/main/resources/logisim/icons/xnorGateRect.svg @@ -0,0 +1,86 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + 1 + + diff --git a/src/main/resources/logisim/icons/xorGate.gif b/src/main/resources/logisim/icons/xorGate.gif deleted file mode 100644 index 21472521c40c23ef827de8a0fa78100b2ec2f324..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906 zcmV;519kjINk%w1VGsZi0OtSz000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PQ0R0IZNU)$k00#jm1klCcK!gDH{M)0@ zp+AbR0Q}oX5urhd5;sotNRXl{jUw;aBKh#3NRcZGLVO96sdJ0a?`Hvj+t diff --git a/src/main/resources/logisim/icons/xorGate.svg b/src/main/resources/logisim/icons/xorGate.svg new file mode 100644 index 00000000..cb325d88 --- /dev/null +++ b/src/main/resources/logisim/icons/xorGate.svg @@ -0,0 +1,70 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/main/resources/logisim/icons/xorGateRect.gif b/src/main/resources/logisim/icons/xorGateRect.gif deleted file mode 100644 index 48fe97039ae10d59eea514eb367653bbbbe48ff9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmZ?wbhEHb6krfwSjYeZ|6xG!pQv+DYGO%hib8p2Nrpm5Myi6lr*8m*;!hSvE(RtB z9guR6Mg}I`DGe(#*ccbHygl(jDOYk)WU1VV*hkN1q*$#DTirTc^L$}ub!p$eKY6cp K+h#K{SOWl`h%4p* diff --git a/src/main/resources/logisim/icons/xorGateRect.svg b/src/main/resources/logisim/icons/xorGateRect.svg new file mode 100644 index 00000000..91100f46 --- /dev/null +++ b/src/main/resources/logisim/icons/xorGateRect.svg @@ -0,0 +1,76 @@ + + + + + + + + + + image/svg+xml + + + + + + + + 1 + + From 21fe06669e24633073a3c4f3347c204b6bb35e47 Mon Sep 17 00:00:00 2001 From: Ryan Steinmetz Date: Wed, 13 Nov 2013 10:26:19 -0500 Subject: [PATCH 15/24] Default to left alignment. --- src/main/java/com/cburch/logisim/std/base/Text.java | 11 +++++------ .../com/cburch/logisim/std/base/TextAttributes.java | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/cburch/logisim/std/base/Text.java b/src/main/java/com/cburch/logisim/std/base/Text.java index 667e7298..403eff4c 100644 --- a/src/main/java/com/cburch/logisim/std/base/Text.java +++ b/src/main/java/com/cburch/logisim/std/base/Text.java @@ -23,12 +23,11 @@ import static com.cburch.logisim.util.LocaleString.*; public class Text extends InstanceFactory { - public static Attribute ATTR_TEXT = Attributes.forString("text", - __("textTextAttr")); - public static Attribute ATTR_FONT = Attributes.forFont("font", - __("textFontAttr")); - public static Attribute ATTR_HALIGN = Attributes.forOption("halign", - __("textHorzAlignAttr"), new AttributeOption[] { + public static Attribute ATTR_TEXT = Attributes.forString("text",__("textTextAttr")); + public static Attribute ATTR_FONT = Attributes.forFont("font",__("textFontAttr")); + public static Attribute ATTR_HALIGN = Attributes.forOption("halign",__("textHorzAlignAttr"), + new AttributeOption[] + { new AttributeOption(Integer.valueOf(TextField.H_LEFT), "left", __("textHorzAlignLeftOpt")), new AttributeOption(Integer.valueOf(TextField.H_RIGHT), diff --git a/src/main/java/com/cburch/logisim/std/base/TextAttributes.java b/src/main/java/com/cburch/logisim/std/base/TextAttributes.java index 9c235468..3c446f65 100644 --- a/src/main/java/com/cburch/logisim/std/base/TextAttributes.java +++ b/src/main/java/com/cburch/logisim/std/base/TextAttributes.java @@ -28,7 +28,7 @@ class TextAttributes extends AbstractAttributeSet { public TextAttributes() { text = ""; font = StdAttr.DEFAULT_LABEL_FONT; - halign = Text.ATTR_HALIGN.parse("center"); + halign = Text.ATTR_HALIGN.parse("left"); valign = Text.ATTR_VALIGN.parse("base"); offsetBounds = null; } From dbd9a544d85bf94e3321505542b926dbd33fda13 Mon Sep 17 00:00:00 2001 From: Mike Spallino Date: Wed, 13 Nov 2013 14:20:57 -0500 Subject: [PATCH 16/24] Hard coded the size of the SVG Icons. --- src/main/java/com/cburch/draw/tools/SVGIcon.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/cburch/draw/tools/SVGIcon.java b/src/main/java/com/cburch/draw/tools/SVGIcon.java index d39d0ccb..8a42fb26 100644 --- a/src/main/java/com/cburch/draw/tools/SVGIcon.java +++ b/src/main/java/com/cburch/draw/tools/SVGIcon.java @@ -45,12 +45,14 @@ public SVGIcon(String path) { @Override public int getIconHeight() { - return (int)svgIcon.getPrimitiveBounds().getHeight(); + //return (int)svgIcon.getPrimitiveBounds().getHeight(); + return 16; } @Override public int getIconWidth() { - return (int)svgIcon.getPrimitiveBounds().getWidth(); + //return (int)svgIcon.getPrimitiveBounds().getWidth(); + return 16; } private void paintSvgIcon(Graphics2D g, int x, int y, double scaleX, double scaleY) { From ecf5be4c2e8d72eab1e1353c90978111ea2112f5 Mon Sep 17 00:00:00 2001 From: Joey Lawrance Date: Sun, 1 Dec 2013 19:59:48 -0500 Subject: [PATCH 17/24] Added Sonar Runner to Logisim build script. --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index e21bcb40..70fd0cb8 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'application' apply plugin: 'launch4j' +apply plugin: 'sonar-runner' mainClassName = "com.cburch.logisim.Main" version = '2.7.2' From 099025e8880590a8ab8fae575feb7ff1c75d8d34 Mon Sep 17 00:00:00 2001 From: Ryan Steinmetz Date: Mon, 9 Dec 2013 21:46:04 -0500 Subject: [PATCH 18/24] delete --- src/main/java/com/cburch/gray/Components.java | 45 ------- .../java/com/cburch/gray/CounterData.java | 70 ----------- .../java/com/cburch/gray/CounterPoker.java | 74 ----------- .../java/com/cburch/gray/GrayCounter.java | 97 --------------- .../java/com/cburch/gray/GrayIncrementer.java | 116 ------------------ .../com/cburch/gray/SimpleGrayCounter.java | 73 ----------- 6 files changed, 475 deletions(-) delete mode 100644 src/main/java/com/cburch/gray/Components.java delete mode 100644 src/main/java/com/cburch/gray/CounterData.java delete mode 100644 src/main/java/com/cburch/gray/CounterPoker.java delete mode 100644 src/main/java/com/cburch/gray/GrayCounter.java delete mode 100644 src/main/java/com/cburch/gray/GrayIncrementer.java delete mode 100644 src/main/java/com/cburch/gray/SimpleGrayCounter.java diff --git a/src/main/java/com/cburch/gray/Components.java b/src/main/java/com/cburch/gray/Components.java deleted file mode 100644 index d946bf9f..00000000 --- a/src/main/java/com/cburch/gray/Components.java +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2010, Carl Burch. License information is located in the - * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ - -package com.cburch.gray; - -import java.util.Arrays; -import java.util.List; - -import com.cburch.logisim.tools.AddTool; -import com.cburch.logisim.tools.Library; - -/** The library of components that the user can access. */ -public class Components extends Library { - /** The list of all tools contained in this library. Technically, - * libraries contain tools, which is a slightly more general concept - * than components; practically speaking, though, you'll most often want - * to create AddTools for new components that can be added into the circuit. - */ - private List tools; - - /** Constructs an instance of this library. This constructor is how - * Logisim accesses first when it opens the JAR file: It looks for - * a no-arguments constructor method of the user-designated class. - */ - public Components() { - tools = Arrays.asList(new AddTool[] { - new AddTool(new GrayIncrementer()), - new AddTool(new SimpleGrayCounter()), - new AddTool(new GrayCounter()), - }); - } - - /** Returns the name of the library that the user will see. */ - @Override - public String getDisplayName() { - return "Gray Tools"; - } - - /** Returns a list of all the tools available in this library. */ - @Override - public List getTools() { - return tools; - } -} - diff --git a/src/main/java/com/cburch/gray/CounterData.java b/src/main/java/com/cburch/gray/CounterData.java deleted file mode 100644 index 16381037..00000000 --- a/src/main/java/com/cburch/gray/CounterData.java +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (c) 2010, Carl Burch. License information is located in the - * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ - -package com.cburch.gray; - -import com.cburch.logisim.data.BitWidth; -import com.cburch.logisim.data.Value; -import com.cburch.logisim.instance.InstanceData; -import com.cburch.logisim.instance.InstanceState; - -/** Represents the state of a counter. */ -class CounterData implements InstanceData, Cloneable { - /** Retrieves the state associated with this counter in the circuit state, - * generating the state if necessary. - */ - public static CounterData get(InstanceState state, BitWidth width) { - CounterData ret = (CounterData) state.getData(); - if (ret == null) { - // If it doesn't yet exist, then we'll set it up with our default - // values and put it into the circuit state so it can be retrieved - // in future propagations. - ret = new CounterData(null, Value.createKnown(width, 0)); - state.setData(ret); - } else if (!ret.value.getBitWidth().equals(width)) { - ret.value = ret.value.extendWidth(width.getWidth(), Value.FALSE); - } - return ret; - } - - /** The last clock input value observed. */ - private Value lastClock; - - /** The current value emitted by the counter. */ - private Value value; - - /** Constructs a state with the given values. */ - public CounterData(Value lastClock, Value value) { - this.lastClock = lastClock; - this.value = value; - } - - /** Returns a copy of this object. */ - @Override - public Object clone() { - // We can just use what super.clone() returns: The only instance variables are - // Value objects, which are immutable, so we don't care that both the copy - // and the copied refer to the same Value objects. If we had mutable instance - // variables, then of course we would need to clone them. - try { return super.clone(); } - catch (CloneNotSupportedException e) { return null; } - } - - /** Updates the last clock observed, returning true if triggered. */ - public boolean updateClock(Value value) { - Value old = lastClock; - lastClock = value; - return old == Value.FALSE && value == Value.TRUE; - } - - /** Returns the current value emitted by the counter. */ - public Value getValue() { - return value; - } - - /** Updates the current value emitted by the counter. */ - public void setValue(Value value) { - this.value = value; - } -} - diff --git a/src/main/java/com/cburch/gray/CounterPoker.java b/src/main/java/com/cburch/gray/CounterPoker.java deleted file mode 100644 index 2cd59084..00000000 --- a/src/main/java/com/cburch/gray/CounterPoker.java +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright (c) 2010, Carl Burch. License information is located in the - * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ - -package com.cburch.gray; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; - -import com.cburch.logisim.data.BitWidth; -import com.cburch.logisim.data.Bounds; -import com.cburch.logisim.data.Value; -import com.cburch.logisim.instance.InstancePainter; -import com.cburch.logisim.instance.InstancePoker; -import com.cburch.logisim.instance.InstanceState; -import com.cburch.logisim.instance.StdAttr; - -/** When the user clicks a counter using the Poke Tool, a CounterPoker object - * is created, and that object will handle all user events. Note that - * CounterPoker is a class specific to GrayCounter, and that it must be a - * subclass of InstancePoker in the com.cburch.logisim.instance package. */ -public class CounterPoker extends InstancePoker { - public CounterPoker() { } - - /** Determines whether the location the mouse was pressed should result - * in initiating a poke. - */ - @Override - public boolean init(InstanceState state, MouseEvent e) { - return state.getInstance().getBounds().contains(e.getX(), e.getY()); - // Anywhere in the main rectangle initiates the poke. The user might - // have clicked within a label, but that will be outside the bounds. - } - - /** Draws an indicator that the caret is being selected. Here, we'll draw - * a red rectangle around the value. */ - @Override - public void paint(InstancePainter painter) { - Bounds bds = painter.getBounds(); - BitWidth width = painter.getAttributeValue(StdAttr.WIDTH); - int len = (width.getWidth() + 3) / 4; - - Graphics g = painter.getGraphics(); - g.setColor(Color.RED); - int wid = 7 * len + 2; // width of caret rectangle - int ht = 16; // height of caret rectangle - g.drawRect(bds.getX() + (bds.getWidth() - wid) / 2, - bds.getY() + (bds.getHeight() - ht) / 2, wid, ht); - g.setColor(Color.BLACK); - } - - /** Processes a key by just adding it onto the end of the current value. */ - @Override - public void keyTyped(InstanceState state, KeyEvent e) { - // convert it to a hex digit; if it isn't a hex digit, abort. - int val = Character.digit(e.getKeyChar(), 16); - BitWidth width = state.getAttributeValue(StdAttr.WIDTH); - if (val < 0 || (val & width.getMask()) != val) return; - - // compute the next value - CounterData cur = CounterData.get(state, width); - int newVal = (cur.getValue().toIntValue() * 16 + val) & width.getMask(); - Value newValue = Value.createKnown(width, newVal); - cur.setValue(newValue); - state.fireInvalidated(); - - // You might be tempted to propagate the value immediately here, using - // state.setPort. However, the circuit may currently be propagating in - // another thread, and invoking setPort directly could interfere with - // that. Using fireInvalidated notifies the propagation thread to - // invoke propagate on the counter at its next opportunity. - } -} diff --git a/src/main/java/com/cburch/gray/GrayCounter.java b/src/main/java/com/cburch/gray/GrayCounter.java deleted file mode 100644 index e44e7337..00000000 --- a/src/main/java/com/cburch/gray/GrayCounter.java +++ /dev/null @@ -1,97 +0,0 @@ -/* Copyright (c) 2010, Carl Burch. License information is located in the - * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ - -package com.cburch.gray; - -import java.net.URL; - -import javax.swing.ImageIcon; - -import com.cburch.logisim.data.Attribute; -import com.cburch.logisim.data.BitWidth; -import com.cburch.logisim.data.Bounds; -import com.cburch.logisim.data.Direction; -import com.cburch.logisim.instance.Instance; -import com.cburch.logisim.instance.InstanceFactory; -import com.cburch.logisim.instance.InstancePainter; -import com.cburch.logisim.instance.InstanceState; -import com.cburch.logisim.instance.Port; -import com.cburch.logisim.instance.StdAttr; -import com.cburch.logisim.util.GraphicsUtil; -import com.cburch.logisim.util.StringUtil; - -/** Manufactures a counter that iterates over Gray codes. This demonstrates - * several additional features beyond the SimpleGrayCounter class. */ -class GrayCounter extends InstanceFactory { - public GrayCounter() { - super("Gray Counter"); - setOffsetBounds(Bounds.create(-30, -15, 30, 30)); - setPorts(new Port[] { - new Port(-30, 0, Port.INPUT, 1), - new Port( 0, 0, Port.OUTPUT, StdAttr.WIDTH), - }); - - // We'll have width, label, and label font attributes. The latter two - // attributes allow us to associate a label with the component (though - // we'll also need configureNewInstance to configure the label's - // location). - setAttributes( - new Attribute[] { StdAttr.WIDTH, StdAttr.LABEL, StdAttr.LABEL_FONT }, - new Object[] { BitWidth.create(4), "", StdAttr.DEFAULT_LABEL_FONT }); - - // The following method invocation sets things up so that the instance's - // state can be manipulated using the Poke Tool. - setInstancePoker(CounterPoker.class); - - // These next two lines set it up so that the explorer window shows a - // customized icon representing the component type. This should be a - // 16x16 image. - URL url = getClass().getClassLoader().getResource("com/cburch/gray/counter.gif"); - if (url != null) setIcon(new ImageIcon(url)); - } - - /** The configureNewInstance method is invoked every time a new instance - * is created. In the superclass, the method doesn't do anything, since - * the new instance is pretty thoroughly configured already by default. But - * sometimes you need to do something particular to each instance, so you - * would override the method. In this case, we need to set up the location - * for its label. */ - @Override - protected void configureNewInstance(Instance instance) { - Bounds bds = instance.getBounds(); - instance.setTextField(StdAttr.LABEL, StdAttr.LABEL_FONT, - bds.getX() + bds.getWidth() / 2, bds.getY() - 3, - GraphicsUtil.H_CENTER, GraphicsUtil.V_BASELINE); - } - - @Override - public void propagate(InstanceState state) { - // This is the same as with SimpleGrayCounter, except that we use the - // StdAttr.WIDTH attribute to determine the bit width to work with. - BitWidth width = state.getAttributeValue(StdAttr.WIDTH); - CounterData cur = CounterData.get(state, width); - boolean trigger = cur.updateClock(state.getPort(0)); - if (trigger) cur.setValue(GrayIncrementer.nextGray(cur.getValue())); - state.setPort(1, cur.getValue(), 9); - } - - @Override - public void paintInstance(InstancePainter painter) { - // This is essentially the same as with SimpleGrayCounter, except for - // the invocation of painter.drawLabel to make the label be drawn. - painter.drawBounds(); - painter.drawClock(0, Direction.EAST); - painter.drawPort(1); - painter.drawLabel(); - - if (painter.getShowState()) { - BitWidth width = painter.getAttributeValue(StdAttr.WIDTH); - CounterData state = CounterData.get(painter, width); - Bounds bds = painter.getBounds(); - GraphicsUtil.drawCenteredText(painter.getGraphics(), - StringUtil.toHexString(width.getWidth(), state.getValue().toIntValue()), - bds.getX() + bds.getWidth() / 2, - bds.getY() + bds.getHeight() / 2); - } - } -} diff --git a/src/main/java/com/cburch/gray/GrayIncrementer.java b/src/main/java/com/cburch/gray/GrayIncrementer.java deleted file mode 100644 index a8461d0f..00000000 --- a/src/main/java/com/cburch/gray/GrayIncrementer.java +++ /dev/null @@ -1,116 +0,0 @@ -/* Copyright (c) 2010, Carl Burch. License information is located in the - * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ - -package com.cburch.gray; - -import com.cburch.logisim.data.Attribute; -import com.cburch.logisim.data.BitWidth; -import com.cburch.logisim.data.Bounds; -import com.cburch.logisim.data.Value; -import com.cburch.logisim.instance.InstanceFactory; -import com.cburch.logisim.instance.InstancePainter; -import com.cburch.logisim.instance.InstanceState; -import com.cburch.logisim.instance.Port; -import com.cburch.logisim.instance.StdAttr; - -/** This component takes a multibit input and outputs the value that follows it - * in Gray Code. For instance, given input 0100 the output is 1100. */ -class GrayIncrementer extends InstanceFactory { - /* Note that there are no instance variables. There is only one instance of - * this class created, which manages all instances of the component. Any - * information associated with individual instances should be handled - * through attributes. For GrayIncrementer, each instance has a "bit width" - * that it works with, and so we'll have an attribute. */ - - /** The constructor configures the factory. */ - GrayIncrementer() { - super("Gray Code Incrementer"); - - /* This is how we can set up the attributes for GrayIncrementers. In - * this case, there is just one attribute - the width - whose default - * is 4. The StdAttr class defines several commonly occurring - * attributes, including one for "bit width." It's best to use those - * StdAttr attributes when appropriate: A user can then select several - * components (even from differing factories) with the same attribute - * and modify them all at once. */ - setAttributes(new Attribute[] { StdAttr.WIDTH }, - new Object[] { BitWidth.create(4) }); - - /* The "offset bounds" is the location of the bounding rectangle - * relative to the mouse location. Here, we're choosing the component to - * be 30x30, and we're anchoring it relative to its primary output - * (as is typical for Logisim), which happens to be in the center of the - * east edge. Thus, the top left corner of the bounding box is 30 pixels - * west and 15 pixels north of the mouse location. */ - setOffsetBounds(Bounds.create(-30, -15, 30, 30)); - - /* The ports are locations where wires can be connected to this - * component. Each port object says where to find the port relative to - * the component's anchor location, then whether the port is an - * input/output/both, and finally the expected bit width for the port. - * The bit width can be a constant (like 1) or an attribute (as here). - */ - setPorts(new Port[] { - new Port(-30, 0, Port.INPUT, StdAttr.WIDTH), - new Port(0, 0, Port.OUTPUT, StdAttr.WIDTH), - }); - } - - /** Computes the current output for this component. This method is invoked - * any time any of the inputs change their values; it may also be invoked in - * other circumstances, even if there is no reason to expect it to change - * anything. */ - @Override - public void propagate(InstanceState state) { - // First we retrieve the value being fed into the input. Note that in - // the setPorts invocation above, the component's input was included at - // index 0 in the parameter array, so we use 0 as the parameter below. - Value in = state.getPort(0); - - // Now compute the output. We've farmed this out to a helper method, - // since the same logic is needed for the library's other components. - Value out = nextGray(in); - - // Finally we propagate the output into the circuit. The first parameter - // is 1 because in our list of ports (configured by invocation of - // setPorts above) the output is at index 1. The second parameter is the - // value we want to send on that port. And the last parameter is its - // "delay" - the number of steps it will take for the output to update - // after its input. - state.setPort(1, out, out.getWidth() + 1); - } - - /** Says how an individual instance should appear on the canvas. */ - @Override - public void paintInstance(InstancePainter painter) { - // As it happens, InstancePainter contains several convenience methods - // for drawing, and we'll use those here. Frequently, you'd want to - // retrieve its Graphics object (painter.getGraphics) so you can draw - // directly onto the canvas. - painter.drawRectangle(painter.getBounds(), "G+1"); - painter.drawPorts(); - } - - /** Computes the next gray value in the sequence after prev. This static - * method just does some bit twiddling; it doesn't have much to do with - * Logisim except that it manipulates Value and BitWidth objects. */ - static Value nextGray(Value prev) { - BitWidth bits = prev.getBitWidth(); - if (!prev.isFullyDefined()) return Value.createError(bits); - int x = prev.toIntValue(); - int ct = (x >> 16) ^ x; // compute parity of x - ct = (ct >> 8) ^ ct; - ct = (ct >> 4) ^ ct; - ct = (ct >> 2) ^ ct; - ct = (ct >> 1) ^ ct; - if ((ct & 1) == 0) { // if parity is even, flip 1's bit - x = x ^ 1; - } else { // else flip bit just above last 1 - int y = x ^ (x & (x - 1)); // first compute the last 1 - y = (y << 1) & bits.getMask(); - x = (y == 0 ? 0 : x ^ y); - } - return Value.createKnown(bits, x); - } -} - diff --git a/src/main/java/com/cburch/gray/SimpleGrayCounter.java b/src/main/java/com/cburch/gray/SimpleGrayCounter.java deleted file mode 100644 index b7b7bc8c..00000000 --- a/src/main/java/com/cburch/gray/SimpleGrayCounter.java +++ /dev/null @@ -1,73 +0,0 @@ -/* Copyright (c) 2010, Carl Burch. License information is located in the - * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ - -package com.cburch.gray; - -import com.cburch.logisim.data.BitWidth; -import com.cburch.logisim.data.Bounds; -import com.cburch.logisim.data.Direction; -import com.cburch.logisim.instance.InstanceFactory; -import com.cburch.logisim.instance.InstancePainter; -import com.cburch.logisim.instance.InstanceState; -import com.cburch.logisim.instance.Port; -import com.cburch.logisim.util.GraphicsUtil; -import com.cburch.logisim.util.StringUtil; - -/** Manufactures a simple counter that iterates over the 4-bit Gray Code. This - * example illustrates how a component can maintain its own internal state. All - * of the code relevant to state, though, appears in CounterData class. */ -class SimpleGrayCounter extends InstanceFactory { - private static final BitWidth BIT_WIDTH = BitWidth.create(4); - - // Again, notice how we don't have any instance variables related to an - // individual instance's state. We can't put that here, because only one - // SimpleGrayCounter object is ever created, and its job is to manage all - // instances that appear in any circuits. - - public SimpleGrayCounter() { - super("Gray Counter (Simple)"); - setOffsetBounds(Bounds.create(-30, -15, 30, 30)); - setPorts(new Port[] { - new Port(-30, 0, Port.INPUT, 1), - new Port( 0, 0, Port.OUTPUT, BIT_WIDTH.getWidth()), - }); - } - - @Override - public void propagate(InstanceState state) { - // Here I retrieve the state associated with this component via a helper - // method. In this case, the state is in a CounterData object, which is - // also where the helper method is defined. This helper method will end - // up creating a CounterData object if one doesn't already exist. - CounterData cur = CounterData.get(state, BIT_WIDTH); - - boolean trigger = cur.updateClock(state.getPort(0)); - if (trigger) cur.setValue(GrayIncrementer.nextGray(cur.getValue())); - state.setPort(1, cur.getValue(), 9); - - // (You might be tempted to determine the counter's current value - // via state.getPort(1). This is erroneous, though, because another - // component may be pushing a value onto the same point, which would - // "corrupt" the value found there. We really do need to store the - // current value in the instance.) - } - - @Override - public void paintInstance(InstancePainter painter) { - painter.drawBounds(); - painter.drawClock(0, Direction.EAST); // draw a triangle on port 0 - painter.drawPort(1); // draw port 1 as just a dot - - // Display the current counter value centered within the rectangle. - // However, if the context says not to show state (as when generating - // printer output), then skip this. - if (painter.getShowState()) { - CounterData state = CounterData.get(painter, BIT_WIDTH); - Bounds bds = painter.getBounds(); - GraphicsUtil.drawCenteredText(painter.getGraphics(), - StringUtil.toHexString(BIT_WIDTH.getWidth(), state.getValue().toIntValue()), - bds.getX() + bds.getWidth() / 2, - bds.getY() + bds.getHeight() / 2); - } - } -} From 79ad54093c49843afdfed2b180369ac9e5215467 Mon Sep 17 00:00:00 2001 From: Nicholas Allevato Date: Wed, 11 Dec 2013 01:55:46 -0500 Subject: [PATCH 19/24] *Implemented redo feature. --- .../java/com/cburch/draw/undo/Action.java | 4 + .../com/cburch/logisim/gui/menu/MenuEdit.java | 56 +++++++++-- .../java/com/cburch/logisim/proj/Project.java | 97 +++++++++++++++++-- .../com/cburch/logisim/proj/ProjectEvent.java | 2 + src/main/resources/logisim/en/menu.properties | 2 + 5 files changed, 143 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/cburch/draw/undo/Action.java b/src/main/java/com/cburch/draw/undo/Action.java index 98a3092e..3ca492ff 100644 --- a/src/main/java/com/cburch/draw/undo/Action.java +++ b/src/main/java/com/cburch/draw/undo/Action.java @@ -8,8 +8,12 @@ public abstract class Action { public abstract String getName(); + /** Redo + */ public abstract void doIt(); + /** Undo + */ public abstract void undo(); public boolean shouldAppendTo(Action other) { return false; } diff --git a/src/main/java/com/cburch/logisim/gui/menu/MenuEdit.java b/src/main/java/com/cburch/logisim/gui/menu/MenuEdit.java index 7ca32dd4..8b060558 100644 --- a/src/main/java/com/cburch/logisim/gui/menu/MenuEdit.java +++ b/src/main/java/com/cburch/logisim/gui/menu/MenuEdit.java @@ -21,26 +21,61 @@ private class MyListener implements ProjectListener, ActionListener { public void projectChanged(ProjectEvent e) { Project proj = menubar.getProject(); Action last = proj == null ? null : proj.getLastAction(); - if (last == null) { - undo.setText(_("editCantUndoItem")); - undo.setEnabled(false); - } else { - undo.setText(_("editUndoItem", last.getName())); - undo.setEnabled(true); + if( last == null ) + { + undo.setText( _( "editCantUndoItem" ) ); + undo.setEnabled( false ); } + else + { + undo.setText( _( "editUndoItem", last.getName() ) ); + undo.setEnabled( true ); + } + + // If there is a project open... + if( proj != null ) + // And you CAN redo an undo... + if( proj.getCanRedo() ) + { + // Get that action + Action lastRedo = proj.getLastRedoAction(); + + // Set the detailed, localized text + + redo.setText( _( "editRedoItem", lastRedo.getName() ) ); + + // Set it to enabled + redo.setEnabled( true ); + } + else + { // If there is no project... + // Let them know they can't redo anything + redo.setText( _( "editCantRedoItem" ) ); + + // And disable the button + redo.setEnabled( false ); + } } public void actionPerformed(ActionEvent e) { Object src = e.getSource(); Project proj = menubar.getProject(); - if (src == undo) { - if (proj != null) proj.undoAction(); + if( src == undo ) + { + if( proj != null ) + proj.undoAction(); + } + else if( src == redo ) + { + if (proj != null ) + proj.redoAction(); } } } private LogisimMenuBar menubar; private JMenuItem undo = new JMenuItem(); + private JMenuItem redo = new JMenuItem(); private MenuItemImpl cut = new MenuItemImpl(this, LogisimMenuBar.CUT); private MenuItemImpl copy = new MenuItemImpl(this, LogisimMenuBar.COPY); private MenuItemImpl paste = new MenuItemImpl(this, LogisimMenuBar.PASTE); @@ -61,6 +96,8 @@ public MenuEdit(LogisimMenuBar menubar) { int menuMask = getToolkit().getMenuShortcutKeyMask(); undo.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_Z, menuMask)); + redo.setAccelerator(KeyStroke.getKeyStroke( + KeyEvent.VK_Y, menuMask)); cut.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_X, menuMask)); copy.setAccelerator(KeyStroke.getKeyStroke( @@ -83,6 +120,7 @@ public MenuEdit(LogisimMenuBar menubar) { KeyEvent.VK_DOWN, menuMask | KeyEvent.SHIFT_DOWN_MASK)); add(undo); + add(redo); addSeparator(); add(cut); add(copy); @@ -104,9 +142,11 @@ public MenuEdit(LogisimMenuBar menubar) { if (proj != null) { proj.addProjectListener(myListener); undo.addActionListener(myListener); + redo.addActionListener( myListener ); } undo.setEnabled(false); + redo.setEnabled(false); menubar.registerItem(LogisimMenuBar.CUT, cut); menubar.registerItem(LogisimMenuBar.COPY, copy); menubar.registerItem(LogisimMenuBar.PASTE, paste); diff --git a/src/main/java/com/cburch/logisim/proj/Project.java b/src/main/java/com/cburch/logisim/proj/Project.java index e4773a5c..ff2ea424 100644 --- a/src/main/java/com/cburch/logisim/proj/Project.java +++ b/src/main/java/com/cburch/logisim/proj/Project.java @@ -8,6 +8,8 @@ import javax.swing.JFileChooser; +import javax.swing.JOptionPane; + import com.cburch.logisim.circuit.Circuit; import com.cburch.logisim.circuit.CircuitListener; import com.cburch.logisim.circuit.CircuitState; @@ -81,6 +83,8 @@ public void libraryChanged(LibraryEvent event) { private Tool tool = null; private LinkedList undoLog = new LinkedList(); private int undoMods = 0; + private LinkedList redoLog = new LinkedList(); + private int redoMods = 0; private EventSourceWeakSupport projectListeners = new EventSourceWeakSupport(); private EventSourceWeakSupport fileListeners @@ -163,6 +167,20 @@ public CircuitState getCircuitState(Circuit circuit) { } } + /** Decide whether or not you can redo + * @return if we can redo + */ + public boolean getCanRedo() + { + // If there's a redo option found... + if( redoLog.size() > 0 ) + // We can redo + return true; + else + // Otherwise we can't. + return false; + } + public Action getLastAction() { if (undoLog.size() == 0) { return null; @@ -171,6 +189,17 @@ public Action getLastAction() { } } + /** Returns the action of the last entry in the redo log + * @return last action in redo log + */ + public Action getLastRedoAction() + { + if( redoLog.size() == 0 ) + return null; + else + return redoLog.getLast().action; + } + public Tool getTool() { return tool; } @@ -349,12 +378,20 @@ public void setTool(Tool value) { public void doAction(Action act) { if (act == null) return; + Action toAdd = act; startupScreen = false; - if (!undoLog.isEmpty() && act.shouldAppendTo(getLastAction())) { + + if (!undoLog.isEmpty() && act.shouldAppendTo(getLastAction())) + { ActionData firstData = undoLog.removeLast(); Action first = firstData.action; - if (first.isModification()) --undoMods; + + if (first.isModification()) + { + --undoMods; + } + toAdd = first.append(act); if (toAdd != null) { undoLog.add(new ActionData(circuitState, toAdd)); @@ -378,16 +415,56 @@ public void doAction(Action act) { fireEvent(new ProjectEvent(ProjectEvent.ACTION_COMPLETE, this, act)); } - public void undoAction() { - if (undoLog != null && undoLog.size() > 0) { + public void undoAction() + { + if( undoLog != null && undoLog.size() > 0 ) + { + redoLog.addLast( undoLog.getLast() ); + ++redoMods; ActionData data = undoLog.removeLast(); - setCircuitState(data.circuitState); + setCircuitState( data.circuitState ); Action action = data.action; - if (action.isModification()) --undoMods; - fireEvent(new ProjectEvent(ProjectEvent.UNDO_START, this, action)); - action.undo(this); - file.setDirty(isFileDirty()); - fireEvent(new ProjectEvent(ProjectEvent.UNDO_COMPLETE, this, action)); + if( action.isModification() ) + --undoMods; + fireEvent( new ProjectEvent( ProjectEvent.UNDO_START, this, action ) ); + action.undo( this ); + file.setDirty( isFileDirty() ); + fireEvent( new ProjectEvent( ProjectEvent.UNDO_COMPLETE, this, action ) ); + } + } + + /** Redo actions that were previously undone + */ + public void redoAction() + { + // If there ARE things to undo... + if( redoLog != null && redoLog.size() > 0 ) + { + // Add the last element of the undo log to the redo log + undoLog.addLast( redoLog.getLast() ); + + // Remove the last item in the redo log, but keep the data + ActionData data = redoLog.removeLast(); + + // Restore the circuit state to the redo's state + setCircuitState( data.circuitState ); + + // Get the actions required to make that state change happen + Action action = data.action; + + // Is this action a modification? + if( action.isModification() ) + // Yes? Then get rid of the mod + --redoMods; + + // Call the event + fireEvent( new ProjectEvent( ProjectEvent.REDO_START, this, action ) ); + + // Redo the action + action.doIt( this ); + + // Complete the redo + fireEvent( new ProjectEvent( ProjectEvent.REDO_COMPLETE, this, action ) ); } } diff --git a/src/main/java/com/cburch/logisim/proj/ProjectEvent.java b/src/main/java/com/cburch/logisim/proj/ProjectEvent.java index 9efd20ed..428305ce 100644 --- a/src/main/java/com/cburch/logisim/proj/ProjectEvent.java +++ b/src/main/java/com/cburch/logisim/proj/ProjectEvent.java @@ -20,6 +20,8 @@ public class ProjectEvent { public static final int UNDO_START = 8; // undo about to start public static final int UNDO_COMPLETE = 9; // undo has completed public static final int REPAINT_REQUEST = 10; // canvas should be repainted + public static final int REDO_START = 11; + public static final int REDO_COMPLETE = 12; private int action; private Project proj; diff --git a/src/main/resources/logisim/en/menu.properties b/src/main/resources/logisim/en/menu.properties index d1cb8ce9..fbaff4a1 100644 --- a/src/main/resources/logisim/en/menu.properties +++ b/src/main/resources/logisim/en/menu.properties @@ -2,6 +2,8 @@ editMenu = Edit editCantUndoItem = Can't Undo editUndoItem = Undo %s +editCantRedoItem = Can't Redo +editRedoItem = Redo %s editCutItem = Cut editCopyItem = Copy editPasteItem = Paste From f69f1b216e30d2ffc9b97abde0ac8ef9c19bdfbb Mon Sep 17 00:00:00 2001 From: allevaton Date: Thu, 23 Jan 2014 02:17:29 -0500 Subject: [PATCH 20/24] fixed little things in the readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fde9e029..3d5ef446 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Logisim is a circuit simulator, [originally available here](http://ozark.hendrix.edu/~burch/logisim/). ## Why this fork of Logisim? -Carl Burch, the original author of Logisim, abandoned development in 2011 and moved on to a similar successor project, [Toves](http://www.toves.org/) in 2013, because Logisim's code base is in need of a major overhaul. Rather than start from scratch ([something you should never do](http://www.joelonsoftware.com/articles/fog0000000069.html)), this fork of Logisim picks up where Dr. Burch left off to improve Logisim incrementally. +Carl Burch, the original author of Logisim, abandoned development in 2011 and moved on to a similar successor project, [Toves](http://www.toves.org/) in 2013, because Logisim's code base is in need of a major overhaul. Rather than start from scratch ([something you should never do](http://www.joelonsoftware.com/articles/fog0000000069.html)), this fork of Logisim picks up where Dr. Burch left off to incrementally improve Logisim. ## What's wrong with Logisim? Logisim's code itself has numerous smells. Here's an incomplete list of these: @@ -12,13 +12,13 @@ Logisim's code itself has numerous smells. Here's an incomplete list of these: * Undocumented packages, classes, methods * Duplicated and dead code * No coherent organization (it should be MVC) -* High coupling, low cohesion (it would benefit from IoC). +* High coupling, low cohesion (it would benefit from IoC) * Unnecessarily reimplements functionality found in standard or third party libraries (e.g., it has it's own Toolbar classes) * Code to draw components is too low-level Logisim's user interface has numerous gotchas that need to be addressed. Here's some of the more important issues: -* The file format is not merge-friendly, making it impossible for students to collaborate on circuits. +* The file format is not merge-friendly, making it impossible for students to collaborate on circuits * Unreasonable defaults * Limited interaction styles * Single (graphical) view of circuit @@ -27,7 +27,7 @@ Logisim's user interface has numerous gotchas that need to be addressed. Here's It is arguably the best free tool for teaching circuit design, which is why its development must continue. ## Getting started for developers -Logisim developers: Logisim uses the [Gradle build system](http://www.gradle.org), so set that up first before attempting to develop Logisim. Ensure that the gradle executable is in the system path. To build the executable for Windows, you must install [launch4j](http://launch4j.sourceforge.net/) and ensure it is on the system path. +Logisim developers: Logisim uses the [Gradle build system](http://www.gradle.org), so set that up first before attempting to develop Logisim. Ensure that the gradle executable is in the system path. To build the executable for Windows, you must install [launch4j](http://launch4j.sourceforge.net/) and ensure it is in the system path. The build script recognizes the following commands: From da646e6e38312e8f4e25255c2f8cc627012f0317 Mon Sep 17 00:00:00 2001 From: Joey Lawrance Date: Thu, 23 Jan 2014 13:42:45 -0500 Subject: [PATCH 21/24] Fixed broken CSS. --- src/main/resources/doc/support/www/docstyle.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/doc/support/www/docstyle.css b/src/main/resources/doc/support/www/docstyle.css index 9b48bef7..da2357da 100644 --- a/src/main/resources/doc/support/www/docstyle.css +++ b/src/main/resources/doc/support/www/docstyle.css @@ -11,7 +11,7 @@ div#map { ul#maptree { display: block; margin-left: 15px; - margin-right; 10px; + margin-right: 10px; padding: 0px; position: absolute; top: 100px; From b253d165d4836a1e7209418c0251a4020b40be4f Mon Sep 17 00:00:00 2001 From: allevaton Date: Thu, 23 Jan 2014 14:12:55 -0500 Subject: [PATCH 22/24] Revert "delete" This reverts commit 099025e8880590a8ab8fae575feb7ff1c75d8d34. --- src/main/java/com/cburch/gray/Components.java | 45 +++++++ .../java/com/cburch/gray/CounterData.java | 70 +++++++++++ .../java/com/cburch/gray/CounterPoker.java | 74 +++++++++++ .../java/com/cburch/gray/GrayCounter.java | 97 +++++++++++++++ .../java/com/cburch/gray/GrayIncrementer.java | 116 ++++++++++++++++++ .../com/cburch/gray/SimpleGrayCounter.java | 73 +++++++++++ 6 files changed, 475 insertions(+) create mode 100644 src/main/java/com/cburch/gray/Components.java create mode 100644 src/main/java/com/cburch/gray/CounterData.java create mode 100644 src/main/java/com/cburch/gray/CounterPoker.java create mode 100644 src/main/java/com/cburch/gray/GrayCounter.java create mode 100644 src/main/java/com/cburch/gray/GrayIncrementer.java create mode 100644 src/main/java/com/cburch/gray/SimpleGrayCounter.java diff --git a/src/main/java/com/cburch/gray/Components.java b/src/main/java/com/cburch/gray/Components.java new file mode 100644 index 00000000..d946bf9f --- /dev/null +++ b/src/main/java/com/cburch/gray/Components.java @@ -0,0 +1,45 @@ +/* Copyright (c) 2010, Carl Burch. License information is located in the + * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ + +package com.cburch.gray; + +import java.util.Arrays; +import java.util.List; + +import com.cburch.logisim.tools.AddTool; +import com.cburch.logisim.tools.Library; + +/** The library of components that the user can access. */ +public class Components extends Library { + /** The list of all tools contained in this library. Technically, + * libraries contain tools, which is a slightly more general concept + * than components; practically speaking, though, you'll most often want + * to create AddTools for new components that can be added into the circuit. + */ + private List tools; + + /** Constructs an instance of this library. This constructor is how + * Logisim accesses first when it opens the JAR file: It looks for + * a no-arguments constructor method of the user-designated class. + */ + public Components() { + tools = Arrays.asList(new AddTool[] { + new AddTool(new GrayIncrementer()), + new AddTool(new SimpleGrayCounter()), + new AddTool(new GrayCounter()), + }); + } + + /** Returns the name of the library that the user will see. */ + @Override + public String getDisplayName() { + return "Gray Tools"; + } + + /** Returns a list of all the tools available in this library. */ + @Override + public List getTools() { + return tools; + } +} + diff --git a/src/main/java/com/cburch/gray/CounterData.java b/src/main/java/com/cburch/gray/CounterData.java new file mode 100644 index 00000000..16381037 --- /dev/null +++ b/src/main/java/com/cburch/gray/CounterData.java @@ -0,0 +1,70 @@ +/* Copyright (c) 2010, Carl Burch. License information is located in the + * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ + +package com.cburch.gray; + +import com.cburch.logisim.data.BitWidth; +import com.cburch.logisim.data.Value; +import com.cburch.logisim.instance.InstanceData; +import com.cburch.logisim.instance.InstanceState; + +/** Represents the state of a counter. */ +class CounterData implements InstanceData, Cloneable { + /** Retrieves the state associated with this counter in the circuit state, + * generating the state if necessary. + */ + public static CounterData get(InstanceState state, BitWidth width) { + CounterData ret = (CounterData) state.getData(); + if (ret == null) { + // If it doesn't yet exist, then we'll set it up with our default + // values and put it into the circuit state so it can be retrieved + // in future propagations. + ret = new CounterData(null, Value.createKnown(width, 0)); + state.setData(ret); + } else if (!ret.value.getBitWidth().equals(width)) { + ret.value = ret.value.extendWidth(width.getWidth(), Value.FALSE); + } + return ret; + } + + /** The last clock input value observed. */ + private Value lastClock; + + /** The current value emitted by the counter. */ + private Value value; + + /** Constructs a state with the given values. */ + public CounterData(Value lastClock, Value value) { + this.lastClock = lastClock; + this.value = value; + } + + /** Returns a copy of this object. */ + @Override + public Object clone() { + // We can just use what super.clone() returns: The only instance variables are + // Value objects, which are immutable, so we don't care that both the copy + // and the copied refer to the same Value objects. If we had mutable instance + // variables, then of course we would need to clone them. + try { return super.clone(); } + catch (CloneNotSupportedException e) { return null; } + } + + /** Updates the last clock observed, returning true if triggered. */ + public boolean updateClock(Value value) { + Value old = lastClock; + lastClock = value; + return old == Value.FALSE && value == Value.TRUE; + } + + /** Returns the current value emitted by the counter. */ + public Value getValue() { + return value; + } + + /** Updates the current value emitted by the counter. */ + public void setValue(Value value) { + this.value = value; + } +} + diff --git a/src/main/java/com/cburch/gray/CounterPoker.java b/src/main/java/com/cburch/gray/CounterPoker.java new file mode 100644 index 00000000..2cd59084 --- /dev/null +++ b/src/main/java/com/cburch/gray/CounterPoker.java @@ -0,0 +1,74 @@ +/* Copyright (c) 2010, Carl Burch. License information is located in the + * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ + +package com.cburch.gray; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; + +import com.cburch.logisim.data.BitWidth; +import com.cburch.logisim.data.Bounds; +import com.cburch.logisim.data.Value; +import com.cburch.logisim.instance.InstancePainter; +import com.cburch.logisim.instance.InstancePoker; +import com.cburch.logisim.instance.InstanceState; +import com.cburch.logisim.instance.StdAttr; + +/** When the user clicks a counter using the Poke Tool, a CounterPoker object + * is created, and that object will handle all user events. Note that + * CounterPoker is a class specific to GrayCounter, and that it must be a + * subclass of InstancePoker in the com.cburch.logisim.instance package. */ +public class CounterPoker extends InstancePoker { + public CounterPoker() { } + + /** Determines whether the location the mouse was pressed should result + * in initiating a poke. + */ + @Override + public boolean init(InstanceState state, MouseEvent e) { + return state.getInstance().getBounds().contains(e.getX(), e.getY()); + // Anywhere in the main rectangle initiates the poke. The user might + // have clicked within a label, but that will be outside the bounds. + } + + /** Draws an indicator that the caret is being selected. Here, we'll draw + * a red rectangle around the value. */ + @Override + public void paint(InstancePainter painter) { + Bounds bds = painter.getBounds(); + BitWidth width = painter.getAttributeValue(StdAttr.WIDTH); + int len = (width.getWidth() + 3) / 4; + + Graphics g = painter.getGraphics(); + g.setColor(Color.RED); + int wid = 7 * len + 2; // width of caret rectangle + int ht = 16; // height of caret rectangle + g.drawRect(bds.getX() + (bds.getWidth() - wid) / 2, + bds.getY() + (bds.getHeight() - ht) / 2, wid, ht); + g.setColor(Color.BLACK); + } + + /** Processes a key by just adding it onto the end of the current value. */ + @Override + public void keyTyped(InstanceState state, KeyEvent e) { + // convert it to a hex digit; if it isn't a hex digit, abort. + int val = Character.digit(e.getKeyChar(), 16); + BitWidth width = state.getAttributeValue(StdAttr.WIDTH); + if (val < 0 || (val & width.getMask()) != val) return; + + // compute the next value + CounterData cur = CounterData.get(state, width); + int newVal = (cur.getValue().toIntValue() * 16 + val) & width.getMask(); + Value newValue = Value.createKnown(width, newVal); + cur.setValue(newValue); + state.fireInvalidated(); + + // You might be tempted to propagate the value immediately here, using + // state.setPort. However, the circuit may currently be propagating in + // another thread, and invoking setPort directly could interfere with + // that. Using fireInvalidated notifies the propagation thread to + // invoke propagate on the counter at its next opportunity. + } +} diff --git a/src/main/java/com/cburch/gray/GrayCounter.java b/src/main/java/com/cburch/gray/GrayCounter.java new file mode 100644 index 00000000..e44e7337 --- /dev/null +++ b/src/main/java/com/cburch/gray/GrayCounter.java @@ -0,0 +1,97 @@ +/* Copyright (c) 2010, Carl Burch. License information is located in the + * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ + +package com.cburch.gray; + +import java.net.URL; + +import javax.swing.ImageIcon; + +import com.cburch.logisim.data.Attribute; +import com.cburch.logisim.data.BitWidth; +import com.cburch.logisim.data.Bounds; +import com.cburch.logisim.data.Direction; +import com.cburch.logisim.instance.Instance; +import com.cburch.logisim.instance.InstanceFactory; +import com.cburch.logisim.instance.InstancePainter; +import com.cburch.logisim.instance.InstanceState; +import com.cburch.logisim.instance.Port; +import com.cburch.logisim.instance.StdAttr; +import com.cburch.logisim.util.GraphicsUtil; +import com.cburch.logisim.util.StringUtil; + +/** Manufactures a counter that iterates over Gray codes. This demonstrates + * several additional features beyond the SimpleGrayCounter class. */ +class GrayCounter extends InstanceFactory { + public GrayCounter() { + super("Gray Counter"); + setOffsetBounds(Bounds.create(-30, -15, 30, 30)); + setPorts(new Port[] { + new Port(-30, 0, Port.INPUT, 1), + new Port( 0, 0, Port.OUTPUT, StdAttr.WIDTH), + }); + + // We'll have width, label, and label font attributes. The latter two + // attributes allow us to associate a label with the component (though + // we'll also need configureNewInstance to configure the label's + // location). + setAttributes( + new Attribute[] { StdAttr.WIDTH, StdAttr.LABEL, StdAttr.LABEL_FONT }, + new Object[] { BitWidth.create(4), "", StdAttr.DEFAULT_LABEL_FONT }); + + // The following method invocation sets things up so that the instance's + // state can be manipulated using the Poke Tool. + setInstancePoker(CounterPoker.class); + + // These next two lines set it up so that the explorer window shows a + // customized icon representing the component type. This should be a + // 16x16 image. + URL url = getClass().getClassLoader().getResource("com/cburch/gray/counter.gif"); + if (url != null) setIcon(new ImageIcon(url)); + } + + /** The configureNewInstance method is invoked every time a new instance + * is created. In the superclass, the method doesn't do anything, since + * the new instance is pretty thoroughly configured already by default. But + * sometimes you need to do something particular to each instance, so you + * would override the method. In this case, we need to set up the location + * for its label. */ + @Override + protected void configureNewInstance(Instance instance) { + Bounds bds = instance.getBounds(); + instance.setTextField(StdAttr.LABEL, StdAttr.LABEL_FONT, + bds.getX() + bds.getWidth() / 2, bds.getY() - 3, + GraphicsUtil.H_CENTER, GraphicsUtil.V_BASELINE); + } + + @Override + public void propagate(InstanceState state) { + // This is the same as with SimpleGrayCounter, except that we use the + // StdAttr.WIDTH attribute to determine the bit width to work with. + BitWidth width = state.getAttributeValue(StdAttr.WIDTH); + CounterData cur = CounterData.get(state, width); + boolean trigger = cur.updateClock(state.getPort(0)); + if (trigger) cur.setValue(GrayIncrementer.nextGray(cur.getValue())); + state.setPort(1, cur.getValue(), 9); + } + + @Override + public void paintInstance(InstancePainter painter) { + // This is essentially the same as with SimpleGrayCounter, except for + // the invocation of painter.drawLabel to make the label be drawn. + painter.drawBounds(); + painter.drawClock(0, Direction.EAST); + painter.drawPort(1); + painter.drawLabel(); + + if (painter.getShowState()) { + BitWidth width = painter.getAttributeValue(StdAttr.WIDTH); + CounterData state = CounterData.get(painter, width); + Bounds bds = painter.getBounds(); + GraphicsUtil.drawCenteredText(painter.getGraphics(), + StringUtil.toHexString(width.getWidth(), state.getValue().toIntValue()), + bds.getX() + bds.getWidth() / 2, + bds.getY() + bds.getHeight() / 2); + } + } +} diff --git a/src/main/java/com/cburch/gray/GrayIncrementer.java b/src/main/java/com/cburch/gray/GrayIncrementer.java new file mode 100644 index 00000000..a8461d0f --- /dev/null +++ b/src/main/java/com/cburch/gray/GrayIncrementer.java @@ -0,0 +1,116 @@ +/* Copyright (c) 2010, Carl Burch. License information is located in the + * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ + +package com.cburch.gray; + +import com.cburch.logisim.data.Attribute; +import com.cburch.logisim.data.BitWidth; +import com.cburch.logisim.data.Bounds; +import com.cburch.logisim.data.Value; +import com.cburch.logisim.instance.InstanceFactory; +import com.cburch.logisim.instance.InstancePainter; +import com.cburch.logisim.instance.InstanceState; +import com.cburch.logisim.instance.Port; +import com.cburch.logisim.instance.StdAttr; + +/** This component takes a multibit input and outputs the value that follows it + * in Gray Code. For instance, given input 0100 the output is 1100. */ +class GrayIncrementer extends InstanceFactory { + /* Note that there are no instance variables. There is only one instance of + * this class created, which manages all instances of the component. Any + * information associated with individual instances should be handled + * through attributes. For GrayIncrementer, each instance has a "bit width" + * that it works with, and so we'll have an attribute. */ + + /** The constructor configures the factory. */ + GrayIncrementer() { + super("Gray Code Incrementer"); + + /* This is how we can set up the attributes for GrayIncrementers. In + * this case, there is just one attribute - the width - whose default + * is 4. The StdAttr class defines several commonly occurring + * attributes, including one for "bit width." It's best to use those + * StdAttr attributes when appropriate: A user can then select several + * components (even from differing factories) with the same attribute + * and modify them all at once. */ + setAttributes(new Attribute[] { StdAttr.WIDTH }, + new Object[] { BitWidth.create(4) }); + + /* The "offset bounds" is the location of the bounding rectangle + * relative to the mouse location. Here, we're choosing the component to + * be 30x30, and we're anchoring it relative to its primary output + * (as is typical for Logisim), which happens to be in the center of the + * east edge. Thus, the top left corner of the bounding box is 30 pixels + * west and 15 pixels north of the mouse location. */ + setOffsetBounds(Bounds.create(-30, -15, 30, 30)); + + /* The ports are locations where wires can be connected to this + * component. Each port object says where to find the port relative to + * the component's anchor location, then whether the port is an + * input/output/both, and finally the expected bit width for the port. + * The bit width can be a constant (like 1) or an attribute (as here). + */ + setPorts(new Port[] { + new Port(-30, 0, Port.INPUT, StdAttr.WIDTH), + new Port(0, 0, Port.OUTPUT, StdAttr.WIDTH), + }); + } + + /** Computes the current output for this component. This method is invoked + * any time any of the inputs change their values; it may also be invoked in + * other circumstances, even if there is no reason to expect it to change + * anything. */ + @Override + public void propagate(InstanceState state) { + // First we retrieve the value being fed into the input. Note that in + // the setPorts invocation above, the component's input was included at + // index 0 in the parameter array, so we use 0 as the parameter below. + Value in = state.getPort(0); + + // Now compute the output. We've farmed this out to a helper method, + // since the same logic is needed for the library's other components. + Value out = nextGray(in); + + // Finally we propagate the output into the circuit. The first parameter + // is 1 because in our list of ports (configured by invocation of + // setPorts above) the output is at index 1. The second parameter is the + // value we want to send on that port. And the last parameter is its + // "delay" - the number of steps it will take for the output to update + // after its input. + state.setPort(1, out, out.getWidth() + 1); + } + + /** Says how an individual instance should appear on the canvas. */ + @Override + public void paintInstance(InstancePainter painter) { + // As it happens, InstancePainter contains several convenience methods + // for drawing, and we'll use those here. Frequently, you'd want to + // retrieve its Graphics object (painter.getGraphics) so you can draw + // directly onto the canvas. + painter.drawRectangle(painter.getBounds(), "G+1"); + painter.drawPorts(); + } + + /** Computes the next gray value in the sequence after prev. This static + * method just does some bit twiddling; it doesn't have much to do with + * Logisim except that it manipulates Value and BitWidth objects. */ + static Value nextGray(Value prev) { + BitWidth bits = prev.getBitWidth(); + if (!prev.isFullyDefined()) return Value.createError(bits); + int x = prev.toIntValue(); + int ct = (x >> 16) ^ x; // compute parity of x + ct = (ct >> 8) ^ ct; + ct = (ct >> 4) ^ ct; + ct = (ct >> 2) ^ ct; + ct = (ct >> 1) ^ ct; + if ((ct & 1) == 0) { // if parity is even, flip 1's bit + x = x ^ 1; + } else { // else flip bit just above last 1 + int y = x ^ (x & (x - 1)); // first compute the last 1 + y = (y << 1) & bits.getMask(); + x = (y == 0 ? 0 : x ^ y); + } + return Value.createKnown(bits, x); + } +} + diff --git a/src/main/java/com/cburch/gray/SimpleGrayCounter.java b/src/main/java/com/cburch/gray/SimpleGrayCounter.java new file mode 100644 index 00000000..b7b7bc8c --- /dev/null +++ b/src/main/java/com/cburch/gray/SimpleGrayCounter.java @@ -0,0 +1,73 @@ +/* Copyright (c) 2010, Carl Burch. License information is located in the + * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ + +package com.cburch.gray; + +import com.cburch.logisim.data.BitWidth; +import com.cburch.logisim.data.Bounds; +import com.cburch.logisim.data.Direction; +import com.cburch.logisim.instance.InstanceFactory; +import com.cburch.logisim.instance.InstancePainter; +import com.cburch.logisim.instance.InstanceState; +import com.cburch.logisim.instance.Port; +import com.cburch.logisim.util.GraphicsUtil; +import com.cburch.logisim.util.StringUtil; + +/** Manufactures a simple counter that iterates over the 4-bit Gray Code. This + * example illustrates how a component can maintain its own internal state. All + * of the code relevant to state, though, appears in CounterData class. */ +class SimpleGrayCounter extends InstanceFactory { + private static final BitWidth BIT_WIDTH = BitWidth.create(4); + + // Again, notice how we don't have any instance variables related to an + // individual instance's state. We can't put that here, because only one + // SimpleGrayCounter object is ever created, and its job is to manage all + // instances that appear in any circuits. + + public SimpleGrayCounter() { + super("Gray Counter (Simple)"); + setOffsetBounds(Bounds.create(-30, -15, 30, 30)); + setPorts(new Port[] { + new Port(-30, 0, Port.INPUT, 1), + new Port( 0, 0, Port.OUTPUT, BIT_WIDTH.getWidth()), + }); + } + + @Override + public void propagate(InstanceState state) { + // Here I retrieve the state associated with this component via a helper + // method. In this case, the state is in a CounterData object, which is + // also where the helper method is defined. This helper method will end + // up creating a CounterData object if one doesn't already exist. + CounterData cur = CounterData.get(state, BIT_WIDTH); + + boolean trigger = cur.updateClock(state.getPort(0)); + if (trigger) cur.setValue(GrayIncrementer.nextGray(cur.getValue())); + state.setPort(1, cur.getValue(), 9); + + // (You might be tempted to determine the counter's current value + // via state.getPort(1). This is erroneous, though, because another + // component may be pushing a value onto the same point, which would + // "corrupt" the value found there. We really do need to store the + // current value in the instance.) + } + + @Override + public void paintInstance(InstancePainter painter) { + painter.drawBounds(); + painter.drawClock(0, Direction.EAST); // draw a triangle on port 0 + painter.drawPort(1); // draw port 1 as just a dot + + // Display the current counter value centered within the rectangle. + // However, if the context says not to show state (as when generating + // printer output), then skip this. + if (painter.getShowState()) { + CounterData state = CounterData.get(painter, BIT_WIDTH); + Bounds bds = painter.getBounds(); + GraphicsUtil.drawCenteredText(painter.getGraphics(), + StringUtil.toHexString(BIT_WIDTH.getWidth(), state.getValue().toIntValue()), + bds.getX() + bds.getWidth() / 2, + bds.getY() + bds.getHeight() / 2); + } + } +} From e76a53908c988f51075ea0eda8ee724175d2a3d0 Mon Sep 17 00:00:00 2001 From: Nick Allevato Date: Sat, 25 Jan 2014 01:46:18 -0500 Subject: [PATCH 23/24] Large cleanup from Sonar * Fixed all equals() and hashCode() inconsistencies * Fixed finally{} returning false (got rid of finally block, the catch returned anyways) * Replaced MANY `Throwable` with `Exception` for real exception handling. --- .gitignore | 4 ++- .../com/cburch/draw/shapes/SvgReader.java | 2 +- .../com/cburch/logisim/LogisimVersion.java | 14 +++++++++- .../logisim/analyze/gui/TableTabClip.java | 2 +- .../cburch/logisim/circuit/CircuitWires.java | 5 ++-- .../com/cburch/logisim/circuit/Simulator.java | 4 +-- .../circuit/WidthIncompatibilityData.java | 5 ++++ .../java/com/cburch/logisim/comp/EndData.java | 8 ++++++ .../com/cburch/logisim/data/Direction.java | 4 +++ .../java/com/cburch/logisim/data/Size.java | 5 ++++ .../java/com/cburch/logisim/file/Loader.java | 28 +++++++++---------- .../com/cburch/logisim/file/LogisimFile.java | 8 +++--- .../com/cburch/logisim/gui/main/Frame.java | 2 +- .../cburch/logisim/gui/main/Selection.java | 5 ++++ .../cburch/logisim/prefs/RecentProjects.java | 5 ++++ 15 files changed, 74 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index 4feaaf66..09af482b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ build .gradle .project .classpath +*sonar*.properties +.sonar .settings bin -/nbproject/private/ \ No newline at end of file +/nbproject/private/ diff --git a/src/main/java/com/cburch/draw/shapes/SvgReader.java b/src/main/java/com/cburch/draw/shapes/SvgReader.java index 6fc55b39..a202f690 100644 --- a/src/main/java/com/cburch/draw/shapes/SvgReader.java +++ b/src/main/java/com/cburch/draw/shapes/SvgReader.java @@ -254,7 +254,7 @@ private static Color getColor(String hue, String opacity) { String repl = opacity.substring(0, comma) + "." + opacity.substring(comma + 1); x = Double.parseDouble(repl); - } catch (Throwable t) { + } catch (NumberFormatException ex) { throw e; } } else { diff --git a/src/main/java/com/cburch/logisim/LogisimVersion.java b/src/main/java/com/cburch/logisim/LogisimVersion.java index ab73686b..344917d1 100644 --- a/src/main/java/com/cburch/logisim/LogisimVersion.java +++ b/src/main/java/com/cburch/logisim/LogisimVersion.java @@ -2,6 +2,7 @@ * com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */ package com.cburch.logisim; + /** * Handles everything involving Logisim's version number * @author Carl Burch, Ryan Steinmetz @@ -50,7 +51,10 @@ public static LogisimVersion parse(String versionString) { if (parts.length >= 2) minor = Integer.parseInt(parts[1]); if (parts.length >= 3) release = Integer.parseInt(parts[2]); if (parts.length >= 4) revision = Integer.parseInt(parts[3]); - } catch (NumberFormatException e) { } + } catch (NumberFormatException e) { + System.out.println( "Something went wrong when parsing the version string:\n" ); + e.printStackTrace(); + } return new LogisimVersion(major, minor, release, revision); } @@ -75,6 +79,14 @@ private LogisimVersion(int major, int minor, int release, int revision) { this.repr = null; } + @Override + public int hashCode() { + return this.major + + this.minor + + this.release + + this.revision; + } + @Override public boolean equals(Object other) { if (other instanceof LogisimVersion) { diff --git a/src/main/java/com/cburch/logisim/analyze/gui/TableTabClip.java b/src/main/java/com/cburch/logisim/analyze/gui/TableTabClip.java index 2ac8e5e5..d8b0be1e 100644 --- a/src/main/java/com/cburch/logisim/analyze/gui/TableTabClip.java +++ b/src/main/java/com/cburch/logisim/analyze/gui/TableTabClip.java @@ -111,7 +111,7 @@ public void paste() { Transferable xfer; try { xfer = clip.getContents(this); - } catch (Throwable t) { + } catch (IllegalStateException|ArrayIndexOutOfBoundsException e ) { // I don't know - the above was observed to throw an odd ArrayIndexOutOfBounds // exception on a Linux computer using Sun's Java 5 JVM JOptionPane.showMessageDialog(table.getRootPane(), diff --git a/src/main/java/com/cburch/logisim/circuit/CircuitWires.java b/src/main/java/com/cburch/logisim/circuit/CircuitWires.java index 408b9126..28403441 100644 --- a/src/main/java/com/cburch/logisim/circuit/CircuitWires.java +++ b/src/main/java/com/cburch/logisim/circuit/CircuitWires.java @@ -530,9 +530,10 @@ private BundleMap getBundleMap() { computeBundleMap(ret); bundleMap = ret; break; - } catch (Throwable t) { + } catch (Exception e) { if (tries == 0) { - t.printStackTrace(); + e.printStackTrace(); + System.err.println( e.getLocalizedMessage() ); bundleMap = ret; } } diff --git a/src/main/java/com/cburch/logisim/circuit/Simulator.java b/src/main/java/com/cburch/logisim/circuit/Simulator.java index dd4678ad..70a0a243 100644 --- a/src/main/java/com/cburch/logisim/circuit/Simulator.java +++ b/src/main/java/com/cburch/logisim/circuit/Simulator.java @@ -112,7 +112,7 @@ public void run() { try { exceptionEncountered = false; propagator.propagate(); - } catch (Throwable thr) { + } catch (Exception thr) { thr.printStackTrace(); exceptionEncountered = true; setIsRunning(false); @@ -138,7 +138,7 @@ public void run() { try { stepPoints.clear(); propagator.step(stepPoints); - } catch (Throwable thr) { + } catch (Exception thr) { thr.printStackTrace(); exceptionEncountered = true; } diff --git a/src/main/java/com/cburch/logisim/circuit/WidthIncompatibilityData.java b/src/main/java/com/cburch/logisim/circuit/WidthIncompatibilityData.java index a9ed2d8d..440f770c 100644 --- a/src/main/java/com/cburch/logisim/circuit/WidthIncompatibilityData.java +++ b/src/main/java/com/cburch/logisim/circuit/WidthIncompatibilityData.java @@ -37,6 +37,11 @@ public BitWidth getBitWidth(int i) { return widths.get(i); } + @Override + public int hashCode() { + return this.size(); + } + @Override public boolean equals(Object other) { if (!(other instanceof WidthIncompatibilityData)) return false; diff --git a/src/main/java/com/cburch/logisim/comp/EndData.java b/src/main/java/com/cburch/logisim/comp/EndData.java index b9c280ce..9cf4980f 100644 --- a/src/main/java/com/cburch/logisim/comp/EndData.java +++ b/src/main/java/com/cburch/logisim/comp/EndData.java @@ -6,6 +6,8 @@ import com.cburch.logisim.data.BitWidth; import com.cburch.logisim.data.Location; +import org.apache.commons.lang3.builder.HashCodeBuilder; + public class EndData { public static final int INPUT_ONLY = 1; public static final int OUTPUT_ONLY = 2; @@ -33,6 +35,12 @@ public EndData(Location loc, BitWidth width, int type) { public Location getLocation() { return loc; } public BitWidth getWidth() { return width; } public int getType() { return i_o; } + + @Override + public int hashCode() { + return width.getWidth(); + } + @Override public boolean equals(Object other) { if (!(other instanceof EndData)) return false; diff --git a/src/main/java/com/cburch/logisim/data/Direction.java b/src/main/java/com/cburch/logisim/data/Direction.java index 266df3c2..b9a41f55 100644 --- a/src/main/java/com/cburch/logisim/data/Direction.java +++ b/src/main/java/com/cburch/logisim/data/Direction.java @@ -63,6 +63,10 @@ public String toVerticalDisplayString() { public int hashCode() { return id; } + + public boolean equals( Direction other ) { + return this.id == other.id; + } public double toRadians() { if (this == Direction.EAST) return 0.0; diff --git a/src/main/java/com/cburch/logisim/data/Size.java b/src/main/java/com/cburch/logisim/data/Size.java index c67c47b8..6dd25e47 100644 --- a/src/main/java/com/cburch/logisim/data/Size.java +++ b/src/main/java/com/cburch/logisim/data/Size.java @@ -21,6 +21,11 @@ private Size(int wid, int ht) { this.ht = ht; } + @Override + public int hashCode() { + return wid + ht; + } + @Override public boolean equals(Object other_obj) { if (!(other_obj instanceof Size)) return false; diff --git a/src/main/java/com/cburch/logisim/file/Loader.java b/src/main/java/com/cburch/logisim/file/Loader.java index 4a8dbc2c..3494eb11 100644 --- a/src/main/java/com/cburch/logisim/file/Loader.java +++ b/src/main/java/com/cburch/logisim/file/Loader.java @@ -204,20 +204,20 @@ public boolean save(LogisimFile file, File dest) { _("fileSaveErrorTitle"), JOptionPane.ERROR_MESSAGE); return false; - } finally { - if (fwrite != null) { - try { - fwrite.close(); - } catch (IOException e) { - if (backupCreated) recoverBackup(backup, dest); - if (dest.exists() && dest.length() == 0) dest.delete(); - JOptionPane.showMessageDialog(parent, - _("fileSaveCloseError", - e.toString()), - _("fileSaveErrorTitle"), - JOptionPane.ERROR_MESSAGE); - return false; - } + } + + if (fwrite != null) { + try { + fwrite.close(); + } catch (IOException e) { + if (backupCreated) recoverBackup(backup, dest); + if (dest.exists() && dest.length() == 0) dest.delete(); + JOptionPane.showMessageDialog(parent, + _("fileSaveCloseError", + e.toString()), + _("fileSaveErrorTitle"), + JOptionPane.ERROR_MESSAGE); + return false; } } diff --git a/src/main/java/com/cburch/logisim/file/LogisimFile.java b/src/main/java/com/cburch/logisim/file/LogisimFile.java index e53013e1..2b8ff7c7 100644 --- a/src/main/java/com/cburch/logisim/file/LogisimFile.java +++ b/src/main/java/com/cburch/logisim/file/LogisimFile.java @@ -356,10 +356,10 @@ public static LogisimFile createNew(Loader loader) { public static LogisimFile load(File file, Loader loader) throws IOException { InputStream in = new FileInputStream(file); - Throwable firstExcept = null; + Exception firstExcept = null; try { return loadSub(in, loader); - } catch (Throwable t) { + } catch (Exception t) { firstExcept = t; } finally { in.close(); @@ -372,12 +372,12 @@ public static LogisimFile load(File file, Loader loader) try { in = new ReaderInputStream(new FileReader(file), "UTF8"); return loadSub(in, loader); - } catch (Throwable t) { + } catch (Exception t) { loader.showError(_("xmlFormatError", firstExcept.toString())); } finally { try { in.close(); - } catch (Throwable t) { } + } catch (Exception t) { } } } diff --git a/src/main/java/com/cburch/logisim/gui/main/Frame.java b/src/main/java/com/cburch/logisim/gui/main/Frame.java index 1e685b6f..229a78c3 100644 --- a/src/main/java/com/cburch/logisim/gui/main/Frame.java +++ b/src/main/java/com/cburch/logisim/gui/main/Frame.java @@ -527,7 +527,7 @@ private static Point getInitialLocation() { } } return gcBestPoint; - } catch (Throwable t) { + } catch (Exception t) { return null; } } diff --git a/src/main/java/com/cburch/logisim/gui/main/Selection.java b/src/main/java/com/cburch/logisim/gui/main/Selection.java index b7f68486..ad648673 100644 --- a/src/main/java/com/cburch/logisim/gui/main/Selection.java +++ b/src/main/java/com/cburch/logisim/gui/main/Selection.java @@ -139,6 +139,11 @@ public AttributeSet getAttributeSet() { return attrs; } + @Override + public int hashCode() { + return ( this.isVisible ? 12 : 25 ); + } + @Override public boolean equals(Object other) { if (!(other instanceof Selection)) return false; diff --git a/src/main/java/com/cburch/logisim/prefs/RecentProjects.java b/src/main/java/com/cburch/logisim/prefs/RecentProjects.java index 41bf0082..cd663f8f 100644 --- a/src/main/java/com/cburch/logisim/prefs/RecentProjects.java +++ b/src/main/java/com/cburch/logisim/prefs/RecentProjects.java @@ -25,6 +25,11 @@ public FileTime(File file, long time) { this.file = file; } + @Override + public int hashCode() { + return ((int)time % 25); + } + @Override public boolean equals(Object other) { if (other instanceof FileTime) { From 1bdfcab8cd8503c7f3ff4550a39053383922836e Mon Sep 17 00:00:00 2001 From: Nick Allevato Date: Sat, 25 Jan 2014 04:28:33 -0500 Subject: [PATCH 24/24] Updated gitignore to ignore `*.class` files. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 09af482b..0396e083 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ build .sonar .settings bin +*.class /nbproject/private/