本文整理汇总了C++中DrawingContext::setSource方法的典型用法代码示例。如果您正苦于以下问题:C++ DrawingContext::setSource方法的具体用法?C++ DrawingContext::setSource怎么用?C++ DrawingContext::setSource使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DrawingContext
的用法示例。
在下文中一共展示了DrawingContext::setSource方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _renderItem
unsigned DrawingText::_renderItem(DrawingContext &ct, Geom::IntRect const &/*area*/, unsigned /*flags*/, DrawingItem * /*stop_at*/)
{
if (_drawing.outline()) {
guint32 rgba = _drawing.outlinecolor;
Inkscape::DrawingContext::Save save(ct);
ct.setSource(rgba);
ct.setTolerance(0.5); // low quality, but good enough for outline mode
for (ChildrenList::iterator i = _children.begin(); i != _children.end(); ++i) {
DrawingGlyphs *g = dynamic_cast<DrawingGlyphs *>(&*i);
if (!g) throw InvalidItemException();
Inkscape::DrawingContext::Save save(ct);
// skip glpyhs with singular transforms
if (g->_ctm.isSingular()) continue;
ct.transform(g->_ctm);
ct.path(*g->_font->PathVector(g->_glyph));
ct.fill();
}
return RENDER_OK;
}
// NOTE: this is very similar to drawing-shape.cpp; the only difference is in path feeding
bool has_stroke, has_fill;
has_fill = _nrstyle.prepareFill(ct, _item_bbox);
has_stroke = _nrstyle.prepareStroke(ct, _item_bbox);
if (has_fill || has_stroke) {
for (ChildrenList::iterator i = _children.begin(); i != _children.end(); ++i) {
DrawingGlyphs *g = dynamic_cast<DrawingGlyphs *>(&*i);
if (!g) throw InvalidItemException();
Inkscape::DrawingContext::Save save(ct);
if (g->_ctm.isSingular()) continue;
ct.transform(g->_ctm);
ct.path(*g->_font->PathVector(g->_glyph));
}
Inkscape::DrawingContext::Save save(ct);
ct.transform(_ctm);
if (has_fill) {
_nrstyle.applyFill(ct);
ct.fillPreserve();
}
if (has_stroke) {
_nrstyle.applyStroke(ct);
ct.strokePreserve();
}
ct.newPath(); // clear path
}
return RENDER_OK;
}
示例2:
void
Drawing::render(DrawingContext &ct, Geom::IntRect const &area, unsigned flags)
{
if (_root) {
_root->render(ct, area, flags);
}
if (colorMode() == COLORMODE_GRAYSCALE) {
// apply grayscale filter on top of everything
cairo_surface_t *input = ct.rawTarget();
cairo_surface_t *out = ink_cairo_surface_create_identical(input);
ink_cairo_surface_filter(input, out, _grayscale_colormatrix);
Geom::Point origin = ct.targetLogicalBounds().min();
ct.setSource(out, origin[Geom::X], origin[Geom::Y]);
ct.setOperator(CAIRO_OPERATOR_SOURCE);
ct.paint();
ct.setOperator(CAIRO_OPERATOR_OVER);
cairo_surface_destroy(out);
}
}
示例3:
/**
* Paints the clean area from cache and modifies the @a area
* parameter to the bounds of the region that must be repainted.
*/
void
DrawingCache::paintFromCache(DrawingContext &dc, Geom::OptIntRect &area)
{
if (!area) return;
// We subtract the clean region from the area, then get the bounds
// of the resulting region. This is the area that needs to be repainted
// by the item.
// Then we subtract the area that needs to be repainted from the
// original area and paint the resulting region from cache.
cairo_rectangle_int_t area_c = _convertRect(*area);
cairo_region_t *dirty_region = cairo_region_create_rectangle(&area_c);
cairo_region_t *cache_region = cairo_region_copy(dirty_region);
cairo_region_subtract(dirty_region, _clean_region);
if (cairo_region_is_empty(dirty_region)) {
area = Geom::OptIntRect();
} else {
cairo_rectangle_int_t to_repaint;
cairo_region_get_extents(dirty_region, &to_repaint);
area = _convertRect(to_repaint);
cairo_region_subtract_rectangle(cache_region, &to_repaint);
}
cairo_region_destroy(dirty_region);
if (!cairo_region_is_empty(cache_region)) {
int nr = cairo_region_num_rectangles(cache_region);
cairo_rectangle_int_t tmp;
for (int i = 0; i < nr; ++i) {
cairo_region_get_rectangle(cache_region, i, &tmp);
dc.rectangle(_convertRect(tmp));
}
dc.setSource(this);
dc.fill();
}
cairo_region_destroy(cache_region);
}
示例4: _renderItem
//.........这里部分代码省略.........
* The object itself is rendered to a group.
*
* Opacity is done by rendering the clipping path with an alpha
* value corresponding to the opacity. If there is no clipping path,
* the entire intermediate surface is painted with alpha corresponding
* to the opacity value.
*/
// Short-circuit the simple case.
// We also use this path for filter background rendering, because masking, clipping,
// filters and opacity do not apply when rendering the ancestors of the filtered
// element
if ((flags & RENDER_FILTER_BACKGROUND) || !needs_intermediate_rendering) {
return _renderItem(dc, *carea, flags & ~RENDER_FILTER_BACKGROUND, stop_at);
}
// iarea is the bounding box for intermediate rendering
// Note 1: Pixels inside iarea but outside carea are invalid
// (incomplete filter dependence region).
// Note 2: We only need to render carea of clip and mask, but
// iarea of the object.
Geom::OptIntRect iarea = carea;
// expand carea to contain the dependent area of filters.
if (_filter && render_filters) {
_filter->area_enlarge(*iarea, this);
iarea.intersectWith(_drawbox);
}
DrawingSurface intermediate(*iarea);
DrawingContext ict(intermediate);
unsigned render_result = RENDER_OK;
// 1. Render clipping path with alpha = opacity.
ict.setSource(0,0,0,_opacity);
// Since clip can be combined with opacity, the result could be incorrect
// for overlapping clip children. To fix this we use the SOURCE operator
// instead of the default OVER.
ict.setOperator(CAIRO_OPERATOR_SOURCE);
ict.paint();
if (_clip) {
ict.pushGroup();
_clip->clip(ict, *carea); // fixme: carea or area?
ict.popGroupToSource();
ict.setOperator(CAIRO_OPERATOR_IN);
ict.paint();
}
ict.setOperator(CAIRO_OPERATOR_OVER); // reset back to default
// 2. Render the mask if present and compose it with the clipping path + opacity.
if (_mask) {
ict.pushGroup();
_mask->render(ict, *carea, flags);
cairo_surface_t *mask_s = ict.rawTarget();
// Convert mask's luminance to alpha
ink_cairo_surface_filter(mask_s, mask_s, MaskLuminanceToAlpha());
ict.popGroupToSource();
ict.setOperator(CAIRO_OPERATOR_IN);
ict.paint();
ict.setOperator(CAIRO_OPERATOR_OVER);
}
// 3. Render object itself
ict.pushGroup();
render_result = _renderItem(ict, *iarea, flags, stop_at);