summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Persch <chpe@src.gnome.org>2021-03-14 12:34:15 +0100
committerChristian Persch <chpe@src.gnome.org>2021-03-14 12:34:15 +0100
commit9a76d6cc6b90dd17f8a3e87777707570053e9461 (patch)
tree729506fa1f393a3633f69f7f27a9b884ad757d19
parent1b60b4a600dbbec0a056f076f1aae244b1a1109c (diff)
downloadvte-9a76d6cc6b90dd17f8a3e87777707570053e9461.tar.gz
widget: Use our own enum for alignment
-rw-r--r--doc/reference/vte-sections.txt.in3
-rw-r--r--src/app/app.cc16
-rw-r--r--src/vte.cc14
-rw-r--r--src/vte/vteenums.h24
-rw-r--r--src/vte/vteterminal.h8
-rw-r--r--src/vtegtk.cc60
-rw-r--r--src/vteinternal.hh11
-rw-r--r--src/widget.hh10
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