X-Git-Url: https://ruin.nu/git/?a=blobdiff_plain;f=MooViewCounter.java;h=de1dac2db6e25c53bde2e2ded1d9c49791d24c60;hb=refs%2Fheads%2Forigin;hp=8383b6cb44405a8749a0ba046101689c7d05e8d6;hpb=83ec11f99e143607d057db2a68c262ca9672e524;p=moosique.git diff --git a/MooViewCounter.java b/MooViewCounter.java index 8383b6c..de1dac2 100644 --- a/MooViewCounter.java +++ b/MooViewCounter.java @@ -17,40 +17,61 @@ public class MooViewCounter extends JPanel { /** * Creates an musical ruler depending on the timesignature */ - public MooViewCounter (MetaMessage[] timeSigs) { - int timeSig1 = 4, timeSig2 = 4; // ...for now + // ...for now + int timeSig1 = 4, timeSig2 = 4; + calculateLineSpecs(timeSig1, timeSig2); setBackground(Moosique.getGUI().bgColor); setPreferredSize(new Dimension(35, 200 * CELL_HEIGHT)); + } - switch (timeSig2) { - case 16: measure = timeSig1; // 1/16 - break; - case 8: measure = timeSig1 * 2; // 1/16 - halfBeat = measure / timeSig1; // 1/8 - break; - case 4: measure = timeSig1 * 4; // 1/16 - halfBeat = beat / 2; // 1/8 - beat = measure / timeSig1; // 1/4 - break; - case 2: measure = timeSig1 * 8; // 1/16 + private void calculateLineSpecs(int ts1, int ts2) { + switch (ts2) { + case 16: measure = ts1; // 1/16 + break; + case 8: measure = ts1 * 2; // 1/16 + halfBeat = measure / ts1; // 1/8 + break; + case 2: measure = ts1 * 8; // 1/16 halfBeat = beat / 2; // 1/8 beat = halfNote / 2; // 1/4 - halfNote = measure / timeSig1; // 1/2 - break; - case 1: measure = timeSig1 * 16; // 1/16 + halfNote = measure / ts1; // 1/2 + break; + case 1: measure = ts1 * 16; // 1/16 halfBeat = beat / 2; // 1/8 beat = halfNote / 2; // 1/4 halfNote = measure / 2; // 1/2 - break; + break; + default: measure = ts1 * 4; // 1/16 + halfBeat = beat / 2; // 1/8 + beat = measure / ts1; // 1/4 + break; } - } + + /** + * Draws the ruler-like fields. + * @param g The Graphics object it operates on. + */ public void paintComponent(Graphics g) { super.paintComponent(g); if (!(g instanceof Graphics2D)) return; Graphics2D g2 = (Graphics2D)g; g2.setColor(Color.black); + + + /* Using time signature... + for (int i = 0, tick = getTicksForPosition(i, 0, 0); tick < Moosique.getSequence().getTickLength(); i++) { + int[] ts = getTimeSig(tick); + calculateLineSpecs(ts[0], ts[1]); + g2.drawLine(0, c * CELL_HEIGHT, 5, c * CELL_HEIGHT); // 1/16 + g2.drawLine(0, c * CELL_HEIGHT * halfBeat, 10, c * CELL_HEIGHT * halfBeat); // 1/8 + g2.drawLine(0, c * CELL_HEIGHT * beat, 15, c * CELL_HEIGHT * beat); // 1/4 + g2.drawLine(0, c * CELL_HEIGHT * halfNote, 20, c * CELL_HEIGHT * halfNote); // 1/2 + g2.drawLine(0, c * CELL_HEIGHT * measure, 30, c * CELL_HEIGHT * measure); // 1/1 + } + */ + for (int c = 0; c < 200; c++) { g2.drawLine(0, c * CELL_HEIGHT, 5, c * CELL_HEIGHT); // 1/16 g2.drawLine(0, c * CELL_HEIGHT * halfBeat, 10, c * CELL_HEIGHT * halfBeat); // 1/8 @@ -59,4 +80,4 @@ public class MooViewCounter extends JPanel { g2.drawLine(0, c * CELL_HEIGHT * measure, 30, c * CELL_HEIGHT * measure); // 1/1 } } -} \ No newline at end of file +}