1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtGui module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#include "qimagepixmapcleanuphooks_p.h"
41#include <qpa/qplatformpixmap.h>
42#include "private/qimage_p.h"
43
44
45QT_BEGIN_NAMESPACE
46
47Q_GLOBAL_STATIC(QImagePixmapCleanupHooks, qt_image_and_pixmap_cleanup_hooks)
48
49QImagePixmapCleanupHooks *QImagePixmapCleanupHooks::instance()
50{
51 return qt_image_and_pixmap_cleanup_hooks();
52}
53
54void QImagePixmapCleanupHooks::addPlatformPixmapModificationHook(_qt_pixmap_cleanup_hook_pmd hook)
55{
56 pixmapModificationHooks.append(t: hook);
57}
58
59void QImagePixmapCleanupHooks::addPlatformPixmapDestructionHook(_qt_pixmap_cleanup_hook_pmd hook)
60{
61 pixmapDestructionHooks.append(t: hook);
62}
63
64
65void QImagePixmapCleanupHooks::addImageHook(_qt_image_cleanup_hook_64 hook)
66{
67 imageHooks.append(t: hook);
68}
69
70void QImagePixmapCleanupHooks::removePlatformPixmapModificationHook(_qt_pixmap_cleanup_hook_pmd hook)
71{
72 pixmapModificationHooks.removeAll(t: hook);
73}
74
75void QImagePixmapCleanupHooks::removePlatformPixmapDestructionHook(_qt_pixmap_cleanup_hook_pmd hook)
76{
77 pixmapDestructionHooks.removeAll(t: hook);
78}
79
80void QImagePixmapCleanupHooks::removeImageHook(_qt_image_cleanup_hook_64 hook)
81{
82 imageHooks.removeAll(t: hook);
83}
84
85void QImagePixmapCleanupHooks::executePlatformPixmapModificationHooks(QPlatformPixmap* pmd)
86{
87 const QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks();
88 // the global destructor for the pixmap and image hooks might have
89 // been called already if the app is "leaking" global
90 // pixmaps/images
91 if (!h)
92 return;
93 for (auto hook : h->pixmapModificationHooks)
94 hook(pmd);
95}
96
97void QImagePixmapCleanupHooks::executePlatformPixmapDestructionHooks(QPlatformPixmap* pmd)
98{
99 const QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks();
100 // the global destructor for the pixmap and image hooks might have
101 // been called already if the app is "leaking" global
102 // pixmaps/images
103 if (!h)
104 return;
105 for (auto hook : h->pixmapDestructionHooks)
106 hook(pmd);
107}
108
109void QImagePixmapCleanupHooks::executeImageHooks(qint64 key)
110{
111 const QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks();
112 // the global destructor for the pixmap and image hooks might have
113 // been called already if the app is "leaking" global
114 // pixmaps/images
115 if (!h)
116 return;
117 for (auto hook : h->imageHooks)
118 hook(key);
119}
120
121
122void QImagePixmapCleanupHooks::enableCleanupHooks(QPlatformPixmap *handle)
123{
124 handle->is_cached = true;
125}
126
127void QImagePixmapCleanupHooks::enableCleanupHooks(const QPixmap &pixmap)
128{
129 enableCleanupHooks(handle: const_cast<QPixmap &>(pixmap).data_ptr().data());
130}
131
132void QImagePixmapCleanupHooks::enableCleanupHooks(const QImage &image)
133{
134 const_cast<QImage &>(image).data_ptr()->is_cached = true;
135}
136
137bool QImagePixmapCleanupHooks::isImageCached(const QImage &image)
138{
139 return const_cast<QImage &>(image).data_ptr()->is_cached;
140}
141
142bool QImagePixmapCleanupHooks::isPixmapCached(const QPixmap &pixmap)
143{
144 return const_cast<QPixmap&>(pixmap).data_ptr().data()->is_cached;
145}
146
147
148
149QT_END_NAMESPACE
150

source code of qtbase/src/gui/image/qimagepixmapcleanuphooks.cpp