Krita Source Code Documentation
Loading...
Searching...
No Matches
KisResourcesInterface Class Referenceabstract

a provider-like interface class for accessing resource sources in Krita. More...

#include <KisResourcesInterface.h>

+ Inheritance diagram for KisResourcesInterface:

Classes

class  ResourceSourceAdapter
 
class  TypedResourceSourceAdapter
 

Public Member Functions

 KisResourcesInterface ()
 
ResourceSourceAdaptersource (const QString &type) const
 
template<typename T >
TypedResourceSourceAdapter< T > source (const QString &type) const
 
virtual ~KisResourcesInterface ()
 

Protected Member Functions

virtual ResourceSourceAdaptercreateSourceImpl (const QString &type) const =0
 
 KisResourcesInterface (KisResourcesInterfacePrivate *dd)
 

Protected Attributes

QScopedPointer< KisResourcesInterfacePrivated_ptr
 

Detailed Description

a provider-like interface class for accessing resource sources in Krita.

Main differences to KoResourceServer and KisResourceModel:

1) It is a polymorphic class. Therefore, we are not obliged to pass a pointer to the global gui-only resource storage everywhere. Instead, we can create temporary storages and pass them to the strokes, when needed.

2) The class doesn't depend on any specific resource types. Its baseline implementation of resourceInterface->source(type) returns a source working with KoResourceSP only. But when needed, the caller may request a typed version via resourcesInterface->source<KisBrush>(type). It will instantiate a templated wrapper in the caller's object file, not in kritaresources library. It solves linking problem: we have a source for KisBrush objects in kritaresources library, even though this library doesn't link kritabrush.

3) Since strokes may have local storages for the resources, we operate with resources sources using shared pointers, not raw pointers.

Definition at line 40 of file KisResourcesInterface.h.

Constructor & Destructor Documentation

◆ KisResourcesInterface() [1/2]

KisResourcesInterface::KisResourcesInterface ( )

Definition at line 18 of file KisResourcesInterface.cpp.

20{
21}
QScopedPointer< KisResourcesInterfacePrivate > d_ptr

◆ ~KisResourcesInterface()

KisResourcesInterface::~KisResourcesInterface ( )
virtual

Definition at line 28 of file KisResourcesInterface.cpp.

29{
30
31}

◆ KisResourcesInterface() [2/2]

KisResourcesInterface::KisResourcesInterface ( KisResourcesInterfacePrivate * dd)
protected

Definition at line 23 of file KisResourcesInterface.cpp.

24 : d_ptr(dd)
25{
26}

Member Function Documentation

◆ createSourceImpl()

virtual ResourceSourceAdapter * KisResourcesInterface::createSourceImpl ( const QString & type) const
protectedpure virtual

◆ source() [1/2]

KisResourcesInterface::ResourceSourceAdapter & KisResourcesInterface::source ( const QString & type) const

A basic implementation that returns a source for a specific type of the resource. Please take into account that this source object will return un-casted resources of type KoResourceSP. If you want to have a proper resource (in most of the cases), use a server<T>(type) instead.

Definition at line 33 of file KisResourcesInterface.cpp.

34{
35 Q_D(const KisResourcesInterface);
36
37 // use double-locking for fetching the source
38
39 ResourceSourceAdapter *source = 0;
40
41 {
42 QReadLocker l(&d->lock);
43 source = d->findExistingSource(type);
44 if (source) return *source;
45 }
46
47 {
48 QWriteLocker l(&d->lock);
49 source = d->findExistingSource(type);
50 if (source) return *source;
51
53
54 std::unique_ptr<ResourceSourceAdapter> sourcePtr(source);
55 d->sourceAdapters.emplace(type, std::move(sourcePtr));
56 }
57
59 return *source;
60}
a provider-like interface class for accessing resource sources in Krita.
virtual ResourceSourceAdapter * createSourceImpl(const QString &type) const =0
ResourceSourceAdapter & source(const QString &type) const
#define KIS_ASSERT(cond)
Definition kis_assert.h:33

References createSourceImpl(), KIS_ASSERT, and source().

◆ source() [2/2]

template<typename T >
TypedResourceSourceAdapter< T > KisResourcesInterface::source ( const QString & type) const
inline

The main fetcher of resource source for resources of a specific type.

Usage:

auto source = resourceInterface->source<KisBrush>(ResourceType::Brushes);
KisBrushSP brush = source.resourceByMd5(md5)
const QString Brushes

Definition at line 179 of file KisResourcesInterface.h.

179 {
180 return TypedResourceSourceAdapter<T>(&this->source(type));
181 }

References source().

Member Data Documentation

◆ d_ptr

QScopedPointer<KisResourcesInterfacePrivate> KisResourcesInterface::d_ptr
protected

Definition at line 188 of file KisResourcesInterface.h.


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