ShowFPS effect supports QPainter Compositing
This commit is contained in:
parent
dec41bbad8
commit
79358541ea
2 changed files with 63 additions and 0 deletions
|
@ -168,6 +168,9 @@ void ShowFpsEffect::paintScreen(int mask, QRegion region, ScreenPaintData& data)
|
||||||
XSync(display(), False); // make sure all rendering is done
|
XSync(display(), False); // make sure all rendering is done
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (effects->compositingType() == QPainterCompositing) {
|
||||||
|
paintQPainter(fps);
|
||||||
|
}
|
||||||
m_noBenchmark->render(infiniteRegion(), 1.0, alpha);
|
m_noBenchmark->render(infiniteRegion(), 1.0, alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,6 +308,39 @@ void ShowFpsEffect::paintXrender(int fps)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void ShowFpsEffect::paintQPainter(int fps)
|
||||||
|
{
|
||||||
|
QPainter *painter = effects->scenePainter();
|
||||||
|
painter->save();
|
||||||
|
|
||||||
|
QColor color(255, 255, 255);
|
||||||
|
color.setAlphaF(alpha);
|
||||||
|
|
||||||
|
painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
|
||||||
|
painter->fillRect(x, y, 2 * NUM_PAINTS + FPS_WIDTH, MAX_TIME, color);
|
||||||
|
color.setRed(0);
|
||||||
|
color.setGreen(0);
|
||||||
|
painter->fillRect(x, y + MAX_TIME - fps, FPS_WIDTH, fps, color);
|
||||||
|
|
||||||
|
color.setBlue(0);
|
||||||
|
for (int i = 10; i < MAX_TIME; i += 10) {
|
||||||
|
painter->setPen(color);
|
||||||
|
painter->drawLine(x, y + MAX_TIME - i, x + FPS_WIDTH, y + MAX_TIME - i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Paint FPS graph
|
||||||
|
paintFPSGraph(x + FPS_WIDTH, y + MAX_TIME - 1);
|
||||||
|
|
||||||
|
// Paint amount of rendered pixels graph
|
||||||
|
paintDrawSizeGraph(x + FPS_WIDTH + NUM_PAINTS, y + MAX_TIME - 1);
|
||||||
|
|
||||||
|
// Paint FPS numerical value
|
||||||
|
painter->setPen(Qt::black);
|
||||||
|
painter->drawText(fpsTextRect, textAlign, QString::number(fps));
|
||||||
|
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
|
|
||||||
void ShowFpsEffect::paintFPSGraph(int x, int y)
|
void ShowFpsEffect::paintFPSGraph(int x, int y)
|
||||||
{
|
{
|
||||||
// Paint FPS graph
|
// Paint FPS graph
|
||||||
|
@ -457,6 +493,32 @@ void ShowFpsEffect::paintGraph(int x, int y, QList<int> values, QList<int> lines
|
||||||
XCB_RENDER_PICTURE_NONE, effects->xrenderBufferPicture(), 0, 0, 0, 0, x, y, values.count(), MAX_TIME);
|
XCB_RENDER_PICTURE_NONE, effects->xrenderBufferPicture(), 0, 0, 0, 0, x, y, values.count(), MAX_TIME);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (effects->compositingType() == QPainterCompositing) {
|
||||||
|
QPainter *painter = effects->scenePainter();
|
||||||
|
painter->setPen(Qt::black);
|
||||||
|
// First draw the lines
|
||||||
|
foreach (int h, lines) {
|
||||||
|
painter->drawLine(x, y - h, x + values.count(), y - h);
|
||||||
|
}
|
||||||
|
QColor color(0, 0, 0);
|
||||||
|
color.setAlphaF(alpha);
|
||||||
|
for (int i = 0; i < values.count(); i++) {
|
||||||
|
int value = values[ i ];
|
||||||
|
if (colorize) {
|
||||||
|
if (value <= 10) {
|
||||||
|
color = QColor(0, 255, 0);
|
||||||
|
} else if (value <= 20) {
|
||||||
|
color = QColor(255, 255, 0);
|
||||||
|
} else if (value <= 50) {
|
||||||
|
color = QColor(255, 0, 0);
|
||||||
|
} else {
|
||||||
|
color = QColor(0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
painter->setPen(color);
|
||||||
|
painter->drawLine(x + values.count() - i, y, x + values.count() - i, y - value);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowFpsEffect::postPaintScreen()
|
void ShowFpsEffect::postPaintScreen()
|
||||||
|
|
|
@ -77,6 +77,7 @@ private:
|
||||||
#ifdef KWIN_HAVE_XRENDER_COMPOSITING
|
#ifdef KWIN_HAVE_XRENDER_COMPOSITING
|
||||||
void paintXrender(int fps);
|
void paintXrender(int fps);
|
||||||
#endif
|
#endif
|
||||||
|
void paintQPainter(int fps);
|
||||||
void paintFPSGraph(int x, int y);
|
void paintFPSGraph(int x, int y);
|
||||||
void paintDrawSizeGraph(int x, int y);
|
void paintDrawSizeGraph(int x, int y);
|
||||||
void paintGraph(int x, int y, QList<int> values, QList<int> lines, bool colorize);
|
void paintGraph(int x, int y, QList<int> values, QList<int> lines, bool colorize);
|
||||||
|
|
Loading…
Reference in a new issue