Krita Source Code Documentation
Loading...
Searching...
No Matches
KisFpsDecoration Class Reference

#include <kis_fps_decoration.h>

+ Inheritance diagram for KisFpsDecoration:

Public Member Functions

void drawDecoration (QPainter &gc, const QRectF &updateRect, const KisCoordinatesConverter *converter, KisCanvas2 *canvas) override
 
 KisFpsDecoration (QPointer< KisView > view)
 
 ~KisFpsDecoration () override
 
- Public Member Functions inherited from KisCanvasDecoration
const QString & id () const
 
 KisCanvasDecoration (const QString &id, QPointer< KisView >parent)
 
virtual void notifyWindowMinimized (bool minimized)
 
void paint (QPainter &gc, const QRectF &updateRect, const KisCoordinatesConverter *converter, KisCanvas2 *canvas)
 
int priority () const
 
virtual void setCanvasWidget (KisCanvasWidgetBase *canvas)
 
void setView (QPointer< KisView > imageView)
 
bool visible () const
 
 ~KisCanvasDecoration () override
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Static Public Attributes

static const QString idTag = "fps_decoration"
 

Private Member Functions

bool draw (const QString &text, QSize &outSize, const KoColorDisplayRendererInterface *displayRenderInterface)
 
QString getText () const
 

Private Attributes

QFont m_font
 
QPixmap m_pixmap
 
QGraphicsPixmapItem * m_pixmapItem
 
QGraphicsScene * m_scene
 
QGraphicsDropShadowEffect * m_shadow
 

Additional Inherited Members

- Public Slots inherited from KisCanvasDecoration
virtual void setVisible (bool v)
 
void toggleVisibility ()
 
- Static Public Member Functions inherited from KisCanvasDecoration
static bool comparePriority (KisCanvasDecorationSP decoration1, KisCanvasDecorationSP decoration2)
 
- Protected Member Functions inherited from KisCanvasDecoration
int decorationThickness () const
 
void setPriority (int value)
 
QPointer< KisViewview () const
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Detailed Description

Definition at line 19 of file kis_fps_decoration.h.

Constructor & Destructor Documentation

◆ KisFpsDecoration()

KisFpsDecoration::KisFpsDecoration ( QPointer< KisView > view)

Definition at line 22 of file kis_fps_decoration.cpp.

24 , m_font(QApplication::font())
25 , m_pixmap(1, 1) // need non-zero pixmap for initial setup
26{
27 setVisible(true);
28
29 m_shadow = new QGraphicsDropShadowEffect(this);
30 m_shadow->setBlurRadius(0.5);
31 m_shadow->setOffset(0);
32 m_shadow->setColor(QColor(0x30, 0x30, 0x30));
33
34 m_scene = new QGraphicsScene(this);
35 m_pixmapItem = m_scene->addPixmap(m_pixmap);
36 m_pixmapItem->setGraphicsEffect(m_shadow);
37}
QPointer< KisView > view() const
virtual void setVisible(bool v)
KisCanvasDecoration(const QString &id, QPointer< KisView >parent)
QGraphicsDropShadowEffect * m_shadow
static const QString idTag
QGraphicsScene * m_scene
QGraphicsPixmapItem * m_pixmapItem

References m_pixmap, m_pixmapItem, m_scene, m_shadow, and KisCanvasDecoration::setVisible().

◆ ~KisFpsDecoration()

KisFpsDecoration::~KisFpsDecoration ( )
override

Definition at line 39 of file kis_fps_decoration.cpp.

40{
41}

Member Function Documentation

◆ draw()

bool KisFpsDecoration::draw ( const QString & text,
QSize & outSize,
const KoColorDisplayRendererInterface * displayRenderInterface )
private

Definition at line 77 of file kis_fps_decoration.cpp.

78{
79 m_pixmap.fill(Qt::transparent);
80
81 const int flags = Qt::AlignLeft | Qt::AlignTop | Qt::TextDontClip;
82 QRect bounds;
83
84 QPainter painter(&m_pixmap);
85 painter.setFont(m_font);
86
87 KoColor c;
88 c.fromQColor(QColor(0xF0, 0xF0, 0xF0));
89
90 painter.setPen(QPen(displayRenderInterface->convertColorToDisplayColorSpace(c)));
91 painter.drawText(m_pixmap.rect().translated(1, 1), flags, text, &bounds);
92
93 outSize = bounds.size() + QSize(1, 1);
94
95 if (m_pixmap.width() < outSize.width() || m_pixmap.height() != outSize.height()) {
96 return false; // pixmap is too small and needs a resize. rarely happens.
97 }
98
99 return true;
100}
virtual QColor convertColorToDisplayColorSpace(const KoColor color) const =0
convertColorToDisplayColorSpace
void fromQColor(const QColor &c)
Convenient function for converting from a QColor.
Definition KoColor.cpp:213
#define bounds(x, a, b)

References bounds, KoColorDisplayRendererInterface::convertColorToDisplayColorSpace(), KoColor::fromQColor(), m_font, and m_pixmap.

◆ drawDecoration()

void KisFpsDecoration::drawDecoration ( QPainter & gc,
const QRectF & updateRect,
const KisCoordinatesConverter * converter,
KisCanvas2 * canvas )
overridevirtual

Implements KisCanvasDecoration.

Definition at line 43 of file kis_fps_decoration.cpp.

44{
45 // we always paint into a pixmap instead of directly into gc, as the latter
46 // approach is known to cause garbled graphics on macOS, Windows, and even
47 // sometimes Linux.
48
49 const QString text = getText();
50
51 // note that USUALLY the pixmap will have the right size. in very rare cases
52 // (e.g. on the very first call) the computed bounding rect will not be right
53 // and the pixmap will need a resize. it is faster to NOT usually calculate
54 // the necessary bounds with an extra call like QFontMetrics::boundingRect()
55 // here, as USUALLY the pixmap will be right and thus an extra call would be
56 // unnecessary overhead.
57
58 QSize size;
59
60 if (!draw(text, size, canvas->displayRendererInterface())) {
61 // the pixmap is too small, we need to make it larger. make it 10% wider
62 // than the measured width to avoid resizing again as soon as the text
63 // gets a bit wider due to different content.
64
65 m_pixmap = QPixmap(size.width() * 1.1f, size.height());
66
67 KIS_ASSERT(draw(text, size, canvas->displayRendererInterface()));
68 }
69
70 QRectF r = m_pixmap.rect();
71 r |= m_shadow->boundingRectFor(r);
72
73 m_pixmapItem->setPixmap(m_pixmap);
74 m_scene->render(&gc, r.translated(20, 20), r);
75}
KoColorDisplayRendererInterface * displayRendererInterface() const override
displayRendererInterface The display renderer interface has a number of color conversion functions wh...
QString getText() const
bool draw(const QString &text, QSize &outSize, const KoColorDisplayRendererInterface *displayRenderInterface)
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References KisCanvas2::displayRendererInterface(), draw(), getText(), KIS_ASSERT, m_pixmap, m_pixmapItem, m_scene, and m_shadow.

◆ getText()

QString KisFpsDecoration::getText ( ) const
private

Definition at line 102 of file kis_fps_decoration.cpp.

103{
104 QStringList lines;
105
106 if (KisOpenglCanvasDebugger::instance()->showFpsOnCanvas()) {
108 lines << QString("Canvas FPS: %1").arg(QString::number(value, 'f', 1));
109 }
110
112
113 if (monitor->haveStrokeSpeedMeasurement()) {
114 lines << QString("Last cursor/brush speed (px/ms): %1/%2%3")
115 .arg(monitor->lastCursorSpeed(), 0, 'f', 1)
116 .arg(monitor->lastRenderingSpeed(), 0, 'f', 1)
117 .arg(monitor->lastStrokeSaturated() ? " (!)" : "");
118 lines << QString("Last brush framerate: %1 fps")
119 .arg(monitor->lastFps(), 0, 'f', 1);
120
121 lines << QString("Average cursor/brush speed (px/ms): %1/%2")
122 .arg(monitor->avgCursorSpeed(), 0, 'f', 1)
123 .arg(monitor->avgRenderingSpeed(), 0, 'f', 1);
124 lines << QString("Average brush framerate: %1 fps")
125 .arg(monitor->avgFps(), 0, 'f', 1);
126 }
127
128 return lines.join('\n');
129}
float value(const T *src, size_t ch)
static KisOpenglCanvasDebugger * instance()
static KisStrokeSpeedMonitor * instance()

References KisOpenglCanvasDebugger::accumulatedFps(), KisStrokeSpeedMonitor::avgCursorSpeed, KisStrokeSpeedMonitor::avgFps, KisStrokeSpeedMonitor::avgRenderingSpeed, KisStrokeSpeedMonitor::haveStrokeSpeedMeasurement(), KisOpenglCanvasDebugger::instance(), KisStrokeSpeedMonitor::instance(), KisStrokeSpeedMonitor::lastCursorSpeed, KisStrokeSpeedMonitor::lastFps, KisStrokeSpeedMonitor::lastRenderingSpeed, KisStrokeSpeedMonitor::lastStrokeSaturated, and value().

Member Data Documentation

◆ idTag

const QString KisFpsDecoration::idTag = "fps_decoration"
static

Definition at line 26 of file kis_fps_decoration.h.

◆ m_font

QFont KisFpsDecoration::m_font
private

Definition at line 32 of file kis_fps_decoration.h.

◆ m_pixmap

QPixmap KisFpsDecoration::m_pixmap
private

Definition at line 33 of file kis_fps_decoration.h.

◆ m_pixmapItem

QGraphicsPixmapItem* KisFpsDecoration::m_pixmapItem
private

Definition at line 36 of file kis_fps_decoration.h.

◆ m_scene

QGraphicsScene* KisFpsDecoration::m_scene
private

Definition at line 35 of file kis_fps_decoration.h.

◆ m_shadow

QGraphicsDropShadowEffect* KisFpsDecoration::m_shadow
private

Definition at line 37 of file kis_fps_decoration.h.


The documentation for this class was generated from the following files: