当前位置: 首页>>代码示例>>C++>>正文


C++ cairo_transform函数代码示例

本文整理汇总了C++中cairo_transform函数的典型用法代码示例。如果您正苦于以下问题:C++ cairo_transform函数的具体用法?C++ cairo_transform怎么用?C++ cairo_transform使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了cairo_transform函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: dtgtk_cairo_paint_triangle

void dtgtk_cairo_paint_triangle(cairo_t *cr, gint x,int y,gint w,gint h, gint flags)
{
  /* initialize rotation and flip matrices */
  cairo_matrix_t hflip_matrix;
  cairo_matrix_init(&hflip_matrix,-1,0,0,1,1,0);

  double C=cos(-(M_PI/2.0)),S=sin(-(M_PI/2.0));  // -90 degrees
  C=flags&CPF_DIRECTION_DOWN?cos(-(M_PI*1.5)):C;
  S=flags&CPF_DIRECTION_DOWN?sin(-(M_PI*1.5)):S;
  cairo_matrix_t rotation_matrix;
  cairo_matrix_init(&rotation_matrix,C,S,-S,C,0.5-C*0.5+S*0.5,0.5-S*0.5-C*0.5);

  /* scale and transform*/
  gint s=w<h?w:h;
  cairo_translate(cr, x+(w/2.0)-(s/2.0), y+(h/2.0)-(s/2.0));
  cairo_scale(cr,s,s);
  cairo_set_line_width(cr,0.1);
  cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND);

  if( flags&CPF_DIRECTION_UP || flags &CPF_DIRECTION_DOWN)
    cairo_transform(cr,&rotation_matrix);
  else if(flags&CPF_DIRECTION_LEFT)	// Flip x transformation
    cairo_transform(cr,&hflip_matrix);


  cairo_move_to(cr, 0.2, 0.2);
  cairo_line_to(cr, 0.7, 0.5);
  cairo_line_to(cr, 0.2, 0.8);
  cairo_line_to(cr, 0.2, 0.2);
  cairo_stroke(cr);
  cairo_identity_matrix(cr);
}
开发者ID:ksyz,项目名称:darktable,代码行数:32,代码来源:paint.c

示例2: cairo_save

void wxCairoSVGRadialGradient::Op(cairo_t* cairo_image, bool preserve, wxCairoSVGPaintServerOp op) {

	cairo_pattern_t *pat;
	bool saved = false;

	if (m_gradientUnits == _T("objectBoundingBox")) {
		cairo_save(cairo_image);
		saved = true;
		double minx;
		double miny;
		double maxx;
		double maxy;

		cairo_path_extents(cairo_image, &minx, &miny, &maxx, &maxy);
		cairo_matrix_t mat;
		cairo_matrix_init(&mat, maxx-minx, 0, 0, maxy-miny, minx, miny);
		cairo_transform(cairo_image, &mat);
		wxLogTrace(_T("svg"), _T("wxCairoSVGRadialGradient::Op transformed to objectBoundingBox minx %f miny %f maxx %f maxy %f"),
				minx, miny, maxx, maxy);
	} else if (m_gradientTransform.Contains(_T("matrix"))) {
		double m[6];
		wxArrayString params = wxStringTokenize(m_gradientTransform.Mid(m_gradientTransform.Find(_T("matrix(")) + 7), _T(" "));
		if (params.Count() == 6) {
			for (int i = 0; i < 6; i++) {
				params[i].Strip().ToDouble(&m[i]);
			}
			cairo_save(cairo_image);
			saved = true;
			cairo_matrix_t mat;
			cairo_matrix_init(&mat, m[0], m[1], m[2], m[3], m[4], m[5]);
			cairo_transform(cairo_image, &mat);
			wxLogTrace(_T("svg"), _T("wxCairoSVGRadialGradient::Op matrix transform %f %f %f %f %f %f"),
					m[0], m[1], m[2], m[3], m[4], m[5]);
		}
	}

	pat = cairo_pattern_create_radial(m_cx, m_cy, 0, m_cx, m_cy, m_r);
	wxLogTrace(_T("svg"), _T("wxCairoSVGRadialGradient::Op cairo_pattern_create_radial cx %f cy %f r %f"),
			m_cx, m_cy, m_r);

	for (wxCairoSVGGradientStopList::iterator i = m_stopList.begin(); i != m_stopList.end(); ++i) {
		wxCairoSVGGradientStop* stop = *i;
		if (stop->m_opacity == 1) {
			cairo_pattern_add_color_stop_rgb(pat, stop->m_offset, (double) stop->m_r / 255.0, (double) stop->m_g / 255.0, (double) stop->m_b / 255.0);
		} else {
			cairo_pattern_add_color_stop_rgba(pat, stop->m_offset, (double) stop->m_r / 255.0, (double) stop->m_g / 255.0, (double) stop->m_b / 255.0, stop->m_opacity);
		}
	}

	cairo_set_source(cairo_image, pat);
	wxCairoSVGPaintServer::Op(cairo_image, preserve, op);

	if (saved) cairo_restore(cairo_image);

	cairo_pattern_destroy(pat);

	wxLogTrace(_T("svg"), _T("wxCairoSVGRadialGradient::Op done"));
}
开发者ID:johanvdb,项目名称:wxCairoSVG,代码行数:58,代码来源:radialgradient.cpp

示例3: draw

static cairo_test_status_t
draw (cairo_t *cr, int width, int height)
{
    /* We draw in the default black, so paint white first. */
    cairo_save (cr);
    cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); /* white */
    cairo_paint (cr);
    cairo_restore (cr);

    cairo_translate (cr, PAD, PAD);

    cairo_set_line_width (cr, LINE_WIDTH);
    cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);

    cairo_save (cr);
    {
	cairo_matrix_t skew_x = {
	    1.0, 0.0,
	    SKEW_FACTOR, 1.0,
	    0.0, 0.0
	};

	cairo_translate (cr, LINE_WIDTH / 2.0, 0.0);

	cairo_transform (cr, &skew_x);

	cairo_move_to (cr, 0.0, 0.0);
	cairo_line_to (cr, 0.0, LINE_LENGTH);
	cairo_stroke (cr);
    }
    cairo_restore (cr);

    cairo_translate (cr, 0.0, LINE_WIDTH);

    cairo_save (cr);
    {
	cairo_matrix_t skew_y = {
	    1.0, SKEW_FACTOR,
	    0.0, 1.0,
	    0.0, 0.0
	};

	cairo_translate (cr, 0.0, LINE_WIDTH / 2.0);

	cairo_transform (cr, &skew_y);

	cairo_move_to (cr, 0.0, 0.0);
	cairo_line_to (cr, LINE_LENGTH, 0.0);
	cairo_stroke (cr);
    }
    cairo_restore (cr);

    return CAIRO_TEST_SUCCESS;
}
开发者ID:499940913,项目名称:moon,代码行数:54,代码来源:skew-extreme.c

示例4: ml_cairo_transform

CAMLprim value
ml_cairo_transform (value v_cr, value v_matrix)
{
#ifndef ARCH_ALIGN_DOUBLE
  cairo_transform (cairo_t_val (v_cr), cairo_matrix_t_val (v_matrix));
#else
  cairo_matrix_t mat;
  ml_convert_cairo_matrix_in (v_matrix, &mat);
  cairo_transform (cairo_t_val (v_cr), &mat);
#endif
  check_cairo_status (v_cr);
  return Val_unit;
}
开发者ID:DMClambo,项目名称:pfff,代码行数:13,代码来源:ml_cairo.c

示例5: gtk_css_style_render_icon

void
gtk_css_style_render_icon (GtkCssStyle            *style,
                           cairo_t                *cr,
                           double                  x,
                           double                  y,
                           double                  width,
                           double                  height,
                           GtkCssImageBuiltinType  builtin_type)
{
  const GtkCssValue *shadows;
  cairo_matrix_t matrix, transform_matrix, saved_matrix;
  GtkCssImage *image;

  g_return_if_fail (GTK_IS_CSS_STYLE (style));
  g_return_if_fail (cr != NULL);

  image = _gtk_css_image_value_get_image (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_SOURCE));
  if (image == NULL)
    return;

  cairo_get_matrix (cr, &saved_matrix);

  shadows = gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_SHADOW);

  cairo_translate (cr, x, y);

  if (_gtk_css_transform_value_get_matrix (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_TRANSFORM), &transform_matrix))
    {
      /* XXX: Implement -gtk-icon-transform-origin instead of hardcoding "50% 50%" here */
      cairo_matrix_init_translate (&matrix, width / 2, height / 2);
      cairo_matrix_multiply (&matrix, &transform_matrix, &matrix);
      cairo_matrix_translate (&matrix, - width / 2, - height / 2);

      if (_gtk_css_shadows_value_is_none (shadows))
        {
          cairo_transform (cr, &matrix);
          gtk_css_image_builtin_draw (image, cr, width, height, builtin_type);
        }
      else
        {
          cairo_push_group (cr);
          cairo_transform (cr, &matrix);
          gtk_css_image_builtin_draw (image, cr, width, height, builtin_type);
          cairo_pop_group_to_source (cr);
          _gtk_css_shadows_value_paint_icon (shadows, cr);
          cairo_paint (cr);
        }
    }

  cairo_set_matrix (cr, &saved_matrix);
}
开发者ID:GYGit,项目名称:gtk,代码行数:51,代码来源:gtkrendericon.c

示例6: _adg_render

static void
_adg_render(AdgEntity *entity, cairo_t *cr)
{
    AdgLogoClassPrivate *data_class = ADG_LOGO_GET_CLASS(entity)->data_class;
    AdgLogoPrivate *data = adg_logo_get_instance_private((AdgLogo *) entity);
    const cairo_path_t *cairo_path;

    cairo_transform(cr, adg_entity_get_global_matrix(entity));
    cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);

    cairo_path = adg_trail_get_cairo_path((AdgTrail *) data_class->symbol);
    if (cairo_path != NULL) {
        cairo_save(cr);
        cairo_transform(cr, adg_entity_get_local_matrix(entity));
        cairo_append_path(cr, cairo_path);
        cairo_restore(cr);

        cairo_set_line_width(cr, 3);
        adg_entity_apply_dress(entity, data->symbol_dress, cr);

        cairo_stroke(cr);
    }

    cairo_path = adg_trail_get_cairo_path((AdgTrail *) data_class->screen);
    if (cairo_path != NULL) {
        cairo_save(cr);
        cairo_transform(cr, adg_entity_get_local_matrix(entity));
        cairo_append_path(cr, cairo_path);
        cairo_restore(cr);

        cairo_set_line_width(cr, 2);
        adg_entity_apply_dress(entity, data->screen_dress, cr);

        cairo_stroke(cr);
    }

    cairo_path = adg_trail_get_cairo_path((AdgTrail *) data_class->frame);
    if (cairo_path != NULL) {
        cairo_save(cr);
        cairo_transform(cr, adg_entity_get_local_matrix(entity));
        cairo_append_path(cr, cairo_path);
        cairo_restore(cr);

        cairo_set_line_width(cr, 2);
        cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
        adg_entity_apply_dress(entity, data->frame_dress, cr);

        cairo_stroke(cr);
    }
}
开发者ID:ntd,项目名称:adg,代码行数:50,代码来源:adg-logo.c

示例7: draw

static void
draw (TboObjectBase *self, Frame *frame, cairo_t *cr)
{
    TboObjectPixmap *pixmap = TBO_OBJECT_PIXMAP (self);
    int w, h;
    cairo_surface_t *image;
    GdkPixbuf *pixbuf;
    GError *error = NULL;
    char path[255];

    tbo_files_expand_path (pixmap->path->str, path);
    pixbuf = gdk_pixbuf_new_from_file (path, &error);

    if (!pixbuf) {
        g_warning ("There's a problem here: %s", error->message);
        return;
    }

    w = gdk_pixbuf_get_width (pixbuf);
    h = gdk_pixbuf_get_height (pixbuf);

    if (!self->width) self->width = w;
    if (!self->height) self->height = h;

    float factorw = (float)self->width / (float)w;
    float factorh = (float)self->height / (float)h;

    cairo_matrix_t mx = {1, 0, 0, 1, 0, 0};
    tbo_object_base_get_flip_matrix (self, &mx);

    cairo_rectangle(cr, frame->x+2, frame->y+2, frame->width-4, frame->height-4);
    cairo_clip (cr);
    cairo_translate (cr, frame->x+self->x, frame->y+self->y);
    cairo_rotate (cr, self->angle);
    cairo_transform (cr, &mx);
    cairo_scale (cr, factorw, factorh);

    gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
    cairo_paint (cr);

    cairo_scale (cr, 1/factorw, 1/factorh);
    cairo_transform (cr, &mx);
    cairo_rotate (cr, -self->angle);
    cairo_translate (cr, -(frame->x+self->x), -(frame->y+self->y));
    cairo_reset_clip (cr);

    cairo_surface_destroy (image);
}
开发者ID:FranciscoJRA,项目名称:TBO,代码行数:48,代码来源:tbo-object-pixmap.c

示例8: platformPath

void Path::transform(const AffineTransform& trans)
{
    cairo_t* m_cr = platformPath()->m_cr;
    cairo_matrix_t c_matrix = cairo_matrix_t(trans);
    cairo_matrix_invert(&c_matrix);
    cairo_transform(m_cr, &c_matrix);
}
开发者ID:acss,项目名称:owb-mirror,代码行数:7,代码来源:PathCairo.cpp

示例9: cairo_save

void cairo_container::draw_txdib( cairo_t* cr, CTxDIB* bmp, int x, int y, int cx, int cy )
{
	cairo_save(cr);

	cairo_matrix_t flib_m;
	cairo_matrix_init(&flib_m, 1, 0, 0, -1, 0, 0);

	cairo_surface_t* img = NULL;

	CTxDIB rbmp;

	if(cx != bmp->getWidth() || cy != bmp->getHeight())
	{
		bmp->resample(cx, cy, &rbmp);
		img = cairo_image_surface_create_for_data((unsigned char*) rbmp.getBits(), CAIRO_FORMAT_ARGB32, rbmp.getWidth(), rbmp.getHeight(), rbmp.getWidth() * 4);
		cairo_matrix_translate(&flib_m, 0, -rbmp.getHeight());
		cairo_matrix_translate(&flib_m, x, -y);
	} else
	{
		img = cairo_image_surface_create_for_data((unsigned char*) bmp->getBits(), CAIRO_FORMAT_ARGB32, bmp->getWidth(), bmp->getHeight(), bmp->getWidth() * 4);
		cairo_matrix_translate(&flib_m, 0, -bmp->getHeight());
		cairo_matrix_translate(&flib_m, x, -y);
	}

	cairo_transform(cr, &flib_m);
	cairo_set_source_surface(cr, img, 0, 0);
	cairo_paint(cr);

	cairo_restore(cr);
	cairo_surface_destroy(img);
}
开发者ID:bigfatbrowncat,项目名称:litehtml,代码行数:31,代码来源:cairo_container.cpp

示例10: uiDrawTransform

void uiDrawTransform(uiDrawContext *c, uiDrawMatrix *m)
{
	cairo_matrix_t cm;

	m2c(m, &cm);
	cairo_transform(c->cr, &cm);
}
开发者ID:08opt,项目名称:libui,代码行数:7,代码来源:draw.c

示例11: draw_quadrant

/* Draw the word cairo at NUM_TEXT different angles.
 * We separate the circle into quadrants to reduce
 * numerical errors i.e. so each quarter is pixel-aligned.
 */
static void
draw_quadrant (cairo_t *cr,
	       const char *text,
	       const cairo_text_extents_t *extents,
	       const cairo_matrix_t *transform,
	       int x_off, int y_off)
{
    int i;

    for (i = 0; i < NUM_TEXT/4; i++) {
	cairo_save (cr);
	cairo_rotate (cr, 2*M_PI*i/NUM_TEXT);
	cairo_transform (cr, transform);
	cairo_set_line_width (cr, 1.0);
	cairo_rectangle (cr, x_off - 0.5, y_off - 0.5, extents->width + 1, extents->height + 1);
	cairo_set_source_rgb (cr, 1, 0, 0);
	cairo_stroke (cr);
	cairo_move_to (cr, x_off - extents->x_bearing, y_off - extents->y_bearing);
	cairo_set_source_rgb (cr, 0, 0, 0);
#if CAIRO_TEST_GENERATE_REFERENCE_IMAGE
	cairo_text_path (cr, text);
	cairo_fill (cr);
#else
	cairo_show_text (cr, text);
#endif
	cairo_restore (cr);
    }
}
开发者ID:ghub,项目名称:NVprSDK,代码行数:32,代码来源:text-rotate.c

示例12: selection_render_mask

static void
selection_render_mask (Selection *selection)
{
  GdkWindow       *window;
  cairo_surface_t *surface;
  cairo_t         *cr;

  window = gtk_widget_get_window (selection->shell->canvas);
  surface = gdk_window_create_similar_surface (window, CAIRO_CONTENT_ALPHA,
                                               gdk_window_get_width  (window),
                                               gdk_window_get_height (window));
  cr = cairo_create (surface);

  cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
  cairo_set_line_width (cr, 1.0);

  if (selection->shell->rotate_transform)
    cairo_transform (cr, selection->shell->rotate_transform);

  gimp_cairo_add_segments (cr,
                           selection->segs_in,
                           selection->n_segs_in);
  cairo_stroke (cr);

  selection->segs_in_mask = cairo_pattern_create_for_surface (surface);

  cairo_destroy (cr);
  cairo_surface_destroy (surface);
}
开发者ID:AnonPower,项目名称:picman,代码行数:29,代码来源:gimpdisplayshell-selection.c

示例13: cr_transform

static VALUE
cr_transform (VALUE self, VALUE matrix)
{
  cairo_transform (_SELF, RVAL2CRMATRIX (matrix));
  cr_check_status (_SELF);
  return self;
}
开发者ID:exvayn,项目名称:cairo-1.8.1-i386,代码行数:7,代码来源:rb_cairo_context.c

示例14: ge_cairo_mirror

void
ge_cairo_mirror (cairo_t     *cr,
                 CairoMirror  mirror,
                 gint        *x,
                 gint        *y,
                 gint        *width,
                 gint        *height)
{
	cairo_matrix_t matrix;
	
	cairo_matrix_init_identity (&matrix);
	
	cairo_translate (cr, *x, *y);
	*x = 0;
	*y = 0;
	
	if (mirror & CR_MIRROR_HORIZONTAL)
	{
		cairo_matrix_scale (&matrix, -1, 1);
		*x = -*width;
	}
	if (mirror & CR_MIRROR_VERTICAL)
	{
		cairo_matrix_scale (&matrix, 1, -1);
		*y = -*height;
	}

	cairo_transform (cr, &matrix);
}
开发者ID:Distrotech,项目名称:gtk-engines,代码行数:29,代码来源:cairo-support.c

示例15: cairo_get_current_point

void Drawer::Rotation(double aAngle)
{
    mAngle = aAngle * M_PI / 180;

    double CentreX = 0.0;
    double CentreY = 0.0;
    cairo_matrix_t MatriceTranslate;
    cairo_matrix_t MatriceRotate;

    cairo_get_current_point(mCairoDC, &CentreX, &CentreY);

    cairo_matrix_init_translate(&MatriceTranslate,CentreX,CentreY);
    cairo_transform (mCairoDC, &MatriceTranslate);
    cairo_matrix_init_rotate(&MatriceRotate, mAngle);
    cairo_transform (mCairoDC, &MatriceRotate);
}
开发者ID:GMercat,项目名称:TestCairo,代码行数:16,代码来源:Drawer.cpp


注:本文中的cairo_transform函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。