Search for usage in LXR

#include <KGameRenderer>

Inheritance diagram for KGameRenderer:

Public Types

typedef QFlags< StrategyStrategies
enum  Strategy { UseDiskCache = 1 << 0 , UseRenderingThreads = 1 << 1 }


const KGameThemetheme
- Properties inherited from QObject


void readOnlyProperty ()
void themeChanged (const KGameTheme *theme)

Public Member Functions

 KGameRenderer (KGameTheme *theme, unsigned cacheSize=0)
 KGameRenderer (KGameThemeProvider *prov, unsigned cacheSize=0)
 ~KGameRenderer () override
QRectF boundsOnSprite (const QString &key, int frame=-1) const
int frameBaseIndex () const
int frameCount (const QString &key) const
QString frameSuffix () const
void setFrameBaseIndex (int frameBaseIndex)
void setFrameSuffix (const QString &suffix)
void setStrategyEnabled (Strategy strategy, bool enabled=true)
bool spriteExists (const QString &key) const
QPixmap spritePixmap (const QString &key, QSize size, int frame=-1, const QHash< QColor, QColor > &customColors=(QHash< QColor, QColor >())) const
Strategies strategies () const
const KGameThemetheme () const
KGameThemeProviderthemeProvider () const
- Public Member Functions inherited from QObject
 QObject (QObject *parent)
QBindable< QStringbindableObjectName ()
bool blockSignals (bool block)
const QObjectListchildren () const const
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const const
void deleteLater ()
void destroyed (QObject *obj)
bool disconnect (const char *signal, const QObject *receiver, const char *method) const const
bool disconnect (const QObject *receiver, const char *method) const const
void dumpObjectInfo () const const
void dumpObjectTree () const const
QList< QByteArraydynamicPropertyNames () const const
virtual bool event (QEvent *e)
virtual bool eventFilter (QObject *watched, QEvent *event)
findChild (const QString &name, Qt::FindChildOptions options) const const
QList< T > findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const
QList< T > findChildren (const QString &name, Qt::FindChildOptions options) const const
QList< T > findChildren (Qt::FindChildOptions options) const const
bool inherits (const char *className) const const
void installEventFilter (QObject *filterObj)
bool isQuickItemType () const const
bool isWidgetType () const const
bool isWindowType () const const
void killTimer (int id)
virtual const QMetaObjectmetaObject () const const
void moveToThread (QThread *targetThread)
QString objectName () const const
void objectNameChanged (const QString &objectName)
QObjectparent () const const
QVariant property (const char *name) const const
 Q_CLASSINFO (Name, Value)
 Q_ENUM (...)
 Q_ENUM_NS (...)
 Q_ENUMS (...)
 Q_FLAG (...)
 Q_FLAG_NS (...)
 Q_FLAGS (...)
qobject_cast (const QObject *object)
qobject_cast (QObject *object)
void removeEventFilter (QObject *obj)
void setObjectName (const QString &name)
void setObjectName (QAnyStringView name)
void setParent (QObject *parent)
bool setProperty (const char *name, const QVariant &value)
bool setProperty (const char *name, QVariant &&value)
bool signalsBlocked () const const
int startTimer (int interval, Qt::TimerType timerType)
int startTimer (std::chrono::milliseconds interval, Qt::TimerType timerType)
QThreadthread () const const

Additional Inherited Members

- Static Public Member Functions inherited from QObject
QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type)
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, Functor functor)
bool disconnect (const QMetaObject::Connection &connection)
bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method)
bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
bool disconnect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
QString tr (const char *sourceText, const char *disambiguation, int n)
- Public Attributes inherited from QObject
typedef QObjectList
- Protected Member Functions inherited from QObject
virtual void childEvent (QChildEvent *event)
virtual void connectNotify (const QMetaMethod &signal)
virtual void customEvent (QEvent *event)
virtual void disconnectNotify (const QMetaMethod &signal)
bool isSignalConnected (const QMetaMethod &signal) const const
int receivers (const char *signal) const const
QObjectsender () const const
int senderSignalIndex () const const
virtual void timerEvent (QTimerEvent *event)

Detailed Description

Cache-enabled rendering of SVG themes.

KGameRenderer is a light-weight rendering framework for the rendering of SVG themes (as represented by KGameTheme) into pixmap caches.


  • Themes in the context of KGameRenderer are KGameTheme instances. The theme selection by a KGameRenderer can be managed by a KGameThemeProvider.
  • A sprite is either a single pixmap ("non-animated sprites") or a sequence of pixmaps which are shown consecutively to produce an animation ("animated sprites"). Non-animated sprites correspond to a single element with the same key in the SVG theme file. The element keys for the pixmaps of an animated sprite are produced by appending the frameSuffix() to the sprite key.

Access to the pixmaps

Sprite pixmaps can be retrieved from KGameRenderer in the main thread using the synchronous KGameRenderer::spritePixmap() method. However, it is highly recommended to use the asynchronous interface provided by the interface class KGameRendererClient. A client corresponds to one pixmap and registers itself with the corresponding KGameRenderer instance to get notified when a new pixmap is available.

For QGraphicsView-based applications, the KGameRenderedItem class provides a QGraphicsPixmapItem which is a KGameRendererClient and displays the pixmap for a given sprite.

Rendering strategy

For each theme, KGameRenderer keeps two caches around: an in-process cache of QPixmaps, and a disk cache containing QImages (powered by KImageCache). You therefore will not need to implement any caching for the pixmaps provided by KGameRenderer.

When requests from a KGameRendererClient cannot be served immediately because the requested sprite is not in the caches, a rendering request is sent to a worker thread.

Support for legacy themes

When porting applications to KGameRenderer, you probably have to support the format of existing themes. KGameRenderer provides the frameBaseIndex() and frameSuffix() properties for this purpose. It is recommended not to change these properties in new applications.


Definition at line 83 of file kgamerenderer.h.

Member Typedef Documentation

◆ Strategies

Stores a combination of Strategy values.

Definition at line 107 of file kgamerenderer.h.

Member Enumeration Documentation

◆ Strategy

Describes the various strategies which KGameRenderer can use to speed up rendering.

See also

If set, pixmaps will be cached in a shared disk cache (using KSharedDataCache).

This is especially useful for complex SVG themes because KGameRenderer will not load the SVG if all needed pixmaps are available from the disk cache.


If set, pixmap requests from KGameRendererClients will be handled asynchronously if possible.

This is especially useful when many clients are requesting complex pixmaps at one time.

Definition at line 93 of file kgamerenderer.h.

Property Documentation

◆ theme

const KGameTheme * KGameRenderer::theme

Definition at line 86 of file kgamerenderer.h.

◆ themeProvider

KGameThemeProvider * KGameRenderer::themeProvider

Definition at line 87 of file kgamerenderer.h.

Constructor & Destructor Documentation

◆ KGameRenderer() [1/2]

KGameRenderer::KGameRenderer ( KGameThemeProvider * prov,
unsigned cacheSize = 0 )

Constructs a new KGameRenderer that renders prov->currentTheme().

provthe theme provider
cacheSizethe cache size in megabytes (if not given, a sane default is used)
This constructor may only be called from the main thread.

Definition at line 49 of file kgamerenderer.cpp.

◆ KGameRenderer() [2/2]

KGameRenderer::KGameRenderer ( KGameTheme * theme,
unsigned cacheSize = 0 )

overload that allows to use KGameRenderer without a theme provider (useful when there is only one theme)

Takes ownership of theme.

Definition at line 68 of file kgamerenderer.cpp.

◆ ~KGameRenderer()

KGameRenderer::~KGameRenderer ( )

Deletes this KGameRenderer instance, as well as all clients using it.

Definition at line 73 of file kgamerenderer.cpp.

Member Function Documentation

◆ boundsOnSprite()

QRectF KGameRenderer::boundsOnSprite ( const QString & key,
int frame = -1 ) const
the bounding rectangle of the sprite with this key This is equal to QSvgRenderer::boundsOnElement() of the corresponding SVG element.

Definition at line 315 of file kgamerenderer.cpp.

◆ frameBaseIndex()

int KGameRenderer::frameBaseIndex ( ) const
the frame base index.
See also

Definition at line 86 of file kgamerenderer.cpp.

◆ frameCount()

int KGameRenderer::frameCount ( const QString & key) const
the count of frames available for the sprite with this key If this sprite is not animated (i.e. there are no SVG elements for any frames), this method returns 0. If the sprite does not exist at all, -1 is returned.

If the sprite is animated, the method counts frames starting at zero (unless you change the frameBaseIndex()), and returns the number of frames for which corresponding elements exist in the SVG file.

For example, if the SVG contains the elements "foo_0", "foo_1" and "foo_3", frameCount("foo") returns 2 for the default frame suffix. (The element "foo_3" is ignored because "foo_2" is missing.)

Definition at line 266 of file kgamerenderer.cpp.

◆ frameSuffix()

QString KGameRenderer::frameSuffix ( ) const
the frame suffix.
See also

Definition at line 100 of file kgamerenderer.cpp.

◆ readOnlyProperty

void KGameRenderer::readOnlyProperty ( )

This signal is never emitted.

It is provided because QML likes to complain about properties without NOTIFY signals, even readonly ones.

◆ setFrameBaseIndex()

void KGameRenderer::setFrameBaseIndex ( int frameBaseIndex)

Sets the frame base index, i.e.

the lowest frame index. Usually, frame numbering starts at zero, so the frame base index is zero.

For example, if you set the frame base index to 42, and use the default frame suffix, the 3 frames of an animated sprite "foo" are provided by the SVG elements "foo_42", "foo_43" and "foo_44".

It is recommended not to alter the frame base index unless you need to support legacy themes.

Definition at line 93 of file kgamerenderer.cpp.

◆ setFrameSuffix()

void KGameRenderer::setFrameSuffix ( const QString & suffix)

Sets the frame suffix.

This suffix will be added to a sprite key to create the corresponding SVG element key, after any occurrence of "%1" in the suffix has been replaced by the frame number.

Giving a suffix which does not include "%1" will reset to the default suffix "_%1".

For example, if the frame suffix is set to "_%1" (the default), the SVG element key for the frame no. 23 of the sprite "foo" is "foo_23".

Frame numbering starts at zero unless you setFrameBaseIndex().

Definition at line 107 of file kgamerenderer.cpp.

◆ setStrategyEnabled()

void KGameRenderer::setStrategyEnabled ( KGameRenderer::Strategy strategy,
bool enabled = true )

Enables/disables an optimization strategy for this renderer.

By default, both the UseDiskCache and the UseRenderingThreads strategies are enabled. This is a sane default for 99% of all games. You might only want to disable optimizations if the graphics are so simple that the optimizations create an overhead in your special case.

If you disable UseDiskCache, you should do so before setTheme(), because changes to UseDiskCache cause a full theme reload.

Definition at line 121 of file kgamerenderer.cpp.

◆ spriteExists()

bool KGameRenderer::spriteExists ( const QString & key) const
if the sprite with the given key exists This is the same as
renderer.frameCount(key) >= 0

Definition at line 360 of file kgamerenderer.cpp.

◆ spritePixmap()

QPixmap KGameRenderer::spritePixmap ( const QString & key,
QSize size,
int frame = -1,
const QHash< QColor, QColor > & customColors = (QHash<QColorQColor>()) ) const
a rendered pixmap
keythe key of the sprite
sizethe size of the resulting pixmap
framethe number of the frame which you want
customColorsthe custom color replacements for this client. That is, for each entry in this has, the key color will be replaced by its value if it is encountered in the sprite.
For non-animated frames, set frame to -1 or omit it.
Custom colors increase the rendering time considerably, so use this feature only if you really need its flexibility.

Definition at line 367 of file kgamerenderer.cpp.

◆ strategies()

KGameRenderer::Strategies KGameRenderer::strategies ( ) const
the optimization strategies used by this renderer
See also

Definition at line 114 of file kgamerenderer.cpp.

◆ theme()

const KGameTheme * KGameRenderer::theme ( ) const
the KGameTheme instance used by this renderer

Definition at line 229 of file kgamerenderer.cpp.

◆ themeProvider()

KGameThemeProvider * KGameRenderer::themeProvider ( ) const
the KGameThemeProvider instance used by this renderer, or 0 if the renderer was created with a single static theme

Definition at line 240 of file kgamerenderer.cpp.

The documentation for this class was generated from the following files:
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:16:50 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.