91 int width = metrics.
width;
92 int height = metrics.
height;
100 cairo_pattern_t* pat = cairo_pattern_create_linear (0, 0,x0, 0);
101 cairo_pattern_set_extend(pat, CAIRO_EXTEND_REFLECT);
102 cairo_pattern_add_color_stop_rgb (pat, 1, 0.1, 0.8, 0.1);
103 cairo_pattern_add_color_stop_rgb (pat, 0.7, 0.8, 0.8, 0.1);
104 cairo_pattern_add_color_stop_rgb (pat, 0, 1, 0.1, 0.1);
106 cairo_set_source_rgb(w->
crb,0.2,0.2,0.2);
108 for (; i < width/20 +1; ++i) {
109 cairo_rectangle(w->
crb,(width/2)+i*10, 5, 5, 20);
113 cairo_rectangle(w->
crb,(width/2)-i*10, 5, 5, 20);
118 cairo_set_source_rgb(w->
crb,0.2,0.2,0.2);
125 float fvis = _get_tuner_temperament(w) * (log2f(value/xt->
ref_freq) + 4);
126 float fvisr = round(fvis);
128 int indicate_oc = round((fvisr+xt->
temp_adjust)/_get_tuner_temperament(w));
129 const int octsz =
sizeof(octave) /
sizeof(octave[0]);
130 if (indicate_oc < 0 || indicate_oc >= octsz) {
133 indicate_oc = octsz - 1;
136 scale = (fvis-vis) / 4;
137 float cent = (scale * 10000) / 25;
138 vis = vis % _get_tuner_temperament(w);
140 vis += _get_tuner_temperament(w);
143 if (value > 24.0 && value < 999.0) {
145 cairo_set_source_rgb(w->
crb,0.80,0.79,0.01);
150 if (scale > -0.004) {
151 cairo_set_source_rgb(w->
crb,0.80,0.79,0.01);
158 cairo_select_font_face (w->
crb,
"Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
159 cairo_set_source_rgba(w->
crb, fabsf(scale)*2, 1-(scale*scale*4), 0.2,max(0,1-(fabsf(scale)*6)));
161 cairo_text_extents_t extents;
163 if (value > 24.0 && value < 999.0) {
164 cairo_text_extents(w->
crb,_get_note_set(w)[vis] , &extents);
165 float c = (extents.width/2)+10.0;
166 cairo_move_to(w->
crb,x0-c , y0+10 );
167 cairo_show_text(w->
crb, _get_note_set(w)[vis]);
169 cairo_move_to(w->
crb,x0+c-10.0, y0+10+ extents.height/2 );
170 cairo_show_text(w->
crb, octave[indicate_oc]);
174 snprintf(s, 63,
"%.2f Hz", value);
177 cairo_text_extents(w->
crb,s , &extents);
178 cairo_move_to (w->
crb, width/1.1-extents.width, height-extents.height );
179 cairo_show_text(w->
crb, s);
180 snprintf(sc, 63,
"%.2f cent", cent);
181 cairo_text_extents(w->
crb,sc , &extents);
182 cairo_move_to (w->
crb, width/4.1-extents.width, height-extents.height );
183 cairo_show_text(w->
crb, sc);
185 cairo_set_source(w->
crb,pat);
193 static int cmove = 0;
194 static int omove = 0;
195 static int pmove = 0;
199 if(xt->
move<-width/20) xt->
move=width/20;
200 else if(xt->
move>width/20) xt->
move=-width/20;
201 if(cmove<-width/20) cmove=width/20;
202 else if(cmove>width/20) cmove=-width/20;
203 if(omove<-width/20) omove=width/20;
204 else if(omove>width/20) omove=-width/20;
205 if(pmove<-width/20) pmove=width/20;
206 else if(pmove>width/20) pmove=-width/20;
212 if(cmove<0) cmove+=1;
213 else if(cmove>0) cmove-=1;
216 if(omove<0) omove+=1;
217 else if(omove>0) omove-=1;
220 if(pmove<0) pmove+=1;
221 else if(pmove>0) pmove-=1;
223 for (
int i = 0; i < 4; ++i) {
224 cairo_rectangle(w->
crb,(width/2)-20 + (xt->
move+i)*10, 5, 5, 5);
225 cairo_rectangle(w->
crb,(width/2)-20 + (omove+i)*10, 10, 5, 5);
226 cairo_rectangle(w->
crb,(width/2)-20 + (pmove+i)*10, 15, 5, 5);
227 cairo_rectangle(w->
crb,(width/2)-20 + (cmove+i)*10, 20, 5, 5);
231 cairo_set_source_rgb(w->
crb,0.2,0.2,0.2);
234 cairo_text_extents(w->
crb,
"000.00 Hz", &extents);
235 cairo_move_to (w->
crb, width/1.1-extents.width, height-extents.height );
236 cairo_show_text(w->
crb,
"000.00 Hz");
238 cairo_text_extents(w->
crb,
"0.00 cent", &extents);
239 cairo_move_to (w->
crb, width/4.1-extents.width, height-extents.height );
240 cairo_show_text(w->
crb,
"0.00 cent");
243 cairo_text_extents(w->
crb,
"#" , &extents);
244 float c = (extents.width/2)+10.0;
245 cairo_move_to(w->
crb,x0-c , y0+10 );
246 cairo_show_text(w->
crb,
"#");
248 cairo_move_to(w->
crb,x0+c-10.0, y0+10+ extents.height/2 );
249 cairo_show_text(w->
crb,
"0");
251 cairo_pattern_destroy(pat);