[vte] terminal: Move some initialisations to the class



commit c744693945814518f2d3b3173e486c03ec106d91
Author: Christian Persch <chpe src gnome org>
Date:   Mon Nov 18 22:42:22 2019 +0100

    terminal: Move some initialisations to the class
    
    ... and use smart pointers.

 src/vte.cc         | 40 +++++++++-------------------------------
 src/vtegtk.cc      |  2 +-
 src/vteinternal.hh |  7 +++++--
 3 files changed, 15 insertions(+), 34 deletions(-)
---
diff --git a/src/vte.cc b/src/vte.cc
index 264caae2..2a4092fa 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -4425,7 +4425,7 @@ Terminal::im_update_cursor()
 void
 Terminal::widget_style_updated()
 {
-        set_font_desc(m_unscaled_font_desc);
+        set_font_desc(m_unscaled_font_desc.get());
 
         auto context = gtk_widget_get_style_context(m_widget);
         GtkBorder new_padding;
@@ -7391,7 +7391,7 @@ Terminal::ensure_font()
        if (m_draw != NULL) {
                /* Load default fonts, if no fonts have been loaded. */
                if (!m_has_fonts) {
-                       set_font_desc(m_unscaled_font_desc);
+                       set_font_desc(m_unscaled_font_desc.get());
                }
                if (m_fontdirty) {
                         int cell_width, cell_height;
@@ -7400,7 +7400,7 @@ Terminal::ensure_font()
                        m_fontdirty = false;
                        _vte_draw_set_text_font (m_draw,
                                                  m_widget,
-                                                 m_fontdesc,
+                                                 m_fontdesc.get(),
                                                  m_cell_width_scale,
                                                  m_cell_height_scale);
                        _vte_draw_get_text_metrics (m_draw,
@@ -7418,10 +7418,10 @@ void
 Terminal::update_font()
 {
         /* We'll get called again later */
-        if (m_unscaled_font_desc == nullptr)
+        if (!m_unscaled_font_desc)
                 return;
 
-        auto desc = pango_font_description_copy(m_unscaled_font_desc);
+        auto desc = pango_font_description_copy(m_unscaled_font_desc.get());
 
         double size = pango_font_description_get_size(desc);
         if (pango_font_description_get_size_is_absolute(desc)) {
@@ -7430,11 +7430,7 @@ Terminal::update_font()
                 pango_font_description_set_size(desc, m_font_scale * size);
         }
 
-        if (m_fontdesc) {
-                pango_font_description_free(m_fontdesc);
-        }
-        m_fontdesc = desc;
-
+        m_fontdesc = {desc, &pango_font_description_free};
         m_fontdirty = true;
         m_has_fonts = true;
 
@@ -7482,8 +7478,8 @@ Terminal::set_font_desc(PangoFontDescription const* font_desc)
                                "Using default monospace font.\n");
        }
 
-        bool same_desc = m_unscaled_font_desc &&
-                pango_font_description_equal(m_unscaled_font_desc, desc);
+        bool const same_desc = m_unscaled_font_desc &&
+                pango_font_description_equal(m_unscaled_font_desc.get(), desc);
 
        /* Note that we proceed to recreating the font even if the description
         * are the same.  This is because maybe screen
@@ -7491,13 +7487,7 @@ Terminal::set_font_desc(PangoFontDescription const* font_desc)
         * detected at font creation time and respected.
         */
 
-       /* Free the old font description and save the new one. */
-       if (m_unscaled_font_desc != nullptr) {
-               pango_font_description_free(m_unscaled_font_desc);
-       }
-
-        m_unscaled_font_desc = desc /* adopted */;
-
+        m_unscaled_font_desc = {desc, &pango_font_description_free};
         update_font();
 
         return !same_desc;
@@ -7923,10 +7913,6 @@ Terminal::Terminal(vte::platform::Widget* w,
         /* Word chars */
         set_word_char_exceptions(WORD_CHAR_EXCEPTIONS_DEFAULT);
 
-        /* Selection */
-        m_unscaled_font_desc = nullptr;
-        m_fontdesc = nullptr;
-
         update_view_extents();
 
 #ifdef VTE_DEBUG
@@ -8153,14 +8139,6 @@ Terminal::~Terminal()
                _vte_draw_free(m_draw);
        }
 
-       /* Free the font description. */
-        if (m_unscaled_font_desc != NULL) {
-                pango_font_description_free(m_unscaled_font_desc);
-        }
-       if (m_fontdesc != NULL) {
-               pango_font_description_free(m_fontdesc);
-       }
-
        /* Free matching data. */
        if (m_match_attributes != NULL) {
                g_array_free(m_match_attributes, TRUE);
diff --git a/src/vtegtk.cc b/src/vtegtk.cc
index 0760fce6..0333218d 100644
--- a/src/vtegtk.cc
+++ b/src/vtegtk.cc
@@ -3979,7 +3979,7 @@ vte_terminal_get_font(VteTerminal *terminal)
 {
         g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL);
 
-        return IMPL(terminal)->m_unscaled_font_desc;
+        return IMPL(terminal)->unscaled_font_description();
 }
 
 /**
diff --git a/src/vteinternal.hh b/src/vteinternal.hh
index fce0d0b9..fd441ccd 100644
--- a/src/vteinternal.hh
+++ b/src/vteinternal.hh
@@ -616,10 +616,13 @@ public:
 
        /* Data used when rendering the text which does not require server
         * resources and which can be kept after unrealizing. */
-        PangoFontDescription *m_unscaled_font_desc;
-        PangoFontDescription *m_fontdesc;
+        using pango_font_description_unique_type = std::unique_ptr<PangoFontDescription, 
decltype(&pango_font_description_free)>;
+        pango_font_description_unique_type m_unscaled_font_desc{nullptr, &pango_font_description_free};
+        pango_font_description_unique_type  m_fontdesc{nullptr, &pango_font_description_free};
         double m_font_scale{1.};
 
+        auto unscaled_font_description() const noexcept { return m_unscaled_font_desc.get(); }
+
         /* First, the dimensions of ASCII characters are measured. The result
          * could probably be called char_{width,height} or font_{width,height}
          * but these aren't stored directly here, not to accidentally be confused


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