X-Git-Url: https://ruin.nu/git/?p=moosique.git;a=blobdiff_plain;f=MooViewCounter.java;h=16d34b9c42b9abdb3f7767e73683af5c268faad4;hp=83e40a650f0f8d72a7439c4196367a5185475241;hb=c3a31c2aa833e2197f0929655c69a2090e8bbecc;hpb=a9a054c1a3cf7cfc7981ea13b76856d06d7efa91 diff --git a/MooViewCounter.java b/MooViewCounter.java index 83e40a6..16d34b9 100644 --- a/MooViewCounter.java +++ b/MooViewCounter.java @@ -1,8 +1,9 @@ +import javax.sound.midi.*; import javax.swing.*; import java.awt.*; /** - * + * A graphical representation of the time signature of the current sequence. * * @author Andersson, Andreen, Lanneskog, Pehrson * @version 1 @@ -11,54 +12,56 @@ import java.awt.*; public class MooViewCounter extends JPanel { private int measure, halfBeat, beat, halfNote; - + private static final int CELL_HEIGHT = 10; + /** - * Creates + * Creates an musical ruler depending on the timesignature */ - private int timeSig1, timeSig2; - - public MooViewCounter (int ts1, int ts2) { - timeSig1 = ts1; - timeSig2 = ts2; - - switch (timeSig2) { - case 16: measure = timeSig1; - break; - case 8: measure = timeSig1 * 2; - halfBeat = measure/timeSig1; - break; - case 4: measure = timeSig1 * (int)Math.pow(2,2); - beat = measure/timeSig1; - halfBeat = beat/2; - break; - case 2: measure = timeSig1 * (int)Math.pow(2,3); - halfNote = measure/timeSig1; - beat = halfNote/2; - halfBeat = beat/2; - break; - case 1: measure = timeSig1 * (int)Math.pow(2,4); - halfNote = measure/2; - beat = halfNote/2; - halfBeat = beat/2; - break; + + public MooViewCounter (MetaMessage[] timeSigs) { + int timeSig1 = 4, timeSig2 = 4; // ...for now + 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 + halfBeat = beat / 2; // 1/8 + beat = halfNote / 2; // 1/4 + halfNote = measure / timeSig1; // 1/2 + break; + case 1: measure = timeSig1 * 16; // 1/16 + halfBeat = beat / 2; // 1/8 + beat = halfNote / 2; // 1/4 + halfNote = measure / 2; // 1/2 + break; } } + /** + * Draws the ruler-like fields. + * @param g The Graphics object it operates on. + */ public void paintComponent(Graphics g) { super.paintComponent(g); - setBackground(Color.black); if (!(g instanceof Graphics2D)) return; Graphics2D g2 = (Graphics2D)g; - setPreferredSize(new Dimension(50,200*10)); - g2.setColor(Color.white); + g2.setColor(Color.black); for (int c = 0; c < 200; c++) { - g2.drawLine(0,c*10,5,c*10); // 1/16 - g2.drawLine(0,c*10*halfBeat,10,c*10*halfBeat); // 1/8 - g2.drawLine(0,c*10*beat,15,c*10*beat); // 1/4 - g2.drawLine(0,c*10*halfNote,20,c*10*halfNote); // 1/2 - g2.drawLine(0,c*10*measure,35,c*10*measure); // 1/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 } } -} \ No newline at end of file +}