[vte] widget: Use our own enum for alignment



commit 9a76d6cc6b90dd17f8a3e87777707570053e9461
Author: Christian Persch <chpe src gnome org>
Date:   Sun Mar 14 12:34:15 2021 +0100

    widget: Use our own enum for alignment

 doc/reference/vte-sections.txt.in |  3 ++
 src/app/app.cc                    | 16 +++++------
 src/vte.cc                        | 14 ++++-----
 src/vte/vteenums.h                | 24 ++++++++++++++++
 src/vte/vteterminal.h             |  8 +++---
 src/vtegtk.cc                     | 60 ++++++++++++++++++++++++---------------
 src/vteinternal.hh                | 11 +++----
 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 */
diff --git a/src/vte.cc b/src/vte.cc
index 05340843..356a0579 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]