summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2007-02-23 21:14:55 +0000
committerChris Wilson <cpwilson@src.gnome.org>2007-02-23 21:14:55 +0000
commit5e833e3796c867152ab1345e16d06e4c35d5d3fa (patch)
treea7cdaf1b4ce4a6d6e9b0379a0a97f1e86f5e6855
parent2914a06ebea030f7cc87e01ab4cb3c4f397ed976 (diff)
downloadvte-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--ChangeLog12
-rw-r--r--src/vte.c52
-rw-r--r--src/vtexft.c46
3 files changed, 56 insertions, 54 deletions
diff --git a/ChangeLog b/ChangeLog
index 5d960320..543d7f3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/src/vte.c b/src/vte.c
index 26844a84..5f547770 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -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)) {