Pencil2D  ff90c0872e88be3bf81c548cd60f01983012ec49
Pencil2D is an animation software for both bitmap and vector graphics. It is free, multi-platform, and open source.
 All Classes Functions
util.h
1 /*
2 
3 Pencil - Traditional Animation Software
4 Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5 Copyright (C) 2012-2017 Matthew Chiawen Chang
6 
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; version 2 of the License.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15 
16 */
17 #ifndef UTIL_H
18 #define UTIL_H
19 
20 #include <cstddef>
21 #include <functional>
22 #include <QTransform>
23 
24 
25 #define SAFE_RELEASE( p ) if ( p ) { delete p; p = nullptr; }
26 #define SAFE_QT_RELEASE( p ) if ( p ) { p->deleteLater(); p = nullptr; }
27 
28 QTransform RectMapTransform( QRectF source, QRectF target );
29 
31 {
32 public:
33  ScopeGuard( std::function< void() > onScopeExit ) { m_onScopeExit = onScopeExit; }
34  ~ScopeGuard() { m_onScopeExit(); }
35 private:
36  std::function< void() > m_onScopeExit;
37 };
38 
39 #define SCOPEGUARD_LINENAME_CAT(name, line) name##line
40 #define SCOPEGUARD_LINENAME(name, line) SCOPEGUARD_LINENAME_CAT(name, line)
41 
42 #define OnScopeExit( callback ) ScopeGuard SCOPEGUARD_LINENAME( myScopeGuard, __LINE__ ) ( [&] { callback; } );
43 
44 
45 #define NULLReturnVoid( p ) if ( p == nullptr ) { return; }
46 #define NULLReturn( p, ret ) if ( p == nullptr ) { return ret; }
47 #define NULLReturnAssert( p ) if ( p == nullptr ) { Q_ASSERT(false); return; }
48 
49 
51 {
52 public:
53  SignalBlocker( QObject* o );
54  ~SignalBlocker();
55 private:
56  QObject* mObject = nullptr;
57  bool mBlocked = false;
58 };
59 
60 
61 #endif // UTIL_H