diff options
author | Christian Persch <chpe@src.gnome.org> | 2021-03-14 12:34:15 +0100 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2021-03-14 12:34:15 +0100 |
commit | 9a76d6cc6b90dd17f8a3e87777707570053e9461 (patch) | |
tree | 729506fa1f393a3633f69f7f27a9b884ad757d19 | |
parent | 1b60b4a600dbbec0a056f076f1aae244b1a1109c (diff) | |
download | vte-9a76d6cc6b90dd17f8a3e87777707570053e9461.tar.gz |
widget: Use our own enum for alignment
-rw-r--r-- | doc/reference/vte-sections.txt.in | 3 | ||||
-rw-r--r-- | src/app/app.cc | 16 | ||||
-rw-r--r-- | src/vte.cc | 14 | ||||
-rw-r--r-- | src/vte/vteenums.h | 24 | ||||
-rw-r--r-- | src/vte/vteterminal.h | 8 | ||||
-rw-r--r-- | src/vtegtk.cc | 60 | ||||
-rw-r--r-- | src/vteinternal.hh | 11 | ||||
-rw-r--r-- | src/widget.hh | 10 |
8 files changed, 93 insertions, 53 deletions
diff --git a/doc/reference/vte-sections.txt.in b/doc/reference/vte-sections.txt.in index 3f6cd2bb..4e3a7e3e 100644 --- a/doc/reference/vte-sections.txt.in +++ b/doc/reference/vte-sections.txt.in @@ -2,6 +2,7 @@ <FILE>vte-terminal</FILE> <TITLE>VteTerminal</TITLE> VteTerminal +VteAlign VteCursorBlinkMode VteCursorShape VteEraseBinding @@ -132,6 +133,8 @@ vte_terminal_get_color_background_for_draw #endif /* VTE_GTK == 3 */ <SUBSECTION Standard> +VTE_TYPE_ALIGN +vte_align_get_type VTE_TYPE_CURSOR_BLINK_MODE vte_cursor_blink_mode_get_type VTE_TYPE_CURSOR_SHAPE diff --git a/src/app/app.cc b/src/app/app.cc index 2712ca52..684a754d 100644 --- a/src/app/app.cc +++ b/src/app/app.cc @@ -122,8 +122,8 @@ public: VteCursorBlinkMode cursor_blink_mode{VTE_CURSOR_BLINK_SYSTEM}; VteCursorShape cursor_shape{VTE_CURSOR_SHAPE_BLOCK}; VteTextBlinkMode text_blink_mode{VTE_TEXT_BLINK_ALWAYS}; - GtkAlign xalign{GtkAlign(-1)}; - GtkAlign yalign{GtkAlign(-1)}; + VteAlign xalign{VteAlign(-1)}; + VteAlign yalign{VteAlign(-1)}; vte::glib::RefPtr<GtkCssProvider> css{}; #if VTE_GTK == 3 @@ -483,9 +483,9 @@ private: { auto const that = static_cast<Options*>(data); auto v = int{}; - auto const rv = that->parse_enum(GTK_TYPE_ALIGN, value, v, error); + auto const rv = that->parse_enum(VTE_TYPE_ALIGN, value, v, error); if (rv) - that->xalign = GtkAlign(v); + that->xalign = VteAlign(v); return rv; } @@ -494,9 +494,9 @@ private: { auto const that = static_cast<Options*>(data); auto v = int{}; - auto const rv = that->parse_enum(GTK_TYPE_ALIGN, value, v, error); + auto const rv = that->parse_enum(VTE_TYPE_ALIGN, value, v, error); if (rv) - that->yalign = GtkAlign(v); + that->yalign = VteAlign(v); return rv; } @@ -2578,9 +2578,9 @@ vteapp_window_constructed(GObject *object) vte_terminal_set_scroll_unit_is_pixels(window->terminal, options.scroll_unit_is_pixels); vte_terminal_set_scrollback_lines(window->terminal, options.scrollback_lines); vte_terminal_set_text_blink_mode(window->terminal, options.text_blink_mode); - if (options.xalign != GtkAlign(-1)) + if (options.xalign != VteAlign(-1)) vte_terminal_set_xalign(window->terminal, options.xalign); - if (options.yalign != GtkAlign(-1)) + if (options.yalign != VteAlign(-1)) vte_terminal_set_yalign(window->terminal, options.yalign); /* Style */ @@ -7832,21 +7832,19 @@ Terminal::widget_size_allocate(int allocation_width, auto lpad = 0, rpad = 0; switch (xalign) { default: - case Alignment::FILL: - case Alignment::BASELINE: + case Alignment::START_FILL: case Alignment::START: lpad = 0; rpad = width; break; - case Alignment::END: lpad = width; rpad = 0; break; case Alignment::CENTRE: lpad = width / 2; rpad = width - lpad; break; + case Alignment::END: lpad = width; rpad = 0; break; } auto tpad = 0, bpad = 0; switch (yalign) { default: - case Alignment::FILL: tpad = bpad = 0; break; - case Alignment::BASELINE: - case Alignment::START: tpad = 0; bpad = height; break; - case Alignment::END: tpad = height; bpad = 0; break; - case Alignment::CENTRE: tpad = height / 2; bpad = height - tpad; break; + case Alignment::START: tpad = 0; bpad = height; break; + case Alignment::CENTRE: tpad = height / 2; bpad = height - tpad; break; + case Alignment::END: tpad = height; bpad = 0; break; + case Alignment::START_FILL: tpad = bpad = 0; break; } m_padding.left = m_style_padding.left + lpad; diff --git a/src/vte/vteenums.h b/src/vte/vteenums.h index e6de6622..c13228ac 100644 --- a/src/vte/vteenums.h +++ b/src/vte/vteenums.h @@ -196,4 +196,28 @@ typedef enum /*< skip >*/ { VTE_FEATURE_FLAGS_MASK = 0xFFFFFFFFFFFFFFFFULL, /* force enum to 64 bit */ } VteFeatureFlags; + +/** + * VteAlign: + * @VTE_ALIGN_START: align to left/top + * @VTE_ALIGN_CENTER: align to centre + * @VTE_ALIGN_END: align to right/bottom + * @VTE_ALIGN_FILL: fill available space + * + * An enumeration type that can be used to specify how the terminal + * uses extra allocated space. + * + * Since: 0.66 + */ +typedef enum { + VTE_ALIGN_START = 0U, + VTE_ALIGN_CENTER = 1U, + /* VTE_ALIGN_BASELINE = 2U, */ + VTE_ALIGN_END = 3U, + VTE_ALIGN_FILL = 4U, /*< skip >*/ /* flag */ + VTE_ALIGN_START_FILL = 4U, + /* VTE_ALIGN_CENTER_FILL = 5U, */ + /* VTE_ALIGN_END_FILL = 6U, */ +} VteAlign; + G_END_DECLS diff --git a/src/vte/vteterminal.h b/src/vte/vteterminal.h index a3cfc307..b59f55f5 100644 --- a/src/vte/vteterminal.h +++ b/src/vte/vteterminal.h @@ -547,17 +547,17 @@ gboolean vte_terminal_get_enable_sixel(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_PUBLIC void vte_terminal_set_xalign(VteTerminal* terminal, - GtkAlign align) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + VteAlign align) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -GtkAlign vte_terminal_get_xalign(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +VteAlign vte_terminal_get_xalign(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC void vte_terminal_set_yalign(VteTerminal* terminal, - GtkAlign align) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); + VteAlign align) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); _VTE_PUBLIC -GtkAlign vte_terminal_get_yalign(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); +VteAlign vte_terminal_get_yalign(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1); G_DEFINE_AUTOPTR_CLEANUP_FUNC(VteTerminal, g_object_unref) diff --git a/src/vtegtk.cc b/src/vtegtk.cc index 5714a5b7..cb3c248d 100644 --- a/src/vtegtk.cc +++ b/src/vtegtk.cc @@ -79,6 +79,9 @@ #define VTE_TERMINAL_CSS_NAME "vte-terminal" +template<typename T> +constexpr bool check_enum_value(T value) noexcept; + struct _VteTerminalClassPrivate { GtkStyleProvider *style_provider; }; @@ -1139,11 +1142,11 @@ try break; case PROP_XALIGN: - vte_terminal_set_xalign(terminal, GtkAlign(g_value_get_enum(value))); + vte_terminal_set_xalign(terminal, VteAlign(g_value_get_enum(value))); break; case PROP_YALIGN: - vte_terminal_set_yalign(terminal, GtkAlign(g_value_get_enum(value))); + vte_terminal_set_yalign(terminal, VteAlign(g_value_get_enum(value))); break; /* Not writable */ @@ -2353,8 +2356,8 @@ vte_terminal_class_init(VteTerminalClass *klass) */ pspecs[PROP_XALIGN] = g_param_spec_enum("xalign", nullptr, nullptr, - GTK_TYPE_ALIGN, - GTK_ALIGN_FILL, + VTE_TYPE_ALIGN, + VTE_ALIGN_START, GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); /** @@ -2366,8 +2369,8 @@ vte_terminal_class_init(VteTerminalClass *klass) */ pspecs[PROP_YALIGN] = g_param_spec_enum("yalign", nullptr, nullptr, - GTK_TYPE_ALIGN, - GTK_ALIGN_FILL, + VTE_TYPE_ALIGN, + VTE_ALIGN_START_FILL, GParamFlags(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY)); g_object_class_install_properties(gobject_class, LAST_PROP, pspecs); @@ -6184,25 +6187,39 @@ catch (...) return false; } +template<> +constexpr bool check_enum_value<VteAlign>(VteAlign value) noexcept +{ + switch (value) { + case VTE_ALIGN_START: + case VTE_ALIGN_CENTER: + case VTE_ALIGN_END: + case VTE_ALIGN_START_FILL: + return true; + default: + return false; + } +} + /** * vte_terminal_set_xalign: * @terminal: a #VteTerminal - * @align: alignment value from #GtkAlign + * @align: alignment value from #VteAlign * * Sets the horizontal alignment of @terminal within its allocation. * - * Note: %GTK_ALIGN_FILL and %GTK_ALIGN_BASELINE are not supported and - * will be treated like %GTK_ALIGN_START. + * Note: %VTE_ALIGN_START_FILL is not supported, and will be treated + * like %VTE_ALIGN_START. * * Since: 0.66 */ void vte_terminal_set_xalign(VteTerminal* terminal, - GtkAlign align) noexcept + VteAlign align) noexcept try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); - g_return_if_fail(align >= GTK_ALIGN_FILL && align <= GTK_ALIGN_BASELINE); + g_return_if_fail(check_enum_value(align)); if (WIDGET(terminal)->set_xalign(align)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_XALIGN]); @@ -6220,39 +6237,36 @@ catch (...) * * Since: 0.66 */ -GtkAlign +VteAlign vte_terminal_get_xalign(VteTerminal* terminal) noexcept try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), GTK_ALIGN_START); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), VTE_ALIGN_START); return WIDGET(terminal)->xalign(); } catch (...) { vte::log_exception(); - return GTK_ALIGN_FILL; + return VTE_ALIGN_START; } /** * vte_terminal_set_yalign: * @terminal: a #VteTerminal - * @align: alignment value from #GtkAlign + * @align: alignment value from #VteAlign * * Sets the vertical alignment of @terminal within its allocation. * - * Note: %GTK_ALIGN_BASELINE is not supported and will be treated like - * %GTK_ALIGN_START. - * * Since: 0.66 */ void vte_terminal_set_yalign(VteTerminal* terminal, - GtkAlign align) noexcept + VteAlign align) noexcept try { g_return_if_fail(VTE_IS_TERMINAL(terminal)); - g_return_if_fail(align >= GTK_ALIGN_FILL && align <= GTK_ALIGN_BASELINE); + g_return_if_fail(check_enum_value(align)); if (WIDGET(terminal)->set_yalign(align)) g_object_notify_by_pspec(G_OBJECT(terminal), pspecs[PROP_YALIGN]); @@ -6270,18 +6284,18 @@ catch (...) * * Since: 0.66 */ -GtkAlign +VteAlign vte_terminal_get_yalign(VteTerminal* terminal) noexcept try { - g_return_val_if_fail(VTE_IS_TERMINAL(terminal), GTK_ALIGN_FILL); + g_return_val_if_fail(VTE_IS_TERMINAL(terminal), VTE_ALIGN_START_FILL); return WIDGET(terminal)->yalign(); } catch (...) { vte::log_exception(); - return GTK_ALIGN_FILL; + return VTE_ALIGN_START_FILL; } namespace vte { diff --git a/src/vteinternal.hh b/src/vteinternal.hh index a9ca86b3..f3cfc750 100644 --- a/src/vteinternal.hh +++ b/src/vteinternal.hh @@ -210,11 +210,12 @@ private: }; enum class Alignment : uint8_t { - FILL, - START, - END, - CENTRE, - BASELINE + START = 0u, + CENTRE = 1u, + /* BASELINE = 2u, */ + END = 3u, + FILL = 0x4u, + START_FILL = START | FILL, }; protected: diff --git a/src/widget.hh b/src/widget.hh index 19aaf733..af626117 100644 --- a/src/widget.hh +++ b/src/widget.hh @@ -447,17 +447,17 @@ public: constexpr auto xalign() const noexcept { return m_xalign; } constexpr auto yalign() const noexcept { return m_yalign; } - bool set_xalign(GtkAlign align) noexcept + bool set_xalign(VteAlign align) noexcept { if (align == m_xalign) return false; - m_xalign = align; + m_xalign = VteAlign(align & ~VTE_ALIGN_FILL); gtk_widget_queue_allocate(gtk()); return true; } - bool set_yalign(GtkAlign align) noexcept + bool set_yalign(VteAlign align) noexcept { if (align == m_yalign) return false; @@ -571,8 +571,8 @@ private: unsigned m_scroll_unit_is_pixels:1{false}; unsigned m_changing_scroll_position:1{false}; - GtkAlign m_xalign{GTK_ALIGN_START}; - GtkAlign m_yalign{GTK_ALIGN_FILL}; + VteAlign m_xalign{VTE_ALIGN_START}; + VteAlign m_yalign{VTE_ALIGN_START_FILL}; }; } // namespace platform |