[Digikam-devel] extragear/graphics/digikam/libs/widgets/metadata
Marcel Wiesweg
marcel.wiesweg at gmx.de
Mon Dec 25 22:07:40 GMT 2006
SVN commit 616500 by mwiesweg:
Share world map pixmaps between GPS widgets of each sidebar. Saves >5MB memory.
Note (1): This memory for a pixmap is counted for the X.org server process,
not the digikam process.
Note (2): These megabytes were mentioned by someone on digikam-user
when I removed the WDestructiveClose flag from ImageWindow.
Here are the missing megabytes back.
CCMAIL: digikam-devel at kde.org
M +21 -9 worldmapwidget.cpp
M +2 -0 worldmapwidget.h
--- trunk/extragear/graphics/digikam/libs/widgets/metadata/worldmapwidget.cpp #616499:616500
@@ -30,6 +30,7 @@
#include <kstandarddirs.h>
#include <kcursor.h>
#include <klocale.h>
+#include <kstaticdeleter.h>
// Local includes.
@@ -60,26 +61,26 @@
double longitude;
QLabel *latLonPos;
-
- QPixmap worldMap;
+
+ static QPixmap *worldMap;
};
+static KStaticDeleter<QPixmap> pixmapDeleter;
+
+QPixmap *WorldMapWidgetPriv::worldMap = 0;
+
WorldMapWidget::WorldMapWidget(int w, int h, QWidget *parent)
: QScrollView(parent, 0, Qt::WDestructiveClose)
{
d = new WorldMapWidgetPriv;
-
- KGlobal::dirs()->addResourceType("worldmap", KGlobal::dirs()->kde_default("data") + "digikam/data");
- QString directory = KGlobal::dirs()->findResourceDir("worldmap", "worldmap.jpg");
- d->worldMap = QPixmap(directory + "worldmap.jpg");
-
+
setVScrollBarMode(QScrollView::AlwaysOff);
setHScrollBarMode(QScrollView::AlwaysOff);
viewport()->setMouseTracking(true);
viewport()->setPaletteBackgroundColor(colorGroup().background());
setMinimumWidth(w);
setMaximumHeight(h);
- resizeContents(d->worldMap.width(), d->worldMap.height());
+ resizeContents(worldMapPixmap().width(), worldMapPixmap().height());
d->latLonPos = new QLabel(viewport());
d->latLonPos->setMaximumHeight(fontMetrics().height());
@@ -93,6 +94,17 @@
delete d;
}
+QPixmap &WorldMapWidget::worldMapPixmap()
+{
+ if (!d->worldMap)
+ {
+ KGlobal::dirs()->addResourceType("worldmap", KGlobal::dirs()->kde_default("data") + "digikam/data");
+ QString directory = KGlobal::dirs()->findResourceDir("worldmap", "worldmap.jpg");
+ pixmapDeleter.setObject(d->worldMap, new QPixmap(directory + "worldmap.jpg"));
+ }
+ return *d->worldMap;
+}
+
double WorldMapWidget::getLatitude(void)
{
return d->latitude;
@@ -141,7 +153,7 @@
{
if (isEnabled())
{
- p->drawPixmap(x, y, d->worldMap, x, y, w, h);
+ p->drawPixmap(x, y, worldMapPixmap(), x, y, w, h);
p->setPen(QPen(Qt::white, 0, Qt::SolidLine));
p->drawLine(d->xPos, 0, d->xPos, contentsHeight());
p->drawLine(0, d->yPos, contentsWidth(), d->yPos);
--- trunk/extragear/graphics/digikam/libs/widgets/metadata/worldmapwidget.h #616499:616500
@@ -56,6 +56,8 @@
void contentsMouseReleaseEvent ( QMouseEvent * e );
void contentsMouseMoveEvent( QMouseEvent * e );
+ QPixmap &worldMapPixmap();
+
private:
WorldMapWidgetPriv *d;
More information about the Digikam-devel
mailing list