diff options
Diffstat (limited to 'bindings/cpp')
-rw-r--r-- | bindings/cpp/include/.clang-tidy | 2 | ||||
-rw-r--r-- | bindings/cpp/include/pugl/cairo.hpp | 4 | ||||
-rw-r--r-- | bindings/cpp/include/pugl/gl.hpp | 6 | ||||
-rw-r--r-- | bindings/cpp/include/pugl/pugl.hpp | 80 | ||||
-rw-r--r-- | bindings/cpp/include/pugl/stub.hpp | 4 | ||||
-rw-r--r-- | bindings/cpp/include/pugl/vulkan.hpp | 6 | ||||
-rw-r--r-- | bindings/cpp/meson.build | 14 | ||||
-rw-r--r-- | bindings/cpp/test/headers/.clang-tidy | 26 | ||||
-rw-r--r-- | bindings/cpp/test/headers/meson.build | 39 | ||||
-rw-r--r-- | bindings/cpp/test/headers/test_headers.cpp | 20 |
10 files changed, 168 insertions, 33 deletions
diff --git a/bindings/cpp/include/.clang-tidy b/bindings/cpp/include/.clang-tidy index b7cee8e..f31247a 100644 --- a/bindings/cpp/include/.clang-tidy +++ b/bindings/cpp/include/.clang-tidy @@ -1,4 +1,4 @@ -# Copyright 2020-2022 David Robillard <d@drobilla.net> +# Copyright 2020-2024 David Robillard <d@drobilla.net> # SPDX-License-Identifier: 0BSD OR ISC Checks: > diff --git a/bindings/cpp/include/pugl/cairo.hpp b/bindings/cpp/include/pugl/cairo.hpp index e619412..4a51f96 100644 --- a/bindings/cpp/include/pugl/cairo.hpp +++ b/bindings/cpp/include/pugl/cairo.hpp @@ -4,8 +4,8 @@ #ifndef PUGL_CAIRO_HPP #define PUGL_CAIRO_HPP -#include "pugl/cairo.h" -#include "pugl/pugl.h" +#include <pugl/cairo.h> +#include <pugl/pugl.h> namespace pugl { diff --git a/bindings/cpp/include/pugl/gl.hpp b/bindings/cpp/include/pugl/gl.hpp index 7c361e6..5aa5ca5 100644 --- a/bindings/cpp/include/pugl/gl.hpp +++ b/bindings/cpp/include/pugl/gl.hpp @@ -4,9 +4,9 @@ #ifndef PUGL_GL_HPP #define PUGL_GL_HPP -#include "pugl/gl.h" -#include "pugl/pugl.h" -#include "pugl/pugl.hpp" +#include <pugl/gl.h> +#include <pugl/pugl.h> +#include <pugl/pugl.hpp> namespace pugl { diff --git a/bindings/cpp/include/pugl/pugl.hpp b/bindings/cpp/include/pugl/pugl.hpp index e374efc..eba2583 100644 --- a/bindings/cpp/include/pugl/pugl.hpp +++ b/bindings/cpp/include/pugl/pugl.hpp @@ -4,10 +4,10 @@ #ifndef PUGL_PUGL_HPP #define PUGL_PUGL_HPP -#include "pugl/pugl.h" +#include <pugl/pugl.h> -#include <cstddef> // IWYU pragma: keep -#include <cstdint> // IWYU pragma: keep +#include <cstddef> +#include <cstdint> #if defined(PUGL_HPP_THROW_FAILED_CONSTRUCTION) # include <exception> @@ -66,8 +66,17 @@ private: } // namespace detail -/// @copydoc PuglRect -using Rect = PuglRect; +/// @copydoc PuglCoord +using Coord = PuglCoord; + +/// @copydoc PuglSpan +using Span = PuglSpan; + +/// @copydoc PuglPoint +using Point = PuglPoint; + +/// @copydoc PuglArea +using Area = PuglArea; /// @copydoc PuglStringHint enum class StringHint { @@ -227,6 +236,7 @@ enum class Status { setFormatFailed, ///< @copydoc PUGL_SET_FORMAT_FAILED createContextFailed, ///< @copydoc PUGL_CREATE_CONTEXT_FAILED unsupported, ///< @copydoc PUGL_UNSUPPORTED + noMemory, ///< @copydoc PUGL_NO_MEMORY }; static_assert(static_cast<Status>(PUGL_UNSUPPORTED) == Status::unsupported, ""); @@ -370,11 +380,19 @@ using Backend = PuglBackend; /// @copydoc PuglNativeView using NativeView = PuglNativeView; +/// @copydoc PuglPositionHint +enum class PositionHint { + defaultPosition, ///< @copydoc PUGL_DEFAULT_POSITION + currentPosition, ///< @copydoc PUGL_CURRENT_POSITION +}; + /// @copydoc PuglSizeHint enum class SizeHint { defaultSize, ///< @copydoc PUGL_DEFAULT_SIZE + currentSize, ///< @copydoc PUGL_CURRENT_SIZE minSize, ///< @copydoc PUGL_MIN_SIZE maxSize, ///< @copydoc PUGL_MAX_SIZE + fixedAspect, ///< @copydoc PUGL_FIXED_ASPECT minAspect, ///< @copydoc PUGL_MIN_ASPECT maxAspect, ///< @copydoc PUGL_MAX_ASPECT }; @@ -535,17 +553,27 @@ public: @{ */ - /// @copydoc puglGetFrame - Rect frame() const noexcept { return puglGetFrame(cobj()); } + /// @copydoc puglGetPositionHint + Point position(PositionHint hint) const noexcept + { + return puglGetPositionHint(cobj(), static_cast<PuglPositionHint>(hint)); + } + + /// @copydoc puglGetSizeHint + Area size(SizeHint hint) const noexcept + { + return puglGetSizeHint(cobj(), static_cast<PuglSizeHint>(hint)); + } - /// @copydoc puglSetFrame - Status setFrame(const Rect& frame) noexcept + /// @copydoc puglSetSizeHint + Status setSize(unsigned width, unsigned height) noexcept { - return static_cast<Status>(puglSetFrame(cobj(), frame)); + return static_cast<Status>( + puglSetSizeHint(cobj(), PUGL_CURRENT_SIZE, width, height)); } /// @copydoc puglSetSizeHint - Status setSizeHint(SizeHint hint, PuglSpan width, PuglSpan height) noexcept + Status setSizeHint(SizeHint hint, unsigned width, unsigned height) noexcept { return static_cast<Status>( puglSetSizeHint(cobj(), static_cast<PuglSizeHint>(hint), width, height)); @@ -558,18 +586,27 @@ public: @{ */ - /// @copydoc puglSetParentWindow - Status setParentWindow(NativeView parent) noexcept + /// @copydoc puglSetParent + Status setParent(NativeView parent) noexcept { - return static_cast<Status>(puglSetParentWindow(cobj(), parent)); + return static_cast<Status>(puglSetParent(cobj(), parent)); } + /// @copydoc puglGetParent + NativeView parent() const noexcept { return puglGetParent(cobj()); } + /// @copydoc puglSetTransientParent Status setTransientParent(NativeView parent) noexcept { return static_cast<Status>(puglSetTransientParent(cobj(), parent)); } + /// @copydoc puglGetTransientParent + NativeView transientParent() const noexcept + { + return puglGetTransientParent(cobj()); + } + /// @copydoc puglRealize Status realize() noexcept { return static_cast<Status>(puglRealize(cobj())); } @@ -600,16 +637,19 @@ public: /// @copydoc puglGetContext void* context() noexcept { return puglGetContext(cobj()); } - /// @copydoc puglPostRedisplay - Status postRedisplay() noexcept + /// @copydoc puglObscure + Status obscure() noexcept { - return static_cast<Status>(puglPostRedisplay(cobj())); + return static_cast<Status>(puglObscureView(cobj())); } - /// @copydoc puglPostRedisplayRect - Status postRedisplayRect(const Rect& rect) noexcept + /// "Obscure" a region so it will be exposed in the next render + Status obscure(const int x, + const int y, + const unsigned width, + const unsigned height) { - return static_cast<Status>(puglPostRedisplayRect(cobj(), rect)); + return static_cast<Status>(puglObscureRegion(cobj(), x, y, width, height)); } /** diff --git a/bindings/cpp/include/pugl/stub.hpp b/bindings/cpp/include/pugl/stub.hpp index 08281b0..13b050d 100644 --- a/bindings/cpp/include/pugl/stub.hpp +++ b/bindings/cpp/include/pugl/stub.hpp @@ -4,8 +4,8 @@ #ifndef PUGL_STUB_HPP #define PUGL_STUB_HPP -#include "pugl/pugl.h" -#include "pugl/stub.h" +#include <pugl/pugl.h> +#include <pugl/stub.h> namespace pugl { diff --git a/bindings/cpp/include/pugl/vulkan.hpp b/bindings/cpp/include/pugl/vulkan.hpp index 5bb790d..56c91b0 100644 --- a/bindings/cpp/include/pugl/vulkan.hpp +++ b/bindings/cpp/include/pugl/vulkan.hpp @@ -10,9 +10,9 @@ #ifndef PUGL_VULKAN_HPP #define PUGL_VULKAN_HPP -#include "pugl/pugl.h" -#include "pugl/pugl.hpp" -#include "pugl/vulkan.h" +#include <pugl/pugl.h> +#include <pugl/pugl.hpp> +#include <pugl/vulkan.h> #include <vulkan/vulkan_core.h> diff --git a/bindings/cpp/meson.build b/bindings/cpp/meson.build index 5d8f586..0e8ba6a 100644 --- a/bindings/cpp/meson.build +++ b/bindings/cpp/meson.build @@ -1,10 +1,14 @@ -# Copyright 2021 David Robillard <d@drobilla.net> +# Copyright 2021-2025 David Robillard <d@drobilla.net> # SPDX-License-Identifier: 0BSD OR ISC +###################################### +# C++ Bindings Package (Header-Only) # +###################################### + subdir('include') puglpp_dep = declare_dependency( - dependencies: core_deps + [pugl_dep], + dependencies: [pugl_dep], include_directories: include_directories('include'), link_with: libpugl, ) @@ -20,3 +24,9 @@ pkg.generate( ) meson.override_dependency(puglpp_versioned_name, puglpp_dep) + +############################ +# C++ Header Warning Tests # +############################ + +subdir('test/headers') diff --git a/bindings/cpp/test/headers/.clang-tidy b/bindings/cpp/test/headers/.clang-tidy new file mode 100644 index 0000000..0e20b52 --- /dev/null +++ b/bindings/cpp/test/headers/.clang-tidy @@ -0,0 +1,26 @@ +# Copyright 2020-2025 David Robillard <d@drobilla.net> +# SPDX-License-Identifier: 0BSD OR ISC + +Checks: > + *, + -*-magic-numbers, + -*-use-using, + -altera-*, + -cppcoreguidelines-avoid-const-or-ref-data-members, + -cppcoreguidelines-pro-bounds-pointer-arithmetic, + -cppcoreguidelines-pro-type-reinterpret-cast, + -llvmlibc-*, + -modernize-redundant-void-arg, + -modernize-use-trailing-return-type, + -performance-enum-size, + -readability-implicit-bool-conversion, +CheckOptions: + - key: readability-function-cognitive-complexity.Threshold + value: '2' + - key: readability-identifier-length.IgnoredParameterNames + value: '^(f)|(id)|(x)|(y)$' + - key: readability-identifier-length.IgnoredVariableNames + value: '^(r)$' +FormatStyle: file +HeaderFilterRegex: '.*' +WarningsAsErrors: '*' diff --git a/bindings/cpp/test/headers/meson.build b/bindings/cpp/test/headers/meson.build new file mode 100644 index 0000000..064c2cf --- /dev/null +++ b/bindings/cpp/test/headers/meson.build @@ -0,0 +1,39 @@ +# Copyright 2020-2025 David Robillard <d@drobilla.net> +# SPDX-License-Identifier: 0BSD OR ISC + +header_cpp_suppressions = [] + +if get_option('warning_level') == 'everything' + if cpp.get_id() == 'clang' + if not meson.is_cross_build() + header_cpp_suppressions += [ + '-Wno-old-style-cast', + '-Wno-poison-system-directories', + ] + endif + endif +endif + +header_cpp_suppressions = cpp.get_supported_arguments(header_cpp_suppressions) + +test_headers_cpp_args = header_cpp_suppressions +test_headers_cpp_args += [ + '-DPUGL_NO_INCLUDE_GL_H', + '-DPUGL_NO_INCLUDE_GLU_H', +] + +if vulkan_dep.found() + test_headers_cpp_args += ['-DPUGL_TEST_VULKAN'] +endif + +test( + 'headers', + executable( + 'test_headers_cpp', + files('test_headers.cpp'), + cpp_args: test_headers_cpp_args, + dependencies: [puglpp_dep, vulkan_dep], + implicit_include_directories: false, + ), + suite: 'unit', +) diff --git a/bindings/cpp/test/headers/test_headers.cpp b/bindings/cpp/test/headers/test_headers.cpp new file mode 100644 index 0000000..a28f537 --- /dev/null +++ b/bindings/cpp/test/headers/test_headers.cpp @@ -0,0 +1,20 @@ +// Copyright 2022-2025 David Robillard <d@drobilla.net> +// SPDX-License-Identifier: ISC + +#include <pugl/cairo.hpp> // IWYU pragma: keep +#include <pugl/gl.hpp> // IWYU pragma: keep +#include <pugl/pugl.hpp> // IWYU pragma: keep +#include <pugl/stub.hpp> // IWYU pragma: keep + +#ifdef PUGL_TEST_VULKAN +# include <pugl/vulkan.hpp> // IWYU pragma: keep +#endif + +#ifdef __GNUC__ +__attribute__((const)) +#endif +int +main() +{ + return 0; +} |