void Fl_Diamond_Box::draw(int x, int y, int w, int h, Fl_Color c, Fl_Flags f) const { int x1 = x+w/2; if (w&1) w--; else {w -= 2; x++;} int y1 = y+h/2; if (h&1) h--; else {h -= 2; y++;} const char* s = (f & FL_VALUE) ? down->data() : data(); char buf[26]; if (f&FL_INACTIVE && Fl_Style::draw_boxes_inactive) { fl_to_inactive(s, buf); s = buf; } const char* t; if (*s == '2') { t = s+1; s += 3; } else { t = s+2; } while (*s && *t && w > 0 && h > 0) { // draw upper-right line: fl_color(*s++ + (FL_GRAY_RAMP-'A')); fl_line(x+w, y1, x1, y); // draw upper-left line: fl_color(*s++ + (FL_GRAY_RAMP-'A')); fl_line(x1, y, x, y1); if (*s) s += 2; // draw lower-left line: fl_color(*t++ + (FL_GRAY_RAMP-'A')); fl_line(x, y1, x1, y+h); // draw lower-right line: fl_color(*t++ + (FL_GRAY_RAMP-'A')); fl_line(x1, y+h, x+w, y1); t += 2; x++; y++; w -= 2; h -= 2; } if (w > 0 && h > 0 && !(f & FL_INVISIBLE)) { // draw the interior, assumming the edges are the same thickness // as the normal square box: fl_newpath(); fl_vertex(x, y1); fl_vertex(x1, y); fl_vertex(x+w,y1); fl_vertex(x1,y+h); fl_color(c); fl_fill_stroke(c); } }
static void rbox(int x, int y, int w, int h, Fl_Color fill, Fl_Color line) { // figure out diameter of circles for corners: float d = w*(4/5.0f); float d1 = h*(4/5.0f); if (d1 < d) d = d1; if (d > 30) d = 30; float X = float(x); float Y = float(y); w--; h--; fl_arc(X, Y, d, d, 90, 180); fl_arc(X, Y+h-d, d, d, 180, 270); fl_arc(X+w-d, Y+h-d, d, d, 270, 360); fl_arc(X+w-d, Y, d, d, 0, 90); fl_color(fill); fl_fill_stroke(line); }
void draw() { fl_push_clip(0, 0, w(), h()); fl_color(FL_DARK3); fl_rectf(0, 0, w(), h()); fl_push_matrix(); // if (args[6]) { fl_translate(w()/2.0f, h()/2.0f); fl_rotate(args[6]); fl_translate(-w()/2.0f, -h()/2.0f); //} fl_arc(args[0],args[1],args[2],args[3],args[4],args[5]); fl_closepath(); fl_arc(120,120,40,40,0,-360); fl_ellipse(20,20,args[2],args[3]); // hardware circle fl_color(FL_WHITE); fl_fill_stroke(FL_RED); fl_pop_matrix(); fl_pop_clip(); }
void Fl_Dial::draw() { int X = 0; int Y = 0; int W = w(); int H = h(); if (!(type() == FILL && box() == FL_OVAL_BOX)) { if (damage()&FL_DAMAGE_ALL) draw_box(); box()->inset(X,Y,W,H); } Fl_Color fillcolor = selection_color(); Fl_Color linecolor = highlight_color(); if (!active_r()) { fillcolor = fl_inactive(fillcolor); linecolor = fl_inactive(linecolor); } double angle = (a2-a1)*(value()-minimum())/(maximum()-minimum()) + a1; if (type() == FILL) { if (damage()&FL_DAMAGE_EXPOSE && box() == FL_OVAL_BOX) { fl_push_clip(0, 0, w(), h()); parent()->draw_group_box(); fl_pop_clip(); } fl_color(color()); fl_pie(X, Y, W-1, H-1, 270-a1, angle > a1 ? 360+270-angle : 270-360-angle); fl_color(fillcolor); fl_pie(X, Y, W-1, H-1, 270-angle, 270-a1); if (box() == FL_OVAL_BOX) { fl_ellipse(X, Y, W-1, H-1); fl_color(linecolor); fl_stroke(); } } else { if (!(damage()&FL_DAMAGE_ALL)) { fl_ellipse(X+1, Y+1, W-2, H-2); fl_color(color()); fl_fill(); } fl_push_matrix(); fl_translate(X+W/2-.5, Y+H/2-.5); fl_scale(W-1, H-1); fl_rotate(45-angle); if (type() == LINE) { fl_vertex(0.0, 0.0); fl_vertex(-0.04, 0.0); fl_vertex(-0.25, 0.25); fl_vertex(0.0, 0.04); } else { fl_circle(-0.20, 0.20, 0.07); } fl_color(fillcolor); fl_fill_stroke(linecolor); fl_pop_matrix(); } if (focused()) { fl_ellipse(X+2, Y+2, W-5, H-5); fl_color(linecolor); fl_line_style(FL_DASH); fl_stroke(); fl_line_style(0); } }