X-Git-Url: https://ruin.nu/git/%3CTMPL_VAR%20NAME=PAGE%3E?a=blobdiff_plain;f=MooTrackView.java;h=cb22b42def09d6aa15a1223891a317fc5df0e729;hb=f13c7fbb2a8cc841367e0a4563596592b89cd33b;hp=0c48df37ad736b7ccc2d2dbc6c3c9545c498f7d4;hpb=ae0bb1ddc2361a9c7f08579488870f0b99b14cb6;p=moosique.git diff --git a/MooTrackView.java b/MooTrackView.java index 0c48df3..cb22b42 100644 --- a/MooTrackView.java +++ b/MooTrackView.java @@ -28,7 +28,7 @@ public class MooTrackView extends JPanel { private Insets insets; private Rectangle box; private int ticksPerSixteenth, popupY = 0; - private boolean leftMouseButtonPressed = false; + private boolean leftMouseButtonPressed = false, quantizeRecording = false; protected static int viewLength = 0; protected static int extraHeight = 0; public static final int NOTE_HEIGHT = 10, NOTE_WIDTH = 40, VIEW_WIDTH = 200; @@ -52,7 +52,7 @@ public class MooTrackView extends JPanel { setLayout(null); setPreferredSize(new Dimension(VIEW_WIDTH, 140 * NOTE_HEIGHT)); - placeNoteElements(); + placeNoteElements(false); // Creates panel pop-up menu. popup = new JPopupMenu(); @@ -78,7 +78,7 @@ public class MooTrackView extends JPanel { /** * Creates note elements for all MooNotes in the track, and places them in the appropriate place. */ - public void placeNoteElements() { + public void placeNoteElements(boolean quantize) { // Converts the track. Moosique.convertTrack(track); @@ -132,10 +132,14 @@ public class MooTrackView extends JPanel { // Calculates coordinates. x = insets.left; - y = insets.top + (int)((mn.getTick() * NOTE_HEIGHT) / ticksPerSixteenth); - height = (mn.getDuration() * NOTE_HEIGHT) / ticksPerSixteenth; - System.out.println("y=i(" + insets.top + ")+t(" + mn.getTick() + ")/s(" + ticksPerSixteenth + ") *n(" + NOTE_HEIGHT + ") = " + y); - System.out.println("h=t(" + mn.getDuration() + ")/s(" + ticksPerSixteenth + ") *n(" + NOTE_HEIGHT + ") = " + height); + if (quantizeRecording) { + // Snap to nearest sixteenth + y = insets.top + Math.round(mn.getTick() / ticksPerSixteenth) * NOTE_HEIGHT; + height = (mn.getDuration() / ticksPerSixteenth) * NOTE_HEIGHT; + } else { + y = insets.top + (int)((mn.getTick() * NOTE_HEIGHT) / ticksPerSixteenth); + height = (mn.getDuration() * NOTE_HEIGHT) / ticksPerSixteenth; + } if (height == 0) height = NOTE_HEIGHT; r = new Rectangle(x, y, NOTE_WIDTH, height);