• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdenetwork API Reference
  • KDE Home
  • Contact Us
 

krfb

  • sources
  • kde-4.14
  • kdenetwork
  • krfb
  • krfb
framebuffermanager.cpp
Go to the documentation of this file.
1 /* This file is part of the KDE project
2  Copyright (C) 2009 Collabora Ltd <info@collabora.co.uk>
3  @author George Goldberg <george.goldberg@collabora.co.uk>
4 
5  This program is free software; you can redistribute it and/or
6  modify it under the terms of the GNU General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; see the file COPYING. If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19 */
20 
21 #include "framebuffermanager.h"
22 
23 #include "framebufferplugin.h"
24 #include "krfbconfig.h"
25 
26 #include <KDebug>
27 #include <KGlobal>
28 #include <KServiceTypeTrader>
29 
30 #include <QtCore/QSharedPointer>
31 
32 class FrameBufferManagerStatic
33 {
34 public:
35  FrameBufferManager instance;
36 };
37 
38 K_GLOBAL_STATIC(FrameBufferManagerStatic, frameBufferManagerStatic)
39 
40 FrameBufferManager::FrameBufferManager()
41 {
42  kDebug();
43 
44  loadPlugins();
45 }
46 
47 FrameBufferManager::~FrameBufferManager()
48 {
49  kDebug();
50 }
51 
52 FrameBufferManager *FrameBufferManager::instance()
53 {
54  kDebug();
55 
56  return &frameBufferManagerStatic->instance;
57 }
58 
59 void FrameBufferManager::loadPlugins()
60 {
61  kDebug();
62 
63  // Load the all the plugin factories here, for use later.
64  KService::List offers = KServiceTypeTrader::self()->query("krfb/framebuffer");
65 
66  KService::List::const_iterator iter;
67 
68  for (iter = offers.constBegin(); iter < offers.constEnd(); ++iter) {
69  QString error;
70  KService::Ptr service = *iter;
71 
72  KPluginFactory *factory = KPluginLoader(service->library()).factory();
73 
74  if (!factory) {
75  kWarning() << "KPluginFactory could not load the plugin:" << service->library();
76  continue;
77  }
78 
79  FrameBufferPlugin *plugin = factory->create<FrameBufferPlugin>(this);
80 
81  if (plugin) {
82  kDebug() << "Loaded plugin:" << service->name();
83  m_plugins.insert(service->library(), plugin);
84  } else {
85  kDebug() << error;
86  }
87  }
88 }
89 
90 QSharedPointer<FrameBuffer> FrameBufferManager::frameBuffer(WId id)
91 {
92  kDebug();
93 
94  // See if there is still an existing framebuffer to this WId.
95  if (m_frameBuffers.contains(id)) {
96  QWeakPointer<FrameBuffer> weakFrameBuffer = m_frameBuffers.value(id);
97 
98  if (weakFrameBuffer) {
99  kDebug() << "Found cached frame buffer.";
100  return weakFrameBuffer.toStrongRef();
101  } else {
102  kDebug() << "Found deleted cached frame buffer. Don't use.";
103  m_frameBuffers.remove(id);
104  }
105  }
106 
107  // We don't already have that frame buffer.
108  QMap<QString, FrameBufferPlugin *>::const_iterator iter = m_plugins.constBegin();
109 
110  while (iter != m_plugins.constEnd()) {
111 
112  if (iter.key() == KrfbConfig::preferredFrameBufferPlugin()) {
113  kDebug() << "Using FrameBuffer:" << KrfbConfig::preferredFrameBufferPlugin();
114 
115  QSharedPointer<FrameBuffer> frameBuffer(iter.value()->frameBuffer(id));
116 
117  if (frameBuffer) {
118  m_frameBuffers.insert(id, frameBuffer.toWeakRef());
119 
120  return frameBuffer;
121  }
122  }
123 
124  ++iter;
125  }
126 
127  // No valid framebuffer plugin found.
128  kDebug() << "No valid framebuffer found. returning null.";
129  return QSharedPointer<FrameBuffer>();
130 }
131 
132 
133 #include "framebuffermanager.moc"
134 
FrameBufferManager::frameBuffer
QSharedPointer< FrameBuffer > frameBuffer(WId id)
Definition: framebuffermanager.cpp:90
FrameBufferManager::~FrameBufferManager
virtual ~FrameBufferManager()
Definition: framebuffermanager.cpp:47
QMap::contains
bool contains(const Key &key) const
FrameBufferPlugin
Definition: framebufferplugin.h:32
QMap::constBegin
const_iterator constBegin() const
QMap
KrfbConfig::preferredFrameBufferPlugin
static QString preferredFrameBufferPlugin()
Get Preferred Frame Buffer Plugin.
Definition: krfbconfig.h:91
QWeakPointer::toStrongRef
QSharedPointer< T > toStrongRef() const
framebuffermanager.h
QObject::name
const char * name() const
QSharedPointer< FrameBuffer >
krfbconfig.h
QMap::constEnd
const_iterator constEnd() const
FrameBufferManager
Definition: framebuffermanager.h:38
FrameBufferManager::instance
static FrameBufferManager * instance()
Definition: framebuffermanager.cpp:52
QString
QMap::key
const Key key(const T &value) const
QSharedPointer::toWeakRef
QWeakPointer< T > toWeakRef() const
QWeakPointer
QMap::insert
iterator insert(const Key &key, const T &value)
framebufferplugin.h
QMap::value
const T value(const Key &key) const
QMap::remove
int remove(const Key &key)
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:29:40 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

krfb

Skip menu "krfb"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdenetwork API Reference

Skip menu "kdenetwork API Reference"
  • kget
  • kopete
  •   kopete
  •   libkopete
  • krdc
  • krfb

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal