本文整理汇总了C++中cairo_new_path函数的典型用法代码示例。如果您正苦于以下问题:C++ cairo_new_path函数的具体用法?C++ cairo_new_path怎么用?C++ cairo_new_path使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cairo_new_path函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: gtk_render_frame_gap
/**
* gtk_render_frame_gap:
* @context: a #GtkStyleContext
* @cr: a #cairo_t
* @x: X origin of the rectangle
* @y: Y origin of the rectangle
* @width: rectangle width
* @height: rectangle height
* @gap_side: side where the gap is
* @xy0_gap: initial coordinate (X or Y depending on @gap_side) for the gap
* @xy1_gap: end coordinate (X or Y depending on @gap_side) for the gap
*
* Renders a frame around the rectangle defined by (@x, @y, @width, @height),
* leaving a gap on one side. @xy0_gap and @xy1_gap will mean X coordinates
* for %GTK_POS_TOP and %GTK_POS_BOTTOM gap sides, and Y coordinates for
* %GTK_POS_LEFT and %GTK_POS_RIGHT.
*
* Typical rendering of a frame with a gap:
*
* ![](frame-gap.png)
*
* Since: 3.0
**/
void
gtk_render_frame_gap (GtkStyleContext *context,
cairo_t *cr,
gdouble x,
gdouble y,
gdouble width,
gdouble height,
GtkPositionType gap_side,
gdouble xy0_gap,
gdouble xy1_gap)
{
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
g_return_if_fail (cr != NULL);
g_return_if_fail (xy0_gap <= xy1_gap);
g_return_if_fail (xy0_gap >= 0);
if (width <= 0 || height <= 0)
return;
if (gap_side == GTK_POS_LEFT ||
gap_side == GTK_POS_RIGHT)
g_return_if_fail (xy1_gap <= height);
else
g_return_if_fail (xy1_gap <= width);
cairo_save (cr);
cairo_new_path (cr);
gtk_css_style_render_frame_gap (gtk_style_context_lookup_style (context),
cr,
x, y, width, height, gap_side,
xy0_gap, xy1_gap,
gtk_style_context_get_junction_sides (context));
cairo_restore (cr);
}
示例2: do_long_dashed_lines
static cairo_time_t
do_long_dashed_lines (cairo_t *cr, int width, int height, int loops)
{
double dash[2] = { 2.0, 2.0 };
int i;
cairo_save (cr);
cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
cairo_paint (cr);
cairo_set_source_rgb (cr, 1.0, 0.0, 0.0);
cairo_set_dash (cr, dash, 2, 0.0);
cairo_new_path (cr);
cairo_set_line_width (cr, 1.0);
for (i = 0; i < height-1; i++) {
double y0 = (double) i + 0.5;
cairo_move_to (cr, 0.0, y0);
cairo_line_to (cr, width, y0);
}
cairo_perf_timer_start ();
cairo_perf_set_thread_aware (cr, FALSE);
while (loops--) {
if (loops == 0)
cairo_perf_set_thread_aware (cr, TRUE);
cairo_stroke_preserve (cr);
}
cairo_perf_timer_stop ();
cairo_restore (cr);
return cairo_perf_timer_elapsed ();
}
示例3: renderLineCairo
int renderLineCairo(imageObj *img, shapeObj *p, strokeStyleObj *stroke)
{
int i,j;
cairo_renderer *r = CAIRO_RENDERER(img);
assert(stroke->color);
cairo_new_path(r->cr);
msCairoSetSourceColor(r->cr,stroke->color);
for(i=0; i<p->numlines; i++) {
lineObj *l = &(p->line[i]);
if(l->numpoints == 0) continue;
cairo_move_to(r->cr,l->point[0].x,l->point[0].y);
for(j=1; j<l->numpoints; j++) {
cairo_line_to(r->cr,l->point[j].x,l->point[j].y);
}
}
if(stroke->patternlength>0) {
cairo_set_dash(r->cr,stroke->pattern,stroke->patternlength,-stroke->patternoffset);
}
switch(stroke->linecap) {
case MS_CJC_BUTT:
cairo_set_line_cap(r->cr,CAIRO_LINE_CAP_BUTT);
break;
case MS_CJC_SQUARE:
cairo_set_line_cap(r->cr,CAIRO_LINE_CAP_SQUARE);
break;
case MS_CJC_ROUND:
case MS_CJC_NONE:
default:
cairo_set_line_cap(r->cr,CAIRO_LINE_CAP_ROUND);
}
cairo_set_line_width (r->cr, stroke->width);
cairo_stroke (r->cr);
if(stroke->patternlength>0) {
cairo_set_dash(r->cr,stroke->pattern,0,0);
}
return MS_SUCCESS;
}
示例4: cairoplot_dot_line
void
cairoplot_dot_line (cairo_t *context, double width, double height,
double *values, int serie_size,
double color_r, double color_g, double color_b,
short show_dots)
{
int counter;
double horizontal_step;
double relative_height, relative_width;
double last, max_value;
max_value = cairoplot_utils_max (values, serie_size);
relative_height = (height - Y_TOP - Y_BOTTOM) / max_value;
relative_width = (width - X_RIGHT) / (serie_size + 1);
last = 0;
cairo_set_source_rgb (context, color_r, color_g, color_b);
for (counter = 0; counter < serie_size; counter++)
{
if (counter > 0)
{
cairo_move_to (context, relative_width * (counter - 1) + X_LEFT, (double) height - (last * relative_height) - Y_BOTTOM);
cairo_line_to (context, relative_width * counter + X_LEFT, (double) height - (values[counter] * relative_height) - Y_BOTTOM);
cairo_set_line_width (context, 2.5);
cairo_stroke (context);
}
if (show_dots)
{
cairo_new_path (context);
cairo_arc (context, relative_width * counter + X_LEFT, (double) height - (values[counter] * relative_height) - Y_BOTTOM, 3, 0, 2.1 * M_PI);
cairo_close_path (context);
cairo_fill (context);
}
last = values[counter];
}
}
示例5: renderEllipseSymbolCairo
int renderEllipseSymbolCairo(imageObj *img, double x, double y, symbolObj *symbol,
symbolStyleObj *style) {
cairo_renderer *r = CAIRO_RENDERER(img);
cairo_save(r->cr);
cairo_set_line_cap(r->cr, CAIRO_LINE_CAP_BUTT);
cairo_set_line_join(r->cr, CAIRO_LINE_JOIN_MITER);
cairo_translate(r->cr,x,y);
cairo_rotate(r->cr,-style->rotation);
cairo_scale(r->cr,symbol->sizex*style->scale/2,symbol->sizey*style->scale/2);
cairo_arc (r->cr, 0,0,1, 0, 2 * MS_PI);
cairo_restore(r->cr);
if(style->color) {
msCairoSetSourceColor(r->cr, style->color);
cairo_fill_preserve(r->cr);
}
if(style->outlinewidth > 0) {
cairo_set_line_width (r->cr, style->outlinewidth);
msCairoSetSourceColor(r->cr, style->outlinecolor);
cairo_stroke_preserve(r->cr);
}
cairo_new_path(r->cr);
return MS_SUCCESS;
}
示例6: do_tessellate
static cairo_perf_ticks_t
do_tessellate (cairo_t *cr, int num_points, int loops)
{
int i;
for (i=0; i < num_points; i++)
cairo_line_to (cr, points[i].x, points[i].y);
cairo_perf_timer_start ();
/* We'd like to measure just tessellation without
* rasterization. For now, we can do that with cairo_in_fill. But
* we'll have to be careful since cairo_in_fill might eventually
* be optimized to have an implementation that doesn't necessarily
* include tessellation. */
while (loops--)
cairo_in_fill (cr, 50, 50);
cairo_perf_timer_stop ();
cairo_new_path (cr);
return cairo_perf_timer_elapsed ();
}
示例7: cairo_new_path
/*
* Draw a rounded rectangle path
*/
void
TextSurface::drawBackground (int x,
int y,
int width,
int height,
int radius)
{
int x0, y0, x1, y1;
x0 = x;
y0 = y;
x1 = x + width;
y1 = y + height;
cairo_new_path (cr);
cairo_arc (cr, x0 + radius, y1 - radius, radius, PI / 2, PI);
cairo_line_to (cr, x0, y0 + radius);
cairo_arc (cr, x0 + radius, y0 + radius, radius, PI, 3 * PI / 2);
cairo_line_to (cr, x1 - radius, y0);
cairo_arc (cr, x1 - radius, y0 + radius, radius, 3 * PI / 2, 2 * PI);
cairo_line_to (cr, x1, y1 - radius);
cairo_arc (cr, x1 - radius, y1 - radius, radius, 0, PI / 2);
cairo_close_path (cr);
}
示例8: ca_test_image_rotate
int
ca_test_image_rotate(caskbench_context_t* ctx)
{
cairo_t *cr = ctx->cairo_cr;
static int counter = 0;
double radian = 0;
int w = ctx->canvas_width;
int h = ctx->canvas_height;
int iw = cairo_image_surface_get_width (image);
int ih = cairo_image_surface_get_height (image);
int pw = w - iw;
int ph = h - ih;
for (int i=0; i<ctx->size; i++) {
double x = (double)rnd()/RAND_MAX * pw;
double y = (double)rnd()/RAND_MAX * ph;
cairo_new_path(cr);
cairo_save(cr);
cairo_translate(cr, w/2, h/2);
radian = (1/57.29) * (counter/50);
cairo_rotate(cr, radian);
cairo_translate(cr, -iw/2, -ih/2);
cairo_set_source_surface (cr, cached_image, 0, 0);
cairo_paint (cr);
counter++;
cairo_restore(cr);
}
return 1;
}
示例9: qDebug
void QCairoPaintEngine::drawPoints(const QPointF *points, int pointCount)
{
if (!cr || !surface) {
qDebug()<<"Cairo Error [QCairoPaintEngine::drawPoints]: no cairo or no surface!";
return;
}
if (cpen.style()==Qt::NoPen) {
qDebug()<<"Cairo Error [QCairoPaintEngine::drawPoints]: no pen set!";
return;
}
updatePen();
for (int i=0; i<pointCount; i++) {
cairo_new_path(cr);
cairo_move_to (cr, points[i].x(), points[i].y());
cairo_close_path (cr);
}
//cairo_close_path(cr);
updatePen();
cairo_stroke(cr);
}
示例10: ofGetWindowHeight
//-----------------------------------------------------------------------------------
void ofxCairoTexture::viewport(float x, float y, float width, float height, bool invertY){
if(width == 0) width = ofGetWindowWidth();
if(height == 0) height = ofGetWindowHeight();
if (invertY){
y = ofGetWindowHeight() - (y + height);
}
viewportRect.set(x, y, width, height);
cairo_reset_clip(cr);
cairo_new_path(cr);
cairo_move_to(cr,viewportRect.x,viewportRect.y);
cairo_line_to(cr,viewportRect.x+viewportRect.width,viewportRect.y);
cairo_line_to(cr,viewportRect.x+viewportRect.width,viewportRect.y+viewportRect.height);
cairo_line_to(cr,viewportRect.x,viewportRect.y+viewportRect.height);
/*
cairo_clip(cr);
*/
};
示例11: cairox_draw_symbol
void cairox_draw_symbol(cairo_t *cr, double x, double y, int s)
{
if (s == 0) {
double d = 5.0;
cairo_new_path(cr);
cairo_move_to(cr, x-d, y-d);
cairo_line_to(cr, x+d, y-d);
cairo_line_to(cr, x+d, y+d);
cairo_line_to(cr, x-d, y+d);
cairo_close_path(cr);
cairo_fill(cr);
}
else if (s == 1) {
double d = 6.0;
cairo_new_path(cr);
cairo_move_to(cr, x-d, y+d*(sqrt(3)-1));
cairo_line_to(cr, x+d, y+d*(sqrt(3)-1));
cairo_line_to(cr, x, y-d);
cairo_close_path(cr);
cairo_fill(cr);
}
else if (s == 2) {
double d = 7.0;
cairo_new_path(cr);
cairo_move_to(cr, x-d, y);
cairo_line_to(cr, x, y-d);
cairo_line_to(cr, x+d, y);
cairo_line_to(cr, x, y+d);
cairo_close_path(cr);
cairo_fill(cr);
}
else if (s == 3) {
double d = 5.0;
cairo_new_path(cr);
cairo_arc(cr, x, y, d, 0, 2*M_PI);
cairo_close_path(cr);
cairo_fill(cr);
}
else if (s == 4) {
double d = 4.0;
cairo_new_path(cr);
cairo_move_to(cr, x-d, y-d);
cairo_line_to(cr, x+d, y-d);
cairo_line_to(cr, x+d, y+d);
cairo_line_to(cr, x-d, y+d);
cairo_close_path(cr);
cairo_stroke(cr);
}
else if (s == 5) {
double d = 5.0;
cairo_new_path(cr);
cairo_move_to(cr, x-d, y+d*(sqrt(3)-1));
cairo_line_to(cr, x+d, y+d*(sqrt(3)-1));
cairo_line_to(cr, x, y-d);
cairo_close_path(cr);
cairo_stroke(cr);
}
else if (s == 6) {
double d = 6.0;
cairo_new_path(cr);
cairo_move_to(cr, x-d, y);
cairo_line_to(cr, x, y-d);
cairo_line_to(cr, x+d, y);
cairo_line_to(cr, x, y+d);
cairo_close_path(cr);
cairo_stroke(cr);
}
else if (s == 7) {
double d = 4.0;
cairo_new_path(cr);
cairo_arc(cr, x, y, d, 0, 2*M_PI);
cairo_close_path(cr);
cairo_stroke(cr);
}
}
示例12: cd_rendering_render_optimized_3D_plane
void cd_rendering_render_optimized_3D_plane (cairo_t *pCairoContext, CairoDock *pDock, GdkRectangle *pArea)
{
//g_print ("%s ((%d;%d) x (%d;%d) / (%dx%d))\n", __func__, pArea->x, pArea->y, pArea->width, pArea->height, pDock->iCurrentWidth, pDock->iCurrentHeight);
double fLineWidth = myBackground.iDockLineWidth;
double fMargin = myBackground.iFrameMargin;
int iWidth = pDock->iCurrentWidth;
int iHeight = pDock->iCurrentHeight;
//\____________________ On dessine les decorations du fond sur la portion de fenetre.
cairo_save (pCairoContext);
double fDockOffsetX, fDockOffsetY;
if (pDock->bHorizontalDock)
{
fDockOffsetX = pArea->x;
fDockOffsetY = (pDock->bDirectionUp ? iHeight - pDock->iDecorationsHeight - fLineWidth : fLineWidth);
}
else
{
fDockOffsetX = (pDock->bDirectionUp ? iHeight - pDock->iDecorationsHeight - fLineWidth : fLineWidth);
fDockOffsetY = pArea->y;
}
//cairo_move_to (pCairoContext, fDockOffsetX, fDockOffsetY);
if (pDock->bHorizontalDock)
cairo_rectangle (pCairoContext, fDockOffsetX, fDockOffsetY, pArea->width, pDock->iDecorationsHeight);
else
cairo_rectangle (pCairoContext, fDockOffsetX, fDockOffsetY, pDock->iDecorationsHeight, pArea->height);
double fRadius = MIN (myBackground.iDockRadius, (pDock->iDecorationsHeight + myBackground.iDockLineWidth) / 2 - 1);
double fDeltaXTrapeze=0.;
double fOffsetX;
if (cairo_dock_is_extended_dock (pDock)) // mode panel etendu.
{
fOffsetX = fRadius + fLineWidth / 2;
}
else
{
Icon *pFirstIcon = cairo_dock_get_first_drawn_icon (pDock);
fOffsetX = (pFirstIcon != NULL ? pFirstIcon->fX - fMargin : fRadius + fLineWidth / 2);
}
double fDockWidth = cairo_dock_get_current_dock_width_linear (pDock);
if (g_pBackgroundSurface != NULL)
{
double fInclinationOnHorizon = (fDockWidth / 2) / iVanishingPointY;
double fRadius = myBackground.iDockRadius;
if (2*fRadius > pDock->iDecorationsHeight + fLineWidth)
fRadius = (pDock->iDecorationsHeight + fLineWidth) / 2 - 1;
double fDeltaXForLoop = fInclinationOnHorizon * (pDock->iDecorationsHeight + fLineWidth - (myBackground.bRoundedBottomCorner ? 2 : 1) * fRadius);
double cosa = 1. / sqrt (1 + fInclinationOnHorizon * fInclinationOnHorizon);
fDeltaXTrapeze = fDeltaXForLoop + fRadius * cosa;
double sina = cosa * fInclinationOnHorizon;
fDeltaXTrapeze = fInclinationOnHorizon * (pDock->iDecorationsHeight - (FALSE ? 2 : 1-sina) * fRadius) + fRadius * (FALSE ? 1 : cosa);
}
cairo_dock_render_decorations_in_frame (pCairoContext, pDock, pDock->bHorizontalDock ? fDockOffsetY : fDockOffsetX, fOffsetX-fDeltaXTrapeze, fDockWidth+2*fDeltaXTrapeze);
//\____________________ On dessine la partie du cadre qui va bien.
cairo_new_path (pCairoContext);
if (pDock->bHorizontalDock)
{
cairo_set_line_width (pCairoContext, fLineWidth);
cairo_move_to (pCairoContext, fDockOffsetX, fDockOffsetY - 0.5*fLineWidth);
cairo_rel_line_to (pCairoContext, pArea->width, 0);
cairo_set_source_rgba (pCairoContext, myBackground.fLineColor[0], myBackground.fLineColor[1], myBackground.fLineColor[2], myBackground.fLineColor[3]);
cairo_stroke (pCairoContext);
cairo_new_path (pCairoContext);
cairo_move_to (pCairoContext, fDockOffsetX, (pDock->bDirectionUp ? iHeight - 0.5*fLineWidth : pDock->iDecorationsHeight + 1.5 * fLineWidth));
cairo_rel_line_to (pCairoContext, pArea->width, 0);
}
else
{
cairo_move_to (pCairoContext, fDockOffsetX - .5*fLineWidth, fDockOffsetY);
cairo_rel_line_to (pCairoContext, 0, pArea->height);
cairo_set_line_width (pCairoContext, fLineWidth);
cairo_set_source_rgba (pCairoContext, myBackground.fLineColor[0], myBackground.fLineColor[1], myBackground.fLineColor[2], myBackground.fLineColor[3]);
cairo_stroke (pCairoContext);
cairo_new_path (pCairoContext);
cairo_move_to (pCairoContext, (pDock->bDirectionUp ? iHeight - fLineWidth / 2 : pDock->iDecorationsHeight + 1.5 * fLineWidth), fDockOffsetY);
cairo_rel_line_to (pCairoContext, 0, pArea->height);
}
cairo_set_line_width (pCairoContext, fLineWidth);
cairo_set_source_rgba (pCairoContext, myBackground.fLineColor[0], myBackground.fLineColor[1], myBackground.fLineColor[2], myBackground.fLineColor[3]);
cairo_stroke (pCairoContext);
cairo_restore (pCairoContext);
//\____________________ On dessine les icones impactees.
GList *pFirstDrawnElement = (pDock->pFirstDrawnElement != NULL ? pDock->pFirstDrawnElement : pDock->icons);
if (pFirstDrawnElement != NULL)
{
double fXMin = (pDock->bHorizontalDock ? pArea->x : pArea->y), fXMax = (pDock->bHorizontalDock ? pArea->x + pArea->width : pArea->y + pArea->height);
double fDockMagnitude = cairo_dock_calculate_magnitude (pDock->iMagnitudeIndex);
double fXLeft, fXRight;
Icon *icon;
//.........这里部分代码省略.........
示例13: draw_render_polygon_object
void
draw_render_polygon_object (gerbv_net_t *oldNet, cairo_t *cairoTarget,
gdouble sr_x, gdouble sr_y, gerbv_image_t *image,
enum draw_mode drawMode, gerbv_selection_info_t *selectionInfo,
gboolean pixelOutput)
{
gerbv_net_t *currentNet, *polygonStartNet;
int haveDrawnFirstFillPoint = 0;
gdouble x2,y2,cp_x=0,cp_y=0;
haveDrawnFirstFillPoint = FALSE;
/* save the first net in the polygon as the "ID" net pointer
in case we are saving this net to the selection array */
polygonStartNet = oldNet;
cairo_new_path(cairoTarget);
for (currentNet = oldNet->next; currentNet!=NULL;
currentNet = currentNet->next) {
x2 = currentNet->stop_x + sr_x;
y2 = currentNet->stop_y + sr_y;
/* translate circular x,y data as well */
if (currentNet->cirseg) {
cp_x = currentNet->cirseg->cp_x + sr_x;
cp_y = currentNet->cirseg->cp_y + sr_y;
}
if (!haveDrawnFirstFillPoint) {
draw_cairo_move_to (cairoTarget, x2, y2, FALSE, pixelOutput);
haveDrawnFirstFillPoint=TRUE;
continue;
}
switch (currentNet->interpolation) {
case GERBV_INTERPOLATION_x10 :
case GERBV_INTERPOLATION_LINEARx01 :
case GERBV_INTERPOLATION_LINEARx001 :
case GERBV_INTERPOLATION_LINEARx1 :
draw_cairo_line_to (cairoTarget, x2, y2, FALSE, pixelOutput);
break;
case GERBV_INTERPOLATION_CW_CIRCULAR :
case GERBV_INTERPOLATION_CCW_CIRCULAR :
if (currentNet->cirseg->angle2 > currentNet->cirseg->angle1) {
cairo_arc (cairoTarget, cp_x, cp_y, currentNet->cirseg->width/2.0,
DEG2RAD(currentNet->cirseg->angle1),
DEG2RAD(currentNet->cirseg->angle2));
} else {
cairo_arc_negative (cairoTarget, cp_x, cp_y, currentNet->cirseg->width/2.0,
DEG2RAD(currentNet->cirseg->angle1),
DEG2RAD(currentNet->cirseg->angle2));
}
break;
case GERBV_INTERPOLATION_PAREA_END :
cairo_close_path(cairoTarget);
/* turn off anti-aliasing for polygons, since it shows seams
with adjacent polygons (usually on PCB ground planes) */
cairo_antialias_t oldAlias = cairo_get_antialias (cairoTarget);
cairo_set_antialias (cairoTarget, CAIRO_ANTIALIAS_NONE);
draw_fill (cairoTarget, drawMode, selectionInfo, image, polygonStartNet);
cairo_set_antialias (cairoTarget, oldAlias);
return;
default :
break;
}
}
}
示例14: draw_check_if_object_is_in_selected_area
static void
draw_check_if_object_is_in_selected_area (cairo_t *cairoTarget,
gboolean isStroke, gerbv_selection_info_t *selectionInfo,
gerbv_image_t *image, struct gerbv_net *net,
enum draw_mode drawMode)
{
gerbv_selection_item_t sItem = {image, net};
gdouble corner1X, corner1Y, corner2X, corner2Y;
gdouble x1, x2, y1, y2;
gdouble minX, minY, maxX, maxY;
corner1X = selectionInfo->lowerLeftX;
corner1Y = selectionInfo->lowerLeftY;
corner2X = selectionInfo->upperRightX;
corner2Y = selectionInfo->upperRightY;
/* calculate the coordinate of the user's click in the current
transformation matrix */
cairo_device_to_user (cairoTarget, &corner1X, &corner1Y);
cairo_device_to_user (cairoTarget, &corner2X, &corner2Y);
switch (selectionInfo->type) {
case GERBV_SELECTION_POINT_CLICK:
/* use the cairo in_fill routine to see if the point is within the
drawn area */
if ((isStroke && cairo_in_stroke (cairoTarget, corner1X, corner1Y)) ||
(!isStroke && cairo_in_fill (cairoTarget, corner1X, corner1Y))) {
if (!draw_net_is_in_selection_buffer_remove (net,
selectionInfo,
(drawMode == FIND_SELECTIONS_TOGGLE))) {
selection_add_item (selectionInfo, &sItem);
}
}
break;
case GERBV_SELECTION_DRAG_BOX:
/* we can't assume the "lowerleft" corner is actually in the lower left,
since the cairo transformation matrix may be mirrored,etc */
minX = MIN(corner1X,corner2X);
maxX = MAX(corner1X,corner2X);
minY = MIN(corner1Y,corner2Y);
maxY = MAX(corner1Y,corner2Y);
if (isStroke)
cairo_stroke_extents (cairoTarget, &x1, &y1, &x2, &y2);
else
cairo_fill_extents (cairoTarget, &x1, &y1, &x2, &y2);
if ((minX < x1) && (minY < y1) && (maxX > x2) && (maxY > y2)) {
if (!draw_net_is_in_selection_buffer_remove (net,
selectionInfo,
(drawMode == FIND_SELECTIONS_TOGGLE))) {
selection_add_item (selectionInfo, &sItem);
}
}
break;
default:
break;
}
/* clear the path, since we didn't actually draw it and cairo
doesn't reset it after the previous calls */
cairo_new_path (cairoTarget);
}
示例15: draw
void ofCairoRenderer::draw(ofMesh & primitive, bool useColors, bool useTextures, bool useNormals){
if(primitive.getNumVertices() == 0){
return;
}
if(primitive.getNumIndices() == 0){
ofMesh indexedMesh = primitive;
indexedMesh.setupIndicesAuto();
draw(indexedMesh, useColors, useTextures, useNormals);
return;
}
pushMatrix();
cairo_matrix_init_identity(getCairoMatrix());
cairo_new_path(cr);
int i = 1;
ofVec3f v = transform(primitive.getVertex(primitive.getIndex(0)));
ofVec3f v2;
cairo_move_to(cr,v.x,v.y);
if(primitive.getMode()==OF_PRIMITIVE_TRIANGLE_STRIP){
v = transform(primitive.getVertex(primitive.getIndex(1)));
cairo_line_to(cr,v.x,v.y);
v = transform(primitive.getVertex(primitive.getIndex(2)));
cairo_line_to(cr,v.x,v.y);
i=2;
}
for(; i<primitive.getNumIndices(); i++){
v = transform(primitive.getVertex(primitive.getIndex(i)));
switch(primitive.getMode()){
case(OF_PRIMITIVE_TRIANGLES):
if((i+1)%3==0){
cairo_line_to(cr,v.x,v.y);
v2 = transform(primitive.getVertex(primitive.getIndex(i-2)));
cairo_line_to(cr,v2.x,v2.y);
cairo_move_to(cr,v.x,v.y);
}else if((i+3)%3==0){
cairo_move_to(cr,v.x,v.y);
}else{
cairo_line_to(cr,v.x,v.y);
}
break;
case(OF_PRIMITIVE_TRIANGLE_STRIP):
v2 = transform(primitive.getVertex(primitive.getIndex(i-2)));
cairo_line_to(cr,v.x,v.y);
cairo_line_to(cr,v2.x,v2.y);
cairo_move_to(cr,v.x,v.y);
break;
case(OF_PRIMITIVE_TRIANGLE_FAN):
/*triangles.addIndex((GLuint)0);
triangles.addIndex((GLuint)1);
triangles.addIndex((GLuint)2);
for(int i = 2; i < primitive.getNumVertices()-1;i++){
triangles.addIndex((GLuint)0);
triangles.addIndex((GLuint)i);
triangles.addIndex((GLuint)i+1);
}*/
break;
default:break;
}
}
cairo_move_to(cr,primitive.getVertex(primitive.getIndex(primitive.getNumIndices()-1)).x,primitive.getVertex(primitive.getIndex(primitive.getNumIndices()-1)).y);
if(ofGetStyle().lineWidth>0){
cairo_stroke( cr );
}
popMatrix();
}