-
Notifications
You must be signed in to change notification settings - Fork 0
/
CustomKnob.pde
85 lines (72 loc) · 2.91 KB
/
CustomKnob.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class CustomKnob extends Knob {
int current = 0xffff0000;
float a = 128;
float na;
int y;
// use the convenience constructor of super class Controller
// MyButton will automatically registered and move to the
// default controlP5 tab.
CustomKnob(ControlP5 cp5, String theName) {
super(cp5, theName);
// replace the default view with a custom view.
setView(new ControllerView() {
public void display(PGraphics p, Object b) {
translate( ( int ) getRadius( ) , ( int ) getRadius( ) );
pushMatrix( );
ellipseMode( PApplet.CENTER );
noStroke( );
fill( getColor( ).getBackground( ) );
ellipse( 0 , 0 , getRadius( ) * 2 , getRadius( ) * 2 );
popMatrix( );
int c = isActive( ) ? getColor( ).getActive( ) : getColor( ).getForeground( );
pushMatrix( );
if ( getViewStyle( ) == Controller.LINE ) {
rotate( getAngle( ) );
stroke( c );
strokeWeight( getTickMarkWeight( ) );
line( 0 , 0 , getRadius( ) , 0 );
} else if ( getViewStyle( ) == Controller.ELLIPSE ) {
rotate( getAngle( ) );
fill( c );
ellipse( getRadius( ) * 0.75f , 0 , getRadius( ) * 0.2f , getRadius( ) * 0.2f );
} else if ( getViewStyle( ) == Controller.ARC ) {
fill( c );
arc( 0 , 0 , getRadius( ) * 1.0f , getRadius( ) * 1.0f , getStartAngle( ) , getAngle( ) + ( ( getStartAngle( ) == getAngle( ) ) ? 0.06f : 0f ) );
fill( red( getColor( ).getBackground( ) ) , green( getColor( ).getBackground( ) ) , blue( getColor( ).getBackground( ) ) , 255 );
ellipse( 0 , 0 , getRadius( ) * 0.8f , getRadius( ) * 0.8f );
}
popMatrix( );
pushMatrix( );
rotate( getStartAngle( ) );
if ( isShowTickMarks( ) ) {
float step = getAngleRange( ) / getNumberOfTickMarks( );
stroke( getColor( ).getForeground( ) );
strokeWeight( getTickMarkWeight( ) );
for ( int i = 0 ; i <= getNumberOfTickMarks( ) ; i++ ) {
line( getRadius( ) + 2 , 0 , getRadius( ) + getTickMarkLength( ) + 2 , 0 );
rotate( step );
}
} else {
if ( isShowAngleRange( ) ) {
stroke( getColor( ).getForeground( ) );
strokeWeight( getTickMarkWeight( ) );
line( getRadius( ) + 2 , 0 , getRadius( ) + getTickMarkLength( ) + 2 , 0 );
rotate( getAngleRange( ) );
line( getRadius( ) + 2 , 0 , getRadius( ) + getTickMarkLength( ) + 2 , 0 );
}
}
noStroke( );
popMatrix( );
pushMatrix( );
translate( -getWidth( ) / 2 , -getHeight( ) / 2 );
if ( isLabelVisible ) {
_myCaptionLabel.draw( p , 0 , 0 );
_myValueLabel.align( ControlP5.CENTER , ControlP5.CENTER );
_myValueLabel.draw( p , 0 , 0);
}
popMatrix( );
}
}
);
}
}