3a7365d76fca — Quintillus 2 years ago
Moving towards adding basic painting ability.

So far this just means getting some palette selectors set up, and some logging of mouse movements to help plan what is needed to allow painting.  I'm planning to take inspiration from the Windows 3.1 through XP version of Paintbrush, because it's both very simple and highly effective.  Might fire up some other vintage applications such as MegaPaint for inspiration as well.
M src/main/java/jones/andrew/imageviewer/IconPanel.java +37 -0
@@ 11,7 11,11 @@ package jones.andrew.imageviewer;
  */
 import javax.swing.*;
 import java.awt.*;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
 import org.apache.log4j.*;
+
 public class IconPanel extends JPanel{
     Logger logger = Logger.getLogger(this.getClass());
     Image myImage;

          
@@ 33,5 37,38 @@ public class IconPanel extends JPanel{
         }
         //paint my contents
     }
+    
+    public IconPanel() {
+        this.addMouseListener(new MouseListener() {
+            public void mouseClicked(MouseEvent e) {
+                logger.info("Mouse clicked at " + e.getPoint());
+            }
+
+            public void mousePressed(MouseEvent e) {
+                logger.info("Mouse pressed at " + e.getPoint());
+            }
+
+            public void mouseReleased(MouseEvent e) {
+                logger.info("Mouse released at " + e.getPoint());
+            }
+
+            public void mouseEntered(MouseEvent e) {
+                logger.info("Mouse entered at " + e.getPoint());
+            }
+
+            public void mouseExited(MouseEvent e) {
+                logger.info("Mouse exited at " + e.getPoint());
+            }
+        });
+        this.addMouseMotionListener(new MouseMotionListener() {
+            public void mouseDragged(MouseEvent e) {
+                logger.info("Mouse dragged at " + e.getPoint());
+            }
+
+            public void mouseMoved(MouseEvent e) {
+            }
+            
+        });
+    }
 
 }

          
M src/main/java/jones/andrew/imageviewer/Main.java +18 -0
@@ 22,6 22,7 @@ import com.ajtjp.jImageReader.reader.Sun
 import com.ajtjp.jImageReader.reader.TGAReader;
 import com.ajtjp.jImageReader.reader.workInProgress.JFIFReader;
 import com.ajtjp.jImageReader.spi.MSPImageSPI;
+import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.GridBagConstraints;

          
@@ 336,6 337,23 @@ public class Main extends JFrame {
         //pcxScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
         getContentPane().setLayout(new GridBagLayout());
         getContentPane().add(pcxScroll, g);
+        
+        
+        // BEGIN PALETTE
+        PalettePanel testPanel = new PalettePanel(Color.WHITE);
+        testPanel.setPreferredSize(new Dimension(32, 32));
+        testPanel.setMinimumSize(new Dimension(32, 32));
+        PalettePanel testPanel2 = new PalettePanel(Color.BLACK);
+        testPanel2.setPreferredSize(new Dimension(32, 32));
+        testPanel2.setMinimumSize(new Dimension(32, 32));
+        g.gridy++;
+        g.weighty = 0;
+        g.fill = GridBagConstraints.NONE;
+        getContentPane().add(testPanel, g);
+        g.gridy++;
+        getContentPane().add(testPanel2, g);
+        // END PALETTE
+        
         //pnlPCXViewer.setBackground(Color.WHITE);
         pnlPCXViewer.setVisible(true);
         pack();

          
A => src/main/java/jones/andrew/imageviewer/PalettePanel.java +27 -0
@@ 0,0 1,27 @@ 
+
+package jones.andrew.imageviewer;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import javax.swing.JPanel;
+
+/**
+ * Shows a color from the palette.
+ * @author Andrew
+ */
+public class PalettePanel extends JPanel {
+    
+    private Color color;
+    
+    public PalettePanel(Color color) {
+        this.color = color;
+    }
+    
+    public void paint(Graphics g) {
+        super.paint(g);
+        if (this.isVisible()) {
+            g.setColor(color);
+            g.fillRect(0, 0, 32, 32);
+        }
+    }
+}