From 9cecbc01359cfebb4bfff10405b4cdbb0a2039ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Mon, 24 Jun 2013 08:08:55 +0200 Subject: [PATCH] MouseMark effect supports QPainter compositor --- effects/mousemark/mousemark.cpp | 24 ++++++++++++++++++++++++ effects/mousemark/mousemark.h | 1 + 2 files changed, 25 insertions(+) diff --git a/effects/mousemark/mousemark.cpp b/effects/mousemark/mousemark.cpp index ece310ff32..88cee2f5c0 100644 --- a/effects/mousemark/mousemark.cpp +++ b/effects/mousemark/mousemark.cpp @@ -30,6 +30,8 @@ along with this program. If not, see . #include #include +#include + #include #ifdef KWIN_HAVE_XRENDER_COMPOSITING @@ -171,6 +173,28 @@ void MouseMarkEffect::paintScreen(int mask, QRegion region, ScreenPaintData& dat } } #endif + if (effects->compositingType() == QPainterCompositing) { + QPainter *painter = effects->scenePainter(); + painter->save(); + QPen pen(color); + pen.setWidth(width); + painter->setPen(pen); + foreach (const Mark &mark, marks) { + drawMark(painter, mark); + } + drawMark(painter, drawing); + painter->restore(); + } +} + +void MouseMarkEffect::drawMark(QPainter *painter, const Mark &mark) +{ + if (mark.count() <= 1) { + return; + } + for (int i = 0; i < mark.count() - 1; ++i) { + painter->drawLine(mark[i], mark[i+1]); + } } void MouseMarkEffect::slotMouseChanged(const QPoint& pos, const QPoint&, diff --git a/effects/mousemark/mousemark.h b/effects/mousemark/mousemark.h index dac8544524..2f24f7596e 100644 --- a/effects/mousemark/mousemark.h +++ b/effects/mousemark/mousemark.h @@ -59,6 +59,7 @@ private Q_SLOTS: void screenLockingChanged(bool locked); private: typedef QVector< QPoint > Mark; + void drawMark(QPainter *painter, const Mark &mark); static Mark createArrow(QPoint arrow_start, QPoint arrow_end); #ifdef KWIN_HAVE_XRENDER_COMPOSITING void addRect(const QPoint &p1, const QPoint &p2, xcb_rectangle_t *r, xcb_render_color_t *c);