示例#1
0
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);
}
示例#2
0
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;
}
示例#3
0
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);
}