Lines Matching refs:vi

40 static void gtk_vi_screen_init           (GtkViScreen        *vi);
59 static void recompute_geometry (GtkViScreen* vi);
60 static void expose_text (GtkViScreen* vi, GdkRectangle *area, gboolean cursor);
61 static void draw_lines(GtkViScreen *vi, gint y, gint x, gint ymax, gint xmax);
62 static void mark_lines(GtkViScreen *vi, gint ymin, gint xmin, gint ymax, gint xmax);
82 gtk_vi_screen_attribute(GtkViScreen *vi, gint attribute, gint on) in gtk_vi_screen_attribute() argument
86 vi->color = on ? COLOR_STANDOUT : COLOR_STANDARD; in gtk_vi_screen_attribute()
93 gtk_vi_screen_move(GtkViScreen *vi, gint row, gint col) in gtk_vi_screen_move() argument
98 endcol = vi->endcol + row*vi->cols; in gtk_vi_screen_move()
100 vi->curx = x; in gtk_vi_screen_move()
101 vi->cury = row; in gtk_vi_screen_move()
105 cleartoel (GtkViScreen *vi, guint row, guint col) in cleartoel() argument
109 if (MEMCMP(p = CharAt(vi,row,col), e = CharAt(vi,vi->rows,0), in cleartoel()
110 vi->cols - col)) { in cleartoel()
111 MEMMOVE(p, e, vi->cols - col); in cleartoel()
112 memset(FlagAt(vi,row,col), COLOR_STANDARD, vi->cols - col); in cleartoel()
113 mark_lines(vi, row, col, row+1, vi->cols); in cleartoel()
118 gtk_vi_screen_clrtoel (GtkViScreen *vi) in gtk_vi_screen_clrtoel() argument
120 cleartoel(vi, vi->cury, vi->curx); in gtk_vi_screen_clrtoel()
124 gtk_vi_screen_addstr(GtkViScreen *vi, const char *str, int len) in gtk_vi_screen_addstr() argument
132 line = vi->chars + vi->cury*vi->cols; in gtk_vi_screen_addstr()
133 endcol = vi->endcol + vi->cury*vi->cols; in gtk_vi_screen_addstr()
134 x = vi->curx; in gtk_vi_screen_addstr()
136 for (p = CharAt(vi,vi->cury,vi->curx), end = p + len, col = startcol; in gtk_vi_screen_addstr()
141 memset(FlagAt(vi,vi->cury,vi->curx), vi->color, len); in gtk_vi_screen_addstr()
143 mark_lines(vi, vi->cury, startcol+1, vi->cury+1, endcol[x-1]+1); in gtk_vi_screen_addstr()
145 if (endcol[x-1] >= vi->cols) { in gtk_vi_screen_addstr()
146 if (++vi->cury >= vi->rows) { in gtk_vi_screen_addstr()
147 vi->cury = vi->rows-1; in gtk_vi_screen_addstr()
148 vi->curx = x-1; in gtk_vi_screen_addstr()
150 vi->curx = 0; in gtk_vi_screen_addstr()
152 } else vi->curx += len; in gtk_vi_screen_addstr()
153 if (x < vi->cols) endcol[x] = vi->cols; in gtk_vi_screen_addstr()
157 gtk_vi_screen_waddstr(GtkViScreen *vi, const CHAR_T *str, int len) in gtk_vi_screen_waddstr() argument
165 MEMMOVE(CharAt(vi,vi->cury,vi->curx),str,len); in gtk_vi_screen_waddstr()
166 memset(FlagAt(vi,vi->cury,vi->curx), vi->color, len); in gtk_vi_screen_waddstr()
168 line = vi->chars + vi->cury*vi->cols; in gtk_vi_screen_waddstr()
169 endcol = vi->endcol + vi->cury*vi->cols; in gtk_vi_screen_waddstr()
170 x = vi->curx; in gtk_vi_screen_waddstr()
172 for (col = startcol; x < vi->curx + len; ++x) in gtk_vi_screen_waddstr()
175 mark_lines(vi, vi->cury, startcol+1, vi->cury+1, endcol[x-1]+1); in gtk_vi_screen_waddstr()
177 if (endcol[x-1] >= vi->cols) { in gtk_vi_screen_waddstr()
178 if (++vi->cury >= vi->rows) { in gtk_vi_screen_waddstr()
179 vi->cury = vi->rows-1; in gtk_vi_screen_waddstr()
180 vi->curx = x-1; in gtk_vi_screen_waddstr()
182 vi->curx = 0; in gtk_vi_screen_waddstr()
184 } else vi->curx += len; in gtk_vi_screen_waddstr()
185 if (x < vi->cols) endcol[x] = vi->cols; in gtk_vi_screen_waddstr()
189 gtk_vi_screen_deleteln(GtkViScreen *vi) in gtk_vi_screen_deleteln() argument
191 gint y = vi->cury; in gtk_vi_screen_deleteln()
192 gint rows = vi->rows - (y+1); in gtk_vi_screen_deleteln()
194 MEMMOVE(CharAt(vi,y,0), CharAt(vi,y+1,0), rows * vi->cols); in gtk_vi_screen_deleteln()
195 cleartoel(vi,vi->rows-1,0); in gtk_vi_screen_deleteln()
196 memmove(FlagAt(vi,y,0), FlagAt(vi,y+1,0), rows * vi->cols); in gtk_vi_screen_deleteln()
197 memmove(ColAt(vi,y,0), ColAt(vi,y+1,0), rows * vi->cols); in gtk_vi_screen_deleteln()
198 mark_lines(vi, y, 0, vi->rows-1, vi->cols); in gtk_vi_screen_deleteln()
202 gtk_vi_screen_insertln(GtkViScreen *vi) in gtk_vi_screen_insertln() argument
204 gint y = vi->cury; in gtk_vi_screen_insertln()
205 gint rows = vi->rows - (y+1); in gtk_vi_screen_insertln()
207 MEMMOVE(CharAt(vi,y+1,0), CharAt(vi,y,0), rows * vi->cols); in gtk_vi_screen_insertln()
208 cleartoel(vi,y,0); in gtk_vi_screen_insertln()
209 memmove(FlagAt(vi,y+1,0), FlagAt(vi,y,0), rows * vi->cols); in gtk_vi_screen_insertln()
210 memmove(ColAt(vi,y+1,0), ColAt(vi,y,0), rows * vi->cols); in gtk_vi_screen_insertln()
211 mark_lines(vi, y+1, 0, vi->rows, vi->cols); in gtk_vi_screen_insertln()
215 gtk_vi_screen_refresh(GtkViScreen *vi) in gtk_vi_screen_refresh() argument
217 if (vi->lastx != vi->curx || vi->lasty != vi-> cury) { in gtk_vi_screen_refresh()
218 mark_lines(vi, vi->lasty, in gtk_vi_screen_refresh()
219 vi->lastx ? *ColAt(vi,vi->lasty,vi->lastx-1) + 1 : 0, in gtk_vi_screen_refresh()
220 vi->lasty+1, *ColAt(vi,vi->lasty,vi->lastx)+1); in gtk_vi_screen_refresh()
221 mark_lines(vi, vi->cury, in gtk_vi_screen_refresh()
222 vi->curx ? *ColAt(vi,vi->cury,vi->curx-1) + 1 : 0, in gtk_vi_screen_refresh()
223 vi->cury+1, *ColAt(vi,vi->cury,vi->curx)+1); in gtk_vi_screen_refresh()
225 if (vi->marked_maxy == 0) in gtk_vi_screen_refresh()
227 draw_lines(vi, vi->marked_y, vi->marked_x, vi->marked_maxy, vi->marked_maxx); in gtk_vi_screen_refresh()
228 vi->marked_x = vi->cols; in gtk_vi_screen_refresh()
229 vi->marked_y = vi->rows; in gtk_vi_screen_refresh()
230 vi->marked_maxx = 0; in gtk_vi_screen_refresh()
231 vi->marked_maxy = 0; in gtk_vi_screen_refresh()
232 vi->lastx = vi->curx; in gtk_vi_screen_refresh()
233 vi->lasty = vi->cury; in gtk_vi_screen_refresh()
237 gtk_vi_screen_rewrite(GtkViScreen *vi, gint row) in gtk_vi_screen_rewrite() argument
239 memset(FlagAt(vi,row,0), COLOR_STANDARD, vi->cols); in gtk_vi_screen_rewrite()
240 mark_lines(vi, row, 0, row+1, vi->cols); in gtk_vi_screen_rewrite()
359 gtk_vi_screen_init (GtkViScreen *vi) in gtk_vi_screen_init() argument
363 GTK_WIDGET_SET_FLAGS (vi, GTK_CAN_FOCUS); in gtk_vi_screen_init()
365 vi->text_area = NULL; in gtk_vi_screen_init()
366 vi->chars = 0; in gtk_vi_screen_init()
367 vi->reverse = 0; in gtk_vi_screen_init()
368 vi->cols = 0; in gtk_vi_screen_init()
369 vi->color = COLOR_STANDARD; in gtk_vi_screen_init()
370 vi->cols = 0; in gtk_vi_screen_init()
371 vi->rows = 0; in gtk_vi_screen_init()
374 vi->conx = NULL; in gtk_vi_screen_init()
377 style = gtk_style_copy(GTK_WIDGET(vi)->style); in gtk_vi_screen_init()
380 GTK_WIDGET(vi)->style = style; in gtk_vi_screen_init()
403 GtkWidget *vi; in gtk_vi_screen_new() local
405 vi = gtk_widget_new (GTK_TYPE_VI_SCREEN, in gtk_vi_screen_new()
410 return vi; in gtk_vi_screen_new()
454 GtkViScreen *vi; in gtk_vi_screen_realize() local
461 vi = GTK_VI_SCREEN (widget); in gtk_vi_screen_realize()
462 GTK_WIDGET_SET_FLAGS (vi, GTK_REALIZED); in gtk_vi_screen_realize()
483 gdk_window_set_user_data (widget->window, vi); in gtk_vi_screen_realize()
490 vi->text_area = gdk_window_new (widget->window, &attributes, attributes_mask); in gtk_vi_screen_realize()
491 gdk_window_set_user_data (vi->text_area, vi); in gtk_vi_screen_realize()
497 gdk_window_set_background (vi->text_area, &widget->style->base[GTK_STATE_NORMAL]); in gtk_vi_screen_realize()
499 vi->gc = gdk_gc_new (vi->text_area); in gtk_vi_screen_realize()
501 gdk_gc_set_exposures (vi->gc, TRUE); in gtk_vi_screen_realize()
502 gdk_gc_set_foreground (vi->gc, &widget->style->text[GTK_STATE_NORMAL]); in gtk_vi_screen_realize()
504 vi->reverse_gc = gdk_gc_new (vi->text_area); in gtk_vi_screen_realize()
505 gdk_gc_set_foreground (vi->reverse_gc, &widget->style->base[GTK_STATE_NORMAL]); in gtk_vi_screen_realize()
507 gdk_window_show (vi->text_area); in gtk_vi_screen_realize()
509 recompute_geometry (vi); in gtk_vi_screen_realize()
520 GtkViScreen *vi; in gtk_vi_screen_size_request() local
526 vi = GTK_VI_SCREEN (widget); in gtk_vi_screen_size_request()
531 vi->ch_ascent = widget->style->font->ascent; in gtk_vi_screen_size_request()
532 vi->ch_height = (widget->style->font->ascent + widget->style->font->descent) + 1; in gtk_vi_screen_size_request()
533 vi->ch_width = gdk_text_width (widget->style->font, "A", 1); in gtk_vi_screen_size_request()
534 char_height = DEFAULT_VI_SCREEN_HEIGHT_LINES * vi->ch_height; in gtk_vi_screen_size_request()
535 char_width = DEFAULT_VI_SCREEN_WIDTH_CHARS * vi->ch_width; in gtk_vi_screen_size_request()
545 GtkViScreen *vi; in gtk_vi_screen_size_allocate() local
551 vi = GTK_VI_SCREEN (widget); in gtk_vi_screen_size_allocate()
560 gdk_window_move_resize (vi->text_area, in gtk_vi_screen_size_allocate()
568 recompute_geometry (vi); in gtk_vi_screen_size_allocate()
602 recompute_geometry (GtkViScreen* vi) in recompute_geometry() argument
614 gdk_window_get_size (vi->text_area, &width, &height); in recompute_geometry()
616 rows = height / vi->ch_height; in recompute_geometry()
617 cols = width / vi->ch_width; in recompute_geometry()
619 if (rows == vi->rows && cols == vi->cols) in recompute_geometry()
622 vi->marked_x = vi->cols = cols; in recompute_geometry()
623 vi->marked_y = vi->rows = rows; in recompute_geometry()
624 vi->marked_maxx = 0; in recompute_geometry()
625 vi->marked_maxy = 0; in recompute_geometry()
627 g_free(vi->chars); in recompute_geometry()
628 vi->chars = (CHAR_T*)g_new(gchar, (vi->rows+1)*vi->cols * sizeof(CHAR_T)); in recompute_geometry()
629 STRSET(vi->chars, L(' '), (vi->rows+1)*vi->cols); in recompute_geometry()
630 g_free(vi->endcol); in recompute_geometry()
631 vi->endcol = g_new(guchar, vi->rows*vi->cols); in recompute_geometry()
632 g_free(vi->reverse); in recompute_geometry()
633 vi->reverse = g_new(guchar, vi->rows*vi->cols); in recompute_geometry()
634 memset(vi->reverse, 0, vi->rows*vi->cols); in recompute_geometry()
636 gtk_signal_emit(GTK_OBJECT(vi), vi_screen_signals[RESIZED], vi->rows, vi->cols); in recompute_geometry()
640 expose_text (GtkViScreen* vi, GdkRectangle *area, gboolean cursor) in expose_text() argument
645 gdk_window_clear_area (vi->text_area, area->x, area->y, in expose_text()
647 ymax = MIN((area->y + area->height + vi->ch_height - 1) / vi->ch_height, in expose_text()
648 vi->rows); in expose_text()
649 xmin = area->x / vi->ch_width; in expose_text()
650 xmax = MIN((area->x + area->width + vi->ch_width - 1) / vi->ch_width, in expose_text()
651 vi->cols); in expose_text()
652 draw_lines(vi, area->y / vi->ch_height, xmin, ymax, xmax); in expose_text()
660 draw_lines(GtkViScreen *vi, gint ymin, gint xmin, gint ymax, gint xmax) in draw_lines() argument
670 for (y = ymin, line = vi->chars + y*vi->cols; in draw_lines()
671 y < ymax; ++y, line += vi->cols) { in draw_lines()
678 inverse = Inverse(vi,y,x); in draw_lines()
682 Inverse(vi,y,x+len) == inverse; ++len); in draw_lines()
684 fg = vi->reverse_gc; in draw_lines()
685 bg = vi->gc; in draw_lines()
687 bg = vi->reverse_gc; in draw_lines()
688 fg = vi->gc; in draw_lines()
693 if (!vi->conx) { in draw_lines()
703 vi->conx = gdk_pango_context_get(); in draw_lines()
704 pango_context_set_font_description (vi->conx, in draw_lines()
706 pango_context_set_lang(vi->conx, "en_US"); in draw_lines()
707 vi->alist = pango_attr_list_new(); in draw_lines()
714 font = GTK_WIDGET(vi)->style->font; in draw_lines()
723 gdk_draw_rectangle(vi->text_area, bg, 1, xpos * vi->ch_width, in draw_lines()
724 y * vi->ch_height, blen * vi->ch_width, in draw_lines()
725 vi->ch_height); in draw_lines()
730 gdk_draw_text (vi->text_area, font, fg, in draw_lines()
731 xpos * vi->ch_width, in draw_lines()
732 y * vi->ch_height + vi->ch_ascent, in draw_lines()
743 list = pango_itemize(vi->conx, buf, 0, len, vi->alist, NULL); in draw_lines()
748 gdk_draw_glyphs (vi->text_area, fg, item->analysis.font, in draw_lines()
749 xpos * vi->ch_width, in draw_lines()
750 y * vi->ch_height + vi->ch_ascent, gs); in draw_lines()
758 mark_lines(GtkViScreen *vi, gint ymin, gint xmin, gint ymax, gint xmax) in mark_lines() argument
760 if (ymin < vi->marked_y) vi->marked_y = ymin; in mark_lines()
761 if (xmin < vi->marked_x) vi->marked_x = xmin; in mark_lines()
762 if (ymax > vi->marked_maxy) vi->marked_maxy = ymax; in mark_lines()
763 if (xmax > vi->marked_maxx) vi->marked_maxx = xmax; in mark_lines()