diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2007-02-23 21:14:55 +0000 |
---|---|---|
committer | Chris Wilson <cpwilson@src.gnome.org> | 2007-02-23 21:14:55 +0000 |
commit | 5e833e3796c867152ab1345e16d06e4c35d5d3fa (patch) | |
tree | a7cdaf1b4ce4a6d6e9b0379a0a97f1e86f5e6855 | |
parent | 2914a06ebea030f7cc87e01ab4cb3c4f397ed976 (diff) | |
download | vte-5e833e3796c867152ab1345e16d06e4c35d5d3fa.tar.gz |
A couple of compiler warnings and avoid unnecessary arithmetic.
2007-02-23 Chris Wilson <chris@chris-wilson.co.uk>
A couple of compiler warnings and avoid unnecessary arithmetic.
* src/vte.c: (_vte_terminal_set_default_attributes),
(find_start_column), (find_end_column),
(vte_terminal_start_selection), (vte_terminal_extend_selection),
(vte_terminal_draw_rows), (vte_terminal_paint):
* src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_for_char),
(_vte_xft_char_width), (_vte_xft_unlock_fonts), (_vte_xft_start),
(_vte_xft_clip), (_vte_xft_set_text_font), (_vte_xft_draw_text):
svn path=/trunk/; revision=1738
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | src/vte.c | 52 | ||||
-rw-r--r-- | src/vtexft.c | 46 |
3 files changed, 56 insertions, 54 deletions
@@ -1,5 +1,17 @@ 2007-02-23 Chris Wilson <chris@chris-wilson.co.uk> + A couple of compiler warnings and avoid unnecessary arithmetic. + + * src/vte.c: (_vte_terminal_set_default_attributes), + (find_start_column), (find_end_column), + (vte_terminal_start_selection), (vte_terminal_extend_selection), + (vte_terminal_draw_rows), (vte_terminal_paint): + * src/vtexft.c: (_vte_xft_font_open), (_vte_xft_font_for_char), + (_vte_xft_char_width), (_vte_xft_unlock_fonts), (_vte_xft_start), + (_vte_xft_clip), (_vte_xft_set_text_font), (_vte_xft_draw_text): + +2007-02-23 Chris Wilson <chris@chris-wilson.co.uk> + Bug 411276 – SVN trunk compilation error Part 2. @@ -310,7 +310,7 @@ _vte_terminal_set_default_attributes(VteTerminal *terminal) screen = terminal->pvt->screen; - screen->defaults.c = ' '; + screen->defaults.c = 0; screen->defaults.columns = 1; screen->defaults.fragment = 0; screen->defaults.empty = 1; @@ -5291,7 +5291,7 @@ vte_terminal_paste(VteTerminal *terminal, GdkAtom board) } static glong -start_column (VteTerminal *terminal, glong col, glong row) +find_start_column (VteTerminal *terminal, glong col, glong row) { VteRowData *row_data = _vte_terminal_find_row_data (terminal, row); struct vte_charcell *cell = _vte_row_data_find_charcell(row_data, col); @@ -5301,7 +5301,7 @@ start_column (VteTerminal *terminal, glong col, glong row) return MAX(col, 0); } static glong -end_column (VteTerminal *terminal, glong col, glong row) +find_end_column (VteTerminal *terminal, glong col, glong row) { VteRowData *row_data = _vte_terminal_find_row_data (terminal, row); struct vte_charcell *cell = _vte_row_data_find_charcell(row_data, col); @@ -5326,7 +5326,7 @@ vte_terminal_start_selection(VteTerminal *terminal, GdkEventButton *event, /* Convert the event coordinates to cell coordinates. */ delta = terminal->pvt->screen->scroll_delta; celly = (event->y - VTE_PAD_WIDTH) / terminal->char_height + delta; - cellx = start_column (terminal, + cellx = find_start_column (terminal, (event->x - VTE_PAD_WIDTH) / terminal->char_width, celly); @@ -5356,7 +5356,7 @@ vte_terminal_start_selection(VteTerminal *terminal, GdkEventButton *event, terminal->pvt->selection_start.x = cellx; terminal->pvt->selection_start.y = celly; - terminal->pvt->selection_end.x = end_column (terminal, + terminal->pvt->selection_end.x = find_end_column (terminal, cellx, celly); terminal->pvt->selection_end.y = celly; terminal->pvt->selection_origin = @@ -5499,8 +5499,8 @@ vte_terminal_extend_selection(VteTerminal *terminal, double x, double y, *sc = *ec; *ec = tc; } - sc->x = start_column (terminal, sc->x, sc->y); - ec->x = end_column (terminal, ec->x, ec->y); + sc->x = find_start_column (terminal, sc->x, sc->y); + ec->x = find_end_column (terminal, ec->x, ec->y); /* Extend the selection to handle end-of-line cases, word, and line * selection. We do this here because calculating it once is cheaper @@ -5538,7 +5538,7 @@ vte_terminal_extend_selection(VteTerminal *terminal, double x, double y, sc->x = 0; } } - sc->x = start_column (terminal, sc->x, sc->y); + sc->x = find_start_column (terminal, sc->x, sc->y); /* Handle end-of-line at the end-cell. */ if (!terminal->pvt->block_mode) { @@ -5566,7 +5566,7 @@ vte_terminal_extend_selection(VteTerminal *terminal, double x, double y, ec->x = MAX(ec->x, terminal->column_count - 1); } } - ec->x = end_column (terminal, ec->x, ec->y); + ec->x = find_end_column (terminal, ec->x, ec->y); /* Now extend again based on selection type. */ switch (terminal->pvt->selection_type) { @@ -9057,10 +9057,11 @@ vte_terminal_draw_rows(VteTerminal *terminal, gint start_x, gint start_y, gint column_width, gint row_height) { - gint i, j, row, rows, x, y, fore, nfore, back, nback; + struct _vte_draw_text_request items[4*VTE_DRAW_MAX_LENGTH]; + gint i, j, row, rows, x, y, end_column; + gint fore, nfore, back, nback; gboolean underline, nunderline, bold, nbold, hilite, nhilite, reverse, selected, strikethrough, nstrikethrough; - struct _vte_draw_text_request items[4*VTE_DRAW_MAX_LENGTH]; guint item_count; struct vte_charcell *cell; VteRowData *row_data; @@ -9069,6 +9070,7 @@ vte_terminal_draw_rows(VteTerminal *terminal, /* adjust for the absolute start of row */ start_x -= start_column * column_width; + end_column = start_column + column_count; /* clear the background */ x = start_x + VTE_PAD_WIDTH; @@ -9099,7 +9101,7 @@ vte_terminal_draw_rows(VteTerminal *terminal, j = i + (cell ? cell->columns : 1); - while (j < start_column + column_count){ + while (j < end_column){ /* Don't render fragments of multicolumn characters * which have the same attributes as the initial * portions. */ @@ -9138,7 +9140,7 @@ vte_terminal_draw_rows(VteTerminal *terminal, /* We'll need to continue at the first cell which didn't * match the first one in this set. */ i = j; - } while (i < start_column + column_count); + } while (i < end_column); row++; y += row_height; } while (--rows); @@ -9162,14 +9164,14 @@ vte_terminal_draw_rows(VteTerminal *terminal, } /* Walk the line. */ - while (i < start_column + column_count) { + while (i < end_column) { /* Get the character cell's contents. */ cell = _vte_row_data_find_charcell(row_data, i); while (cell == NULL || cell->c == 0 || cell->c == ' ' || cell->fragment) { - if (++i >= start_column + column_count) { + if (++i >= end_column) { goto next_row; } cell = _vte_row_data_find_charcell(row_data, i); @@ -9219,13 +9221,13 @@ vte_terminal_draw_rows(VteTerminal *terminal, /* Now find out how many cells have the same attributes. */ do { - while ((j < start_column + column_count) && - (item_count < G_N_ELEMENTS(items))) { + while (j < end_column && + item_count < G_N_ELEMENTS(items)) { /* Retrieve the cell. */ cell = _vte_row_data_find_charcell(row_data, j); if (cell == NULL || cell->c == 0 || - cell->c == ' ') { + cell->c == ' '){ /* only break the run if we * are drawing attributes */ @@ -9308,7 +9310,7 @@ vte_terminal_draw_rows(VteTerminal *terminal, item_count++; } /* have we encountered a state change? */ - if (j < start_column + column_count) { + if (j < end_column) { break; } /* is this the last column, on the last row? */ @@ -9636,7 +9638,7 @@ vte_terminal_paint(GtkWidget *widget, GdkRegion *region) terminal->pvt->match_end.row, TRUE); } - if (cell && cell->c != ' ') { + if (cell && cell->c != 0 && cell->c != ' ') { vte_terminal_draw_cells(terminal, &item, 1, fore, back, TRUE, FALSE, @@ -9677,7 +9679,7 @@ draw_cursor_outline: TRUE); } /* Draw it as a hollow rectangle overtop character. */ - if (cell && cell->c != ' ') { + if (cell && cell->c != 0 && cell->c != ' ') { vte_terminal_draw_cells(terminal, &item, 1, fore, back, TRUE, FALSE, @@ -9728,7 +9730,7 @@ draw_cursor_outline: /* Draw the preedit string, boxed. */ if (len > 0) { - items = g_new(struct _vte_draw_text_request, len + 1); + items = g_new(struct _vte_draw_text_request, len); preedit = terminal->pvt->im_preedit; for (i = columns = 0; i < len; i++) { if ((preedit - terminal->pvt->im_preedit) == @@ -9746,10 +9748,6 @@ draw_cursor_outline: terminal->pvt->im_preedit_cursor) { preedit_cursor = i; } - items[len].c = ' '; - items[len].columns = 1; - items[len].x = (col + columns) * width; - items[len].y = row * height; _vte_draw_clear(terminal->pvt->draw, col * width + VTE_PAD_WIDTH, row * height + VTE_PAD_WIDTH, @@ -9758,7 +9756,7 @@ draw_cursor_outline: fore = screen->defaults.fore; back = screen->defaults.back; vte_terminal_draw_cells_with_attributes(terminal, - items, len + 1, + items, len, terminal->pvt->im_preedit_attrs, TRUE, width, height); diff --git a/src/vtexft.c b/src/vtexft.c index c4c10e43..d894556e 100644 --- a/src/vtexft.c +++ b/src/vtexft.c @@ -36,8 +36,8 @@ #include <glib/gi18n-lib.h> -#define FONT_INDEX_FUDGE 10 -#define CHAR_WIDTH_FUDGE 10 +#define FONT_INDEX_FUDGE 1 +#define CHAR_WIDTH_FUDGE 1 #define DPY_FUDGE 1 @@ -166,6 +166,7 @@ _vte_xft_font_open (GtkWidget *widget, const PangoFontDescription *fontdesc, } else { g_hash_table_insert (font_cache, font, font); font->fonts = g_ptr_array_new (); + g_ptr_array_add (font->fonts, NULL); /* 1 indexed array */ font->fontmap = _vte_tree_new (_vte_xft_direct_compare); font->widths = _vte_tree_new (_vte_xft_direct_compare); } @@ -224,7 +225,6 @@ _vte_xft_font_for_char (struct _vte_xft_font *font, gunichar c, GPtrArray *locke return NULL; /* Matched before. */ default: - i -= FONT_INDEX_FUDGE; ftfont = g_ptr_array_index (font->fonts, i); if (g_ptr_array_index (locked_fonts, i) == NULL) { XftLockFace (ftfont); @@ -235,7 +235,7 @@ _vte_xft_font_for_char (struct _vte_xft_font *font, gunichar c, GPtrArray *locke } /* Look the character up in the fonts we have. */ - for (i = 0; i < font->fonts->len; i++) { + for (i = 1; i < font->fonts->len; i++) { ftfont = g_ptr_array_index (font->fonts, i); if (_vte_xft_char_exists (font, ftfont, c)) { if (g_ptr_array_index (locked_fonts, i) == NULL) { @@ -243,8 +243,7 @@ _vte_xft_font_for_char (struct _vte_xft_font *font, gunichar c, GPtrArray *locke g_ptr_array_index (locked_fonts, i) = ftfont; } _vte_tree_insert (font->fontmap, - p, - GINT_TO_POINTER (i + FONT_INDEX_FUDGE)); + p, GINT_TO_POINTER (i)); return ftfont; } } @@ -261,8 +260,7 @@ _vte_xft_font_for_char (struct _vte_xft_font *font, gunichar c, GPtrArray *locke XftLockFace (ftfont); g_ptr_array_index (locked_fonts, i) = ftfont; _vte_tree_insert (font->fontmap, - p, - GINT_TO_POINTER (i + FONT_INDEX_FUDGE)); + p, GINT_TO_POINTER (i)); font->last_pattern = j; return ftfont; } @@ -275,8 +273,7 @@ _vte_xft_font_for_char (struct _vte_xft_font *font, gunichar c, GPtrArray *locke /* No match? */ _vte_tree_insert (font->fontmap, - p, - GINT_TO_POINTER (-FONT_INDEX_FUDGE)); + p, GINT_TO_POINTER (-FONT_INDEX_FUDGE)); g_warning (_ ("Can not find appropiate font for character U+%04x.\n"), c); return NULL; } @@ -294,10 +291,8 @@ _vte_xft_char_width (struct _vte_xft_font *font, XftFont *ftfont, gunichar c) switch (i) { case -CHAR_WIDTH_FUDGE: return 0; - break; default: - return i - CHAR_WIDTH_FUDGE; - break; + return i; } } @@ -306,8 +301,11 @@ _vte_xft_char_width (struct _vte_xft_font *font, XftFont *ftfont, gunichar c) if (ftfont != NULL) { _vte_xft_text_extents (font, ftfont, c, &extents); } - i = extents.xOff + CHAR_WIDTH_FUDGE; - _vte_tree_insert (font->widths, p, GINT_TO_POINTER (i)); + if (extents.xOff == 0) { + _vte_tree_insert (font->widths, p, -CHAR_WIDTH_FUDGE); + } else { + _vte_tree_insert (font->widths, p, GINT_TO_POINTER (extents.xOff)); + } return extents.xOff; } @@ -336,7 +334,7 @@ _vte_xft_unlock_fonts (struct _vte_xft_data *data) { guint i, j; for (i = 0; i < G_N_ELEMENTS (data->locked_fonts); i++) { - for (j = 0; j < data->locked_fonts[i]->len; j++) { + for (j = 1; j < data->locked_fonts[i]->len; j++) { XftFont *ftfont = g_ptr_array_index ( data->locked_fonts[i], j); if (ftfont != NULL) { @@ -413,10 +411,10 @@ _vte_xft_start (struct _vte_draw *draw) } data->gc = XCreateGC (data->display, data->drawable, 0, NULL); - locked_fonts = data->locked_fonts [ (++data->cur_locked_fonts)&1]; + locked_fonts = data->locked_fonts [(++data->cur_locked_fonts)&1]; if (locked_fonts != NULL) { guint cnt=0; - for (i = 0; i < locked_fonts->len; i++) { + for (i = 1; i < locked_fonts->len; i++) { XftFont *ftfont = g_ptr_array_index (locked_fonts, i); if (ftfont != NULL) { XftUnlockFace (ftfont); @@ -500,7 +498,7 @@ _vte_xft_clip (struct _vte_draw *draw, gdk_region_get_rectangles (region, &rect, &n); if (n>0) { XRectangle *xrect = g_new (XRectangle, n); - for (i=0; i<n; i++) { + for (i = 0; i < n; i++) { /* we include the offset here as XftDrawSetClipRectangles () has a * byte-sex bug in its offset parameters. Bug 403159. */ @@ -607,8 +605,8 @@ _vte_xft_set_text_font (struct _vte_draw *draw, return; } - data->locked_fonts[0] = ptr_array_zeroed_new (data->font->patterns->len); - data->locked_fonts[1] = ptr_array_zeroed_new (data->font->patterns->len); + data->locked_fonts[0] = ptr_array_zeroed_new (1 + data->font->patterns->len); + data->locked_fonts[1] = ptr_array_zeroed_new (1 + data->font->patterns->len); if (data->font->have_metrics) { draw->width = data->font->width; @@ -774,9 +772,6 @@ _vte_xft_draw_text (struct _vte_draw *draw, /* find the first displayable character ... */ font = NULL; for (i = 0; i < n_requests; i++) { - if (requests[i].c == ' ') { - continue; - } font = _vte_xft_font_for_char (data->font, requests[i].c, locked_fonts); if (G_UNLIKELY (font == NULL)) { @@ -824,9 +819,6 @@ _vte_xft_draw_text (struct _vte_draw *draw, /* find the next displayable character ... */ ft = NULL; for (; i < n_requests; i++) { - if (G_UNLIKELY (requests[i].c == ' ')) { - continue; - } ft = _vte_xft_font_for_char (data->font, requests[i].c, locked_fonts); if (G_UNLIKELY (ft == NULL)) { |