void CEllipseContainer::Render(agg::rendering_buffer &buffer) { if (!m_vec.size()) { return; } agg::pixfmt_bgr24 pixfmt(buffer); typedef agg::renderer_base<agg::pixfmt_bgr24> renbase; typedef agg::renderer_scanline_aa_solid<renbase> render_solid; renbase rbase(pixfmt); render_solid renderSolid(rbase); rbase.clear(agg::rgba8(255, 255, 255)); agg::rasterizer_scanline_aa<> ras; for (EllipseIterator first = m_vec.begin(); first != m_vec.end(); ++first) { ras.add_path(*(*first)); } agg::path_storage line; CEllipseCtrl *ell = m_vec[0]; line.move_to(ell->GetBase().m_x, ell->GetBase().m_y); for(unsigned int i = 1; i < m_vec.size(); ++i) { ell = m_vec[i]; line.line_to(ell->GetBase().m_x, ell->GetBase().m_y); } agg::conv_stroke<agg::path_storage> strokeLine(line); strokeLine.width(1.0); ras.add_path(strokeLine); renderSolid.color(agg::rgba8(255, 0, 0)); agg::scanline_u8 sl; agg::render_scanlines(ras, sl, renderSolid); }
void strokeLine (const Vec2f& p0, const Vec2f& p1, U32 abgr) { strokeLine(Vec4f(p0, 0.0f, 1.0f), Vec4f(p1, 0.0f, 1.0f), abgr); }
void QCosmeticStroker::setup() { blend = state->penData.blend; if (state->clip && state->clip->enabled && state->clip->hasRectClip && !state->clip->clipRect.isEmpty()) { clip &= state->clip->clipRect; blend = state->penData.unclipped_blend; } int strokeSelection = 0; if (blend == state->penData.unclipped_blend && state->penData.type == QSpanData::Solid && (state->penData.rasterBuffer->format == QImage::Format_ARGB32_Premultiplied || state->penData.rasterBuffer->format == QImage::Format_RGB32) && state->compositionMode() == QPainter::CompositionMode_SourceOver) strokeSelection |= FastDraw; if (state->renderHints & QPainter::Antialiasing) strokeSelection |= AntiAliased; const QVector<qreal> &penPattern = state->lastPen.dashPattern(); if (penPattern.isEmpty()) { Q_ASSERT(!pattern && !reversePattern); pattern = 0; reversePattern = 0; patternLength = 0; patternSize = 0; } else { pattern = (int *)malloc(penPattern.size()*sizeof(int)); reversePattern = (int *)malloc(penPattern.size()*sizeof(int)); patternSize = penPattern.size(); patternLength = 0; for (int i = 0; i < patternSize; ++i) { patternLength += (int) qMax(1. , penPattern.at(i)*64.); pattern[i] = patternLength; } patternLength = 0; for (int i = 0; i < patternSize; ++i) { patternLength += (int) qMax(1., penPattern.at(patternSize - 1 - i)*64.); reversePattern[i] = patternLength; } strokeSelection |= Dashed; // qDebug() << "setup: size=" << patternSize << "length=" << patternLength/64.; } stroke = strokeLine(strokeSelection); qreal width = state->lastPen.widthF(); if (width == 0) opacity = 256; else if (state->lastPen.isCosmetic()) opacity = (int) 256*width; else opacity = (int) 256*width*state->txscale; opacity = qBound(0, opacity, 256); drawCaps = state->lastPen.capStyle() != Qt::FlatCap; if (strokeSelection & FastDraw) { color = INTERPOLATE_PIXEL_256(state->penData.solid.color, opacity, 0, 0); QRasterBuffer *buffer = state->penData.rasterBuffer; pixels = (uint *)buffer->buffer(); ppl = buffer->bytesPerLine()>>2; }