16 #define VSTGUI_VERSION_MAJOR 4 17 #define VSTGUI_VERSION_MINOR 6 23 #ifndef __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 24 #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 27 #include <AvailabilityMacros.h> 28 #include <TargetConditionals.h> 36 #define VSTGUI_OPENGL_SUPPORT 0 // there's an implementation, but not yet tested, so this is zero 37 #define VSTGUI_TOUCH_EVENT_HANDLING 1 39 #ifndef MAC_OS_X_VERSION_10_9 40 #error you need at least OSX SDK 10.9 to build vstgui 48 #if !__LP64__ && !defined (MAC_CARBON) 50 #ifndef TARGET_API_MAC_CARBON 51 #define TARGET_API_MAC_CARBON 1 53 #ifndef __CF_USE_FRAMEWORK_INCLUDES__ 54 #define __CF_USE_FRAMEWORK_INCLUDES__ 1 60 #error compiler not supported 62 #if __has_feature (cxx_rvalue_references) == 0 63 #error need cxx_rvalue_references support from compiler 65 #if __has_feature (cxx_range_for) == 0 66 #error need cxx_range_for support from compiler 68 #include <type_traits> 70 #if defined (__clang__) && __clang_major__ > 4 71 #if defined (VSTGUI_WARN_EVERYTHING) && VSTGUI_WARN_EVERYTHING == 1 72 #pragma clang diagnostic warning "-Weverything" 73 #pragma clang diagnostic warning "-Wconversion" 74 #pragma clang diagnostic ignored "-Wreorder" 76 #pragma clang diagnostic warning "-Wunreachable-code" 80 #elif WIN32 || WINDOWS || defined(_WIN32) 84 #include <sdkddkver.h> 85 #if _WIN32_WINNT < 0x601 86 #error unsupported Platform SDK you need at least the Windows 7 Platform SDK to compile VSTGUI 89 #if __cplusplus < 201103L 90 #error compiler not supported 93 #error Visual Studio 2013 or newer needed 95 #include <type_traits> 100 #if !defined(__GNUC__) && _MSC_VER == 1800 101 #define noexcept // only supported since VS 2015 103 #define VSTGUI_DIRECT2D_SUPPORT 1 104 #define DEPRECATED_ATTRIBUTE __declspec(deprecated) 106 #pragma warning(3 : 4189) // local variable is initialized but not referenced 107 #pragma warning(3 : 4702) // unreachable code 108 #pragma warning(3 : 4995) // deprecated 109 #pragma warning(3 : 4431) // missing type specifier - int assumed. Note: C no longer supports default-int 110 #pragma warning(3 : 4254) // conversion from 'type1' to 'type2', possible loss of data 111 #pragma warning(3 : 4388) // signed/unsigned mismatch 114 #if defined (__clang__) && __clang__ 115 #if defined (VSTGUI_WARN_EVERYTHING) && VSTGUI_WARN_EVERYTHING == 1 116 #pragma clang diagnostic warning "-Wconversion" 117 #pragma clang diagnostic ignored "-Wreorder" 119 #pragma clang diagnostic warning "-Wunreachable-code" 127 #elif defined(__linux__) 129 #include <type_traits> 139 #error unsupported compiler 152 #ifndef VSTGUI_ENABLE_DEPRECATED_METHODS 153 #define VSTGUI_ENABLE_DEPRECATED_METHODS 0 156 #ifndef DEPRECATED_ATTRIBUTE 157 #define DEPRECATED_ATTRIBUTE 160 #if VSTGUI_ENABLE_DEPRECATED_METHODS 161 #define VSTGUI_DEPRECATED(x) DEPRECATED_ATTRIBUTE x 163 #define VSTGUI_DEPRECATED(x) 169 #ifndef VSTGUI_OPENGL_SUPPORT 170 #define VSTGUI_OPENGL_SUPPORT 1 173 #ifndef VSTGUI_TOUCH_EVENT_HANDLING 174 #define VSTGUI_TOUCH_EVENT_HANDLING 0 177 #if VSTGUI_ENABLE_DEPRECATED_METHODS 178 #define VSTGUI_OVERRIDE_VMETHOD override 179 #define VSTGUI_FINAL_VMETHOD final 181 #define VSTGUI_OVERRIDE_VMETHOD static_assert (false, "VSTGUI_OVERRIDE_VMETHOD is deprecated, just use override!"); 182 #define VSTGUI_FINAL_VMETHOD static_assert (false, "VSTGUI_FINAL_VMETHOD is deprecated, just use final!"); 188 #define VSTGUI_MAKE_STRING_PRIVATE_DONT_USE(x) # x 189 #define VSTGUI_MAKE_STRING(x) VSTGUI_MAKE_STRING_PRIVATE_DONT_USE(x) 197 #if !defined(NDEBUG) && !defined(DEBUG) 203 #define CLASS_METHODS(name, parent) CBaseObject* newCopy () const override { return new name (*this); } 204 #define CLASS_METHODS_NOCOPY(name, parent) CBaseObject* newCopy () const override { return 0; } 205 #define CLASS_METHODS_VIRTUAL(name, parent) CBaseObject* newCopy () const override = 0; 210 using CCoord = double;
211 using IdStringPtr =
const char*;
212 using UTF8StringPtr =
const char*;
213 using UTF8StringBuffer =
char*;
219 kBigEndianByteOrder = 0,
220 kLittleEndianByteOrder,
221 #if WINDOWS || defined (__LITTLE_ENDIAN__) 222 kNativeByteOrder = kLittleEndianByteOrder
224 kNativeByteOrder = kBigEndianByteOrder
241 virtual void forget () = 0;
242 virtual void remember () = 0;
246 template <
typename T>
260 void forget ()
override {
if (--nbReference == 0) { beforeDelete ();
delete this; } }
263 virtual void beforeDelete () {}
269 using AtomicReferenceCounted = ReferenceCounted<std::atomic<int32_t>>;
270 using NonAtomicReferenceCounted = ReferenceCounted<int32_t>;
289 virtual CMessageResult notify (
CBaseObject* sender, IdStringPtr message) {
return kMessageUnknown; }
293 virtual CBaseObject* newCopy ()
const {
return 0; }
303 inline SharedPointer (I* ptr,
bool remember =
true) noexcept;
308 inline I* operator=(I* ptr) noexcept;
311 inline operator I* ()
const noexcept {
return ptr; }
312 inline I* operator->()
const noexcept {
return ptr; }
314 inline I*
get ()
const noexcept {
return ptr; }
316 template<
class T> T* cast ()
const {
return dynamic_cast<T*
> (ptr); }
324 *
this =
static_cast<I*
> (op.get ());
330 *
this =
static_cast<I*
> (op.get ());
337 *
this = std::move (op);
379 inline SharedPointer<I>::SharedPointer (
const SharedPointer<I>& other) noexcept
388 inline SharedPointer<I>::SharedPointer () noexcept
394 inline SharedPointer<I>::~SharedPointer () noexcept
402 inline SharedPointer<I>::SharedPointer (SharedPointer<I>&& mp) noexcept
405 *
this = std::move (mp);
410 inline SharedPointer<I>& SharedPointer<I>::operator=(SharedPointer<I>&& mp) noexcept
421 inline I* SharedPointer<I>::operator=(I* _ptr) noexcept
436 inline SharedPointer<I>& SharedPointer<I>::operator=(
const SharedPointer<I>& _ptr) noexcept
438 operator= (_ptr.ptr);
444 inline SharedPointer<I> owned (I* p) noexcept {
return SharedPointer<I> (p,
false); }
448 inline SharedPointer<I> shared (I* p) noexcept {
return SharedPointer<I> (p,
true); }
451 template <
class I,
typename ...Args>
452 inline SharedPointer<I> makeOwned (Args&& ...args)
454 return SharedPointer<I> (
new I (std::forward<Args>(args)...),
false);
457 #if VSTGUI_ENABLE_DEPRECATED_METHODS 467 class OwningPointer :
public SharedPointer<I>
471 inline OwningPointer (I* p) : SharedPointer<I> (p, false) {}
472 inline OwningPointer (
const SharedPointer<I>& p) : SharedPointer<I> (p) {}
473 inline OwningPointer (
const OwningPointer<I>& p) : SharedPointer<I> (p) {}
474 inline OwningPointer () : SharedPointer<I> () {}
475 inline I* operator=(I* _ptr)
477 if (_ptr != this->ptr)
480 this->ptr->forget ();
489 template <
typename T,
typename B>
490 inline void setBit (T& storage, B bit,
bool state)
492 static_assert (std::is_integral<T>::value,
"only works for integral types");
493 static_assert (
sizeof (T) >=
sizeof (B),
"bit type is too big");
495 storage |=
static_cast<T
> (bit);
497 storage &= ~(
static_cast<T
> (bit));
501 template <
typename T,
typename B>
502 inline constexpr
bool hasBit (T storage, B bit)
504 static_assert (std::is_integral<T>::value,
"only works for integral types");
505 static_assert (
sizeof (T) >=
sizeof (B),
"bit type is too big");
506 return (storage & static_cast<T> (bit)) ? true :
false;
512 #include "vstguidebug.h" Definition: vstguibase.h:299
Base Object with reference counter.
Definition: vstguibase.h:276
void remember() override
increase refcount
Definition: vstguibase.h:261
Definition: customcontrols.cpp:8
Definition: vstguibase.h:359
Definition: vstguibase.h:247
void forget() override
decrease refcount and delete object if refcount == 0
Definition: vstguibase.h:260
Definition: vstguibase.h:238
virtual int32_t getNbReference() const
get refcount
Definition: vstguibase.h:262