本文整理汇总了C++中cairo::RefPtr::close_path方法的典型用法代码示例。如果您正苦于以下问题:C++ RefPtr::close_path方法的具体用法?C++ RefPtr::close_path怎么用?C++ RefPtr::close_path使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类cairo::RefPtr
的用法示例。
在下文中一共展示了RefPtr::close_path方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: drawRoundedRectangle
void GraphicalItem::drawRoundedRectangle(
const Cairo::RefPtr<Cairo::Context>& context,
int x, int y,
int width, int height,
double aspect,
double corner_radius,
double red, double green, double blue)
{
double radius = corner_radius / aspect;
double degrees = M_PI / 180.0;
context->begin_new_sub_path();
context->arc(x + width - radius, y + radius, radius,
-90 * degrees, 0 * degrees);
context->arc(x + width - radius, y + height - radius,
radius, 0 * degrees, 90 * degrees);
context->arc(x + radius, y + height - radius, radius,
90 * degrees, 180 * degrees);
context->arc(x + radius, y + radius, radius,
180 * degrees, 270 * degrees);
context->close_path();
context->set_source_rgb(red, green, blue);
context->fill_preserve();
setColor(Settings::settings().getForegroundColor(), context);
context->stroke();
}
示例2: dark
void
ColorSlider::draw_arrow(
const Cairo::RefPtr<Cairo::Context> &cr,
double x, double y,
double width, double height,
int size,
bool fill)
{
//TODO hardcoded colors
Color dark(0, 0, 0);
Color light(1, 1, 1);
//!TODO FActorize ! (Duplicate code with "Widget_Keyframe_List::draw_arrow")
//! Upper black pointing down arrow
cr->set_source_rgb(dark.get_r(), dark.get_g(), dark.get_b());
cr->set_line_width(1.0);
cr->move_to(x, y);
cr->line_to(x - 0.5*width, y - height);
cr->line_to(x + 0.5*width, y - height);
cr->close_path();
if (fill)
{
/* //! Draw on outline
cr->fill_preserve();
cr->set_source_rgb(light.get_r(), light.get_g(), light.get_b());
cr->stroke();
*/
cr->fill();
}else cr->stroke();
//! Bottom light pointing up arrow
cr->set_source_rgb(light.get_r(), light.get_g(), light.get_b());
cr->set_line_width(1.0);
cr->move_to(x, size - height);
cr->line_to(x - 0.5*width, size);
cr->line_to(x + 0.5*width, size);
cr->close_path();
if (fill)
{
/* //! Draw on outline
cr->fill_preserve();
cr->set_source_rgb(dark.get_r(), dark.get_g(), dark.get_b());
cr->stroke();
*/
cr->fill();
}else cr->stroke();
}
示例3: on_expose_event
bool on_expose_event(GdkEventExpose* ev) {
Glib::RefPtr< Gdk::Window > window = get_window();
if (window) {
Cairo::RefPtr< Cairo::Context > ctx = window->create_cairo_context();
Gtk::Allocation alloc = get_allocation();
const int height = alloc.get_height();
const int width = alloc.get_width();
ctx->scale(width, height); //escala para que ocupe siempre toda la pantalla. Notar que es ancho y después alto.
ctx->set_line_width(ANCHO_LINEA);
// contorno
ctx->move_to(0.0, 1.0); // muevo hacia el punto inicial, que arbitrariamente elegí que fuera el de la izquierda abajo
ctx->line_to(0.0, 0.0); // línea hacia el punto de arriba a la izquierda
ctx->line_to(1.0, 0.0); // línea hacia el punto de arriba a la derecha
ctx->line_to(1.0, 1.0); // línea hacia el punto de abajo a la derecha
ctx->close_path(); // cierro el camino
ctx->save(); // salvo porque voy a cambiar el color
ctx->set_source_rgb(1.0, 1.0, 1.0); // seteo el color al blanco
ctx->fill_preserve(); // relleno todo el cuadrado, preservando el camino para dibujar el contorno
ctx->restore();
ctx->stroke(); // pinto el camino en negro
// triángulo azul de abajo
ctx->move_to(0.0, 1.0); // muevo hacia el punto inicial, que arbitrariamente elegí que fuera el de la izquierda
ctx->line_to(0.5, 0.5); // línea hacia el punto del medio
ctx->line_to(1.0, 1.0); // línea hacia el punto de abajo a la derecha
ctx->close_path(); // cierro el camino
ctx->save(); // salvo porque voy a cambiar el color
ctx->set_source_rgb(0.0, 0.0, 1.0); // seteo el color al azul
ctx->fill_preserve(); // relleno todo triángulo, preservando el camino para dibujar el contorno
ctx->restore();
ctx->stroke(); // pinto el camino en negro
// triángulo azul de arriba
ctx->move_to(0.0, 0.0); // muevo hacia el punto inicial, que arbitrariamente elegí que fuera el de la izquierda
ctx->line_to(0.5, 0.5); // línea hacia el punto del medio
ctx->line_to(1.0, 0.0); // línea hacia el punto de arriba a la derecha
ctx->close_path(); // cierro el camino
ctx->save(); // salvo porque voy a cambiar el color
ctx->set_source_rgb(0.0, 0.0, 1.0); // seteo el color al azul
ctx->fill_preserve(); // relleno todo triángulo, preservando el camino para dibujar el contorno
ctx->restore();
ctx->stroke(); // pinto el camino en negro
}
return true;
}
示例4: dibujarArco
void GraficoDeTorta::dibujarArco(const Cairo::RefPtr<Cairo::Context>& c,int x, int y, int radio, float angulo0, float angulo1,float r, float g, float b){
c->set_source_rgb(1,1,1);
c->set_line_width(2);
c->arc(x,y,radio, angulo0, angulo1);
c->line_to(x,y);
c->close_path();
c->stroke_preserve();
c->set_source_rgb(r,g,b);
c->fill();
}
示例5: renderShields
//! Only renders the shield background, the text is rendered in renderLabels
void Renderer::renderShields(const Cairo::RefPtr<Cairo::Context>& cr,
std::vector<shared_ptr<Shield> >& shields) const
{
cr->save();
cr->set_line_join(Cairo::LINE_JOIN_ROUND);
for (auto& shield : shields)
{
const Style* s = shield->style;
double x0, y0, height, width;
double border = ceil(s->shield_frame_width/2.0 + s->shield_casing_width);
x0 = shield->shield.minX + border;
y0 = shield->shield.minY + border;
width = shield->shield.getWidth() - 2*border;
height = shield->shield.getHeight() - 2*border;
if ((int) s->shield_frame_width % 2 == 1) {
x0 -= 0.5;
y0 -= 0.5;
}
if (s->shield_shape == Style::ShieldShape::ROUNDED) {
cr->arc(x0 + height/2.0, y0 + height/2.0,
height/2.0, boost::math::constants::pi<double>()/2.0, 3.0*boost::math::constants::pi<double>()/2.0);
cr->arc(x0 + width - height/2.0, y0 + height/2.0,
height/2.0, 3.0*boost::math::constants::pi<double>()/2.0, boost::math::constants::pi<double>()/2.0);
cr->close_path();
} else
cr->rectangle(x0, y0, width, height);
// shield casing
if (s->shield_casing_width > 0) {
cr->set_source_color(s->shield_casing_color),
cr->set_line_width(s->shield_frame_width + s->shield_casing_width * 2.0);
cr->stroke_preserve();
}
// shield background
cr->set_source_color(s->shield_color),
cr->fill_preserve();
// shield frame
cr->set_source_color(s->shield_frame_color),
cr->set_line_width(s->shield_frame_width);
cr->stroke();
}
cr->restore();
}
示例6: DrawRoundedRectangle
void NodeSurface::DrawRoundedRectangle(
Cairo::RefPtr<Cairo::Context> refCairo,
double x,
double y,
double width,
double height,
double radius,
double red,
double green,
double blue,
bool selected )
{
refCairo->save();
if ( (radius > height/2.0) || (radius > width/2.0) )
{
radius = std::min<double>(height / 2, width / 2);
}
refCairo->move_to( x, y + radius );
refCairo->arc( x + radius, y + radius, radius, sk_pi, -sk_pi / 2.0 );
refCairo->line_to( x + width - radius, y );
refCairo->arc( x + width - radius, y + radius, radius, -sk_pi / 2.0, 0 );
refCairo->line_to( x + width, y + height - radius );
refCairo->arc( x + width - radius, y + height - radius, radius, 0, sk_pi / 2.0 );
refCairo->line_to( x + radius, y + height );
refCairo->arc( x + radius, y + height - radius, radius, sk_pi / 2.0, sk_pi );
refCairo->close_path();
refCairo->set_source_rgb( red, green, blue );
refCairo->fill_preserve();
if ( selected == true )
{
refCairo->set_source_rgb( 1.0, 0.0, 0.0 );
refCairo->set_line_width( 2 );
refCairo->stroke();
}
else
{
refCairo->set_source_rgb( 0.0, 0.0, 0.0 );
refCairo->set_line_width( 1 );
refCairo->stroke();
}
refCairo->restore();
}
示例7: triangle
void Turtle::triangle(Cairo::RefPtr<Cairo::Context> cr, double x, double y, double size, double a) {
cr->save();
// cr->set_source_rgb(0, 0, 0);
/*
if (first) {
first = false;
sand->set_source_rgb(0, 0, 1);
}
*/
cr->move_to(x + size * cosd(a), y + size * sind(a));
cr->line_to(x + size * cosd(a + 120), y + size * sind(a + 120));
cr->line_to(x + size * cosd(a + 240), y + size * sind(a + 240));
cr->fill();
cr->close_path();
cr->stroke();
cr->restore();
colored_area += sqrt(3) / 2 * size * size;
}
示例8: drawRectangle
void GraphicalItem::drawRectangle(const Cairo::RefPtr<Cairo::Context>& context,
int x, int y,
int width, int height,
double red, double green, double blue)
{
context->begin_new_sub_path();
context->move_to(x, y);
context->line_to(x + width, y);
context->line_to(x + width, y + height);
context->line_to(x, y + height);
context->line_to(x, y);
context->close_path();
context->set_source_rgb(red, green, blue);
context->fill_preserve();
setColor(Settings::settings().getForegroundColor(), context);
context->stroke();
}
示例9:
static void
skillgui_cairo_render_polygon(GVJ_t *job, pointf *A, int n, int filled)
{
#ifdef USE_GVPLUGIN_TIMETRACKER
__tt.ping_start(__ttc_polygon);
++__num_polygon;
#endif
//printf("Polygon\n");
SkillGuiCairoRenderInstructor *cri = (SkillGuiCairoRenderInstructor *)job->context;
Cairo::RefPtr<Cairo::Context> cairo = cri->get_cairo();
obj_state_t *obj = job->obj;
skillgui_cairo_set_penstyle(cairo, job);
cairo->move_to(A[0].x, -A[0].y);
for (int i = 1; i < n; ++i) {
cairo->line_to(A[i].x, -A[i].y);
}
cairo->close_path();
if (filled) {
skillgui_cairo_set_color(cairo, &(obj->fillcolor));
cairo->fill_preserve();
}
// HACK to workaround graphviz bug any get the Tim style...
if ( obj->type == CLUSTER_OBJTYPE ) {
obj->pencolor.u.RGBA[0] = 0.666;
obj->pencolor.u.RGBA[1] = 0.666;
obj->pencolor.u.RGBA[2] = 1.0;
obj->pencolor.u.RGBA[3] = 1.0;
}
skillgui_cairo_set_color(cairo, &(obj->pencolor));
cairo->stroke();
#ifdef USE_GVPLUGIN_TIMETRACKER
__tt.ping_end(__ttc_polygon);
#endif
}
示例10: on_expose_event
bool CPagePreview::on_expose_event(GdkEventExpose *event)
{
std::cout << "Fired!\n";
Glib::RefPtr<Gdk::Window> window = get_window();
if(window)
{
// get the cairo context amd allocation
Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
Gtk::Allocation allocation = get_allocation();
const int width = allocation.get_width();
const int height = allocation.get_height();
// coordinates for the center of the window
int xc, yc;
xc = width / 2;
yc = height / 2;
// clip to the area indicated by the expose event so that we only redraw
// the portion of the window that needs to be redrawn
cr->rectangle(event->area.x, event->area.y,
event->area.width, event->area.height);
cr->clip();
double border = 0.05;
double offset = 2.0;
// draw a neat shadow
cr->set_source_rgba(0.0,0.0,0.0,0.4);
cr->begin_new_path();
cr->move_to( width*border+offset,height*border+offset );
cr->line_to( width*(1.0-border)+offset,height*border+offset );
cr->line_to( width*(1.0-border)+offset,height*(1.0-border)+offset );
cr->line_to( width*border+offset,height*(1.0-border)+offset );
cr->close_path();
cr->fill();
// draw the page outline
cr->set_source_rgb(0.0,0.0,0.0); // black
cr->set_line_width( 1.0 );
cr->begin_new_sub_path();
cr->move_to( width*border-offset,height*border-offset );
cr->line_to( width*(1.0-border)-offset,height*border-offset );
cr->line_to( width*(1.0-border)-offset,height*(1.0-border)-offset );
cr->line_to( width*border-offset,height*(1.0-border)-offset );
cr->close_path();
cr->stroke_preserve();
// fill the page with white
cr->save();
cr->set_source_rgb(1.0,1.0,1.0); // white
cr->fill_preserve();
cr->restore();
// and the image preview
ImagePixbuf->render_to_drawable( get_window(),
get_style()->get_black_gc(),
0,
0,
(width-ImagePixbuf->get_width())/2,
(height-ImagePixbuf->get_height())/2,
ImagePixbuf->get_width(), //image->get_width(),
ImagePixbuf->get_height(), //image->get_height(),
Gdk::RGB_DITHER_NONE,0,0 ); // */
return true;
}
}
示例11: Fader
void Fader(Cairo::RefPtr<Cairo::Context> cr, float x, float y, float value, float rms, float falloff)
{
// draw invisible from the last widget
cr->set_source_rgba(0,0,0,0);
cr->move_to( x, y );
cr->stroke();
x = x + 4; // global move widget relative to positioning
// Create the linear gradient diagonal
//Cairo::RefPtr< Cairo::LinearGradient > linGrad = Cairo::LinearGradient::create (x, y, 100, 100);
// Set grandient colors
//linGrad->add_color_stop_rgb (0, 10 / 255.f, 246 / 255.f, 98 / 255.f );
//linGrad->add_color_stop_rgb (1, 192 / 255.f, 246 / 255.f, 98 / 255.f );
// Draw rectangle and fill with gradient
cairo_pattern_t *pat;
pat = cairo_pattern_create_linear (0.0, 0.0, 0.0, 400.0);
cairo_pattern_add_color_stop_rgb(pat, 0, 0 / 255.f, 153 / 255.f, 255 / 255.f );
cairo_pattern_add_color_stop_rgb(pat, 1, 26 / 255.f, 26 / 255.f, 26 / 255.f );
cr->rectangle (x, y, 12, 94);
cairo_set_source(cr->cobj(), pat);
cairo_fill (cr->cobj());
cairo_pattern_destroy (pat);
// red area on top of fader graphic
cr->rectangle ( x, y, 12, 25 );
setColour(cr, COLOUR_ORANGE_1 );
cr->fill();
float tmpRms = (1-rms);
//std::cout << "Falloff: " << falloff << " RMS " << rms << std::endl;
if ( falloff > rms )
{
//std::cout << "Falloff > RMS" << std::endl;
tmpRms = (1-falloff);
falloff -= 0.1;
}
else
{
falloff = rms;
}
//std::cout << " tmpRms " << tmpRms << " drawPx: " << tmpRms * 94 << std::endl;
cr->rectangle ( x, y, 12, 94 * tmpRms );
setColour(cr, COLOUR_GREY_2 );
cr->fill();
// draw fader <|
float playheadX = x + 12;
float playheadY = y + (92 * ( 1.f - value));
setColour(cr, COLOUR_ORANGE_1 );
cr->set_line_width(0.8);
cr->move_to( playheadX, playheadY );
cr->line_to( playheadX + 10, playheadY + 5.5 );
cr->line_to( playheadX + 10, playheadY - 5.5 );
cr->close_path();
cr->fill_preserve();
// draw fader |>
cr->move_to( x, playheadY );
cr->line_to( x - 10, playheadY + 5.5 );
cr->line_to( x - 10, playheadY - 5.5 );
cr->close_path();
cr->fill_preserve();
cr->stroke();
// line between fader markers |> --- <|
setColour(cr, COLOUR_GREY_4 );
cr->set_line_width(2);
cr->move_to( x, playheadY );
cr->line_to( x + 12, playheadY );
cr->stroke();
}
示例12: FrequencyGraph
void FrequencyGraph( Cairo::RefPtr<Cairo::Context> cr, bool active, float x, float y, float xS, float yS, EqualizerState state)
{
cr->set_line_cap( Cairo::LINE_CAP_ROUND );
cr->set_line_join( Cairo::LINE_JOIN_ROUND);
int xSize = xS;
int ySize = yS;
// works but a bit simple
cr -> move_to( x , y );
cr -> line_to( x + xSize, y );
cr -> line_to( x + xSize, y + ySize );
cr -> line_to( x , y + ySize );
cr -> close_path();
// Draw outline shape
cr -> set_source_rgb (0.1,0.1,0.1);
cr -> fill();
// draw "frequency guides"
std::valarray< double > dashes(2);
dashes[0] = 2.0;
dashes[1] = 2.0;
cr->set_dash (dashes, 0.0);
cr->set_line_width(1.0);
cr->set_source_rgb (0.4,0.4,0.4);
for ( int i = 0; i < 4; i++ )
{
cr->move_to( x + ((xSize / 4.f)*i), y );
cr->line_to( x + ((xSize / 4.f)*i), y + ySize );
}
for ( int i = 0; i < 4; i++ )
{
cr->move_to( x , y + ((ySize / 4.f)*i) );
cr->line_to( x +xSize, y + ((ySize / 4.f)*i) );
}
cr->stroke();
cr->unset_dash();
// set colour based on active or not
if ( active )
setColour(cr, COLOUR_BLUE_1, 0.2 );
else
setColour(cr, COLOUR_GREY_1, 0.2 );
int tmpX = x;
int tmpY = y;
// precalculate some variables
float oldGainPix = (ySize / 60.f) * (state.gain[0] - 0.5 ) * 40;
float oldXLoc = 0;
float qPix = ((xSize * 0.2) / 3.f );
//float oldCutoff = 0;
// move to bottom left, draw line to middle left
cr->move_to( tmpX, tmpY + ySize );
cr->line_to( tmpX, tmpY + (ySize * 0.5) - oldGainPix );
for ( int i = 0; i < 4; i++ )
{
//float cutoff = state.cutoffFreq[i] / 20000;
float gainPix = (ySize / 60.f) * (state.gain[i] - 0.5 ) * 40;
float xLoc = xSize * 0.2 * (i+1);
//std::cout << "I: " << i << " GainPix: " << gainPix << " tmpY - gainPix" << tmpY - gainPix << std::endl;
cr->curve_to( tmpX + oldXLoc + qPix, tmpY + (ySize * 0.5) - oldGainPix ,// control point 1
tmpX + xLoc - qPix , tmpY + (ySize * 0.5) - gainPix , // control point 2
tmpX + xLoc , tmpY + (ySize * 0.5) - gainPix ); // end of curve
// update variables for next iter
oldGainPix = gainPix;
oldXLoc = xLoc;
//oldCutoff = cutoff;
}
// last bit of curve to the right edge
cr->curve_to( tmpX + oldXLoc + qPix, tmpY + (ySize * 0.5) - oldGainPix, // control point 1
tmpX + xSize - qPix, tmpY + (ySize * 0.5) - oldGainPix, // control point 2
tmpX + xSize , tmpY + (ySize * 0.5) - oldGainPix); // end of curve
cr->line_to( tmpX + xSize , tmpY + ySize );
cr->close_path();
cr->fill_preserve();
cr->set_line_width(2.5);
if ( active )
setColour(cr, COLOUR_BLUE_1 );
else
setColour(cr, COLOUR_GREY_1 );
cr->stroke();
// outline
cr->rectangle( x, y , xS, yS );
//.........这里部分代码省略.........
示例13: on_expose_event
bool SamplerWidget::on_expose_event(GdkEventExpose* event)
{
// This is where we draw on the window
Glib::RefPtr<Gdk::Window> window = get_window();
if(window) // Only run if Window does exist
{
allocation = get_allocation();
int width = allocation.get_width();
int height = allocation.get_height();
//std::cout << "Width: " << width << std::endl;
//std::cout << "Height: " << height << std::endl;
//std::cout << "Height / 12: " << height /12.0 << std::endl;
// coordinates for the center of the window
int xc, yc;
xc = width / 2;
yc = height / 2;
Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
// clip to the area indicated by the expose event so that we only redraw
// the portion of the window that needs to be redrawn
//cr -> set_source_rgba(0 , 0, 0 , 1);
cr->rectangle(event->area.x, event->area.y,
event->area.width, event->area.height);
//cr->rectangle(0,0,event->area.x,event->area.y);
//cr->stroke_preserve();
cr->clip();
cr -> set_line_join (Cairo::LINE_JOIN_ROUND);
cr -> move_to( 7, 7);
cr -> line_to( width-7, 7);
cr -> line_to( width-7, height-7);
cr -> line_to( 7, height-7);
cr -> close_path();
// Draw outline shape
cr -> set_source_rgb (0.1,0.1,0.1);
cr -> fill_preserve();
if (!padOnBool)
{
cr->set_source_rgba( 0.6, 0.6, 0.6, 0.5);
cr->set_line_width ( 10.0);
cr->stroke();
}
else
{
cr->set_source_rgba( 1.0,0.4,0.0, 0.8);
cr->set_line_width ( 10.4);
cr->stroke();
}
/* Pan functionality Not yet implemented in sampler.
// Draw Pan line: pixel pan = width * pan
cr -> set_line_cap (Cairo::LINE_CAP_ROUND);
cr -> set_line_width ( 4.8);
cr -> set_source_rgba( 1.0,0.8,0.8,0.8);
cr -> move_to ( width/2 + ((width*pan)/2) , height - (height*volume) + 20);
cr -> line_to ( width/2 + ((width*pan)/2) , height - (height*volume) - 20);
cr -> stroke();
*/
// Draw Volume line: pixel vol = height * volume
cr -> set_line_width ( 5.1);
cr -> set_source_rgb( 0.2,0.2,0.2);
cr -> move_to ( 10 , (height - ((height-20)*volume))-8 );
cr -> line_to ( width-10, (height - ((height-20)*volume))-8 );
cr -> line_to ( width-10, height-10);
cr -> line_to ( 10, height-10);
cr -> close_path();
cr -> fill();
// Draw Mode: Loop/Hit
if ( !loopSampleBool)
{
cr->set_line_width ( 2.2);
cr->set_source_rgb(0.2,0.2,0.2);
cr->move_to(width/5,(height/5)*2);
cr->line_to((width/5)*3,(height/5)*2);
cr->line_to((width/5)*3,(height/5)*1);
cr->line_to((width/5)*4,height/2); // point of arrow
cr->line_to((width/5)*3,(height/5)*4);
cr->line_to((width/5)*3,(height/5)*3);
cr->line_to(width/5,(height/5)*3);
cr->close_path();
cr->fill_preserve();
cr->set_source_rgb(0.0,0.9,0.0);
cr->stroke();
}
else // Loop Sample
{
cr -> set_source_rgb(0.2,0.2,0.2);
cr -> arc_negative (width/2, height/2, ((height + width)/8)-5 , 6.0, 0.6); // inner curve
//.........这里部分代码省略.........
示例14: on_expose_event
bool GHighPass::on_expose_event(GdkEventExpose* event)
{
// This is where we draw on the window
Glib::RefPtr<Gdk::Window> window = get_window();
if(window) // Only run if Window does exist
{
Gtk::Allocation allocation = get_allocation();
int width = allocation.get_width();
int height = allocation.get_height();
// clip to the area indicated by the expose event so that we only redraw
// the portion of the window that needs to be redrawn
Cairo::RefPtr<Cairo::Context> cr = window->create_cairo_context();
cr->rectangle(event->area.x, event->area.y,
event->area.width, event->area.height);
cr->clip();
cr->rectangle(event->area.x, event->area.y,
event->area.width, event->area.height);
setColour(cr, COLOUR_GREY_3 );
cr->fill();
//cout << "HighPass getting state ID " << ID << endl;
float cutoffRangeZeroOne = stateStore->effectState.at(ID).values[0];
cutoff = cutoffRangeZeroOne;
bool active = stateStore->effectState.at(ID).active;
bool globalUnit = stateStore->effectState.at(ID).globalUnit;
int x = 0;
int y = 0;
xSize = 73;
ySize = 37;
// works but a bit simple
cr -> move_to( x , y );
cr -> line_to( x + xSize, y );
cr -> line_to( x + xSize, y + ySize );
cr -> line_to( x , y + ySize );
cr -> close_path();
// Draw outline shape
cr -> set_source_rgb (0.1,0.1,0.1);
cr -> fill();
// draw "frequency guides"
std::valarray< double > dashes(2);
dashes[0] = 2.0;
dashes[1] = 2.0;
cr->set_dash (dashes, 0.0);
cr->set_line_width(1.0);
cr->set_source_rgb (0.4,0.4,0.4);
for ( int i = 0; i < 3; i++ )
{
cr->move_to( x + ((xSize / 3.f)*i), y );
cr->line_to( x + ((xSize / 3.f)*i), y + ySize );
}
for ( int i = 0; i < 3; i++ )
{
cr->move_to( x , y + ((ySize / 3.f)*i) );
cr->line_to( x +xSize, y + ((ySize / 3.f)*i) );
}
cr->stroke();
cr->unset_dash();
// move to bottom left, draw line to middle left
cr->move_to( x + xSize-2 , y + ySize );
cr->line_to( x + xSize-2 , y + (ySize/2));
int startHorizontalLine = xSize* (cutoff + 0.4);
if ( startHorizontalLine > 75 )
startHorizontalLine = 75;
cr->line_to( startHorizontalLine, y + (ySize/2) ); // horizontal line to start of curve
int xSize1CP1 = xSize* (cutoff +0.1);
int xSize1CP2 = xSize* (cutoff +0.08);
int xSize1End = xSize* cutoff;
if ( xSize1CP1 > 75 )
xSize1CP1 = 75;
if ( xSize1CP2 > 75 )
xSize1CP2 = 75;
if ( xSize1End > 75 )
xSize1End = 75;
cr->curve_to( xSize1CP1, y+(ySize*0.5), // control point 1
xSize1CP2, y+(ySize*0.3), // control point 2
xSize1End, y+(ySize*0.3)); // end of curve 1, start curve 2
int xSize2CP1 = xSize* (cutoff - 0.03);
int xSize2CP2 = xSize* (cutoff - 0.08);
int xSize2End = xSize* (cutoff - 0.15);
if ( xSize2CP1 > 75 )
xSize2CP1 = 75;
if ( xSize2CP2 > 75 )
//.........这里部分代码省略.........