diff --git a/src/com/mrcrayfish/modelcreator/ModelCreator.java b/src/com/mrcrayfish/modelcreator/ModelCreator.java index 532cd9d..9442402 100644 --- a/src/com/mrcrayfish/modelcreator/ModelCreator.java +++ b/src/com/mrcrayfish/modelcreator/ModelCreator.java @@ -1,34 +1,28 @@ package com.mrcrayfish.modelcreator; -import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT; -import static org.lwjgl.opengl.GL11.GL_CULL_FACE; -import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT; -import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST; -import static org.lwjgl.opengl.GL11.GL_LIGHTING; -import static org.lwjgl.opengl.GL11.GL_LINES; -import static org.lwjgl.opengl.GL11.GL_MODELVIEW; -import static org.lwjgl.opengl.GL11.GL_PROJECTION; -import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D; -import static org.lwjgl.opengl.GL11.GL_TRIANGLES; -import static org.lwjgl.opengl.GL11.glBegin; -import static org.lwjgl.opengl.GL11.glClear; -import static org.lwjgl.opengl.GL11.glClearColor; -import static org.lwjgl.opengl.GL11.glColor3d; -import static org.lwjgl.opengl.GL11.glColor3f; -import static org.lwjgl.opengl.GL11.glDisable; -import static org.lwjgl.opengl.GL11.glEnable; -import static org.lwjgl.opengl.GL11.glEnd; -import static org.lwjgl.opengl.GL11.glLineWidth; -import static org.lwjgl.opengl.GL11.glLoadIdentity; -import static org.lwjgl.opengl.GL11.glMatrixMode; -import static org.lwjgl.opengl.GL11.glPopMatrix; -import static org.lwjgl.opengl.GL11.glPushMatrix; -import static org.lwjgl.opengl.GL11.glRotated; -import static org.lwjgl.opengl.GL11.glTranslatef; -import static org.lwjgl.opengl.GL11.glVertex2i; -import static org.lwjgl.opengl.GL11.glVertex3i; -import static org.lwjgl.opengl.GL11.glViewport; +import com.mrcrayfish.modelcreator.dialog.WelcomeDialog; +import com.mrcrayfish.modelcreator.element.Element; +import com.mrcrayfish.modelcreator.element.ElementManager; +import com.mrcrayfish.modelcreator.panels.SidebarPanel; +import com.mrcrayfish.modelcreator.screenshot.PendingScreenshot; +import com.mrcrayfish.modelcreator.screenshot.Screenshot; +import com.mrcrayfish.modelcreator.sidebar.Sidebar; +import com.mrcrayfish.modelcreator.sidebar.UVSidebar; +import com.mrcrayfish.modelcreator.texture.PendingTexture; +import com.mrcrayfish.modelcreator.util.FontManager; +import org.lwjgl.LWJGLException; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.GLU; +import org.newdawn.slick.Color; +import javax.swing.BorderFactory; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Dimension; @@ -45,30 +39,7 @@ import java.util.List; import java.util.concurrent.atomic.AtomicReference; -import javax.swing.BorderFactory; -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.JScrollPane; - -import org.lwjgl.LWJGLException; -import org.lwjgl.input.Keyboard; -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.Display; -import org.lwjgl.opengl.GL11; -import org.lwjgl.util.glu.GLU; -import org.newdawn.slick.Color; - -import com.mrcrayfish.modelcreator.dialog.WelcomeDialog; -import com.mrcrayfish.modelcreator.element.Element; -import com.mrcrayfish.modelcreator.element.ElementManager; -import com.mrcrayfish.modelcreator.panels.SidebarPanel; -import com.mrcrayfish.modelcreator.screenshot.PendingScreenshot; -import com.mrcrayfish.modelcreator.screenshot.Screenshot; -import com.mrcrayfish.modelcreator.sidebar.Sidebar; -import com.mrcrayfish.modelcreator.sidebar.UVSidebar; -import com.mrcrayfish.modelcreator.texture.PendingTexture; -import com.mrcrayfish.modelcreator.util.FontManager; +import static org.lwjgl.opengl.GL11.*; public class ModelCreator extends JFrame { @@ -302,11 +273,11 @@ public void drawPerspective() glTranslatef(-8, 0, -8); for (int i = 0; i < manager.getElementCount(); i++) { - GL11.glLoadName(i + 1); Element cube = manager.getElement(i); - cube.draw(); GL11.glLoadName(0); cube.drawExtras(manager); + GL11.glLoadName(i + 1); + cube.draw(); } GL11.glPushMatrix(); @@ -436,6 +407,11 @@ public void handleInput(int offset) grabbed = manager.getAllElements().get(sel); manager.setSelectedElement(sel); } + else + { + grabbed = null; + manager.setSelectedElement(-1); + } } } else diff --git a/src/com/mrcrayfish/modelcreator/element/Element.java b/src/com/mrcrayfish/modelcreator/element/Element.java index 36c2f72..39e08f8 100644 --- a/src/com/mrcrayfish/modelcreator/element/Element.java +++ b/src/com/mrcrayfish/modelcreator/element/Element.java @@ -1,15 +1,12 @@ package com.mrcrayfish.modelcreator.element; -import static org.lwjgl.opengl.GL11.GL_BLEND; -import static org.lwjgl.opengl.GL11.GL_CULL_FACE; -import static org.lwjgl.opengl.GL11.GL_LINES; - -import org.lwjgl.opengl.GL11; -import org.lwjgl.util.glu.Sphere; - import com.mrcrayfish.modelcreator.ModelCreator; import com.mrcrayfish.modelcreator.texture.ClipboardTexture; import com.mrcrayfish.modelcreator.util.FaceDimension; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.Sphere; + +import static org.lwjgl.opengl.GL11.*; public class Element { @@ -243,6 +240,47 @@ public void drawExtras(ElementManager manager) GL11.glEnd(); } GL11.glPopMatrix(); + + GL11.glDepthMask(false); + GL11.glPushMatrix(); + { + GL11.glTranslated(getOriginX(), getOriginY(), getOriginZ()); + rotateAxis(); + GL11.glTranslated(-getOriginX(), -getOriginY(), -getOriginZ()); + GL11.glTranslated(getStartX(), getStartY(), getStartZ()); + GL11.glColor3f(0.6F, 0.25F, 0.6F); + GL11.glLineWidth(6F); + GL11.glBegin(GL_LINE_LOOP); + { + GL11.glVertex3d(0, 0, 0); + GL11.glVertex3d(width, 0, 0); + GL11.glVertex3d(width, 0, depth); + GL11.glVertex3d(0, 0, depth); + } + GL11.glEnd(); + GL11.glBegin(GL_LINE_LOOP); + { + GL11.glVertex3d(0, height, 0); + GL11.glVertex3d(width, height, 0); + GL11.glVertex3d(width, height, depth); + GL11.glVertex3d(0, height, depth); + } + GL11.glEnd(); + GL11.glBegin(GL_LINES); + { + GL11.glVertex3d(width, 0, 0); + GL11.glVertex3d(width, height, 0); + GL11.glVertex3d(0, 0, 0); + GL11.glVertex3d(0, height, 0); + GL11.glVertex3d(width, 0, depth); + GL11.glVertex3d(width, height, depth); + GL11.glVertex3d(0, 0, depth); + GL11.glVertex3d(0, height, depth); + } + GL11.glEnd(); + } + GL11.glPopMatrix(); + GL11.glDepthMask(true); } } diff --git a/src/com/mrcrayfish/modelcreator/panels/OriginPanel.java b/src/com/mrcrayfish/modelcreator/panels/OriginPanel.java index 9923fa8..096d7dd 100644 --- a/src/com/mrcrayfish/modelcreator/panels/OriginPanel.java +++ b/src/com/mrcrayfish/modelcreator/panels/OriginPanel.java @@ -1,5 +1,14 @@ package com.mrcrayfish.modelcreator.panels; +import com.mrcrayfish.modelcreator.Icons; +import com.mrcrayfish.modelcreator.element.Element; +import com.mrcrayfish.modelcreator.element.ElementManager; +import com.mrcrayfish.modelcreator.util.Parser; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JTextField; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; @@ -9,18 +18,10 @@ import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseWheelEvent; import java.text.DecimalFormat; -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JPanel; -import javax.swing.JTextField; - -import com.mrcrayfish.modelcreator.Icons; -import com.mrcrayfish.modelcreator.element.Element; -import com.mrcrayfish.modelcreator.element.ElementManager; -import com.mrcrayfish.modelcreator.util.Parser; - public class OriginPanel extends JPanel implements IValueUpdater { private static final long serialVersionUID = 1L; @@ -98,6 +99,25 @@ public void focusLost(FocusEvent e) } } }); + xOriginField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + element.setOriginX(Parser.parseDouble(xOriginField.getText(), element.getOriginX()) - scrollAmount); + element.updateEndUVs(); + manager.updateValues(); + } + } + }); yOriginField.setSize(new Dimension(62, 30)); yOriginField.setFont(defaultFont); @@ -131,6 +151,25 @@ public void focusLost(FocusEvent e) } } }); + yOriginField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + element.setOriginY(Parser.parseDouble(yOriginField.getText(), element.getOriginY()) - scrollAmount); + element.updateEndUVs(); + manager.updateValues(); + } + } + }); zOriginField.setSize(new Dimension(62, 30)); zOriginField.setFont(defaultFont); @@ -164,6 +203,25 @@ public void focusLost(FocusEvent e) } } }); + zOriginField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + element.setOriginZ(Parser.parseDouble(zOriginField.getText(), element.getOriginZ()) - scrollAmount); + element.updateEndUVs(); + manager.updateValues(); + } + } + }); btnPlusX.addActionListener(e -> { diff --git a/src/com/mrcrayfish/modelcreator/panels/PositionPanel.java b/src/com/mrcrayfish/modelcreator/panels/PositionPanel.java index 99bf4ff..2ce4ed7 100644 --- a/src/com/mrcrayfish/modelcreator/panels/PositionPanel.java +++ b/src/com/mrcrayfish/modelcreator/panels/PositionPanel.java @@ -1,5 +1,14 @@ package com.mrcrayfish.modelcreator.panels; +import com.mrcrayfish.modelcreator.Icons; +import com.mrcrayfish.modelcreator.element.Element; +import com.mrcrayfish.modelcreator.element.ElementManager; +import com.mrcrayfish.modelcreator.util.Parser; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JTextField; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; @@ -9,18 +18,10 @@ import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseWheelEvent; import java.text.DecimalFormat; -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JPanel; -import javax.swing.JTextField; - -import com.mrcrayfish.modelcreator.Icons; -import com.mrcrayfish.modelcreator.element.Element; -import com.mrcrayfish.modelcreator.element.ElementManager; -import com.mrcrayfish.modelcreator.util.Parser; - public class PositionPanel extends JPanel implements IValueUpdater { @@ -103,6 +104,25 @@ public void focusLost(FocusEvent e) } } }); + xPositionField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + element.setStartX(Parser.parseDouble(xPositionField.getText(), element.getStartX()) - scrollAmount); + element.updateEndUVs(); + manager.updateValues(); + } + } + }); yPositionField.setSize(new Dimension(62, 30)); yPositionField.setFont(defaultFont); @@ -139,6 +159,25 @@ public void focusLost(FocusEvent e) } } }); + yPositionField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + element.setStartY(Parser.parseDouble(yPositionField.getText(), element.getStartY()) - scrollAmount); + element.updateEndUVs(); + manager.updateValues(); + } + } + }); zPositionField.setSize(new Dimension(62, 30)); zPositionField.setFont(defaultFont); @@ -175,6 +214,25 @@ public void focusLost(FocusEvent e) } } }); + zPositionField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + element.setStartZ(Parser.parseDouble(zPositionField.getText(), element.getStartZ()) - scrollAmount); + element.updateEndUVs(); + manager.updateValues(); + } + } + }); btnPlusX.addActionListener(e -> { diff --git a/src/com/mrcrayfish/modelcreator/panels/SidebarPanel.java b/src/com/mrcrayfish/modelcreator/panels/SidebarPanel.java index cc27927..c641034 100644 --- a/src/com/mrcrayfish/modelcreator/panels/SidebarPanel.java +++ b/src/com/mrcrayfish/modelcreator/panels/SidebarPanel.java @@ -1,5 +1,22 @@ package com.mrcrayfish.modelcreator.panels; +import com.mrcrayfish.modelcreator.Icons; +import com.mrcrayfish.modelcreator.ModelCreator; +import com.mrcrayfish.modelcreator.element.Element; +import com.mrcrayfish.modelcreator.element.ElementManager; +import com.mrcrayfish.modelcreator.panels.tabs.ElementPanel; +import com.mrcrayfish.modelcreator.panels.tabs.FacePanel; +import com.mrcrayfish.modelcreator.panels.tabs.RotationPanel; +import com.mrcrayfish.modelcreator.texture.PendingTexture; + +import javax.swing.DefaultListModel; +import javax.swing.JButton; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextField; +import javax.swing.SpringLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; @@ -11,24 +28,6 @@ import java.util.ArrayList; import java.util.List; -import javax.swing.DefaultListModel; -import javax.swing.JButton; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTabbedPane; -import javax.swing.JTextField; -import javax.swing.SpringLayout; - -import com.mrcrayfish.modelcreator.Icons; -import com.mrcrayfish.modelcreator.ModelCreator; -import com.mrcrayfish.modelcreator.element.Element; -import com.mrcrayfish.modelcreator.element.ElementManager; -import com.mrcrayfish.modelcreator.panels.tabs.ElementPanel; -import com.mrcrayfish.modelcreator.panels.tabs.FacePanel; -import com.mrcrayfish.modelcreator.panels.tabs.RotationPanel; -import com.mrcrayfish.modelcreator.texture.PendingTexture; - public class SidebarPanel extends JPanel implements ElementManager { private static final long serialVersionUID = 1L; @@ -192,7 +191,15 @@ public void setSelectedElement(int pos) { if (pos < model.size()) { - list.setSelectedIndex(pos); + if (pos >= 0) + { + list.setSelectedIndex(pos); + } + else + { + list.clearSelection(); + } + updateValues(); } } diff --git a/src/com/mrcrayfish/modelcreator/panels/SizePanel.java b/src/com/mrcrayfish/modelcreator/panels/SizePanel.java index d3cfeee..e4615cc 100644 --- a/src/com/mrcrayfish/modelcreator/panels/SizePanel.java +++ b/src/com/mrcrayfish/modelcreator/panels/SizePanel.java @@ -1,5 +1,14 @@ package com.mrcrayfish.modelcreator.panels; +import com.mrcrayfish.modelcreator.Icons; +import com.mrcrayfish.modelcreator.element.Element; +import com.mrcrayfish.modelcreator.element.ElementManager; +import com.mrcrayfish.modelcreator.util.Parser; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JTextField; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; @@ -9,18 +18,10 @@ import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseWheelEvent; import java.text.DecimalFormat; -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JPanel; -import javax.swing.JTextField; - -import com.mrcrayfish.modelcreator.Icons; -import com.mrcrayfish.modelcreator.element.Element; -import com.mrcrayfish.modelcreator.element.ElementManager; -import com.mrcrayfish.modelcreator.util.Parser; - public class SizePanel extends JPanel implements IValueUpdater { private static final long serialVersionUID = 1L; @@ -87,6 +88,25 @@ public void keyPressed(KeyEvent e) } } }); + xSizeField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + element.setWidth(Parser.parseDouble(xSizeField.getText(), element.getWidth()) - scrollAmount); + element.updateEndUVs(); + manager.updateValues(); + } + } + }); xSizeField.addFocusListener(new FocusAdapter() { @Override @@ -123,6 +143,25 @@ public void keyPressed(KeyEvent e) } } }); + ySizeField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + element.setHeight(Parser.parseDouble(ySizeField.getText(), element.getHeight()) - scrollAmount); + element.updateEndUVs(); + manager.updateValues(); + } + } + }); ySizeField.addFocusListener(new FocusAdapter() { @Override @@ -173,6 +212,25 @@ public void focusLost(FocusEvent e) } } }); + zSizeField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + element.setDepth(Parser.parseDouble(zSizeField.getText(), element.getDepth()) - scrollAmount); + element.updateEndUVs(); + manager.updateValues(); + } + } + }); btnPlusX.addActionListener(e -> { diff --git a/src/com/mrcrayfish/modelcreator/panels/UVPanel.java b/src/com/mrcrayfish/modelcreator/panels/UVPanel.java index 3bc133c..b86310c 100644 --- a/src/com/mrcrayfish/modelcreator/panels/UVPanel.java +++ b/src/com/mrcrayfish/modelcreator/panels/UVPanel.java @@ -1,5 +1,15 @@ package com.mrcrayfish.modelcreator.panels; +import com.mrcrayfish.modelcreator.Icons; +import com.mrcrayfish.modelcreator.element.Element; +import com.mrcrayfish.modelcreator.element.ElementManager; +import com.mrcrayfish.modelcreator.element.Face; +import com.mrcrayfish.modelcreator.util.Parser; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JTextField; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; @@ -9,19 +19,10 @@ import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseWheelEvent; import java.text.DecimalFormat; -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JPanel; -import javax.swing.JTextField; - -import com.mrcrayfish.modelcreator.Icons; -import com.mrcrayfish.modelcreator.element.Element; -import com.mrcrayfish.modelcreator.element.ElementManager; -import com.mrcrayfish.modelcreator.element.Face; -import com.mrcrayfish.modelcreator.util.Parser; - public class UVPanel extends JPanel implements IValueUpdater { private static final long serialVersionUID = 1L; @@ -109,6 +110,26 @@ public void focusLost(FocusEvent e) } } }); + xStartField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + Face face = element.getSelectedFace(); + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + face.setStartU(Parser.parseDouble(xStartField.getText(), face.getStartU()) - scrollAmount); + face.updateEndUV(); + manager.updateValues(); + } + } + }); yStartField.setSize(new Dimension(62, 30)); yStartField.setFont(defaultFont); @@ -144,6 +165,26 @@ public void focusLost(FocusEvent e) } } }); + yStartField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + Face face = element.getSelectedFace(); + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + face.setStartV(Parser.parseDouble(yStartField.getText(), face.getStartV()) - scrollAmount); + face.updateEndUV(); + manager.updateValues(); + } + } + }); xEndField.setSize(new Dimension(62, 30)); xEndField.setFont(defaultFont); @@ -179,6 +220,26 @@ public void focusLost(FocusEvent e) } } }); + xEndField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + Face face = element.getSelectedFace(); + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + face.setEndU(Parser.parseDouble(xEndField.getText(), face.getEndU()) - scrollAmount); + face.updateStartUV(); + manager.updateValues(); + } + } + }); yEndField.setSize(new Dimension(62, 30)); yEndField.setFont(defaultFont); @@ -214,6 +275,26 @@ public void focusLost(FocusEvent e) } } }); + yEndField.addMouseWheelListener(new MouseAdapter() + { + @Override + public void mouseWheelMoved(MouseWheelEvent e) + { + Element element = manager.getSelectedElement(); + if (element != null) + { + Face face = element.getSelectedFace(); + float scrollAmount = e.getUnitsToScroll() / 3; + if ((e.getModifiers() & ActionEvent.SHIFT_MASK) == 1) + { + scrollAmount /= 10; + } + face.setEndV(Parser.parseDouble(yEndField.getText(), face.getEndV()) - scrollAmount); + face.updateStartUV(); + manager.updateValues(); + } + } + }); btnPlusX.addActionListener(e -> {