[vte] draw: Use attr in public functions instead of font style
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vte] draw: Use attr in public functions instead of font style
- Date: Mon, 1 Jun 2020 20:51:23 +0000 (UTC)
commit b0ef50363a1503be16012b02b01a173aa2ee2b07
Author: Christian Persch <chpe src gnome org>
Date: Mon Jun 1 22:48:43 2020 +0200
draw: Use attr in public functions instead of font style
Move public function to the only file it is used from, and
pass the attr directly to draw_text etc instead of the
bold/italc style.
src/drawing-cairo.cc | 57 ++++++++++++++++++++++++++--------------------------
src/drawing-cairo.hh | 17 +++++-----------
src/vte.cc | 13 ++++--------
3 files changed, 38 insertions(+), 49 deletions(-)
---
diff --git a/src/drawing-cairo.cc b/src/drawing-cairo.cc
index 807a16fa..667ec27c 100644
--- a/src/drawing-cairo.cc
+++ b/src/drawing-cairo.cc
@@ -25,10 +25,6 @@
#include "drawing-cairo.hh"
#include "fonts-pangocairo.hh"
-#define VTE_DRAW_NORMAL 0
-#define VTE_DRAW_BOLD 1
-#define VTE_DRAW_ITALIC 2
-
/* cairo_show_glyphs accepts runs up to 102 glyphs before it allocates a
* temporary array.
*
@@ -37,11 +33,18 @@
*/
#define MAX_RUN_LENGTH 100
-guint _vte_draw_get_style(gboolean bold, gboolean italic) {
- guint style = 0;
- if (bold)
+#define VTE_DRAW_NORMAL 0
+#define VTE_DRAW_BOLD 1
+#define VTE_DRAW_ITALIC 2
+#define VTE_DRAW_BOLD_ITALIC 3
+
+static unsigned
+attr_to_style(uint32_t attr)
+{
+ auto style = unsigned{0};
+ if (attr & VTE_ATTR_BOLD)
style |= VTE_DRAW_BOLD;
- if (italic)
+ if (attr & VTE_ATTR_ITALIC)
style |= VTE_DRAW_ITALIC;
return style;
}
@@ -226,7 +229,7 @@ DrawingContext::get_text_metrics(int* cell_width,
void
DrawingContext::get_char_edges(vteunistr c,
int columns,
- guint style,
+ uint32_t attr,
int& left,
int& right)
{
@@ -244,7 +247,7 @@ DrawingContext::get_char_edges(vteunistr c,
return;
}
- w = m_fonts[style]->get_unistr_info(c)->width;
+ w = m_fonts[attr_to_style(attr)]->get_unistr_info(c)->width;
normal_width = m_fonts[VTE_DRAW_NORMAL]->width() * columns;
fits_width = m_cell_width * columns;
@@ -270,14 +273,13 @@ DrawingContext::draw_text_internal(TextRequest* requests,
gsize n_requests,
uint32_t attr,
vte::color::rgb const* color,
- double alpha,
- guint style)
+ double alpha)
{
gsize i;
cairo_scaled_font_t *last_scaled_font = nullptr;
int n_cr_glyphs = 0;
cairo_glyph_t cr_glyphs[MAX_RUN_LENGTH];
- auto font = m_fonts[style];
+ auto font = m_fonts[attr_to_style(attr)];
g_return_if_fail (font != nullptr);
@@ -306,7 +308,7 @@ DrawingContext::draw_text_internal(TextRequest* requests,
auto ufi = &uinfo->m_ufi;
int x, y, ye;
- get_char_edges(c, requests[i].columns, style, x, ye /* unused */);
+ get_char_edges(c, requests[i].columns, attr, x, ye /* unused */);
x += requests[i].x;
/* Bold/italic versions might have different ascents. In order to align their
* baselines, we offset by the normal font's ascent here. (Bug 137.) */
@@ -360,8 +362,7 @@ DrawingContext::draw_text(TextRequest* requests,
gsize n_requests,
uint32_t attr,
vte::color::rgb const* color,
- double alpha,
- guint style)
+ double alpha)
{
g_assert(m_cr);
@@ -375,12 +376,12 @@ DrawingContext::draw_text(TextRequest* requests,
str = g_string_free (string, FALSE);
g_printerr ("draw_text (\"%s\", len=%" G_GSIZE_FORMAT ", color=(%d,%d,%d,%.3f), %s - %s)\n",
str, n_requests, color->red, color->green, color->blue, alpha,
- (style & VTE_DRAW_BOLD) ? "bold" : "normal",
- (style & VTE_DRAW_ITALIC) ? "italic" : "regular");
+ (attr & VTE_ATTR_BOLD) ? "bold" : "normal",
+ (attr & VTE_ATTR_ITALIC) ? "italic" : "regular");
g_free (str);
}
- draw_text_internal(requests, n_requests, attr, color, alpha, style);
+ draw_text_internal(requests, n_requests, attr, color, alpha);
}
/* The following two functions are unused since commit 154abade902850afb44115cccf8fcac51fc082f0,
@@ -388,12 +389,13 @@ DrawingContext::draw_text(TextRequest* requests,
*/
bool
DrawingContext::has_char(vteunistr c,
- guint style)
+ uint32_t attr)
{
_vte_debug_print (VTE_DEBUG_DRAW, "draw_has_char ('0x%04X', %s - %s)\n", c,
- (style & VTE_DRAW_BOLD) ? "bold" : "normal",
- (style & VTE_DRAW_ITALIC) ? "italic" : "regular");
+ (attr & VTE_ATTR_BOLD) ? "bold" : "normal",
+ (attr & VTE_ATTR_ITALIC) ? "italic" : "regular");
+ auto const style = attr_to_style(attr);
g_return_val_if_fail(m_fonts[style], false);
auto uinfo = m_fonts[style]->get_unistr_info(c);
@@ -404,20 +406,19 @@ bool
DrawingContext::draw_char(TextRequest* request,
uint32_t attr,
vte::color::rgb const* color,
- double alpha,
- guint style)
+ double alpha)
{
_vte_debug_print (VTE_DEBUG_DRAW,
"draw_char ('%c', color=(%d,%d,%d,%.3f), %s, %s)\n",
request->c,
color->red, color->green, color->blue,
alpha,
- (style & VTE_DRAW_BOLD) ? "bold" : "normal",
- (style & VTE_DRAW_ITALIC) ? "italic" : "regular");
+ (attr & VTE_ATTR_BOLD) ? "bold" : "normal",
+ (attr & VTE_ATTR_ITALIC) ? "italic" : "regular");
- auto const have_char = has_char(request->c, style);
+ auto const have_char = has_char(request->c, attr);
if (have_char)
- draw_text(request, 1, attr, color, alpha, style);
+ draw_text(request, 1, attr, color, alpha);
return have_char;
}
diff --git a/src/drawing-cairo.hh b/src/drawing-cairo.hh
index d5642487..8c605e35 100644
--- a/src/drawing-cairo.hh
+++ b/src/drawing-cairo.hh
@@ -85,24 +85,20 @@ public:
GtkBorder* char_spacing);
void get_char_edges(vteunistr c,
int columns,
- guint style,
+ uint32_t attr,
int& left,
int& right);
- bool has_bold(guint style);
-
void draw_text(TextRequest* requests,
gsize n_requests,
uint32_t attr,
vte::color::rgb const* color,
- double alpha,
- guint style);
+ double alpha);
bool draw_char(TextRequest* request,
uint32_t attr,
vte::color::rgb const* color,
- double alpha,
- guint style);
+ double alpha);
bool has_char(vteunistr c,
- guint style);
+ uint32_t attr);
void fill_rectangle(int x,
int y,
int width,
@@ -148,8 +144,7 @@ private:
gsize n_requests,
uint32_t attr,
vte::color::rgb const* color,
- double alpha,
- guint style);
+ double alpha);
// std::array<vte::base::RefPtr<FontInfo>, 4> m_fonts{};
FontInfo* m_fonts[4]{nullptr, nullptr, nullptr, nullptr};
@@ -168,8 +163,6 @@ private:
} // namespace view
} // namespace vte
-guint _vte_draw_get_style(gboolean bold, gboolean italic);
-
double
_vte_draw_get_undercurl_height(gint width, double line_width);
diff --git a/src/vte.cc b/src/vte.cc
index 2f8c5ae2..99b6d341 100644
--- a/src/vte.cc
+++ b/src/vte.cc
@@ -8351,9 +8351,7 @@ Terminal::draw_cells(vte::view::DrawingContext::TextRequest* items,
m_draw.draw_text(
items, n,
attr,
- &fg, VTE_DRAW_OPAQUE,
- _vte_draw_get_style(attr & VTE_ATTR_BOLD,
- attr & VTE_ATTR_ITALIC));
+ &fg, VTE_DRAW_OPAQUE);
}
/* FIXME: we don't have a way to tell GTK+ what the default text attributes
@@ -8933,7 +8931,6 @@ Terminal::paint_cursor()
vte::grid::row_t drow;
vte::grid::column_t lcol, vcol;
int width, height, cursor_width;
- guint style = 0;
guint fore, back, deco;
vte::color::rgb bg;
int x, y;
@@ -8984,9 +8981,7 @@ Terminal::paint_cursor()
item.y = row_to_pixel(drow);
item.mirror = bidirow->vis_is_rtl(vcol);
item.box_mirror = (row_data && (row_data->attr.bidi_flags & VTE_BIDI_FLAG_BOX_MIRROR));
- if (cell && cell->c != 0) {
- style = _vte_draw_get_style(cell->attr.bold(), cell->attr.italic());
- }
+ auto const attr = cell && cell->c ? cell->attr.attr : 0;
selected = cell_is_selected_log(lcol, drow);
determine_cursor_colors(cell, selected, &fore, &back, &deco);
@@ -9049,7 +9044,7 @@ Terminal::paint_cursor()
if (cell && cell->c != 0 && cell->c != ' ' && cell->c != '\t') {
int l, r;
- m_draw.get_char_edges(cell->c, cell->attr.columns(), style, l, r);
+ m_draw.get_char_edges(cell->c, cell->attr.columns(), attr, l, r);
left = MIN(left, l);
right = MAX(right, r);
}
@@ -9068,7 +9063,7 @@ Terminal::paint_cursor()
cursor_width = item.columns * width;
if (cell && cell->c != 0 && cell->c != ' ' && cell->c != '\t') {
int l, r;
- m_draw.get_char_edges(cell->c, cell->attr.columns(), style, l /* unused */,
r);
+ m_draw.get_char_edges(cell->c, cell->attr.columns(), attr, l /* unused */,
r);
cursor_width = MAX(cursor_width, r);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]