void QSegmentWidget::DrawCylinder(const Cylinder &cyl, const SegmentList &s, const bool erase) { if (!m_pixmap) InitPixmap(); qreal border = 0; QPainter painter(m_pixmap); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.setWindow( -(BM_OSIZE / 2), -(BM_OSIZE / 2), BM_OSIZE, BM_OSIZE); QRectF rco(-cyl.outerRadius, -cyl.outerRadius, (cyl.outerRadius * 2.0)+border, (cyl.outerRadius * 2.0)+border); QRectF rci(-cyl.innerRadius, -cyl.innerRadius, (cyl.innerRadius * 2.0)+border, (cyl.innerRadius * 2.0)+border); QRegion ro(rco.toRect(), QRegion::Rectangle); QRegion ri(rci.toRect(), QRegion::Ellipse); QRegion region = ro.subtracted(ri); painter.setClipRegion(region); if (erase) { painter.setBrush(Qt::NoBrush); painter.setPen(Qt::NoPen); } else { QBrush b(cyl.color); painter.setBrush(b); painter.setPen(QPen(cyl.color.darker(200),border)); } DrawSegments(&painter, s, cyl.outerRadius); }
Pixmap* PixmapFromSdlSurface(SDL_Surface* sf) { Pixmap* p = InitPixmap(sf->w,sf->h,1,8*sf->pitch/sf->w); // memcpy(p->data,sf->pixels,sf->pitch*sf->h); free(p->data); p->data=sf->pixels; return p; }
void QSegmentWidget::paintEvent(QPaintEvent *) { if (!m_pixmap) InitPixmap(); QPainter painter(this); int side = qMin(width(), height()); painter.setViewport((width() - side) / 2, (height() - side) / 2, side, side); painter.setWindow(0, 0, BM_OSIZE, BM_OSIZE); painter.drawPixmap(0, 0, *m_pixmap); // QPainter paint(m_pixmap); DrawCenterText(&painter); }