// ----------------------------------------------------------------------- void GraphicText::paintScheme(QPainter *p) { QWMatrix wm = p->worldMatrix(); QWMatrix Mat (wm.m11(), 0.0, 0.0, wm.m22(), wm.dx() + double(cx) * wm.m11(), wm.dy() + double(cy) * wm.m22()); p->setWorldMatrix(Mat); p->rotate(-Angle); p->drawRect(0, 0, x2, y2); p->setWorldMatrix(wm); }
/*!\overload Draws the formatted text with \a p, at position (\a x, \a y), clipped to \a clipRegion. Colors from the \a cg are used as needed, and if not 0, *\a paper is used as the background brush. Note that the display code is highly optimized to reduce flicker, so passing a brush for \a paper is preferable to simply clearing the area to be painted and then calling this without a brush. This is a convenience function if there's no palette but just a color group available. If you have a palette, pass this instead of \a cg. */ void QSimpleRichText::draw( QPainter* p, int x, int y, const QRegion& clipRegion, const QColorGroup& cg, const QBrush* paper) const { QRect r = clipRegion.boundingRect(); QRegion bg = clipRegion; d->doc->draw(p, x, y, 0, 0, r.x(), r.y(), r.width(), r.height(), bg, cg, QTextOptions( paper, d->linkColor, d->linkUnderline ) ); if (paper) { #ifndef QT_NO_TRANSFORMATIONS QWMatrix wm = p->worldMatrix(); bg.translate( int(wm.dx()), int(wm.dy()) ); #endif p->setClipRegion(bg); if ( paper->pixmap() ) p->drawTiledPixmap( r, *paper->pixmap()); else p->fillRect(r, *paper); p->setClipping( FALSE ); } }
/** * Tests if a point is over a stencils */ int SelectTool::isOverResizeHandle( KivioStencil *pStencil, const double x, const double y ) { double three_pixels = 4.0; int available; QWMatrix m; double w = pStencil->w(); double h = pStencil->h(); double w2 = pStencil->w() / 2.0; double h2 = pStencil->h() / 2.0; m.translate(pStencil->x(), pStencil->y()); m.translate(w2, h2); m.rotate(pStencil->rotation()); m.translate(-w2, -h2); // FIXME: this needs to be optimized!!!! KoPoint tl(0 * m.m11() + 0 * m.m21() + m.dx(), 0 * m.m12() + 0 * m.m22() + m.dy()); KoPoint t(w2 * m.m11() + 0 * m.m21() + m.dx(), w2 * m.m12() + 0 * m.m22() + m.dy()); KoPoint tr(w * m.m11() + 0 * m.m21() + m.dx(), w * m.m12() + 0 * m.m22() + m.dy()); KoPoint r(w * m.m11() + h2 * m.m21() + m.dx(), w * m.m12() + h2 * m.m22() + m.dy()); KoPoint br(w * m.m11() + h * m.m21() + m.dx(), w * m.m12() + h * m.m22() + m.dy()); KoPoint b(w2 * m.m11() + h * m.m21() + m.dx(), w2 * m.m12() + h * m.m22() + m.dy()); KoPoint bl(0 * m.m11() + h * m.m21() + m.dx(), 0 * m.m12() + h * m.m22() + m.dy()); KoPoint l(0 * m.m11() + h2 * m.m21() + m.dx(), 0 * m.m12() + h2 * m.m22() + m.dy()); available = pStencil->resizeHandlePositions(); // Quick reject if( !available ) return 0; // Top left if( available & krhpNW && RESIZE_BOX_TEST( x, y, tl.x(), tl.y() ) ) return 1; // Top if( available & krhpN && RESIZE_BOX_TEST( x, y, t.x(), t.y() ) ) return 2; // Top right if( available & krhpNE && RESIZE_BOX_TEST( x, y, tr.x(), tr.y() ) ) return 3; // Right if( available & krhpE && RESIZE_BOX_TEST( x, y, r.x(), r.y() ) ) return 4; // Bottom right if( available & krhpSE && RESIZE_BOX_TEST( x, y, br.x(), br.y() ) ) return 5; // Bottom if( available & krhpS && RESIZE_BOX_TEST( x, y, b.x(), b.y() ) ) return 6; // Bottom left if( available & krhpSW && RESIZE_BOX_TEST( x, y, bl.x(), bl.y() ) ) return 7; // Left if( available & krhpW && RESIZE_BOX_TEST( x, y, l.x(), l.y() ) ) return 8; // Nothing found return 0; }