void WayRenderer::stroke(cairo_t* cr, AssetCache& cache) { if (s->width <= 0.0) return; addWayPath(cr); cairo_save(cr); setLineCap(cr, s->linecap); setLineJoin(cr, s->linejoin); cairo_set_source_rgba(cr, COLOR2RGBA(s->color)); const string& image = s->image.str(); cairo_pattern_t* pattern = NULL; if (!image.empty()) { pattern = cairo_pattern_create_for_surface(cache.getImage(image)); cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT); cairo_set_source(cr, pattern); } if (s->dashes.size() > 0) cairo_set_dash(cr, s->dashes.data(), s->dashes.size(), 0.0); cairo_set_line_width(cr, s->width); cairo_stroke(cr); if (pattern != NULL) cairo_pattern_destroy(pattern); cairo_restore(cr); }
void SVGStyle::parseNode(xmlNodePtr node, map<string, SVGGradient*> &gradients) { AttributeParser parser; parser.parseNode(node); const map<string, vector<string> > &attributes = parser.getAttributes(); for(map<string, vector<string> >::const_iterator iter = attributes.begin(); iter != attributes.end(); iter++) { const string &attribute = (*iter).first; const vector<string> &values = (*iter).second; for (vector<string>::const_iterator iterValue = values.begin (); iterValue != values.end (); iterValue ++) { const string &valueStr = (*iterValue); const char *value = valueStr.c_str (); bool fParsed = true; if(attribute == "stroke") { SVGGradient *gradient = getGradient(valueStr, gradients); if(gradient) { strokeGradient = gradient; _hasStrokeGradient = true; _hasStroke = true; fParsed = true; } else { fParsed = setStrokeColor(value); } } else if(attribute == "stroke-width") { setStrokeWidth(atof(value)); } else if(attribute == "stroke-opacity") { setStrokeAlpha(atof(value)); } else if(attribute == "stroke-linecap") { fParsed = setLineCap(value); } else if(attribute == "stroke-linejoin") { fParsed = setLineJoin(value); } else if(attribute == "stroke-miterlimit") { setMiterLimit(atof(value)); } else if(attribute == "fill") { SVGGradient *gradient = getGradient(valueStr, gradients); if(gradient) { fillGradient = gradient; _hasFillGradient = true; _hasFill = true; fParsed = true; } else { fParsed = setFillColor(value); } } else if(attribute == "fill-opacity") { setFillAlpha(atof(value)); } else if(attribute == "opacity") { setOpacity(atof(value)); } if (fParsed) { break; } } } }
void CSVGStroke:: update(const CSVGStroke &stroke) { if (stroke.getColorValid()) setColor(stroke.getColor()); if (stroke.getOpacityValid()) setOpacity(stroke.getOpacity()); if (stroke.getWidthValid()) setWidth(stroke.getWidth()); if (stroke.getDashValid()) setDash(stroke.getDash()); if (stroke.getLineCapValid()) setLineCap(stroke.getLineCap()); if (stroke.getLineJoinValid()) setLineJoin(stroke.getLineJoin()); if (stroke.getMitreLimitValid()) setMitreLimit(stroke.getMitreLimit()); }
PolyLineNode::PolyLineNode(const ArgList& args) : VectorNode(args) { args.setMembers(this); if (m_TexCoords.size() > m_Pts.size()) { throw(Exception(AVG_ERR_OUT_OF_RANGE, "Too many texture coordinates in polyline")); } setLineJoin(args.getArgVal<string>("linejoin")); calcPolyLineCumulDist(m_CumulDist, m_Pts, false); }
void CSVGStroke:: setLineJoin(const string &join_str) { CLineJoinType join = LINE_JOIN_TYPE_NONE; if (join_str == "mitre" || join_str == "miter") join = LINE_JOIN_TYPE_MITRE; else if (join_str == "round") join = LINE_JOIN_TYPE_ROUND; else if (join_str == "bevel") join = LINE_JOIN_TYPE_BEVEL; else { CSVGLog() << "Illegal line_join " << join_str; return; } setLineJoin(join); }
void WayRenderer::casing(cairo_t* cr) { if (s->casing_width <= 0.0) return; addWayPath(cr); cairo_save(cr); setLineCap(cr, s->casing_linecap); setLineJoin(cr, s->casing_linejoin); cairo_set_source_rgba(cr, COLOR2RGBA(s->casing_color)); if (s->casing_dashes.size() > 0) cairo_set_dash(cr, s->casing_dashes.data(), s->casing_dashes.size(), 0.0); cairo_set_line_width(cr, s->casing_width*2 + s->width); cairo_stroke(cr); cairo_restore(cr); }
PolygonNode::PolygonNode(const ArgList& args) : FilledVectorNode(args) { args.setMembers(this); if (m_TexCoords.size() > m_Pts.size()+1) { throw(Exception(AVG_ERR_OUT_OF_RANGE, "Too many texture coordinates in polygon")); } if (m_Pts.size() != 0 && m_Pts.size() < 3) { throw(Exception(AVG_ERR_UNSUPPORTED, "A polygon must have min. tree points.")); } if (m_Holes.size() > 0) { for (unsigned int i = 0; i < m_Holes.size(); i++) { if (m_Holes[i].size() < 3) { throw(Exception(AVG_ERR_UNSUPPORTED, "A hole of a polygon must have min. tree points.")); } } } setLineJoin(args.getArgVal<string>("linejoin")); calcPolyLineCumulDist(m_CumulDist, m_Pts, true); }
int Context2D::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QObject::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: changed((*reinterpret_cast< const QImage(*)>(_a[1]))); break; case 1: save(); break; case 2: restore(); break; case 3: scale((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2]))); break; case 4: rotate((*reinterpret_cast< qreal(*)>(_a[1]))); break; case 5: translate((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2]))); break; case 6: transform((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4])),(*reinterpret_cast< qreal(*)>(_a[5])),(*reinterpret_cast< qreal(*)>(_a[6]))); break; case 7: setTransform((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4])),(*reinterpret_cast< qreal(*)>(_a[5])),(*reinterpret_cast< qreal(*)>(_a[6]))); break; case 8: { CanvasGradient _r = createLinearGradient((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4]))); if (_a[0]) *reinterpret_cast< CanvasGradient*>(_a[0]) = _r; } break; case 9: { CanvasGradient _r = createRadialGradient((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4])),(*reinterpret_cast< qreal(*)>(_a[5])),(*reinterpret_cast< qreal(*)>(_a[6]))); if (_a[0]) *reinterpret_cast< CanvasGradient*>(_a[0]) = _r; } break; case 10: clearRect((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4]))); break; case 11: fillRect((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4]))); break; case 12: strokeRect((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4]))); break; case 13: beginPath(); break; case 14: closePath(); break; case 15: moveTo((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2]))); break; case 16: lineTo((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2]))); break; case 17: quadraticCurveTo((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4]))); break; case 18: bezierCurveTo((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4])),(*reinterpret_cast< qreal(*)>(_a[5])),(*reinterpret_cast< qreal(*)>(_a[6]))); break; case 19: arcTo((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4])),(*reinterpret_cast< qreal(*)>(_a[5]))); break; case 20: rect((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4]))); break; case 21: arc((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4])),(*reinterpret_cast< qreal(*)>(_a[5])),(*reinterpret_cast< bool(*)>(_a[6]))); break; case 22: fill(); break; case 23: stroke(); break; case 24: clip(); break; case 25: { bool _r = isPointInPath((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2]))); if (_a[0]) *reinterpret_cast< bool*>(_a[0]) = _r; } break; case 26: drawImage((*reinterpret_cast< DomImage*(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3]))); break; case 27: drawImage((*reinterpret_cast< DomImage*(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4])),(*reinterpret_cast< qreal(*)>(_a[5]))); break; case 28: drawImage((*reinterpret_cast< DomImage*(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4])),(*reinterpret_cast< qreal(*)>(_a[5])),(*reinterpret_cast< qreal(*)>(_a[6])),(*reinterpret_cast< qreal(*)>(_a[7])),(*reinterpret_cast< qreal(*)>(_a[8])),(*reinterpret_cast< qreal(*)>(_a[9]))); break; case 29: { ImageData _r = getImageData((*reinterpret_cast< qreal(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3])),(*reinterpret_cast< qreal(*)>(_a[4]))); if (_a[0]) *reinterpret_cast< ImageData*>(_a[0]) = _r; } break; case 30: putImageData((*reinterpret_cast< ImageData(*)>(_a[1])),(*reinterpret_cast< qreal(*)>(_a[2])),(*reinterpret_cast< qreal(*)>(_a[3]))); break; default: ; } _id -= 31; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< qreal*>(_v) = globalAlpha(); break; case 1: *reinterpret_cast< QString*>(_v) = globalCompositeOperation(); break; case 2: *reinterpret_cast< QVariant*>(_v) = strokeStyle(); break; case 3: *reinterpret_cast< QVariant*>(_v) = fillStyle(); break; case 4: *reinterpret_cast< qreal*>(_v) = lineWidth(); break; case 5: *reinterpret_cast< QString*>(_v) = lineCap(); break; case 6: *reinterpret_cast< QString*>(_v) = lineJoin(); break; case 7: *reinterpret_cast< qreal*>(_v) = miterLimit(); break; case 8: *reinterpret_cast< qreal*>(_v) = shadowOffsetX(); break; case 9: *reinterpret_cast< qreal*>(_v) = shadowOffsetY(); break; case 10: *reinterpret_cast< qreal*>(_v) = shadowBlur(); break; case 11: *reinterpret_cast< QString*>(_v) = shadowColor(); break; } _id -= 12; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setGlobalAlpha(*reinterpret_cast< qreal*>(_v)); break; case 1: setGlobalCompositeOperation(*reinterpret_cast< QString*>(_v)); break; case 2: setStrokeStyle(*reinterpret_cast< QVariant*>(_v)); break; case 3: setFillStyle(*reinterpret_cast< QVariant*>(_v)); break; case 4: setLineWidth(*reinterpret_cast< qreal*>(_v)); break; case 5: setLineCap(*reinterpret_cast< QString*>(_v)); break; case 6: setLineJoin(*reinterpret_cast< QString*>(_v)); break; case 7: setMiterLimit(*reinterpret_cast< qreal*>(_v)); break; case 8: setShadowOffsetX(*reinterpret_cast< qreal*>(_v)); break; case 9: setShadowOffsetY(*reinterpret_cast< qreal*>(_v)); break; case 10: setShadowBlur(*reinterpret_cast< qreal*>(_v)); break; case 11: setShadowColor(*reinterpret_cast< QString*>(_v)); break; } _id -= 12; } else if (_c == QMetaObject::ResetProperty) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 12; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 12; } #endif // QT_NO_PROPERTIES return _id; }