本文整理汇总了C++中cairo_matrix_init函数的典型用法代码示例。如果您正苦于以下问题:C++ cairo_matrix_init函数的具体用法?C++ cairo_matrix_init怎么用?C++ cairo_matrix_init使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cairo_matrix_init函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getDefaultFontOptions
void FontPlatformData::initializeWithFontFace(cairo_font_face_t* fontFace, const FontDescription& fontDescription)
{
cairo_font_options_t* options = getDefaultFontOptions();
cairo_matrix_t ctm;
cairo_matrix_init_identity(&ctm);
// Scaling a font with width zero size leads to a failed cairo_scaled_font_t instantiations.
// Instead we scale we scale the font to a very tiny size and just abort rendering later on.
float realSize = m_size ? m_size : 1;
cairo_matrix_t fontMatrix;
if (!m_pattern)
cairo_matrix_init_scale(&fontMatrix, realSize, realSize);
else {
setCairoFontOptionsFromFontConfigPattern(options, m_pattern.get());
// FontConfig may return a list of transformation matrices with the pattern, for instance,
// for fonts that are oblique. We use that to initialize the cairo font matrix.
FcMatrix fontConfigMatrix, *tempFontConfigMatrix;
FcMatrixInit(&fontConfigMatrix);
// These matrices may be stacked in the pattern, so it's our job to get them all and multiply them.
for (int i = 0; FcPatternGetMatrix(m_pattern.get(), FC_MATRIX, i, &tempFontConfigMatrix) == FcResultMatch; i++)
FcMatrixMultiply(&fontConfigMatrix, &fontConfigMatrix, tempFontConfigMatrix);
cairo_matrix_init(&fontMatrix, fontConfigMatrix.xx, -fontConfigMatrix.yx,
-fontConfigMatrix.xy, fontConfigMatrix.yy, 0, 0);
// We requested an italic font, but Fontconfig gave us one that was neither oblique nor italic.
int actualFontSlant;
if (fontDescription.italic() && FcPatternGetInteger(m_pattern.get(), FC_SLANT, 0, &actualFontSlant) == FcResultMatch)
m_syntheticOblique = actualFontSlant == FC_SLANT_ROMAN;
// The matrix from FontConfig does not include the scale.
cairo_matrix_scale(&fontMatrix, realSize, realSize);
}
if (syntheticOblique()) {
static const float syntheticObliqueSkew = -tanf(14 * acosf(0) / 90);
cairo_matrix_t skew = {1, 0, syntheticObliqueSkew, 1, 0, 0};
cairo_matrix_multiply(&fontMatrix, &skew, &fontMatrix);
}
m_horizontalOrientationMatrix = fontMatrix;
if (m_orientation == Vertical)
rotateCairoMatrixForVerticalOrientation(&fontMatrix);
m_scaledFont = cairo_scaled_font_create(fontFace, &fontMatrix, &ctm, options);
cairo_font_options_destroy(options);
}
示例2: matrix_new
static PyObject *
matrix_new (PyTypeObject *type, PyObject *args, PyObject *kwds) {
static char *kwlist[] = { "xx", "yx", "xy", "yy", "x0", "y0", NULL };
double xx = 1.0, yx = 0.0, xy = 0.0, yy = 1.0, x0 = 0.0, y0 = 0.0;
if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|dddddd:Matrix.__init__", kwlist,
&xx, &yx, &xy, &yy, &x0, &y0))
return NULL;
cairo_matrix_t mx;
cairo_matrix_init (&mx, xx, yx, xy, yy, x0, y0);
return PycairoMatrix_FromMatrix (&mx);
}
示例3: rsvg_cairo_clip_apply_affine
static void
rsvg_cairo_clip_apply_affine (RsvgCairoClipRender *render, cairo_matrix_t *affine)
{
RsvgCairoRender *cairo_render = &render->super;
cairo_matrix_t matrix;
gboolean nest = cairo_render->cr != cairo_render->initial_cr;
cairo_matrix_init (&matrix,
affine->xx, affine->yx,
affine->xy, affine->yy,
affine->x0 + (nest ? 0 : render->parent->offset_x),
affine->y0 + (nest ? 0 : render->parent->offset_y));
cairo_set_matrix (cairo_render->cr, &matrix);
}
示例4: cmd_flip_x
static void cmd_flip_x (struct document *doc)
{
int width = (doc->flags & NO_GENERIC_SCALE) ?
doc->width : ceil(doc->scale * doc->width);
cairo_matrix_t flipx;
cairo_matrix_init (&flipx, -1, 0, 0, 1, width, 0);
/*
* .y y.
* │ -> │
* └─x x─┘
*/
cairo_matrix_multiply (&doc->transform, &doc->transform, &flipx);
}
示例5: cairo_get_current_point
void Drawer::RotationOLD(double aAngle)
{
mAngle = aAngle * M_PI / 180;
double CentreX = 0.0;
double CentreY = 0.0;
cairo_matrix_t Matrice;
cairo_get_current_point(mCairoDC, &CentreX, &CentreY);
cairo_matrix_init (&Matrice, cos (mAngle), sin (mAngle), -sin (mAngle), cos(mAngle), CentreX * (1 - cos (mAngle)) + sin (mAngle) * CentreY, CentreY * ( 1 - cos (mAngle)) - sin (mAngle) * CentreX);
cairo_transform (mCairoDC, &Matrice);
}
示例6: dtgtk_cairo_paint_solid_triangle
void dtgtk_cairo_paint_solid_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_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_fill(cr);
cairo_identity_matrix(cr);
}
示例7: o_text_get_rendered_bounds
/*! \todo Finish function documentation!!!
* \brief
* \par Function Description
*
*/
int o_text_get_rendered_bounds (void *user_data, OBJECT *o_current,
int *min_x, int *min_y,
int *max_x, int *max_y)
{
GschemToplevel *w_current = (GschemToplevel *) user_data;
TOPLEVEL *toplevel;
EdaRenderer *renderer;
cairo_t *cr;
cairo_matrix_t render_mtx;
int result, render_flags = 0;
double t, l, r, b;
g_return_val_if_fail ((w_current != NULL), FALSE);
toplevel = gschem_toplevel_get_toplevel (w_current);
cr = gdk_cairo_create (w_current->drawable);
/* Set up renderer based on configuration in w_current. Note that we
* *don't* enable hinting, because if its enabled the calculated
* bounds are zoom-level-dependent. */
if (toplevel->show_hidden_text)
render_flags |= EDA_RENDERER_FLAG_TEXT_HIDDEN;
renderer = g_object_ref (w_current->renderer);
g_object_set (G_OBJECT (renderer),
"cairo-context", cr,
"render-flags", render_flags,
NULL);
/* We need to transform the cairo context to approximate world
* coordinates. */
cairo_matrix_init (&render_mtx, 1, 0, 0, -1, -1, 1);
cairo_set_matrix (cr, &render_mtx);
/* Use the renderer to calculate text bounds */
result = eda_renderer_get_user_bounds (renderer, o_current, &l, &t, &r, &b);
/* Clean up */
eda_renderer_destroy (renderer);
cairo_destroy (cr);
/* Round bounds to nearest integer */
*min_x = lrint (fmin (l, r));
*min_y = lrint (fmin (t, b));
*max_x = lrint (fmax (l, r));
*max_y = lrint (fmax (t, b));
return result;
}
示例8: _pattern_build_for_cairo
static cairo_pattern_t *
_pattern_build_for_cairo (DiaPattern *pattern, const Rectangle *ext)
{
cairo_pattern_t *pat;
gsize i;
real x, y;
DiaPatternType type;
guint flags;
Point p1, p2;
real r;
g_return_val_if_fail (pattern != NULL, NULL);
dia_pattern_get_settings (pattern, &type, &flags);
dia_pattern_get_points (pattern, &p1, &p2);
dia_pattern_get_radius (pattern, &r);
switch (type ) {
case DIA_LINEAR_GRADIENT :
pat = cairo_pattern_create_linear (p1.x, p1.y, p2.x, p2.y);
break;
case DIA_RADIAL_GRADIENT :
pat = cairo_pattern_create_radial (p2.x, p2.y, 0.0, p1.x, p1.y, r);
break;
default :
g_warning ("_pattern_build_for_cairo non such.");
return NULL;
}
/* this must only be optionally done */
if ((flags & DIA_PATTERN_USER_SPACE)==0) {
cairo_matrix_t matrix;
real w = ext->right - ext->left;
real h = ext->bottom - ext->top;
cairo_matrix_init (&matrix, w, 0.0, 0.0, h, ext->left, ext->top);
cairo_matrix_invert (&matrix);
cairo_pattern_set_matrix (pat, &matrix);
}
if (flags & DIA_PATTERN_EXTEND_PAD)
cairo_pattern_set_extend (pat, CAIRO_EXTEND_PAD);
else if (flags & DIA_PATTERN_EXTEND_REPEAT)
cairo_pattern_set_extend (pat, CAIRO_EXTEND_REPEAT);
else if (flags & DIA_PATTERN_EXTEND_REFLECT)
cairo_pattern_set_extend (pat, CAIRO_EXTEND_REFLECT);
dia_pattern_foreach (pattern, _add_color_stop, pat);
return pat;
}
示例9: cmd_flip_y
static void cmd_flip_y (struct document *doc)
{
int height = (doc->flags & NO_GENERIC_SCALE) ?
doc->height : ceil(doc->scale * doc->height);
cairo_matrix_t flipy;
cairo_matrix_init (&flipy, 1, 0, 0, -1, 0, height);
/* .y .
* │
* └─x ->
* ┌─x
* │
* y
*/
cairo_matrix_multiply (&doc->transform, &doc->transform, &flipy);
}
示例10: do_drawing
static void do_drawing(cairo_t *cr) {
cairo_matrix_t matrix;
cairo_set_source_rgb(cr, 0.6, 0.6, 0.6);
cairo_rectangle(cr, 20, 30, 80, 50);
cairo_fill(cr);
cairo_matrix_init(&matrix,
1.0, 0.5,
0.0, 1.0,
0.0, 0.0
);
cairo_transform(cr, &matrix);
cairo_rectangle(cr, 130, 30, 80, 50);
cairo_fill(cr);
}
示例11: allocImage
HBITMAP allocImage(HDC dc, IntSize size, CairoContextRef* targetRef)
{
BITMAPINFO bmpInfo = {0};
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = size.width();
bmpInfo.bmiHeader.biHeight = size.height(); // Must be positive!
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biBitCount = 32;
bmpInfo.bmiHeader.biCompression = BI_RGB;
bmpInfo.bmiHeader.biClrUsed = 0; // unused
bmpInfo.bmiHeader.biClrImportant = 0;
LPVOID bits;
HBITMAP hbmp = CreateDIBSection(dc, &bmpInfo, DIB_RGB_COLORS, &bits, 0, 0);
// At this point, we have a Cairo surface that points to a Windows DIB. The DIB interprets
// with the opposite meaning of positive Y axis, so everything we draw into this cairo
// context is going to be upside down.
if (!targetRef)
return hbmp;
cairo_surface_t* bitmapContext = cairo_image_surface_create_for_data((unsigned char*)bits,
CAIRO_FORMAT_ARGB32,
bmpInfo.bmiHeader.biWidth,
bmpInfo.bmiHeader.biHeight,
bmpInfo.bmiHeader.biWidth * 4);
if (!bitmapContext) {
DeleteObject(hbmp);
return 0;
}
*targetRef = cairo_create (bitmapContext);
cairo_surface_destroy (bitmapContext);
// At this point, we have a Cairo surface that points to a Windows DIB. The DIB interprets
// with the opposite meaning of positive Y axis, so everything we draw into this cairo
// context is going to be upside down.
//
// So, we must invert the CTM for the context so that drawing commands will be flipped
// before they get written to the internal buffer.
cairo_matrix_t matrix;
cairo_matrix_init(&matrix, 1.0, 0.0, 0.0, -1.0, 0.0, size.height());
cairo_set_matrix(*targetRef, &matrix);
return hbmp;
}
示例12: _paint_fallback_image
static cairo_int_status_t
_paint_fallback_image (cairo_paginated_surface_t *surface,
cairo_rectangle_int_t *rect)
{
double x_scale = surface->base.x_fallback_resolution / surface->target->x_resolution;
double y_scale = surface->base.y_fallback_resolution / surface->target->y_resolution;
int x, y, width, height;
cairo_status_t status;
cairo_surface_t *image;
cairo_surface_pattern_t pattern;
cairo_clip_t *clip;
x = rect->x;
y = rect->y;
width = rect->width;
height = rect->height;
image = _cairo_paginated_surface_create_image_surface (surface,
ceil (width * x_scale),
ceil (height * y_scale));
_cairo_surface_set_device_scale (image, x_scale, y_scale);
/* set_device_offset just sets the x0/y0 components of the matrix;
* so we have to do the scaling manually. */
cairo_surface_set_device_offset (image, -x*x_scale, -y*y_scale);
status = _cairo_recording_surface_replay (surface->recording_surface, image);
if (unlikely (status))
goto CLEANUP_IMAGE;
_cairo_pattern_init_for_surface (&pattern, image);
cairo_matrix_init (&pattern.base.matrix,
x_scale, 0, 0, y_scale, -x*x_scale, -y*y_scale);
/* the fallback should be rendered at native resolution, so disable
* filtering (if possible) to avoid introducing potential artifacts. */
pattern.base.filter = CAIRO_FILTER_NEAREST;
clip = _cairo_clip_intersect_rectangle (NULL, rect);
status = _cairo_surface_paint (surface->target,
CAIRO_OPERATOR_SOURCE,
&pattern.base, clip);
_cairo_clip_destroy (clip);
_cairo_pattern_fini (&pattern.base);
CLEANUP_IMAGE:
cairo_surface_destroy (image);
return (cairo_int_status_t)status;
}
示例13: matrix_init
static void matrix_init(cairo_matrix_t *mat, double width, double height, OGREnvelope *bounds){
cairo_matrix_init(mat, 1, 0, 0, -1, 0, 0);
cairo_matrix_translate(mat, 0, height * -1.0);
double w,
bWidth = fabs(bounds->MaxX - bounds->MinX),
bHeight = fabs(bounds->MaxY - bounds->MinY);
if(bWidth > bHeight){
w = width / bWidth;
} else {
w = height / bHeight;
}
cairo_matrix_scale(mat, w, w);
cairo_matrix_translate(mat, -bounds->MinX, -bounds->MinY);
}
示例14: GOO_CANVAS_ITEM_MODEL_GET_IFACE
/**
* goo_canvas_item_model_skew_y:
* @model: an item model.
* @degrees: the skew angle.
* @cx: the x coordinate of the origin of the skew transform.
* @cy: the y coordinate of the origin of the skew transform.
*
* Skews the model's coordinate system along the y axis by the given amount,
* about the given origin.
**/
void
goo_canvas_item_model_skew_y (GooCanvasItemModel *model,
gdouble degrees,
gdouble cx,
gdouble cy)
{
GooCanvasItemModelIface *iface = GOO_CANVAS_ITEM_MODEL_GET_IFACE (model);
cairo_matrix_t tmp, new_matrix = { 1, 0, 0, 1, 0, 0 };
double radians = degrees * (M_PI / 180);
iface->get_transform (model, &new_matrix);
cairo_matrix_translate (&new_matrix, cx, cy);
cairo_matrix_init (&tmp, 1, tan (radians), 0, 1, 0, 0);
cairo_matrix_multiply (&new_matrix, &tmp, &new_matrix);
cairo_matrix_translate (&new_matrix, -cx, -cy);
iface->set_transform (model, &new_matrix);
}
示例15: matrix_new
static PyObject *
matrix_new (PyTypeObject *type, PyObject *args, PyObject *kwds) {
PyObject *o;
static char *kwlist[] = { "xx", "yx", "xy", "yy", "x0", "y0", NULL };
double xx = 1.0, yx = 0.0, xy = 0.0, yy = 1.0, x0 = 0.0, y0 = 0.0;
if (!PyArg_ParseTupleAndKeywords(args, kwds,
"|dddddd:Matrix.__init__", kwlist,
&xx, &yx, &xy, &yy, &x0, &y0))
return NULL;
o = type->tp_alloc(type, 0);
if (o)
cairo_matrix_init (&((PycairoMatrix *)o)->matrix,
xx, yx, xy, yy, x0, y0);
return o;
}