本文整理汇总了C++中cairo_new_path函数的典型用法代码示例。如果您正苦于以下问题:C++ cairo_new_path函数的具体用法?C++ cairo_new_path怎么用?C++ cairo_new_path使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cairo_new_path函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的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);
}
开发者ID:Vort,项目名称:gtk,代码行数:60,代码来源:gtkrender.c
示例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 ();
}
开发者ID:csyuschmjuh,项目名称:apl,代码行数:37,代码来源:long-dashed-lines.c
示例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;
}
开发者ID:geographika,项目名称:mapserver,代码行数:37,代码来源:mapcairo.c
示例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];
}
}
开发者ID:earaujoassis,项目名称:cairoplot,代码行数:36,代码来源:cairoplot_backwards.c
示例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;
}
开发者ID:msilex,项目名称:mapserver,代码行数:24,代码来源:mapcairo.c
示例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 ();
}
开发者ID:jaglass,项目名称:WinCairoRequirements,代码行数:24,代码来源:tessellate.c
示例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);
}
开发者ID:CannedFish,项目名称:deepin-compiz,代码行数:27,代码来源:text.cpp
示例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;
}
开发者ID:codekiddy2,项目名称:caskbench,代码行数:36,代码来源:image-rotate.cpp
示例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);
}
开发者ID:jkriege2,项目名称:cairoQPaintDevice,代码行数:24,代码来源:qcairopaintengine.cpp
示例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);
*/
};
开发者ID:Kaftan777ski,项目名称:mapinect,代码行数:25,代码来源:ofxCairoTexture.cpp
示例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);
}
}
开发者ID:nicksexton,项目名称:gui-tools,代码行数:83,代码来源:lib_cairox.c
示例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;
//.........这里部分代码省略.........
开发者ID:BackupTheBerlios,项目名称:cairo-dock-svn,代码行数:101,代码来源:rendering-3D-plane.c
示例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;
}
}
}
开发者ID:SayCV,项目名称:geda-gerbv,代码行数:65,代码来源:draw.c
示例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);
}
开发者ID:SayCV,项目名称:geda-gerbv,代码行数:64,代码来源:draw.c
示例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();
}
开发者ID:AppleToolbox,项目名称:openFrameworks,代码行数:70,代码来源:ofCairoRenderer.cpp
示例16: lime_cairo_new_path
void lime_cairo_new_path (value handle) {
cairo_new_path ((cairo_t*)val_data (handle));
}
开发者ID:Gemioli,项目名称:lime,代码行数:5,代码来源:CairoBindings.cpp
示例17: ofLogWarning
void ofCairoRenderer::draw(const ofMesh & primitive, ofPolyRenderMode mode, bool useColors, bool useTextures, bool useNormals) const{
if(useColors || useTextures || useNormals){
ofLogWarning("ofCairoRenderer") << "draw(): cairo mesh rendering doesn't support colors, textures, or normals. drawing wireframe ...";
}
if(primitive.getNumVertices() == 0){
return;
}
if(primitive.getNumIndices() == 0){
ofMesh indexedMesh = primitive;
indexedMesh.setupIndicesAuto();
draw(indexedMesh, mode, useColors, useTextures, useNormals);
return;
}
cairo_new_path(cr);
cairo_matrix_t matrix;
cairo_matrix_init_identity(&matrix);
cairo_new_path(cr);
std::size_t 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(currentStyle.lineWidth>0){
cairo_stroke( cr );
}
}
开发者ID:8morikazuto,项目名称:openFrameworks,代码行数:73,代码来源:ofCairoRenderer.cpp
示例18: cairo_image_surface_get_width
void *dt_control_expose(void *voidptr)
{
int width, height, pointerx, pointery;
if(!darktable.gui->surface) return NULL;
width = cairo_image_surface_get_width(darktable.gui->surface);
height = cairo_image_surface_get_height(darktable.gui->surface);
GtkWidget *widget = dt_ui_center(darktable.gui->ui);
gtk_widget_get_pointer(widget, &pointerx, &pointery);
//create a gtk-independent surface to draw on
cairo_surface_t *cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
cairo_t *cr = cairo_create(cst);
// TODO: control_expose: only redraw the part not overlapped by temporary control panel show!
//
float tb = 8;//fmaxf(10, width/100.0);
darktable.control->tabborder = tb;
darktable.control->width = width;
darktable.control->height = height;
GtkStyle *style = gtk_widget_get_style(widget);
cairo_set_source_rgb (cr,
style->bg[GTK_STATE_NORMAL].red/65535.0,
style->bg[GTK_STATE_NORMAL].green/65535.0,
style->bg[GTK_STATE_NORMAL].blue/65535.0
);
cairo_set_line_width(cr, tb);
cairo_rectangle(cr, tb/2., tb/2., width-tb, height-tb);
cairo_stroke(cr);
cairo_set_line_width(cr, 1.5);
cairo_set_source_rgb (cr, .1, .1, .1);
cairo_rectangle(cr, tb, tb, width-2*tb, height-2*tb);
cairo_stroke(cr);
cairo_save(cr);
cairo_translate(cr, tb, tb);
cairo_rectangle(cr, 0, 0, width - 2*tb, height - 2*tb);
cairo_clip(cr);
cairo_new_path(cr);
// draw view
dt_view_manager_expose(darktable.view_manager, cr, width-2*tb, height-2*tb,
pointerx-tb, pointery-tb);
cairo_restore(cr);
// draw status bar, if any
if(darktable.control->progress < 100.0)
{
tb = fmaxf(20, width/40.0);
char num[10];
cairo_rectangle(cr, width*0.4, height*0.85,
width*0.2*darktable.control->progress/100.0f, tb);
cairo_fill(cr);
cairo_set_source_rgb(cr, 0., 0., 0.);
cairo_rectangle(cr, width*0.4, height*0.85, width*0.2, tb);
cairo_stroke(cr);
cairo_set_source_rgb(cr, 0.9, 0.9, 0.9);
cairo_select_font_face (cr, "sans-serif", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
cairo_set_font_size (cr, tb/3);
cairo_move_to (cr, width/2.0-10, height*0.85+2.*tb/3.);
snprintf(num, sizeof(num), "%d%%", (int)darktable.control->progress);
cairo_show_text (cr, num);
}
// draw log message, if any
dt_pthread_mutex_lock(&darktable.control->log_mutex);
if(darktable.control->log_ack != darktable.control->log_pos)
{
cairo_select_font_face (cr, "sans-serif", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_BOLD);
const float fontsize = 14;
cairo_set_font_size (cr, fontsize);
cairo_text_extents_t ext;
cairo_text_extents (cr,
darktable.control->log_message[darktable.control->log_ack], &ext);
const float pad = 20.0f, xc = width/2.0;
const float yc = height*0.85+10, wd = pad + ext.width*.5f;
float rad = 14;
cairo_set_line_width(cr, 1.);
cairo_move_to( cr, xc-wd,yc+rad);
for(int k=0; k<5; k++)
{
cairo_arc (cr, xc-wd, yc, rad, M_PI/2.0, 3.0/2.0*M_PI);
cairo_line_to (cr, xc+wd, yc-rad);
cairo_arc (cr, xc+wd, yc, rad, 3.0*M_PI/2.0, M_PI/2.0);
cairo_line_to (cr, xc-wd, yc+rad);
if(k == 0)
{
cairo_set_source_rgb(cr, 0.3, 0.3, 0.3);
cairo_fill_preserve (cr);
}
cairo_set_source_rgba(cr, 0., 0., 0., 1.0/(1+k));
cairo_stroke (cr);
rad += .5f;
}
cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
cairo_move_to (cr, xc-wd+.5f*pad, yc + 1./3.*fontsize);
cairo_show_text (cr,
darktable.control->log_message[darktable.control->log_ack]);
}
//.........这里部分代码省略.........
开发者ID:kriomant,项目名称:darktable,代码行数:101,代码来源:control.c
示例19: cairo_matrix_init_identity
void ofCairoRenderer::draw(const vector<ofPoint> & vertexData, ofPrimitiveMode drawMode) const{
if(vertexData.size()==0) return;
ofCairoRenderer * mut_this = const_cast<ofCairoRenderer*>(this);
mut_this->pushMatrix();
cairo_matrix_t matrix;
cairo_matrix_init_identity(&matrix);
cairo_new_path(cr);
//if(indices.getNumIndices()){
int i = 1;
ofVec3f v = transform(vertexData[0]);
ofVec3f v2;
cairo_move_to(cr,v.x,v.y);
if(drawMode==OF_PRIMITIVE_TRIANGLE_STRIP){
v = transform(vertexData[1]);
cairo_line_to(cr,v.x,v.y);
v = transform(vertexData[2]);
cairo_line_to(cr,v.x,v.y);
i=2;
}
for(; i<(int)vertexData.size(); i++){
v = transform(vertexData[i]);
switch(drawMode){
case(OF_PRIMITIVE_TRIANGLES):
if((i+1)%3==0){
cairo_line_to(cr,v.x,v.y);
v2 = transform(vertexData[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(vertexData[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,vertexData[vertexData.size()-1].x,vertexData[vertexData.size()-1].y);
cairo_stroke( cr );
mut_this->popMatrix();
}
开发者ID:8morikazuto,项目名称:openFrameworks,代码行数:61,代码来源:ofCairoRenderer.cpp
示例20: platformPath
void Path::clear()
{
cairo_t* cr = platformPath()->m_cr;
cairo_new_path(cr);
}
开发者ID:acss,项目名称:owb-mirror,代码行数:5,代码来源:PathCairo.cpp
注:本文中的cairo_new_path函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论