1
0

OBSCanvas.hpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /******************************************************************************
  2. Copyright (C) 2025 by Dennis Sädtler <[email protected]>
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. ******************************************************************************/
  14. #pragma once
  15. #include <memory>
  16. #include <optional>
  17. #include <vector>
  18. #include "obs.h"
  19. #include "obs.hpp"
  20. namespace OBS {
  21. class Canvas {
  22. public:
  23. Canvas(obs_canvas_t *canvas);
  24. Canvas(Canvas &&other) noexcept;
  25. ~Canvas() noexcept;
  26. // No default or copy/move constructors
  27. Canvas() = delete;
  28. Canvas(Canvas &other) = delete;
  29. Canvas &operator=(Canvas &&other) noexcept;
  30. operator obs_canvas_t *() const { return canvas; }
  31. [[nodiscard]] std::optional<OBSDataAutoRelease> Save() const;
  32. static std::unique_ptr<Canvas> Load(obs_data_t *data);
  33. static std::vector<Canvas> LoadCanvases(obs_data_array_t *canvases);
  34. static OBSDataArrayAutoRelease SaveCanvases(const std::vector<Canvas> &canvases);
  35. private:
  36. obs_canvas_t *canvas = nullptr;
  37. };
  38. } // namespace OBS