#include "turns/adw/breakpoint.hpp" #include "turns/adw/helpers/properties.hpp" #include #include #include #include #include #include #include #include #include #include #include #include namespace turns::adw { static_assert(static_cast(BreakpointCondition::LengthType::min_width) == ADW_BREAKPOINT_CONDITION_MIN_WIDTH); static_assert(static_cast(BreakpointCondition::LengthType::max_width) == ADW_BREAKPOINT_CONDITION_MAX_WIDTH); static_assert(static_cast(BreakpointCondition::LengthType::min_height) == ADW_BREAKPOINT_CONDITION_MIN_HEIGHT); static_assert(static_cast(BreakpointCondition::LengthType::max_height) == ADW_BREAKPOINT_CONDITION_MAX_HEIGHT); static_assert(static_cast(BreakpointCondition::RatioType::min_aspect_ratio) == ADW_BREAKPOINT_CONDITION_MIN_ASPECT_RATIO); static_assert(static_cast(BreakpointCondition::RatioType::max_aspect_ratio) == ADW_BREAKPOINT_CONDITION_MAX_ASPECT_RATIO); BreakpointCondition::BreakpointCondition(BreakpointCondition const & other) : BreakpointCondition{adw_breakpoint_condition_copy(other.m_object)} { } BreakpointCondition::BreakpointCondition(BreakpointCondition && other) : BreakpointCondition{std::exchange(other.m_object, nullptr)} { } BreakpointCondition::BreakpointCondition(LengthType type, double value, int unit) : BreakpointCondition{adw_breakpoint_condition_new_length(static_cast(static_cast(type)), value, static_cast(unit))} { } BreakpointCondition::BreakpointCondition(RatioType type, int width, int height) : BreakpointCondition{ adw_breakpoint_condition_new_ratio(static_cast(static_cast(type)), width, height)} { } BreakpointCondition::BreakpointCondition(AdwBreakpointCondition * object) : m_object{object} { } BreakpointCondition::~BreakpointCondition() noexcept { if (m_object) { adw_breakpoint_condition_free(m_object); m_object = nullptr; } } auto BreakpointCondition::operator&&(BreakpointCondition & rhs) & -> BreakpointCondition { return BreakpointCondition{adw_breakpoint_condition_new_and(m_object, rhs.m_object)}; } auto BreakpointCondition::operator||(BreakpointCondition & rhs) & -> BreakpointCondition { return BreakpointCondition{adw_breakpoint_condition_new_or(m_object, rhs.m_object)}; } BreakpointCondition::operator Glib::ustring() const { return adw_breakpoint_condition_to_string(const_cast(m_object)); } auto BreakpointCondition::parse(Glib::ustring str) -> std::optional { if (auto object = adw_breakpoint_condition_parse(str.c_str())) { return BreakpointCondition{object}; } return std::nullopt; } } // namespace turns::adw namespace turns::adw { namespace { auto constinit _class = Breakpoint::Class{}; } // namespace auto Breakpoint::Class::init() -> Glib::Class const & { if (!gtype_) { class_init_func_ = &class_init_function; register_derived_type(adw_breakpoint_get_type()); Gtk::Buildable::add_interface(get_type()); } return *this; } auto Breakpoint::Class::class_init_function(void * gclass, void * data) -> void { auto const klass = static_cast(gclass); CppClassParent::class_init_function(klass, data); } auto Breakpoint::Class::wrap_new(GObject * object) -> Glib::ObjectBase * { return new Breakpoint{ADW_BREAKPOINT(object)}; } Breakpoint::Breakpoint(BreakpointCondition & condition) : Glib::ObjectBase{nullptr} , Glib::Object{Glib::ConstructParams{_class.init(), "condition", condition.m_object, nullptr}} { } Breakpoint::Breakpoint(Glib::ConstructParams const & params) : Glib::Object{params} { } Breakpoint::Breakpoint(BaseObjectType * gobj) : Glib::Object{G_OBJECT(gobj)} { } auto Breakpoint::create(BreakpointCondition & condition) -> Glib::RefPtr { return Glib::make_refptr_for_instance(new Breakpoint(condition)); } auto Breakpoint::get_type() -> GType { return _class.init().get_type(); } auto Breakpoint::get_base_type() -> GType { return adw_breakpoint_get_type(); } auto Breakpoint::property_condition() -> Glib::PropertyProxy { return helpers::make_property_proxy(*this, "condition"); } } // namespace turns::adw namespace Glib { auto wrap(AdwBreakpoint * object, bool copy) -> Glib::RefPtr { return Glib::make_refptr_for_instance(dynamic_cast(Glib::wrap_auto(G_OBJECT(object), copy))); } } // namespace Glib