本文整理汇总了C++中cairo_matrix_init函数的典型用法代码示例。如果您正苦于以下问题:C++ cairo_matrix_init函数的具体用法?C++ cairo_matrix_init怎么用?C++ cairo_matrix_init使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cairo_matrix_init函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的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);
}
开发者ID:MYSHLIFE,项目名称:webkit,代码行数:50,代码来源:FontPlatformDataFreeType.cpp
示例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);
}
开发者ID:Projjol,项目名称:Fracktal,代码行数:14,代码来源:matrix.c
示例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);
}
开发者ID:ImageMagick,项目名称:librsvg,代码行数:14,代码来源:rsvg-cairo-clip.c
示例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);
}
开发者ID:darcyg,项目名称:fbcanvas,代码行数:14,代码来源:commands.c
示例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);
}
开发者ID:GMercat,项目名称:TestCairo,代码行数:14,代码来源:Drawer.cpp
示例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);
}
开发者ID:ksyz,项目名称:darktable,代码行数:37,代码来源:paint.c
示例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;
}
开发者ID:dmay31,项目名称:geda-gaf,代码行数:53,代码来源:o_text.c
示例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;
}
开发者ID:trilomix,项目名称:dia,代码行数:48,代码来源:diacairo-renderer.c
示例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);
}
开发者ID:darcyg,项目名称:fbcanvas,代码行数:16,代码来源:commands.c
示例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);
}
开发者ID:pwarnimo,项目名称:misc_projects,代码行数:16,代码来源:main.c
示例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;
}
开发者ID:arjunroy,项目名称:cinder_webkit,代码行数:47,代码来源:DragImageCairoWin.cpp
示例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;
}
开发者ID:Happy-Ferret,项目名称:webkit.js,代码行数:47,代码来源:cairo-paginated-surface.c
示例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);
}
开发者ID:PoNote,项目名称:stateface,代码行数:17,代码来源:shape.cpp
示例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);
}
开发者ID:anderflash,项目名称:goocanvas,代码行数:27,代码来源:goocanvasitemmodel.c
示例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;
}
开发者ID:jpe,项目名称:py2cairo-py3k,代码行数:17,代码来源:matrix.c
示例16: pattern
void cairo_context::add_image(agg::trans_affine const& tr, image_rgba8 const& data, double opacity)
{
cairo_pattern pattern(data);
if (!tr.is_identity())
{
double m[6];
tr.store_to(m);
cairo_matrix_t cairo_matrix;
cairo_matrix_init(&cairo_matrix,m[0],m[1],m[2],m[3],m[4],m[5]);
cairo_matrix_invert(&cairo_matrix);
pattern.set_matrix(cairo_matrix);
}
cairo_save(cairo_.get());
cairo_set_source(cairo_.get(), const_cast<cairo_pattern_t*>(pattern.pattern()));
cairo_paint_with_alpha(cairo_.get(), opacity);
cairo_restore(cairo_.get());
check_object_status_and_throw_exception(*this);
}
开发者ID:lightmare,项目名称:mapnik,代码行数:18,代码来源:cairo_context.cpp
示例17: cairo_matrix_init_scale
cairo_scaled_font_t *
gfxDWriteFont::CairoScaledFont()
{
if (!mCairoScaledFont) {
cairo_matrix_t sizeMatrix;
cairo_matrix_t identityMatrix;
cairo_matrix_init_scale(&sizeMatrix, mAdjustedSize, mAdjustedSize);
cairo_matrix_init_identity(&identityMatrix);
cairo_font_options_t *fontOptions = cairo_font_options_create();
if (mNeedsOblique) {
double skewfactor = OBLIQUE_SKEW_FACTOR;
cairo_matrix_t style;
cairo_matrix_init(&style,
1, //xx
0, //yx
-1 * skewfactor, //xy
1, //yy
0, //x0
0); //y0
cairo_matrix_multiply(&sizeMatrix, &sizeMatrix, &style);
}
if (mAntialiasOption != kAntialiasDefault) {
cairo_font_options_set_antialias(fontOptions,
GetCairoAntialiasOption(mAntialiasOption));
}
mCairoScaledFont = cairo_scaled_font_create(CairoFontFace(),
&sizeMatrix,
&identityMatrix,
fontOptions);
cairo_font_options_destroy(fontOptions);
}
NS_ASSERTION(mAdjustedSize == 0.0 ||
cairo_scaled_font_status(mCairoScaledFont)
== CAIRO_STATUS_SUCCESS,
"Failed to make scaled font");
return mCairoScaledFont;
}
开发者ID:lofter2011,项目名称:Icefox,代码行数:44,代码来源:gfxDWriteFonts.cpp
示例18: _pango_cairo_font_private_initialize
void
_pango_cairo_font_private_initialize (PangoCairoFontPrivate *cf_priv,
PangoCairoFont *cfont,
PangoGravity gravity,
const cairo_font_options_t *font_options,
const PangoMatrix *pango_ctm,
const cairo_matrix_t *font_matrix)
{
cairo_matrix_t gravity_matrix;
cf_priv->cfont = cfont;
cf_priv->gravity = gravity;
cf_priv->data = _pango_cairo_font_private_scaled_font_data_create ();
/* first apply gravity rotation, then font_matrix, such that
* vertical italic text comes out "correct". we don't do anything
* like baseline adjustment etc though. should be specially
* handled when we support italic correction. */
cairo_matrix_init_rotate(&gravity_matrix,
pango_gravity_to_rotation (cf_priv->gravity));
cairo_matrix_multiply (&cf_priv->data->font_matrix,
font_matrix,
&gravity_matrix);
if (pango_ctm)
cairo_matrix_init (&cf_priv->data->ctm,
pango_ctm->xx,
pango_ctm->yx,
pango_ctm->xy,
pango_ctm->yy,
0., 0.);
else
cairo_matrix_init_identity (&cf_priv->data->ctm);
cf_priv->data->options = cairo_font_options_copy (font_options);
cf_priv->is_hinted = cairo_font_options_get_hint_metrics (font_options) != CAIRO_HINT_METRICS_OFF;
cf_priv->scaled_font = NULL;
cf_priv->hbi = NULL;
cf_priv->glyph_extents_cache = NULL;
cf_priv->metrics_by_lang = NULL;
}
开发者ID:OpenInkpot-archive,项目名称:iplinux-pango1.0,代码行数:43,代码来源:pangocairo-font.c
示例19: allocImage
HBITMAP allocImage(HDC dc, IntSize size, PlatformContextCairo** targetRef)
{
BitmapInfo bmpInfo = BitmapInfo::create(size);
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;
}
cairo_t* cr = 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(cr, &matrix);
*targetRef = new PlatformGraphicsContext(cr);
cairo_destroy(cr);
return hbmp;
}
开发者ID:harlanlewis,项目名称:webkit,代码行数:42,代码来源:DragImageCairoWin.cpp
示例20: _paint_fallback_image
static cairo_int_status_t
_paint_fallback_image (cairo_paginated_surface_t *surface,
cairo_box_int_t *box)
{
double x_scale = surface->base.x_fallback_resolution / surface->target->x_resolution;
double y_scale = surface->base.y_fallback_resolution / surface->target->y_resolution;
cairo_matrix_t matrix;
int x, y, width, height;
cairo_status_t status;
cairo_surface_t *image;
cairo_pattern_t *pattern;
x = box->p1.x;
y = box->p1.y;
width = box->p2.x - x;
height = box->p2.y - y;
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_meta_surface_replay (surface->meta, image);
if (status)
goto CLEANUP_IMAGE;
pattern = cairo_pattern_create_for_surface (image);
cairo_matrix_init (&matrix, x_scale, 0, 0, y_scale, -x*x_scale, -y*y_scale);
cairo_pattern_set_matrix (pattern, &matrix);
status = _cairo_surface_paint (surface->target,
CAIRO_OPERATOR_SOURCE,
pattern);
cairo_pattern_destroy (pattern);
CLEANUP_IMAGE:
cairo_surface_destroy (image);
return status;
}
开发者ID:jwmcglynn,项目名称:Gadgets,代码行数:42,代码来源:cairo-paginated-surface.c
注:本文中的cairo_matrix_init函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论