//---------------------------------------------------------- void ofPath::tessellate(){ generatePolylinesFromCommands(); if(!bNeedsTessellation) return; if(bFill){ tessellator.tessellateToMesh( polylines, windingMode, cachedTessellation); cachedTessellationValid=true; } if(hasOutline() && windingMode!=OF_POLY_WINDING_ODD){ tessellator.tessellateToPolylines( polylines, windingMode, tessellatedContour); } bNeedsTessellation = false; }
//---------------------------------------------------------- void ofPath::draw(){ if(ofGetCurrentRenderer()->rendersPathPrimitives()){ ofGetCurrentRenderer()->draw(*this); }else{ tessellate(); ofColor prevColor; if(bUseShapeColor){ prevColor = ofGetStyle().color; } if(bFill){ if(bUseShapeColor){ ofSetColor(fillColor); } ofGetCurrentRenderer()->draw(cachedTessellation,bUseShapeColor,false,false); } if(hasOutline()){ float lineWidth = ofGetStyle().lineWidth; if(bUseShapeColor){ ofSetColor(strokeColor); } ofSetLineWidth( strokeWidth ); vector<ofPolyline> & polys = getOutline(); for(int i=0;i<(int)polys.size();i++){ ofGetCurrentRenderer()->draw(polys[i]); } ofSetLineWidth(lineWidth); } if(bUseShapeColor){ ofSetColor(prevColor); } } }
void RenderWidget::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset) { if (!shouldPaint(paintInfo, paintOffset)) return; LayoutPoint adjustedPaintOffset = paintOffset + location(); if (hasBoxDecorations() && (paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseSelection)) paintBoxDecorations(paintInfo, adjustedPaintOffset); if (paintInfo.phase == PaintPhaseMask) { paintMask(paintInfo, adjustedPaintOffset); return; } if ((paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhaseSelfOutline) && hasOutline()) paintOutline(paintInfo, LayoutRect(adjustedPaintOffset, size())); if (paintInfo.phase != PaintPhaseForeground) return; #if PLATFORM(MAC) if (style().highlight() != nullAtom && !paintInfo.context->paintingDisabled()) paintCustomHighlight(paintOffset, style().highlight(), true); #endif if (style().hasBorderRadius()) { LayoutRect borderRect = LayoutRect(adjustedPaintOffset, size()); if (borderRect.isEmpty()) return; // Push a clip if we have a border radius, since we want to round the foreground content that gets painted. paintInfo.context->save(); RoundedRect roundedInnerRect = style().getRoundedInnerBorderFor(borderRect, paddingTop() + borderTop(), paddingBottom() + borderBottom(), paddingLeft() + borderLeft(), paddingRight() + borderRight(), true, true); clipRoundedInnerRect(paintInfo.context, borderRect, roundedInnerRect); } if (m_widget) paintContents(paintInfo, paintOffset); if (style().hasBorderRadius()) paintInfo.context->restore(); // Paint a partially transparent wash over selected widgets. if (isSelected() && !document().printing()) { // FIXME: selectionRect() is in absolute, not painting coordinates. paintInfo.context->fillRect(pixelSnappedIntRect(selectionRect()), selectionBackgroundColor(), style().colorSpace()); } if (hasLayer() && layer()->canResize()) layer()->paintResizer(paintInfo.context, roundedIntPoint(adjustedPaintOffset), paintInfo.rect); }