source: trunk/src/gui/image/qimagepixmapcleanuphooks.cpp@ 561

Last change on this file since 561 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

  • Property svn:eol-style set to native
File size: 4.8 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtGui module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "qimagepixmapcleanuphooks_p.h"
43#include "private/qpixmapdata_p.h"
44#include "private/qimage_p.h"
45
46
47QT_BEGIN_NAMESPACE
48
49// Legacy, single instance hooks: ### Qt 5: remove
50typedef void (*_qt_pixmap_cleanup_hook)(int);
51typedef void (*_qt_pixmap_cleanup_hook_64)(qint64);
52typedef void (*_qt_image_cleanup_hook)(int);
53Q_GUI_EXPORT _qt_pixmap_cleanup_hook qt_pixmap_cleanup_hook = 0;
54Q_GUI_EXPORT _qt_pixmap_cleanup_hook_64 qt_pixmap_cleanup_hook_64 = 0;
55Q_GUI_EXPORT _qt_image_cleanup_hook qt_image_cleanup_hook = 0;
56Q_GUI_EXPORT _qt_image_cleanup_hook_64 qt_image_cleanup_hook_64 = 0;
57
58Q_GLOBAL_STATIC(QImagePixmapCleanupHooks, qt_image_and_pixmap_cleanup_hooks)
59
60QImagePixmapCleanupHooks *QImagePixmapCleanupHooks::instance()
61{
62 return qt_image_and_pixmap_cleanup_hooks();
63}
64
65void QImagePixmapCleanupHooks::addPixmapModificationHook(_qt_pixmap_cleanup_hook_pm hook)
66{
67 pixmapModificationHooks.append(hook);
68}
69
70void QImagePixmapCleanupHooks::addPixmapDestructionHook(_qt_pixmap_cleanup_hook_pm hook)
71{
72 pixmapDestructionHooks.append(hook);
73}
74
75
76void QImagePixmapCleanupHooks::addImageHook(_qt_image_cleanup_hook_64 hook)
77{
78 imageHooks.append(hook);
79}
80
81void QImagePixmapCleanupHooks::removePixmapModificationHook(_qt_pixmap_cleanup_hook_pm hook)
82{
83 pixmapModificationHooks.removeAll(hook);
84}
85
86void QImagePixmapCleanupHooks::removePixmapDestructionHook(_qt_pixmap_cleanup_hook_pm hook)
87{
88 pixmapDestructionHooks.removeAll(hook);
89}
90
91void QImagePixmapCleanupHooks::removeImageHook(_qt_image_cleanup_hook_64 hook)
92{
93 imageHooks.removeAll(hook);
94}
95
96void QImagePixmapCleanupHooks::executePixmapModificationHooks(QPixmap* pm)
97{
98 QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks();
99 for (int i = 0; i < h->pixmapModificationHooks.count(); ++i)
100 h->pixmapModificationHooks[i](pm);
101
102 if (qt_pixmap_cleanup_hook_64)
103 qt_pixmap_cleanup_hook_64(pm->cacheKey());
104}
105
106void QImagePixmapCleanupHooks::executePixmapDestructionHooks(QPixmap* pm)
107{
108 QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks();
109 for (int i = 0; i < h->pixmapDestructionHooks.count(); ++i)
110 h->pixmapDestructionHooks[i](pm);
111
112 if (qt_pixmap_cleanup_hook_64)
113 qt_pixmap_cleanup_hook_64(pm->cacheKey());
114}
115
116void QImagePixmapCleanupHooks::executeImageHooks(qint64 key)
117{
118 for (int i = 0; i < qt_image_and_pixmap_cleanup_hooks()->imageHooks.count(); ++i)
119 qt_image_and_pixmap_cleanup_hooks()->imageHooks[i](key);
120
121 if (qt_image_cleanup_hook_64)
122 qt_image_cleanup_hook_64(key);
123}
124
125void QImagePixmapCleanupHooks::enableCleanupHooks(const QPixmap &pixmap)
126{
127 enableCleanupHooks(const_cast<QPixmap &>(pixmap).data_ptr().data());
128}
129
130void QImagePixmapCleanupHooks::enableCleanupHooks(QPixmapData *pixmapData)
131{
132 pixmapData->is_cached = true;
133}
134
135void QImagePixmapCleanupHooks::enableCleanupHooks(const QImage &image)
136{
137 const_cast<QImage &>(image).data_ptr()->is_cached = true;
138}
139
140QT_END_NAMESPACE
Note: See TracBrowser for help on using the repository browser.