Yattm - unified GTK instant-messaging client | |
[Generated for version 0.2-17 - Mon Jan 6 19:01:23 GMT+1 2003] |
#include "intl.h"
#include <ctype.h>
#include <string.h>
#include <gdk/gdkkeysyms.h>
#include <gdk/gdki18n.h>
#include <gtk/gtkmain.h>
#include <gtk/gtkselection.h>
#include <gtk/gtksignal.h>
#include <gdk/gdkprivate.h>
#include "extgtktext.h"
#include "globals.h"
Include dependency graph for extgtktext.c:
Go to the source code of this file.
Data Structures | |
struct | _ExtGtkTextFont |
struct | _FetchLinesData |
struct | _LineParams |
struct | _PrevTabCont |
struct | _SetVerticalScrollData |
struct | _TabStopMark |
struct | _TextProperty |
Defines | |
#define | INITIAL_BUFFER_SIZE 1024 |
#define | INITIAL_LINE_CACHE_SIZE 256 |
#define | MIN_GAP_SIZE 256 |
#define | LINE_DELIM '\n' |
#define | MIN_TEXT_WIDTH_LINES 20 |
#define | MIN_TEXT_HEIGHT_LINES 10 |
#define | TEXT_BORDER_ROOM 1 |
#define | DEFAULT_TAB_STOP_WIDTH 4 |
#define | SCROLL_PIXELS 5 |
#define | KEY_SCROLL_PIXELS 10 |
#define | SCROLL_TIME 100 |
#define | FREEZE_LENGTH 1024 |
#define | SET_PROPERTY_MARK(m, p, o) |
#define | MARK_CURRENT_PROPERTY(mark) ((TextProperty*)(mark)->property->data) |
#define | MARK_NEXT_PROPERTY(mark) ((TextProperty*)(mark)->property->next->data) |
#define | MARK_PREV_PROPERTY(mark) |
#define | MARK_PREV_LIST_PTR(mark) ((mark)->property->prev) |
#define | MARK_LIST_PTR(mark) ((mark)->property) |
#define | MARK_NEXT_LIST_PTR(mark) ((mark)->property->next) |
#define | MARK_OFFSET(mark) ((mark)->offset) |
#define | MARK_PROPERTY_LENGTH(mark) (MARK_CURRENT_PROPERTY(mark)->length) |
#define | MARK_CURRENT_FONT(text, mark) |
#define | MARK_CURRENT_FORE(text, mark) |
#define | MARK_CURRENT_BACK(text, mark) |
#define | MARK_CURRENT_UNDERLINED(text, mark) |
#define | MARK_CURRENT_DIVIDER(text, mark) |
#define | MARK_CURRENT_MASK(text, mark) |
#define | MARK_CURRENT_IMAGE(text, mark) |
#define | MARK_CURRENT_TEXT_FONT(text, mark) |
#define | MARK_CURRENT_DATA(text, mark) |
#define | MARK_CURRENT_DATA_FUNC(text, mark) |
#define | TEXT_LENGTH(t) ((t)->text_end - (t)->gap_size) |
#define | FONT_HEIGHT(f) ((f)->ascent + (f)->descent) |
#define | LINE_HEIGHT(l) ((l).font_ascent + (l).font_descent) |
#define | LINE_CONTAINS(l, i) ((l).start.index <= (i) && (l).end.index >= (i)) |
#define | LINE_STARTS_AT(l, i) ((l).start.index == (i)) |
#define | LINE_START_PIXEL(l) ((l).tab_cont.pixel_offset) |
#define | LAST_INDEX(t, m) ((m).index == TEXT_LENGTH(t)) |
#define | CACHE_DATA(c) (*(LineParams*)(c)->data) |
#define | TDEBUG(args) |
#define | TEXT_ASSERT(text) |
#define | TEXT_ASSERT_MARK(text, mark, msg) |
#define | TEXT_SHOW(text) |
#define | TEXT_SHOW_LINE(text, line, msg) |
#define | TEXT_SHOW_ADJ(text, adj, msg) |
Typedefs | |
typedef _TextProperty | TextProperty |
typedef _TabStopMark | TabStopMark |
typedef _PrevTabCont | PrevTabCont |
typedef _FetchLinesData | FetchLinesData |
typedef _LineParams | LineParams |
typedef _SetVerticalScrollData | SetVerticalScrollData |
typedef gint(* | LineIteratorFunction )(ExtGtkText *text, LineParams *lp, void *data) |
Enumerations | |
enum | { ARG_0, ARG_HADJUSTMENT, ARG_VADJUSTMENT, ARG_LINE_WRAP, ARG_WORD_WRAP } |
enum | FLType { FetchLinesPixels, FetchLinesCount } |
enum | TextPropertyFlags { PROPERTY_FONT = 1 << 0, PROPERTY_FOREGROUND = 1 << 1, PROPERTY_BACKGROUND = 1 << 2, PROPERTY_UNDERLINED = 1 << 3, PROPERTY_IMAGE = 1 << 4, PROPERTY_DATA = 1 << 5, PROPERTY_DIVIDER = 1 << 6 } |
Functions | |
void | gtk_text_class_init (ExtGtkTextClass *klass) |
void | gtk_text_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) |
void | gtk_text_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) |
void | gtk_text_init (ExtGtkText *text) |
void | gtk_text_destroy (GtkObject *object) |
void | gtk_text_finalize (GtkObject *object) |
void | gtk_text_realize (GtkWidget *widget) |
void | gtk_text_unrealize (GtkWidget *widget) |
void | gtk_text_style_set (GtkWidget *widget, GtkStyle *previous_style) |
void | gtk_text_state_changed (GtkWidget *widget, GtkStateType previous_state) |
void | gtk_text_draw_focus (GtkWidget *widget) |
void | gtk_text_size_request (GtkWidget *widget, GtkRequisition *requisition) |
void | gtk_text_size_allocate (GtkWidget *widget, GtkAllocation *allocation) |
void | gtk_text_adjustment (GtkAdjustment *adjustment, ExtGtkText *text) |
void | gtk_text_disconnect (GtkAdjustment *adjustment, ExtGtkText *text) |
void | ext_gtk_text_insert_text (GtkEditable *editable, const gchar *new_text, gint new_text_length, gint *position) |
void | gtk_text_delete_text (GtkEditable *editable, gint start_pos, gint end_pos) |
void | gtk_text_update_text (GtkEditable *editable, gint start_pos, gint end_pos) |
gchar * | gtk_text_get_chars (GtkEditable *editable, gint start, gint end) |
void | gtk_text_set_selection (GtkEditable *editable, gint start, gint end) |
void | gtk_text_real_set_editable (GtkEditable *editable, gboolean is_editable) |
void | gtk_text_draw (GtkWidget *widget, GdkRectangle *area) |
gint | gtk_text_expose (GtkWidget *widget, GdkEventExpose *event) |
gint | gtk_text_button_press (GtkWidget *widget, GdkEventButton *event) |
gint | gtk_text_button_release (GtkWidget *widget, GdkEventButton *event) |
gint | gtk_text_motion_notify (GtkWidget *widget, GdkEventMotion *event) |
gint | gtk_text_key_press (GtkWidget *widget, GdkEventKey *event) |
gint | gtk_text_focus_in (GtkWidget *widget, GdkEventFocus *event) |
gint | gtk_text_focus_out (GtkWidget *widget, GdkEventFocus *event) |
void | move_gap (ExtGtkText *text, guint index) |
void | make_forward_space (ExtGtkText *text, guint len) |
ExtGtkTextFont * | get_text_font (VFont *gfont) |
void | text_font_unref (ExtGtkTextFont *text_font) |
void | insert_text_property (ExtGtkText *text, VFont *font, GdkColor *fore, GdkColor *back, gboolean underlined, gboolean divider, GdkDrawable *image, GdkBitmap *mask, gpointer user_data, guint user_data_length, DataFunc *user_data_func, guint len) |
TextProperty * | new_text_property (ExtGtkText *text, VFont *font, GdkColor *fore, GdkColor *back, gboolean underlined, gboolean divider, GdkDrawable *image, GdkBitmap *mask, gpointer user_data, guint user_data_length, DataFunc *user_data_func, guint length) |
void | destroy_text_property (TextProperty *prop) |
void | init_properties (ExtGtkText *text) |
void | realize_property (ExtGtkText *text, TextProperty *prop) |
void | realize_properties (ExtGtkText *text) |
void | unrealize_property (ExtGtkText *text, TextProperty *prop) |
void | unrealize_properties (ExtGtkText *text) |
void | delete_text_property (ExtGtkText *text, guint len) |
guint | pixel_height_of (ExtGtkText *text, GList *cache_line) |
void | advance_mark (ExtGtkPropertyMark *mark) |
void | decrement_mark (ExtGtkPropertyMark *mark) |
void | advance_mark_n (ExtGtkPropertyMark *mark, gint n) |
void | decrement_mark_n (ExtGtkPropertyMark *mark, gint n) |
void | move_mark_n (ExtGtkPropertyMark *mark, gint n) |
ExtGtkPropertyMark | find_mark (ExtGtkText *text, guint mark_position) |
ExtGtkPropertyMark | find_mark_near (ExtGtkText *text, guint mark_position, const ExtGtkPropertyMark *near) |
void | find_line_containing_point (ExtGtkText *text, guint point, gboolean scroll) |
void | compute_lines_pixels (ExtGtkText *text, guint char_count, guint *lines, guint *pixels) |
gint | total_line_height (ExtGtkText *text, GList *line, gint line_count) |
LineParams | find_line_params (ExtGtkText *text, const ExtGtkPropertyMark *mark, const PrevTabCont *tab_cont, PrevTabCont *next_cont) |
void | recompute_geometry (ExtGtkText *text) |
void | insert_expose (ExtGtkText *text, guint old_pixels, gint nchars, guint new_line_count) |
void | delete_expose (ExtGtkText *text, guint nchars, guint old_lines, guint old_pixels) |
GdkGC * | create_bg_gc (ExtGtkText *text) |
void | clear_area (ExtGtkText *text, GdkRectangle *area) |
void | draw_line (ExtGtkText *text, gint pixel_height, LineParams *lp) |
void | draw_cursor (ExtGtkText *text, gint absolute) |
void | undraw_cursor (ExtGtkText *text, gint absolute) |
gint | drawn_cursor_min (ExtGtkText *text) |
gint | drawn_cursor_max (ExtGtkText *text) |
void | expose_text (ExtGtkText *text, GdkRectangle *area, gboolean cursor) |
void | find_cursor (ExtGtkText *text, gboolean scroll) |
void | find_cursor_at_line (ExtGtkText *text, const LineParams *start_line, gint pixel_height) |
void | find_mouse_cursor (ExtGtkText *text, gint x, gint y) |
void | adjust_adj (ExtGtkText *text, GtkAdjustment *adj) |
void | scroll_up (ExtGtkText *text, gint diff) |
void | scroll_down (ExtGtkText *text, gint diff) |
void | scroll_int (ExtGtkText *text, gint diff) |
void | process_exposes (ExtGtkText *text) |
void | free_cache (ExtGtkText *text) |
GList * | remove_cache_line (ExtGtkText *text, GList *list) |
void | move_cursor_buffer_ver (ExtGtkText *text, int dir) |
void | move_cursor_page_ver (ExtGtkText *text, int dir) |
void | move_cursor_ver (ExtGtkText *text, int count) |
void | move_cursor_hor (ExtGtkText *text, int count) |
void | gtk_text_move_cursor (GtkEditable *editable, gint x, gint y) |
void | gtk_text_move_word (GtkEditable *editable, gint n) |
void | gtk_text_move_page (GtkEditable *editable, gint x, gint y) |
void | gtk_text_move_to_row (GtkEditable *editable, gint row) |
void | gtk_text_move_to_column (GtkEditable *editable, gint row) |
void | gtk_text_kill_char (GtkEditable *editable, gint direction) |
void | gtk_text_kill_word (GtkEditable *editable, gint direction) |
void | gtk_text_kill_line (GtkEditable *editable, gint direction) |
void | gtk_text_move_forward_character (ExtGtkText *text) |
void | gtk_text_move_backward_character (ExtGtkText *text) |
void | gtk_text_move_forward_word (ExtGtkText *text) |
void | gtk_text_move_backward_word (ExtGtkText *text) |
void | gtk_text_move_beginning_of_line (ExtGtkText *text) |
void | gtk_text_move_end_of_line (ExtGtkText *text) |
void | gtk_text_move_next_line (ExtGtkText *text) |
void | gtk_text_move_previous_line (ExtGtkText *text) |
void | gtk_text_delete_forward_character (ExtGtkText *text) |
void | gtk_text_delete_backward_character (ExtGtkText *text) |
void | gtk_text_delete_forward_word (ExtGtkText *text) |
void | gtk_text_delete_backward_word (ExtGtkText *text) |
void | gtk_text_delete_line (ExtGtkText *text) |
void | gtk_text_delete_to_line_end (ExtGtkText *text) |
void | gtk_text_select_word (ExtGtkText *text, guint32 time) |
void | gtk_text_select_line (ExtGtkText *text, guint32 time) |
void | gtk_text_set_position (GtkEditable *editable, gint position) |
GtkType | ext_gtk_text_get_type (void) |
GtkWidget * | ext_gtk_text_new (GtkAdjustment *hadj, GtkAdjustment *vadj) |
void | ext_gtk_text_set_word_wrap (ExtGtkText *text, gint word_wrap) |
void | ext_gtk_text_set_line_wrap (ExtGtkText *text, gint line_wrap) |
void | ext_gtk_text_set_editable (ExtGtkText *text, gboolean is_editable) |
void | ext_gtk_text_set_adjustments (ExtGtkText *text, GtkAdjustment *hadj, GtkAdjustment *vadj) |
void | ext_gtk_text_set_point (ExtGtkText *text, guint index) |
guint | ext_gtk_text_get_point (ExtGtkText *text) |
guint | ext_gtk_text_get_length (ExtGtkText *text) |
void | ext_gtk_text_freeze (ExtGtkText *text) |
void | ext_gtk_text_thaw (ExtGtkText *text) |
void | ext_gtk_text_insert_alltypes (ExtGtkText *text, VFont *font, GdkColor *fore, GdkColor *back, gboolean underlined, gboolean divider, GdkDrawable *image, GdkBitmap *mask, gpointer user_data, guint user_data_length, DataFunc *user_data_func, const char *chars, gint nchars) |
void | ext_gtk_text_insert (ExtGtkText *text, VFont *font, GdkColor *fore, GdkColor *back, const char *chars, gint nchars) |
void | ext_gtk_text_insert_underlined (ExtGtkText *text, VFont *font, GdkColor *fore, GdkColor *back, const char *chars, gint nchars) |
void | ext_gtk_text_insert_divider (ExtGtkText *text, VFont *font, GdkColor *fore, GdkColor *back, const char *chars, gint nchars) |
void | ext_gtk_text_insert_pixmap (ExtGtkText *text, VFont *font, GdkColor *fore, GdkColor *back, GdkDrawable *image, GdkBitmap *mask, const char *chars, gint nchars) |
void | ext_gtk_text_insert_data_underlined (ExtGtkText *text, VFont *font, GdkColor *fore, GdkColor *back, gpointer user_data_n, guint user_data_length, DataFunc *user_data_func, const char *chars, gint nchars) |
void | ext_gtk_text_insert_data (ExtGtkText *text, VFont *font, GdkColor *fore, GdkColor *back, gpointer user_data_n, guint user_data_length, DataFunc *user_data_func, const char *chars, gint nchars) |
gint | ext_gtk_text_backward_delete (ExtGtkText *text, guint nchars) |
gint | ext_gtk_text_forward_delete (ExtGtkText *text, guint nchars) |
void | clear_focus_area (ExtGtkText *text, gint area_x, gint area_y, gint area_width, gint area_height) |
gint | gtk_text_scroll_timeout (gpointer data) |
ExtGtkPropertyMark | find_this_line_start_mark (ExtGtkText *text, guint point_position, const ExtGtkPropertyMark *near) |
void | init_tab_cont (ExtGtkText *text, PrevTabCont *tab_cont) |
void | line_params_iterate (ExtGtkText *text, const ExtGtkPropertyMark *mark0, const PrevTabCont *tab_mark0, gint8 alloc, void *data, LineIteratorFunction iter) |
gint | fetch_lines_iterator (ExtGtkText *text, LineParams *lp, void *data) |
GList * | fetch_lines (ExtGtkText *text, const ExtGtkPropertyMark *mark0, const PrevTabCont *tab_cont0, FLType fl_type, gint data) |
void | fetch_lines_backward (ExtGtkText *text) |
void | fetch_lines_forward (ExtGtkText *text, gint line_count) |
void | swap_lines (ExtGtkText *text, GList *old, GList *new, guint old_line_count) |
void | correct_cache_delete (ExtGtkText *text, gint nchars, gint lines) |
void | correct_cache_insert (ExtGtkText *text, gint nchars) |
guint | font_hash (gconstpointer font) |
gint | text_properties_equal (TextProperty *prop, VFont *font, GdkColor *fore, GdkColor *back, gboolean underlined, gboolean divider, GdkDrawable *image, gpointer user_data, guint user_data_length, DataFunc *user_data_func) |
gint | find_char_width (ExtGtkText *text, const ExtGtkPropertyMark *mark, const TabStopMark *tab_mark) |
void | advance_tab_mark (ExtGtkText *text, TabStopMark *tab_mark, GdkWChar ch) |
void | advance_tab_mark_n (ExtGtkText *text, TabStopMark *tab_mark, gint n) |
void | find_mouse_cursor_at_line (ExtGtkText *text, const LineParams *lp, guint line_pixel_height, gint button_x) |
gint | set_vertical_scroll_iterator (ExtGtkText *text, LineParams *lp, void *data) |
gint | set_vertical_scroll_find_iterator (ExtGtkText *text, LineParams *lp, void *data) |
ExtGtkPropertyMark | set_vertical_scroll (ExtGtkText *text) |
gint | last_visible_line_height (ExtGtkText *text) |
gint | first_visible_line_height (ExtGtkText *text) |
void | expand_scratch_buffer (ExtGtkText *text, guint len) |
void | draw_bg_rect (ExtGtkText *text, ExtGtkPropertyMark *mark, gint x, gint y, gint width, gint height, gboolean already_cleared) |
Variables | |
GMemChunk * | params_mem_chunk = NULL |
GMemChunk * | text_property_chunk = NULL |
GtkWidgetClass * | parent_class = NULL |
const GtkTextFunction | control_keys [26] |
const GtkTextFunction | alt_keys [26] |
GHashTable * | font_cache_table = NULL |
|
|
Definition at line 73 of file extgtktext.c. |
|
Definition at line 144 of file extgtktext.c. |
|
Definition at line 77 of file extgtktext.c. Referenced by ext_gtk_text_forward_delete(), and ext_gtk_text_insert_alltypes(). |
|
Definition at line 66 of file extgtktext.c. Referenced by ext_gtk_text_insert_alltypes(), and gtk_text_init(). |
|
Definition at line 67 of file extgtktext.c. |
|
Definition at line 75 of file extgtktext.c. Referenced by adjust_adj(), gtk_text_key_press(), and set_vertical_scroll(). |
|
|
Definition at line 146 of file extgtktext.c. |
|
Definition at line 69 of file extgtktext.c. Referenced by ext_gtk_text_forward_delete(), find_cursor_at_line(), find_line_params(), find_mouse_cursor_at_line(), find_this_line_start_mark(), gtk_text_move_to_column(), move_cursor_ver(), and recompute_geometry(). |
|
Definition at line 145 of file extgtktext.c. Referenced by compute_lines_pixels(), delete_expose(), draw_line(), expose_text(), fetch_lines_iterator(), find_line_containing_point(), find_mouse_cursor(), gtk_text_update_text(), insert_expose(), pixel_height_of(), scroll_down(), scroll_up(), set_vertical_scroll_find_iterator(), and total_line_height(). |
|
Definition at line 148 of file extgtktext.c. Referenced by find_cursor_at_line(), and find_mouse_cursor_at_line(). |
|
Definition at line 147 of file extgtktext.c. |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_BACKGROUND) ? \ &MARK_CURRENT_PROPERTY(mark)->back_color : \ &((GtkWidget *)text)->style->base[((GtkWidget *)text)->state]) Definition at line 112 of file extgtktext.c. Referenced by draw_bg_rect(), and find_cursor_at_line(). |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_DATA) ? \ MARK_CURRENT_PROPERTY(mark)->user_data:NULL) Definition at line 136 of file extgtktext.c. Referenced by gtk_text_button_press(). |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_DATA) ? \ MARK_CURRENT_PROPERTY(mark)->user_data_func:NULL) Definition at line 139 of file extgtktext.c. Referenced by gtk_text_button_press(). |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_DIVIDER) ? \ TRUE : \ FALSE) Definition at line 120 of file extgtktext.c. Referenced by draw_line(). |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_FONT) ? \ MARK_CURRENT_PROPERTY(mark)->font->gdk_font : \ GTK_WIDGET (text)->style->font) Definition at line 97 of file extgtktext.c. Referenced by draw_cursor(), draw_line(), drawn_cursor_max(), drawn_cursor_min(), find_cursor_at_line(), find_line_params(), and undraw_cursor(). |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_FOREGROUND) ? \ &MARK_CURRENT_PROPERTY(mark)->fore_color : \ &((GtkWidget *)text)->style->text[((GtkWidget *)text)->state]) Definition at line 108 of file extgtktext.c. Referenced by draw_line(), find_cursor_at_line(), and undraw_cursor(). |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_IMAGE) ? \ MARK_CURRENT_PROPERTY(mark)->image : \ NULL) Definition at line 128 of file extgtktext.c. Referenced by draw_line(), find_char_width(), and find_line_params(). |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_IMAGE) ? \ MARK_CURRENT_PROPERTY(mark)->mask: \ NULL) Definition at line 124 of file extgtktext.c. Referenced by draw_line(). |
|
Definition at line 84 of file extgtktext.c. Referenced by advance_mark(), advance_mark_n(), correct_cache_insert(), decrement_mark(), decrement_mark_n(), delete_text_property(), draw_line(), ext_gtk_text_insert_text(), and insert_text_property(). |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_FONT) ? \ MARK_CURRENT_PROPERTY(mark)->font : \ text->current_font) Definition at line 132 of file extgtktext.c. Referenced by draw_line(), find_char_width(), and find_line_params(). |
|
Value: ((MARK_CURRENT_PROPERTY(mark)->flags & PROPERTY_UNDERLINED) ? \ TRUE : \ FALSE) Definition at line 116 of file extgtktext.c. Referenced by draw_line(). |
|
Definition at line 90 of file extgtktext.c. Referenced by delete_text_property(), and insert_text_property(). |
|
Definition at line 91 of file extgtktext.c. Referenced by advance_mark(), advance_mark_n(), delete_text_property(), and insert_text_property(). |
|
Definition at line 85 of file extgtktext.c. |
|
Definition at line 92 of file extgtktext.c. Referenced by delete_text_property(), and insert_text_property(). |
|
Definition at line 89 of file extgtktext.c. Referenced by decrement_mark(), decrement_mark_n(), delete_text_property(), and insert_text_property(). |
|
Value: ((TextProperty*)((mark)->property->prev ? \ (mark)->property->prev->data \ : NULL)) Definition at line 86 of file extgtktext.c. Referenced by insert_text_property(). |
|
Definition at line 93 of file extgtktext.c. Referenced by insert_text_property(). |
|
Definition at line 68 of file extgtktext.c. Referenced by expand_scratch_buffer(), and make_forward_space(). |
|
Definition at line 71 of file extgtktext.c. Referenced by gtk_text_size_request(). |
|
Definition at line 70 of file extgtktext.c. Referenced by gtk_text_size_request(). |
|
Definition at line 74 of file extgtktext.c. Referenced by adjust_adj(), and set_vertical_scroll(). |
|
Definition at line 76 of file extgtktext.c. Referenced by gtk_text_motion_notify(). |
|
Value: do { \ (m)->property = (p); \ (m)->offset = (o); \ } while (0) Definition at line 80 of file extgtktext.c. Referenced by init_properties(), and insert_text_property(). |
|
Definition at line 505 of file extgtktext.c. Referenced by draw_cursor(), expose_text(), gtk_text_draw_focus(), gtk_text_expose(), gtk_text_focus_in(), gtk_text_focus_out(), gtk_text_update_text(), and undraw_cursor(). |
|
Definition at line 506 of file extgtktext.c. Referenced by delete_expose(), and insert_expose(). |
|
Definition at line 507 of file extgtktext.c. |
|
Definition at line 72 of file extgtktext.c. Referenced by clear_focus_area(), gtk_text_draw_focus(), gtk_text_realize(), gtk_text_size_allocate(), and gtk_text_size_request(). |
|
Definition at line 143 of file extgtktext.c. Referenced by ext_gtk_text_forward_delete(), ext_gtk_text_get_length(), ext_gtk_text_insert_alltypes(), ext_gtk_text_set_point(), gtk_text_delete_text(), gtk_text_get_chars(), gtk_text_kill_char(), gtk_text_set_selection(), gtk_text_update_text(), move_cursor_buffer_ver(), and move_cursor_hor(). |
|
Definition at line 508 of file extgtktext.c. Referenced by delete_expose(), find_line_containing_point(), and insert_expose(). |
|
Definition at line 510 of file extgtktext.c. Referenced by insert_expose(). |
|
Definition at line 509 of file extgtktext.c. Referenced by find_line_containing_point(). |
|
Definition at line 163 of file extgtktext.c. |
|
Definition at line 167 of file extgtktext.c. Referenced by line_params_iterate(). |
|
Definition at line 164 of file extgtktext.c. |
|
Definition at line 162 of file extgtktext.c. |
|
Definition at line 165 of file extgtktext.c. |
|
Definition at line 161 of file extgtktext.c. |
|
Definition at line 160 of file extgtktext.c. |
|
Definition at line 152 of file extgtktext.c.
00152 { 00153 ARG_0, 00154 ARG_HADJUSTMENT, 00155 ARG_VADJUSTMENT, 00156 ARG_LINE_WRAP, 00157 ARG_WORD_WRAP 00158 }; |
|
Definition at line 169 of file extgtktext.c. Referenced by fetch_lines().
00170 { 00171 FetchLinesPixels, 00172 FetchLinesCount 00173 } FLType; |
|
Definition at line 190 of file extgtktext.c.
00190 { 00191 PROPERTY_FONT = 1 << 0, 00192 PROPERTY_FOREGROUND = 1 << 1, 00193 PROPERTY_BACKGROUND = 1 << 2, 00194 PROPERTY_UNDERLINED = 1 << 3, 00195 PROPERTY_IMAGE = 1 << 4, 00196 PROPERTY_DATA = 1 << 5, 00197 PROPERTY_DIVIDER = 1 << 6 00198 } TextPropertyFlags; |
|
Definition at line 4788 of file extgtktext.c. References KEY_SCROLL_PIXELS, MIN, SCROLL_PIXELS, and _ExtGtkText::text_area. Referenced by delete_expose(), and insert_expose().
04789 { 04790 gint height; 04791 04792 gdk_window_get_size (text->text_area, NULL, &height); 04793 04794 adj->step_increment = MIN (adj->upper, (float) SCROLL_PIXELS); 04795 adj->page_increment = MIN (adj->upper, height - (float) KEY_SCROLL_PIXELS); 04796 adj->page_size = MIN (adj->upper, height); 04797 adj->value = MIN (adj->value, adj->upper - adj->page_size); 04798 adj->value = MAX (adj->value, 0.0); 04799 04800 gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed"); 04801 } |
|
Definition at line 3874 of file extgtktext.c. References _ExtGtkPropertyMark::index, _TextProperty::length, MARK_CURRENT_PROPERTY, MARK_NEXT_LIST_PTR, _ExtGtkPropertyMark::offset, and _ExtGtkPropertyMark::property. Referenced by fetch_lines_forward(), find_cursor_at_line(), find_line_params(), find_mouse_cursor_at_line(), gtk_text_move_forward_word(), gtk_text_move_to_column(), line_params_iterate(), move_cursor_ver(), and recompute_geometry().
03875 { 03876 TextProperty* prop = MARK_CURRENT_PROPERTY (mark); 03877 03878 mark->index += 1; 03879 03880 if (prop->length > mark->offset + 1) 03881 mark->offset += 1; 03882 else 03883 { 03884 mark->property = MARK_NEXT_LIST_PTR (mark); 03885 mark->offset = 0; 03886 } 03887 } |
|
Definition at line 3890 of file extgtktext.c. References _ExtGtkPropertyMark::index, _TextProperty::length, MARK_CURRENT_PROPERTY, MARK_NEXT_LIST_PTR, _ExtGtkPropertyMark::offset, and _ExtGtkPropertyMark::property. Referenced by draw_line(), ext_gtk_text_insert_alltypes(), and move_mark_n().
03891 { 03892 gint i; 03893 TextProperty* prop; 03894 03895 g_assert (n > 0); 03896 03897 i = 0; /* otherwise it migth not be init. */ 03898 prop = MARK_CURRENT_PROPERTY(mark); 03899 03900 if ((prop->length - mark->offset - 1) < n) { /* if we need to change prop. */ 03901 /* to make it easier */ 03902 n += (mark->offset); 03903 mark->index -= mark->offset; 03904 mark->offset = 0; 03905 /* first we take seven-mile-leaps to get to the right text 03906 * property. */ 03907 while ((n-i) > prop->length - 1) { 03908 i += prop->length; 03909 mark->index += prop->length; 03910 mark->property = MARK_NEXT_LIST_PTR (mark); 03911 if (mark->property == NULL) 03912 break; 03913 prop = MARK_CURRENT_PROPERTY (mark); 03914 } 03915 } 03916 03917 /* and then the rest */ 03918 mark->index += n - i; 03919 mark->offset += n - i; 03920 } |
|
Definition at line 4124 of file extgtktext.c. References _ExtGtkText::default_tab_width, _TabStopMark::tab_stops, and _TabStopMark::to_next_tab. Referenced by advance_tab_mark_n(), draw_line(), find_cursor_at_line(), find_line_params(), and find_mouse_cursor_at_line().
04125 { 04126 if (tab_mark->to_next_tab == 1 || ch == '\t') 04127 { 04128 if (tab_mark->tab_stops->next) 04129 { 04130 tab_mark->tab_stops = tab_mark->tab_stops->next; 04131 tab_mark->to_next_tab = (gulong) tab_mark->tab_stops->data; 04132 } 04133 else 04134 { 04135 tab_mark->to_next_tab = text->default_tab_width; 04136 } 04137 } 04138 else 04139 { 04140 tab_mark->to_next_tab -= 1; 04141 } 04142 } |
|
Definition at line 4145 of file extgtktext.c. References advance_tab_mark(). Referenced by draw_line().
04147 { 04148 while (n--) 04149 advance_tab_mark (text, tab_mark, 0); 04150 } |
|
Definition at line 5776 of file extgtktext.c. References _ExtGtkText::bg_gc, _ExtGtkText::first_onscreen_hor_pixel, _ExtGtkText::first_onscreen_ver_pixel, and _ExtGtkText::text_area. Referenced by draw_bg_rect(), and expose_text().
05777 { 05778 GtkWidget *widget = GTK_WIDGET (text); 05779 05780 if (text->bg_gc) 05781 { 05782 gint width, height; 05783 05784 gdk_window_get_size (widget->style->bg_pixmap[GTK_STATE_NORMAL], &width, &height); 05785 05786 gdk_gc_set_ts_origin (text->bg_gc, 05787 (- (gint)text->first_onscreen_hor_pixel) % width, 05788 (- (gint)text->first_onscreen_ver_pixel) % height); 05789 05790 gdk_draw_rectangle (text->text_area, text->bg_gc, TRUE, 05791 area->x, area->y, area->width, area->height); 05792 } 05793 else 05794 gdk_window_clear_area (text->text_area, area->x, area->y, area->width, area->height); 05795 } |
|
Definition at line 1719 of file extgtktext.c. References _ExtGtkText::bg_gc, _ExtGtkText::first_onscreen_hor_pixel, _ExtGtkText::first_onscreen_ver_pixel, and TEXT_BORDER_ROOM. Referenced by gtk_text_draw_focus().
01720 { 01721 GtkWidget *widget = GTK_WIDGET (text); 01722 01723 gint ythick = TEXT_BORDER_ROOM + widget->style->klass->ythickness; 01724 gint xthick = TEXT_BORDER_ROOM + widget->style->klass->xthickness; 01725 01726 gint width, height; 01727 01728 gdk_window_get_size (widget->style->bg_pixmap[GTK_STATE_NORMAL], &width, &height); 01729 01730 gdk_gc_set_ts_origin (text->bg_gc, 01731 (- (gint)text->first_onscreen_hor_pixel + xthick) % width, 01732 (- (gint)text->first_onscreen_ver_pixel + ythick) % height); 01733 01734 01735 gdk_draw_rectangle (GTK_WIDGET (text)->window, text->bg_gc, TRUE, 01736 area_x, area_y, area_width, area_height); 01737 } |
|
Definition at line 2758 of file extgtktext.c. References CACHE_DATA, _ExtGtkText::current_line, fetch_lines_forward(), _ExtGtkPropertyMark::index, LINE_HEIGHT, _ExtGtkText::line_wrap, and _ExtGtkText::point. Referenced by ext_gtk_text_forward_delete().
02760 { 02761 GList *line = text->current_line; 02762 gint chars_left = char_count; 02763 02764 *lines = 0; 02765 *pixels = 0; 02766 02767 /* If chars_left == 0, that means we're joining two lines in a 02768 * deletion, so add in the values for the next line as well 02769 */ 02770 for (; line && chars_left >= 0; line = line->next) 02771 { 02772 *pixels += LINE_HEIGHT(CACHE_DATA(line)); 02773 02774 if (line == text->current_line) 02775 chars_left -= CACHE_DATA(line).end.index - text->point.index + 1; 02776 else 02777 chars_left -= CACHE_DATA(line).end.index - CACHE_DATA(line).start.index + 1; 02778 02779 if (!text->line_wrap || !CACHE_DATA(line).wraps) 02780 *lines += 1; 02781 else 02782 if (chars_left < 0) 02783 chars_left = 0; /* force another loop */ 02784 02785 if (!line->next) 02786 fetch_lines_forward (text, 1); 02787 } 02788 } |
|
Definition at line 2863 of file extgtktext.c. References CACHE_DATA, _ExtGtkText::current_line, _ExtGtkPropertyMark::index, LAST_INDEX, _ExtGtkPropertyMark::offset, _ExtGtkText::point, and _ExtGtkPropertyMark::property. Referenced by delete_expose().
02864 { 02865 GList* cache = text->current_line; 02866 gint i; 02867 02868 for (i = 0; cache && i < lines; i += 1, cache = cache->next) 02869 /* nothing */; 02870 02871 for (; cache; cache = cache->next) 02872 { 02873 ExtGtkPropertyMark *start = &CACHE_DATA(cache).start; 02874 ExtGtkPropertyMark *end = &CACHE_DATA(cache).end; 02875 02876 start->index -= nchars; 02877 end->index -= nchars; 02878 02879 if (LAST_INDEX (text, text->point) && 02880 start->index == text->point.index) 02881 *start = text->point; 02882 else if (start->property == text->point.property) 02883 start->offset = start->index - (text->point.index - text->point.offset); 02884 02885 if (LAST_INDEX (text, text->point) && 02886 end->index == text->point.index) 02887 *end = text->point; 02888 if (end->property == text->point.property) 02889 end->offset = end->index - (text->point.index - text->point.offset); 02890 02891 /*TEXT_ASSERT_MARK(text, start, "start");*/ 02892 /*TEXT_ASSERT_MARK(text, end, "end");*/ 02893 } 02894 } |
|
Definition at line 2983 of file extgtktext.c. References CACHE_DATA, _ExtGtkText::current_line, _ExtGtkPropertyMark::index, LAST_INDEX, MARK_CURRENT_PROPERTY, move_mark_n(), _ExtGtkPropertyMark::offset, _ExtGtkText::point, and _ExtGtkPropertyMark::property. Referenced by insert_expose().
02984 { 02985 GList *cache; 02986 ExtGtkPropertyMark *start; 02987 ExtGtkPropertyMark *end; 02988 02989 /* If we inserted a property exactly at the beginning of the 02990 * line, we have to correct here, or fetch_lines will 02991 * fetch junk. 02992 */ 02993 start = &CACHE_DATA(text->current_line).start; 02994 if (start->index == text->point.index - nchars) 02995 { 02996 *start = text->point; 02997 move_mark_n (start, -nchars); 02998 } 02999 03000 /* Now correct the offsets, and check for start or end marks that 03001 * are after the point, yet point to a property before the point's 03002 * property. This indicates that they are meant to point to the 03003 * second half of a property we split in insert_text_property(), so 03004 * we fix them up that way. 03005 */ 03006 cache = text->current_line->next; 03007 03008 for (; cache; cache = cache->next) 03009 { 03010 start = &CACHE_DATA(cache).start; 03011 end = &CACHE_DATA(cache).end; 03012 03013 if (LAST_INDEX (text, text->point) && 03014 start->index == text->point.index) 03015 *start = text->point; 03016 else 03017 { 03018 if (start->property == text->point.property) 03019 { 03020 start->offset += nchars; 03021 start->index += nchars; 03022 } 03023 else if (start->property->next && 03024 (start->property->next->next == text->point.property)) 03025 { 03026 /* We split the property, and this is the second half */ 03027 start->offset -= MARK_CURRENT_PROPERTY (start)->length; 03028 start->index += nchars; 03029 start->property = text->point.property; 03030 } 03031 else 03032 start->index += nchars; 03033 } 03034 03035 if (LAST_INDEX (text, text->point) && 03036 end->index == text->point.index) 03037 *end = text->point; 03038 else 03039 { 03040 if (end->property == text->point.property) 03041 { 03042 end->offset += nchars; 03043 end->index += nchars; 03044 } 03045 else if (end->property->next && 03046 (end->property->next->next == text->point.property)) 03047 { 03048 /* We split the property, and this is the second half */ 03049 end->offset -= MARK_CURRENT_PROPERTY (end)->length; 03050 end->index += nchars; 03051 end->property = text->point.property; 03052 } 03053 else 03054 end->index += nchars; 03055 } 03056 03057 /*TEXT_ASSERT_MARK(text, start, "start");*/ 03058 /*TEXT_ASSERT_MARK(text, end, "end");*/ 03059 } 03060 } |
|
Definition at line 5764 of file extgtktext.c. References _ExtGtkText::text_area. Referenced by gtk_text_realize(), and gtk_text_style_set().
05765 { 05766 GdkGCValues values; 05767 05768 values.tile = GTK_WIDGET (text)->style->bg_pixmap[GTK_STATE_NORMAL]; 05769 values.fill = GDK_TILED; 05770 05771 return gdk_gc_new_with_values (text->text_area, &values, 05772 GDK_GC_FILL | GDK_GC_TILE); 05773 } |
|
Definition at line 3923 of file extgtktext.c. References _ExtGtkPropertyMark::index, MARK_CURRENT_PROPERTY, MARK_PREV_LIST_PTR, _ExtGtkPropertyMark::offset, and _ExtGtkPropertyMark::property. Referenced by find_line_params(), find_this_line_start_mark(), gtk_text_move_backward_word(), gtk_text_move_to_column(), move_cursor_ver(), and recompute_geometry().
03924 { 03925 mark->index -= 1; 03926 03927 if (mark->offset > 0) 03928 mark->offset -= 1; 03929 else 03930 { 03931 mark->property = MARK_PREV_LIST_PTR (mark); 03932 mark->offset = MARK_CURRENT_PROPERTY (mark)->length - 1; 03933 } 03934 } |
|
Definition at line 3937 of file extgtktext.c. References _ExtGtkPropertyMark::index, MARK_CURRENT_PROPERTY, MARK_PREV_LIST_PTR, _ExtGtkPropertyMark::offset, and _ExtGtkPropertyMark::property. Referenced by move_mark_n().
03938 { 03939 g_assert (n > 0); 03940 03941 while (mark->offset < n) { 03942 /* jump to end of prev */ 03943 n -= mark->offset + 1; 03944 mark->index -= mark->offset + 1; 03945 mark->property = MARK_PREV_LIST_PTR (mark); 03946 mark->offset = MARK_CURRENT_PROPERTY (mark)->length - 1; 03947 } 03948 03949 /* and the rest */ 03950 mark->index -= n; 03951 mark->offset -= n; 03952 } |
|
Definition at line 2897 of file extgtktext.c. References adjust_adj(), CACHE_DATA, correct_cache_delete(), _ExtGtkText::current_line, _ExtGtkText::cursor_mark, _ExtGtkText::cursor_virtual_x, expose_text(), fetch_lines(), FetchLinesCount, find_cursor(), _ExtGtkText::gc, gtk_text_draw_focus(), _ExtGtkPropertyMark::index, LINE_HEIGHT, pixel_height_of(), _ExtGtkText::point, process_exposes(), swap_lines(), _ExtGtkText::text_area, TEXT_ASSERT, TEXT_SHOW, total_line_height(), and _ExtGtkText::vadj. Referenced by ext_gtk_text_forward_delete().
02898 { 02899 GtkWidget *widget = GTK_WIDGET (text); 02900 02901 gint pixel_height; 02902 guint new_pixels = 0; 02903 GdkRectangle rect; 02904 GList* new_line = NULL; 02905 gint width, height; 02906 02907 text->cursor_virtual_x = 0; 02908 02909 correct_cache_delete (text, nchars, old_lines); 02910 02911 pixel_height = pixel_height_of(text, text->current_line) - 02912 LINE_HEIGHT(CACHE_DATA(text->current_line)); 02913 02914 if (CACHE_DATA(text->current_line).start.index == text->point.index) 02915 CACHE_DATA(text->current_line).start = text->point; 02916 02917 new_line = fetch_lines (text, 02918 &CACHE_DATA(text->current_line).start, 02919 &CACHE_DATA(text->current_line).tab_cont, 02920 FetchLinesCount, 02921 1); 02922 02923 swap_lines (text, text->current_line, new_line, old_lines); 02924 02925 text->current_line = new_line; 02926 02927 new_pixels = total_line_height (text, new_line, 1); 02928 02929 gdk_window_get_size (text->text_area, &width, &height); 02930 02931 if (old_pixels != new_pixels) 02932 { 02933 if (!widget->style->bg_pixmap[GTK_STATE_NORMAL]) 02934 { 02935 gdk_draw_pixmap (text->text_area, 02936 text->gc, 02937 text->text_area, 02938 0, 02939 pixel_height + old_pixels, 02940 0, 02941 pixel_height + new_pixels, 02942 width, 02943 height); 02944 } 02945 text->vadj->upper += new_pixels; 02946 text->vadj->upper -= old_pixels; 02947 adjust_adj (text, text->vadj); 02948 } 02949 02950 rect.x = 0; 02951 rect.y = pixel_height; 02952 rect.width = width; 02953 rect.height = new_pixels; 02954 02955 expose_text (text, &rect, FALSE); 02956 gtk_text_draw_focus ( (GtkWidget *) text); 02957 02958 text->cursor_mark = text->point; 02959 02960 find_cursor (text, TRUE); 02961 02962 if (old_pixels != new_pixels) 02963 { 02964 if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) 02965 { 02966 rect.x = 0; 02967 rect.y = pixel_height + new_pixels; 02968 rect.width = width; 02969 rect.height = height - rect.y; 02970 02971 expose_text (text, &rect, FALSE); 02972 } 02973 else 02974 process_exposes (text); 02975 } 02976 02977 TEXT_ASSERT (text); 02978 TEXT_SHOW(text); 02979 } |
|
Definition at line 3758 of file extgtktext.c. References destroy_text_property(), LAST_INDEX, _TextProperty::length, MARK_CURRENT_PROPERTY, MARK_LIST_PTR, MARK_NEXT_LIST_PTR, MARK_OFFSET, MARK_PREV_LIST_PTR, _ExtGtkPropertyMark::offset, _ExtGtkText::point, _ExtGtkText::text_properties, and unrealize_property(). Referenced by ext_gtk_text_forward_delete().
03759 { 03760 /* Delete nchars forward from point. */ 03761 03762 /* Deleting text properties is problematical, because we 03763 * might be storing around marks pointing to a property. 03764 * 03765 * The marks in question and how we handle them are: 03766 * 03767 * point: We know the new value, since it will be at the 03768 * end of the deleted text, and we move it there 03769 * first. 03770 * cursor: We just remove the mark and set it equal to the 03771 * point after the operation. 03772 * line-start cache: We replace most affected lines. 03773 * The current line gets used to fetch the new 03774 * lines so, if necessary, (delete at the beginning 03775 * of a line) we fix it up by setting it equal to the 03776 * point. 03777 */ 03778 03779 TextProperty *prop; 03780 GList *tmp; 03781 gint is_first; 03782 03783 for(; nchars; nchars -= 1) 03784 { 03785 prop = MARK_CURRENT_PROPERTY(&text->point); 03786 03787 prop->length -= 1; 03788 03789 if (prop->length == 0) 03790 { 03791 tmp = MARK_LIST_PTR (&text->point); 03792 03793 is_first = tmp == text->text_properties; 03794 03795 MARK_LIST_PTR (&text->point) = g_list_remove_link (tmp, tmp); 03796 text->point.offset = 0; 03797 03798 if (GTK_WIDGET_REALIZED (text)) 03799 unrealize_property (text, prop); 03800 03801 destroy_text_property (prop); 03802 g_list_free_1 (tmp); 03803 03804 prop = MARK_CURRENT_PROPERTY (&text->point); 03805 03806 if (is_first) 03807 text->text_properties = MARK_LIST_PTR (&text->point); 03808 03809 g_assert (prop->length != 0); 03810 } 03811 else if (prop->length == text->point.offset) 03812 { 03813 MARK_LIST_PTR (&text->point) = MARK_NEXT_LIST_PTR (&text->point); 03814 text->point.offset = 0; 03815 } 03816 } 03817 03818 /* Check to see if we have just the single final position remaining 03819 * along in a property; if so, combine it with the previous property 03820 */ 03821 if (LAST_INDEX (text, text->point) && 03822 (MARK_OFFSET (&text->point) == 0) && 03823 (MARK_PREV_LIST_PTR(&text->point) != NULL)) 03824 { 03825 tmp = MARK_LIST_PTR (&text->point); 03826 prop = MARK_CURRENT_PROPERTY(&text->point); 03827 03828 MARK_LIST_PTR (&text->point) = MARK_PREV_LIST_PTR (&text->point); 03829 MARK_CURRENT_PROPERTY(&text->point)->length += 1; 03830 MARK_NEXT_LIST_PTR(&text->point) = NULL; 03831 03832 text->point.offset = MARK_CURRENT_PROPERTY(&text->point)->length - 1; 03833 03834 if (GTK_WIDGET_REALIZED (text)) 03835 unrealize_property (text, prop); 03836 03837 destroy_text_property (prop); 03838 g_list_free_1 (tmp); 03839 } 03840 } |
|
Definition at line 3461 of file extgtktext.c. References _TextProperty::font, _TextProperty::image, _TextProperty::mask, text_font_unref(), text_property_chunk, and _TextProperty::user_data. Referenced by delete_text_property(), and gtk_text_finalize().
03462 { 03463 if (prop->font) 03464 text_font_unref (prop->font); 03465 if (prop->user_data) 03466 g_free(prop->user_data); 03467 if (prop->image) 03468 gdk_pixmap_unref(prop->image); 03469 if (prop->mask) 03470 gdk_pixmap_unref(prop->mask); 03471 03472 g_mem_chunk_free (text_property_chunk, prop); 03473 } |
|
Definition at line 5318 of file extgtktext.c. References clear_area(), _ExtGtkText::gc, _ExtGtkPropertyMark::index, MARK_CURRENT_BACK, MIN, and _ExtGtkText::text_area. Referenced by draw_line(), and undraw_cursor().
05321 { 05322 GtkEditable *editable = GTK_EDITABLE(text); 05323 05324 if ((mark->index >= MIN(editable->selection_start_pos, editable->selection_end_pos) && 05325 mark->index < MAX(editable->selection_start_pos, editable->selection_end_pos))) 05326 { 05327 gtk_paint_flat_box(GTK_WIDGET(text)->style, text->text_area, 05328 editable->has_selection ? 05329 GTK_STATE_SELECTED : GTK_STATE_ACTIVE, 05330 GTK_SHADOW_NONE, 05331 NULL, GTK_WIDGET(text), "text", 05332 x, y, width, height); 05333 } 05334 else if (!gdk_color_equal(MARK_CURRENT_BACK (text, mark), 05335 >K_WIDGET(text)->style->base[GTK_WIDGET_STATE (text)])) 05336 { 05337 gdk_gc_set_foreground (text->gc, MARK_CURRENT_BACK (text, mark)); 05338 05339 gdk_draw_rectangle (text->text_area, 05340 text->gc, 05341 TRUE, x, y, width, height); 05342 } 05343 else if (GTK_WIDGET (text)->style->bg_pixmap[GTK_STATE_NORMAL]) 05344 { 05345 GdkRectangle rect; 05346 05347 rect.x = x; 05348 rect.y = y; 05349 rect.width = width; 05350 rect.height = height; 05351 05352 clear_area (text, &rect); 05353 } 05354 else if (!already_cleared) 05355 gdk_window_clear_area (text->text_area, x, y, width, height); 05356 } |
|
|
Definition at line 5359 of file extgtktext.c. References advance_mark_n(), advance_tab_mark(), advance_tab_mark_n(), _LineParams::displayable_chars, draw_bg_rect(), expand_scratch_buffer(), EXT_GTK_TEXT_INDEX, _LineParams::font_ascent, _ExtGtkText::gap_position, _ExtGtkText::gap_size, _ExtGtkText::gc, _ExtGtkPropertyMark::index, LINE_HEIGHT, MARK_CURRENT_DIVIDER, MARK_CURRENT_FONT, MARK_CURRENT_FORE, MARK_CURRENT_IMAGE, MARK_CURRENT_MASK, MARK_CURRENT_PROPERTY, MARK_CURRENT_TEXT_FONT, MARK_CURRENT_UNDERLINED, MIN, _ExtGtkPropertyMark::offset, _PrevTabCont::pixel_offset, _ExtGtkText::scratch_buffer, _LineParams::start, _LineParams::tab_cont, _PrevTabCont::tab_start, _ExtGtkText::text, _ExtGtkText::text_area, _TabStopMark::to_next_tab, _ExtGtkText::use_wchar, and VFont. Referenced by expose_text().
05362 { 05363 GdkGCValues gc_values; 05364 gint i; 05365 gint len = 0; 05366 guint running_offset = lp->tab_cont.pixel_offset; 05367 union { GdkWChar *wc; guchar *ch; } buffer; 05368 GdkGC *fg_gc, *temp_gc; 05369 GdkColor * fg_color; 05370 GdkDrawable *image; 05371 int height; 05372 05373 GtkEditable *editable = GTK_EDITABLE(text); 05374 05375 guint selection_start_pos = MIN (editable->selection_start_pos, editable->selection_end_pos); 05376 guint selection_end_pos = MAX (editable->selection_start_pos, editable->selection_end_pos); 05377 05378 ExtGtkPropertyMark mark = lp->start; 05379 TabStopMark tab_mark = lp->tab_cont.tab_start; 05380 gint pixel_height = pixel_start_height + lp->font_ascent; 05381 guint chars = lp->displayable_chars; 05382 05383 /* First provide a contiguous segment of memory. This makes reading 05384 * the code below *much* easier, and only incurs the cost of copying 05385 * when the line being displayed spans the gap. */ 05386 if (mark.index <= text->gap_position && 05387 mark.index + chars > text->gap_position) 05388 { 05389 expand_scratch_buffer (text, chars); 05390 05391 if (text->use_wchar) 05392 { 05393 for (i = 0; i < chars; i += 1) 05394 text->scratch_buffer.wc[i] = EXT_GTK_TEXT_INDEX(text, mark.index + i); 05395 buffer.wc = text->scratch_buffer.wc; 05396 } 05397 else 05398 { 05399 for (i = 0; i < chars; i += 1) 05400 text->scratch_buffer.ch[i] = EXT_GTK_TEXT_INDEX(text, mark.index + i); 05401 buffer.ch = text->scratch_buffer.ch; 05402 } 05403 } 05404 else 05405 { 05406 if (text->use_wchar) 05407 { 05408 if (mark.index >= text->gap_position) 05409 buffer.wc = text->text.wc + mark.index + text->gap_size; 05410 else 05411 buffer.wc = text->text.wc + mark.index; 05412 } 05413 else 05414 { 05415 if (mark.index >= text->gap_position) 05416 buffer.ch = text->text.ch + mark.index + text->gap_size; 05417 else 05418 buffer.ch = text->text.ch + mark.index; 05419 } 05420 } 05421 05422 05423 if (running_offset > 0) 05424 { 05425 draw_bg_rect (text, &mark, 0, pixel_start_height, running_offset, 05426 LINE_HEIGHT (*lp), TRUE); 05427 } 05428 05429 while (chars > 0) 05430 { 05431 len = 0; 05432 if ((text->use_wchar && buffer.wc[0] != '\t') || 05433 (!text->use_wchar && buffer.ch[0] != '\t')) 05434 { 05435 union { GdkWChar *wc; guchar *ch; } next_tab; 05436 gint pixel_width; 05437 VFont* font; 05438 05439 next_tab.wc = NULL; 05440 if (text->use_wchar) 05441 for (i=0; i<chars; i++) 05442 { 05443 if (buffer.wc[i] == '\t') 05444 { 05445 next_tab.wc = buffer.wc + i; 05446 break; 05447 } 05448 } 05449 else 05450 next_tab.ch = memchr (buffer.ch, '\t', chars); 05451 05452 len = MIN (MARK_CURRENT_PROPERTY (&mark)->length - mark.offset, chars); 05453 05454 if (text->use_wchar) 05455 { 05456 if (next_tab.wc) 05457 len = MIN (len, next_tab.wc - buffer.wc); 05458 } 05459 else 05460 { 05461 if (next_tab.ch) 05462 len = MIN (len, next_tab.ch - buffer.ch); 05463 } 05464 05465 if (mark.index < selection_start_pos) 05466 len = MIN (len, selection_start_pos - mark.index); 05467 else if (mark.index < selection_end_pos) 05468 len = MIN (len, selection_end_pos - mark.index); 05469 05470 font = MARK_CURRENT_FONT (text, &mark); 05471 #ifndef HAVE_LIBXFT 05472 if (font->type == GDK_FONT_FONT) 05473 { 05474 gdk_gc_set_font (text->gc, font); 05475 gdk_gc_get_values (text->gc, &gc_values); 05476 if (text->use_wchar) 05477 pixel_width = gdk_text_width_wc (gc_values.font, 05478 buffer.wc, len); 05479 else 05480 pixel_width = gdk_text_width (gc_values.font, 05481 buffer.ch, len); 05482 } 05483 else 05484 #endif 05485 { 05486 #ifndef HAVE_LIBXFT 05487 if (text->use_wchar) 05488 pixel_width = gdk_text_width_wc (font, buffer.wc, len); 05489 else 05490 pixel_width = gdk_text_width (font, buffer.ch, len); 05491 #else 05492 XGlyphInfo glyph; 05493 if(text->use_wchar) 05494 XftTextExtents32(gdk_display, font, buffer.ch, len, &glyph); 05495 else 05496 XftTextExtents8(gdk_display, font, buffer.ch, len, &glyph); 05497 pixel_width = glyph.xOff; 05498 #endif 05499 } 05500 if((image=MARK_CURRENT_IMAGE(text, &mark))) 05501 { 05502 #ifdef __MINGW32__ 05503 pixel_width =((GdkDrawablePrivate*) image) ->width +2; 05504 #else 05505 pixel_width =((GdkWindowPrivate*) image) ->width +2; 05506 #endif 05507 } 05508 if(MARK_CURRENT_DIVIDER(text, &mark)) 05509 { 05510 int width; 05511 gdk_window_get_size(text->text_area, &width, NULL); 05512 pixel_width = width; 05513 } 05514 05515 draw_bg_rect (text, &mark, running_offset, pixel_start_height, 05516 pixel_width, LINE_HEIGHT (*lp), TRUE); 05517 05518 if ((mark.index >= selection_start_pos) && 05519 (mark.index < selection_end_pos)) 05520 { 05521 if (editable->has_selection) 05522 { 05523 fg_gc = GTK_WIDGET(text)->style->fg_gc[GTK_STATE_SELECTED]; 05524 fg_color = >K_WIDGET(text)->style->fg[GTK_STATE_SELECTED]; 05525 } 05526 else 05527 { 05528 fg_gc = GTK_WIDGET(text)->style->fg_gc[GTK_STATE_ACTIVE]; 05529 fg_color = >K_WIDGET(text)->style->fg[GTK_STATE_ACTIVE]; 05530 } 05531 } 05532 else 05533 { 05534 gdk_gc_set_foreground (text->gc, MARK_CURRENT_FORE (text, &mark)); 05535 fg_color = MARK_CURRENT_FORE(text, &mark); 05536 fg_gc = text->gc; 05537 } 05538 05539 #ifndef HAVE_LIBXFT 05540 if (text->use_wchar) 05541 gdk_draw_text_wc (text->text_area, MARK_CURRENT_FONT (text, &mark), 05542 fg_gc, 05543 running_offset, 05544 pixel_height, 05545 buffer.wc, 05546 len); 05547 else 05548 #endif 05549 { 05550 #ifdef HAVE_LIBXFT 05551 draw_bg_rect (text, &mark, running_offset, pixel_start_height, pixel_width, 05552 LINE_HEIGHT (*lp), FALSE); 05553 xft_draw_text (text->text_area, MARK_CURRENT_FONT (text, &mark), 05554 fg_gc, 05555 fg_color, 05556 running_offset, 05557 pixel_height, 05558 buffer.ch, 05559 text->use_wchar, 05560 len); 05561 #else 05562 gdk_draw_text (text->text_area, MARK_CURRENT_FONT (text, &mark), 05563 fg_gc, 05564 running_offset, 05565 pixel_height, 05566 buffer.ch, 05567 len); 05568 #endif 05569 } 05570 /* Note that the underline starts drawing at running_offset+1 which 05571 technically isn't the beginning of the the line, but it "looked 05572 better" when testing it. */ 05573 if(MARK_CURRENT_UNDERLINED(text, &mark)) { 05574 gdk_draw_line (text->text_area, 05575 fg_gc, 05576 running_offset+1, 05577 pixel_height+1, 05578 running_offset+pixel_width-1, 05579 pixel_height+1); 05580 } 05581 if(MARK_CURRENT_DIVIDER(text, &mark)) 05582 { 05583 int width; 05584 gdk_window_get_size(text->text_area, &width, NULL); 05585 05586 gdk_draw_line (text->text_area, 05587 fg_gc, 05588 1, 05589 pixel_height-(lp->font_ascent/2), 05590 width-2, 05591 pixel_height-(lp->font_ascent/2)); 05592 } 05593 if((image=MARK_CURRENT_IMAGE(text, &mark))) 05594 { 05595 GdkBitmap * mask = MARK_CURRENT_MASK(text, &mark); 05596 temp_gc = gdk_gc_new(text->text_area); 05597 gdk_gc_copy(temp_gc, fg_gc); 05598 #ifdef __MINGW32__ 05599 height=((GdkDrawablePrivate*) image) ->height; 05600 pixel_width =((GdkDrawablePrivate*) image) ->width+2; 05601 #else 05602 height=((GdkWindowPrivate*) image) ->height; 05603 pixel_width =((GdkWindowPrivate*) image) ->width+2; 05604 #endif 05605 height=(pixel_height-height)<pixel_start_height? 05606 pixel_height-pixel_start_height:height; 05607 05608 if(mask) 05609 { 05610 gdk_gc_set_clip_origin(temp_gc, running_offset+1, pixel_height-height); 05611 gdk_gc_set_clip_mask(temp_gc, mask); 05612 } 05613 gdk_draw_pixmap(text->text_area, 05614 temp_gc, 05615 image, 05616 0, 05617 0, 05618 running_offset+1, 05619 // pixel_start_height+1, 05620 pixel_height-height, 05621 -1, -1); 05622 gdk_gc_destroy(temp_gc); 05623 05624 } 05625 05626 running_offset += pixel_width; 05627 05628 advance_tab_mark_n (text, &tab_mark, len); 05629 } 05630 else 05631 { 05632 gint pixels_remaining; 05633 gint space_width; 05634 gint spaces_avail; 05635 05636 len = 1; 05637 05638 gdk_window_get_size (text->text_area, &pixels_remaining, NULL); 05639 pixels_remaining -= running_offset; 05640 05641 space_width = MARK_CURRENT_TEXT_FONT(text, &mark)->char_widths[' ']; 05642 05643 spaces_avail = pixels_remaining / space_width; 05644 spaces_avail = MIN (spaces_avail, tab_mark.to_next_tab); 05645 05646 draw_bg_rect (text, &mark, running_offset, pixel_start_height, 05647 spaces_avail * space_width, LINE_HEIGHT (*lp), TRUE); 05648 05649 running_offset += tab_mark.to_next_tab * 05650 MARK_CURRENT_TEXT_FONT(text, &mark)->char_widths[' ']; 05651 05652 advance_tab_mark (text, &tab_mark, '\t'); 05653 } 05654 05655 advance_mark_n (&mark, len); 05656 if (text->use_wchar) 05657 buffer.wc += len; 05658 else 05659 buffer.ch += len; 05660 chars -= len; 05661 } 05662 } |
|
Definition at line 5721 of file extgtktext.c. References _ExtGtkText::cursor_char_offset, _ExtGtkText::cursor_mark, _ExtGtkText::cursor_pos_y, MARK_CURRENT_FONT, _ExtGtkPropertyMark::property, and VFont. Referenced by scroll_up().
05722 { 05723 VFont* font; 05724 05725 g_assert(text->cursor_mark.property); 05726 05727 font = MARK_CURRENT_FONT(text, &text->cursor_mark); 05728 05729 return text->cursor_pos_y - text->cursor_char_offset; 05730 } |
|
Definition at line 5709 of file extgtktext.c. References _ExtGtkText::cursor_char_offset, _ExtGtkText::cursor_mark, _ExtGtkText::cursor_pos_y, MARK_CURRENT_FONT, _ExtGtkPropertyMark::property, and VFont. Referenced by scroll_down().
05710 { 05711 VFont* font; 05712 05713 g_assert(text->cursor_mark.property); 05714 05715 font = MARK_CURRENT_FONT(text, &text->cursor_mark); 05716 05717 return text->cursor_pos_y - text->cursor_char_offset - font->ascent; 05718 } |
|
Definition at line 5286 of file extgtktext.c. References MIN_GAP_SIZE, _ExtGtkText::scratch_buffer, _ExtGtkText::scratch_buffer_len, and _ExtGtkText::use_wchar. Referenced by draw_line().
05287 { 05288 if (len >= text->scratch_buffer_len) 05289 { 05290 guint i = 1; 05291 05292 while (i <= len && i < MIN_GAP_SIZE) i <<= 1; 05293 05294 if (text->use_wchar) 05295 { 05296 if (!text->scratch_buffer.wc) 05297 text->scratch_buffer.wc = g_new (GdkWChar, i); 05298 else 05299 text->scratch_buffer.wc = g_realloc (text->scratch_buffer.wc, 05300 i * sizeof (GdkWChar)); 05301 } 05302 else 05303 { 05304 if (!text->scratch_buffer.ch) 05305 text->scratch_buffer.ch = g_new (guchar, i); 05306 else 05307 text->scratch_buffer.ch = g_realloc (text->scratch_buffer.ch, i); 05308 } 05309 05310 text->scratch_buffer_len = i; 05311 } 05312 } |
|
Definition at line 5798 of file extgtktext.c. References CACHE_DATA, clear_area(), _ExtGtkText::cursor_mark, draw_cursor(), draw_line(), fetch_lines_forward(), _ExtGtkText::first_cut_pixels, _ExtGtkPropertyMark::index, LINE_HEIGHT, _ExtGtkText::line_start_cache, MIN, TDEBUG, _ExtGtkText::text_area, and undraw_cursor(). Referenced by delete_expose(), gtk_text_draw(), gtk_text_expose(), gtk_text_update_text(), insert_expose(), scroll_down(), and scroll_up().
05799 { 05800 GList *cache = text->line_start_cache; 05801 gint pixels = - text->first_cut_pixels; 05802 gint min_y = MAX (0, area->y); 05803 gint max_y = MAX (0, area->y + area->height); 05804 gint height; 05805 05806 gdk_window_get_size (text->text_area, NULL, &height); 05807 max_y = MIN (max_y, height); 05808 05809 TDEBUG (("in expose x=%d y=%d w=%d h=%d\n", area->x, area->y, area->width, area->height)); 05810 05811 clear_area (text, area); 05812 05813 for (; pixels < height; cache = cache->next) 05814 { 05815 if (pixels < max_y && (pixels + (gint)LINE_HEIGHT(CACHE_DATA(cache))) >= min_y) 05816 { 05817 draw_line (text, pixels, &CACHE_DATA(cache)); 05818 05819 } 05820 05821 if (cursor && GTK_WIDGET_HAS_FOCUS (text)) 05822 { 05823 if (CACHE_DATA(cache).start.index <= text->cursor_mark.index && 05824 CACHE_DATA(cache).end.index >= text->cursor_mark.index) 05825 { 05826 /* We undraw and draw the cursor here to get the drawn 05827 * level right ... FIXME - maybe the second parameter 05828 * of draw_cursor should work differently 05829 */ 05830 undraw_cursor (text, FALSE); 05831 draw_cursor (text, FALSE); 05832 } 05833 } 05834 05835 pixels += LINE_HEIGHT(CACHE_DATA(cache)); 05836 05837 if (!cache->next) 05838 { 05839 fetch_lines_forward (text, 1); 05840 05841 if (!cache->next) 05842 break; 05843 } 05844 } 05845 } |
|
Definition at line 1279 of file extgtktext.c. References EXT_GTK_IS_TEXT, ext_gtk_text_forward_delete(), ext_gtk_text_set_point(), _ExtGtkPropertyMark::index, and _ExtGtkText::point.
01281 { 01282 g_return_val_if_fail (text != NULL, 0); 01283 g_return_val_if_fail (EXT_GTK_IS_TEXT (text), 0); 01284 01285 if (nchars > text->point.index || nchars <= 0) 01286 return FALSE; 01287 01288 ext_gtk_text_set_point (text, text->point.index - nchars); 01289 01290 return ext_gtk_text_forward_delete (text, nchars); 01291 } |
|
Definition at line 1294 of file extgtktext.c. References compute_lines_pixels(), _ExtGtkText::cursor_mark, delete_expose(), delete_text_property(), draw_cursor(), EXT_GTK_IS_TEXT, ext_gtk_text_freeze(), EXT_GTK_TEXT_INDEX, ext_gtk_text_thaw(), find_line_containing_point(), _ExtGtkText::first_line_start_index, _ExtGtkText::freeze_count, FREEZE_LENGTH, _ExtGtkText::gap_size, _ExtGtkPropertyMark::index, LINE_DELIM, _ExtGtkText::line_start_cache, MIN, move_gap(), move_mark_n(), _ExtGtkText::point, TEXT_LENGTH, and undraw_cursor(). Referenced by ext_gtk_text_backward_delete(), and gtk_text_delete_text().
01296 { 01297 guint old_lines, old_height; 01298 GtkEditable *editable = GTK_EDITABLE (text); 01299 gboolean frozen = FALSE; 01300 01301 g_return_val_if_fail (text != NULL, 0); 01302 g_return_val_if_fail (EXT_GTK_IS_TEXT (text), 0); 01303 01304 if (text->point.index + nchars > TEXT_LENGTH (text) || nchars <= 0) 01305 return FALSE; 01306 01307 if (!text->freeze_count && nchars > FREEZE_LENGTH) 01308 { 01309 ext_gtk_text_freeze (text); 01310 frozen = TRUE; 01311 } 01312 01313 if (!text->freeze_count && text->line_start_cache != NULL) 01314 { 01315 /* We need to undraw the cursor here, since we may later 01316 * delete the cursor's property 01317 */ 01318 undraw_cursor (text, FALSE); 01319 find_line_containing_point (text, text->point.index, TRUE); 01320 compute_lines_pixels (text, nchars, &old_lines, &old_height); 01321 } 01322 01323 /* FIXME, or resizing after deleting will be odd */ 01324 if (text->point.index < text->first_line_start_index) 01325 { 01326 if (text->point.index + nchars >= text->first_line_start_index) 01327 { 01328 text->first_line_start_index = text->point.index; 01329 while ((text->first_line_start_index > 0) && 01330 (EXT_GTK_TEXT_INDEX (text, text->first_line_start_index - 1) 01331 != LINE_DELIM)) 01332 text->first_line_start_index -= 1; 01333 01334 } 01335 else 01336 text->first_line_start_index -= nchars; 01337 } 01338 01339 if (text->point.index < editable->selection_start_pos) 01340 editable->selection_start_pos -= 01341 MIN(nchars, editable->selection_start_pos - text->point.index); 01342 if (text->point.index < editable->selection_end_pos) 01343 editable->selection_end_pos -= 01344 MIN(nchars, editable->selection_end_pos - text->point.index); 01345 /* We'll reset the cursor later anyways if we aren't frozen */ 01346 if (text->point.index < text->cursor_mark.index) 01347 move_mark_n (&text->cursor_mark, 01348 -MIN(nchars, text->cursor_mark.index - text->point.index)); 01349 01350 move_gap (text, text->point.index); 01351 01352 text->gap_size += nchars; 01353 01354 delete_text_property (text, nchars); 01355 01356 if (!text->freeze_count && (text->line_start_cache != NULL)) 01357 { 01358 delete_expose (text, nchars, old_lines, old_height); 01359 draw_cursor (text, FALSE); 01360 } 01361 01362 if (frozen) 01363 ext_gtk_text_thaw (text); 01364 01365 return TRUE; 01366 } |
|
Definition at line 1041 of file extgtktext.c. References EXT_GTK_IS_TEXT, _ExtGtkText::freeze_count, and undraw_cursor(). Referenced by ext_gtk_text_forward_delete(), ext_gtk_text_insert_alltypes(), and set_html_text().
01042 { 01043 g_return_if_fail (text != NULL); 01044 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 01045 01046 text->freeze_count++; 01047 undraw_cursor (text, FALSE); 01048 } |
|
Definition at line 1032 of file extgtktext.c. References EXT_GTK_IS_TEXT, and TEXT_LENGTH.
01033 { 01034 g_return_val_if_fail (text != NULL, 0); 01035 g_return_val_if_fail (EXT_GTK_IS_TEXT (text), 0); 01036 01037 return TEXT_LENGTH (text); 01038 } |
|
Definition at line 1023 of file extgtktext.c. References EXT_GTK_IS_TEXT, _ExtGtkPropertyMark::index, and _ExtGtkText::point.
01024 { 01025 g_return_val_if_fail (text != NULL, 0); 01026 g_return_val_if_fail (EXT_GTK_IS_TEXT (text), 0); 01027 01028 return text->point.index; 01029 } |
|
Definition at line 641 of file extgtktext.c. References gtk_text_class_init(), and gtk_text_init().
00642 { 00643 static GtkType text_type = 0; 00644 00645 if (!text_type) 00646 { 00647 static const GtkTypeInfo text_info = 00648 { 00649 "ExtGtkText", 00650 sizeof (ExtGtkText), 00651 sizeof (ExtGtkTextClass), 00652 (GtkClassInitFunc) gtk_text_class_init, 00653 (GtkObjectInitFunc) gtk_text_init, 00654 /* reserved_1 */ NULL, 00655 /* reserved_2 */ NULL, 00656 (GtkClassInitFunc) NULL, 00657 }; 00658 00659 text_type = gtk_type_unique (GTK_TYPE_EDITABLE, &text_info); 00660 } 00661 00662 return text_type; 00663 } |
|
Definition at line 1201 of file extgtktext.c. References ext_gtk_text_insert_alltypes(), and VFont. Referenced by gtk_eb_html_add().
01207 { 01208 ext_gtk_text_insert_alltypes(text, font, fore, back, FALSE, FALSE, NULL, NULL, NULL,0,NULL, chars, nchars); 01209 } |
|
Definition at line 1066 of file extgtktext.c. References advance_mark_n(), _ExtGtkText::current_line, _ExtGtkText::cursor_mark, DataFunc, EXT_GTK_IS_TEXT, ext_gtk_text_freeze(), ext_gtk_text_thaw(), find_line_containing_point(), _ExtGtkText::first_line_start_index, _ExtGtkText::freeze_count, FREEZE_LENGTH, _ExtGtkText::gap_position, _ExtGtkText::gap_size, _ExtGtkPropertyMark::index, INITIAL_BUFFER_SIZE, insert_expose(), insert_text_property(), _ExtGtkText::line_start_cache, make_forward_space(), move_gap(), _ExtGtkText::point, _ExtGtkText::scratch_buffer, _ExtGtkText::scratch_buffer_len, _ExtGtkText::text, _ExtGtkText::text_len, TEXT_LENGTH, total_line_height(), _ExtGtkText::use_wchar, and VFont. Referenced by ext_gtk_text_insert(), ext_gtk_text_insert_data(), ext_gtk_text_insert_data_underlined(), ext_gtk_text_insert_divider(), ext_gtk_text_insert_pixmap(), ext_gtk_text_insert_text(), and ext_gtk_text_insert_underlined().
01079 { 01080 GtkEditable *editable = GTK_EDITABLE (text); 01081 gboolean frozen = FALSE; 01082 01083 gint new_line_count = 1; 01084 guint old_height = 0; 01085 guint length; 01086 gint i; 01087 gint numwcs; 01088 01089 g_return_if_fail (text != NULL); 01090 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 01091 if (nchars > 0) 01092 g_return_if_fail (chars != NULL); 01093 else 01094 { 01095 if (!nchars || !chars) 01096 return; 01097 nchars = strlen (chars); 01098 } 01099 length = nchars; 01100 01101 if (!text->freeze_count && (length > FREEZE_LENGTH)) 01102 { 01103 ext_gtk_text_freeze (text); 01104 frozen = TRUE; 01105 } 01106 01107 if (!text->freeze_count && (text->line_start_cache != NULL)) 01108 { 01109 find_line_containing_point (text, text->point.index, TRUE); 01110 old_height = total_line_height (text, text->current_line, 1); 01111 } 01112 01113 if ((TEXT_LENGTH (text) == 0) && (text->use_wchar == FALSE)) 01114 { 01115 GtkWidget *widget; 01116 widget = GTK_WIDGET (text); 01117 gtk_widget_ensure_style (widget); 01118 if ((widget->style) && (widget->style->font->type == GDK_FONT_FONTSET)) 01119 { 01120 text->use_wchar = TRUE; 01121 g_free (text->text.ch); 01122 text->text.wc = g_new (GdkWChar, INITIAL_BUFFER_SIZE); 01123 text->text_len = INITIAL_BUFFER_SIZE; 01124 if (text->scratch_buffer.ch) 01125 g_free (text->scratch_buffer.ch); 01126 text->scratch_buffer.wc = NULL; 01127 text->scratch_buffer_len = 0; 01128 } 01129 } 01130 01131 move_gap (text, text->point.index); 01132 make_forward_space (text, length); 01133 01134 if (text->use_wchar) 01135 { 01136 char *chars_nt = (char *)chars; 01137 if (nchars > 0) 01138 { 01139 chars_nt = g_new (char, length+1); 01140 memcpy (chars_nt, chars, length); 01141 chars_nt[length] = 0; 01142 } 01143 numwcs = gdk_mbstowcs (text->text.wc + text->gap_position, chars_nt, 01144 length); 01145 if (chars_nt != chars) 01146 g_free(chars_nt); 01147 if (numwcs < 0) 01148 numwcs = 0; 01149 } 01150 else 01151 { 01152 numwcs = length; 01153 memcpy(text->text.ch + text->gap_position, chars, strlen(chars)); 01154 } 01155 01156 if (!text->freeze_count && (text->line_start_cache != NULL)) 01157 { 01158 if (text->use_wchar) 01159 { 01160 for (i=0; i<numwcs; i++) 01161 if (text->text.wc[text->gap_position + i] == '\n') 01162 new_line_count++; 01163 } 01164 else 01165 { 01166 for (i=0; i<numwcs; i++) 01167 if (text->text.ch[text->gap_position + i] == '\n') 01168 new_line_count++; 01169 } 01170 } 01171 01172 if (numwcs > 0) /* this is where rejection happened, changed next */ 01173 { 01174 /* insert_text_property (text, font, fore, back, numwcs); */ 01175 insert_text_property (text, font, fore, back, underlined, divider, image, mask, user_data, user_data_length, user_data_func, numwcs); 01176 01177 text->gap_size -= numwcs; 01178 text->gap_position += numwcs; 01179 01180 if (text->point.index < text->first_line_start_index) 01181 text->first_line_start_index += numwcs; 01182 if (text->point.index < editable->selection_start_pos) 01183 editable->selection_start_pos += numwcs; 01184 if (text->point.index < editable->selection_end_pos) 01185 editable->selection_end_pos += numwcs; 01186 /* We'll reset the cursor later anyways if we aren't frozen */ 01187 if (text->point.index < text->cursor_mark.index) 01188 text->cursor_mark.index += numwcs; 01189 01190 advance_mark_n (&text->point, numwcs); 01191 01192 if (!text->freeze_count && (text->line_start_cache != NULL)) 01193 insert_expose (text, old_height, numwcs, new_line_count); 01194 } 01195 01196 if (frozen) 01197 ext_gtk_text_thaw (text); 01198 } |
|
Definition at line 1263 of file extgtktext.c. References DataFunc, ext_gtk_text_insert_alltypes(), and VFont.
01272 { 01273 gpointer user_data=g_malloc(user_data_length); 01274 memcpy(user_data,user_data_n, user_data_length); 01275 ext_gtk_text_insert_alltypes(text, font, fore, back, FALSE, FALSE, NULL, NULL, user_data, user_data_length, user_data_func, chars, nchars); 01276 } |
|
Definition at line 1247 of file extgtktext.c. References DataFunc, ext_gtk_text_insert_alltypes(), and VFont. Referenced by gtk_eb_html_add().
01256 { 01257 gpointer user_data=g_malloc(user_data_length); 01258 memcpy(user_data,user_data_n, user_data_length); 01259 ext_gtk_text_insert_alltypes(text, font, fore, back, TRUE, FALSE, NULL, NULL, user_data, user_data_length, user_data_func, chars, nchars); 01260 } |
|
Definition at line 1223 of file extgtktext.c. References ext_gtk_text_insert_alltypes(), and VFont. Referenced by gtk_eb_html_add().
01229 { 01230 ext_gtk_text_insert_alltypes(text, font, fore, back, FALSE, TRUE, NULL, NULL, NULL,0, NULL, " \n", 2); 01231 } |
|
Definition at line 1234 of file extgtktext.c. References ext_gtk_text_insert_alltypes(), and VFont. Referenced by gtk_eb_html_add().
01242 { 01243 ext_gtk_text_insert_alltypes(text, font, fore, back, FALSE, FALSE, image, mask, NULL,0,NULL, " ", 1); 01244 } |
|
Definition at line 2178 of file extgtktext.c. References _TextProperty::back_color, DataFunc, EXT_GTK_TEXT, ext_gtk_text_insert_alltypes(), ext_gtk_text_set_point(), _TextProperty::flags, _TextProperty::font, _TextProperty::fore_color, _ExtGtkTextFont::gdk_font, _TextProperty::image, _ExtGtkPropertyMark::index, MARK_CURRENT_PROPERTY, _TextProperty::mask, _ExtGtkText::point, PROPERTY_BACKGROUND, PROPERTY_DATA, PROPERTY_FONT, PROPERTY_FOREGROUND, PROPERTY_IMAGE, PROPERTY_UNDERLINED, _TextProperty::user_data, _TextProperty::user_data_func, _TextProperty::user_data_length, and VFont. Referenced by gtk_text_class_init().
02182 { 02183 ExtGtkText *text = EXT_GTK_TEXT (editable); 02184 VFont*font; 02185 GdkColor *fore, *back; 02186 gboolean underlined; 02187 GdkDrawable *image; 02188 GdkBitmap *mask; 02189 gpointer user_data=NULL; 02190 guint user_data_length=0; 02191 DataFunc *user_data_func=NULL; 02192 TextProperty *property; 02193 02194 ext_gtk_text_set_point (text, *position); 02195 02196 property = MARK_CURRENT_PROPERTY (&text->point); 02197 font = property->flags & PROPERTY_FONT ? property->font->gdk_font : NULL; 02198 fore = property->flags & PROPERTY_FOREGROUND ? &property->fore_color : NULL; 02199 back = property->flags & PROPERTY_BACKGROUND ? &property->back_color : NULL; 02200 underlined = property->flags & PROPERTY_UNDERLINED ? TRUE : FALSE; 02201 image = property->flags & PROPERTY_IMAGE ? property->image : NULL; 02202 mask = property->flags & PROPERTY_IMAGE ? property->mask: NULL; 02203 if (property->flags & PROPERTY_DATA) 02204 { 02205 02206 user_data_length=property->user_data_length; 02207 user_data = g_malloc(user_data_length); 02208 memcpy(user_data, property->user_data, user_data_length); 02209 user_data_func=property->user_data_func; 02210 } 02211 ext_gtk_text_insert_alltypes (text, font, fore, back, underlined, FALSE, image, mask, user_data, user_data_length, user_data_func, new_text, new_text_length); 02212 02213 *position = text->point.index; 02214 } |
|
Definition at line 1212 of file extgtktext.c. References ext_gtk_text_insert_alltypes(), and VFont.
01218 { 01219 ext_gtk_text_insert_alltypes(text, font, fore, back, TRUE, FALSE, NULL, NULL, NULL,0, NULL, chars, nchars); 01220 } |
|
Definition at line 858 of file extgtktext.c. References EXT_GTK_TYPE_TEXT. Referenced by create_html_widget(), eb_chat_window_new(), eb_info_window_new(), and eb_join_chat_room().
00860 { 00861 GtkWidget *text; 00862 #ifdef HAVE_LIBXFT 00863 if(!default_font) 00864 { 00865 default_font = XftFontOpen(gdk_display, DefaultScreen(gdk_display),XFT_FAMILY, XftTypeString, 00866 "Helvetica",XFT_FAMILY, XftTypeString, 00867 "Arial",XFT_SIZE, XftTypeInteger, 10,0); 00868 } 00869 #endif 00870 00871 if (hadj) 00872 g_return_val_if_fail (GTK_IS_ADJUSTMENT (hadj), NULL); 00873 if (vadj) 00874 g_return_val_if_fail (GTK_IS_ADJUSTMENT (vadj), NULL); 00875 00876 text = gtk_widget_new (EXT_GTK_TYPE_TEXT, 00877 "hadjustment", hadj, 00878 "vadjustment", vadj, 00879 NULL); 00880 00881 return text; 00882 } |
|
Definition at line 947 of file extgtktext.c. References EXT_GTK_IS_TEXT, gtk_text_adjustment(), gtk_text_disconnect(), _ExtGtkText::hadj, and _ExtGtkText::vadj. Referenced by gtk_text_class_init(), gtk_text_disconnect(), and gtk_text_set_arg().
00950 { 00951 g_return_if_fail (text != NULL); 00952 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 00953 if (hadj) 00954 g_return_if_fail (GTK_IS_ADJUSTMENT (hadj)); 00955 else 00956 hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); 00957 if (vadj) 00958 g_return_if_fail (GTK_IS_ADJUSTMENT (vadj)); 00959 else 00960 vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)); 00961 00962 if (text->hadj && (text->hadj != hadj)) 00963 { 00964 gtk_signal_disconnect_by_data (GTK_OBJECT (text->hadj), text); 00965 gtk_object_unref (GTK_OBJECT (text->hadj)); 00966 } 00967 00968 if (text->vadj && (text->vadj != vadj)) 00969 { 00970 gtk_signal_disconnect_by_data (GTK_OBJECT (text->vadj), text); 00971 gtk_object_unref (GTK_OBJECT (text->vadj)); 00972 } 00973 00974 if (text->hadj != hadj) 00975 { 00976 text->hadj = hadj; 00977 gtk_object_ref (GTK_OBJECT (text->hadj)); 00978 gtk_object_sink (GTK_OBJECT (text->hadj)); 00979 00980 gtk_signal_connect (GTK_OBJECT (text->hadj), "changed", 00981 (GtkSignalFunc) gtk_text_adjustment, 00982 text); 00983 gtk_signal_connect (GTK_OBJECT (text->hadj), "value_changed", 00984 (GtkSignalFunc) gtk_text_adjustment, 00985 text); 00986 gtk_signal_connect (GTK_OBJECT (text->hadj), "disconnect", 00987 (GtkSignalFunc) gtk_text_disconnect, 00988 text); 00989 gtk_text_adjustment (hadj, text); 00990 } 00991 00992 if (text->vadj != vadj) 00993 { 00994 text->vadj = vadj; 00995 gtk_object_ref (GTK_OBJECT (text->vadj)); 00996 gtk_object_sink (GTK_OBJECT (text->vadj)); 00997 00998 gtk_signal_connect (GTK_OBJECT (text->vadj), "changed", 00999 (GtkSignalFunc) gtk_text_adjustment, 01000 text); 01001 gtk_signal_connect (GTK_OBJECT (text->vadj), "value_changed", 01002 (GtkSignalFunc) gtk_text_adjustment, 01003 text); 01004 gtk_signal_connect (GTK_OBJECT (text->vadj), "disconnect", 01005 (GtkSignalFunc) gtk_text_disconnect, 01006 text); 01007 gtk_text_adjustment (vadj, text); 01008 } 01009 } |
|
Definition at line 917 of file extgtktext.c. References EXT_GTK_IS_TEXT. Referenced by gtk_eb_html_init().
00919 { 00920 g_return_if_fail (text != NULL); 00921 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 00922 00923 gtk_editable_set_editable (GTK_EDITABLE (text), is_editable); 00924 } |
|
Definition at line 901 of file extgtktext.c. References EXT_GTK_IS_TEXT, _ExtGtkText::line_wrap, and recompute_geometry(). Referenced by gtk_eb_html_init(), and gtk_text_set_arg().
00903 { 00904 g_return_if_fail (text != NULL); 00905 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 00906 00907 text->line_wrap = (line_wrap != FALSE); 00908 00909 if (GTK_WIDGET_REALIZED (text)) 00910 { 00911 recompute_geometry (text); 00912 gtk_widget_queue_draw (GTK_WIDGET (text)); 00913 } 00914 } |
|
Definition at line 1012 of file extgtktext.c. References EXT_GTK_IS_TEXT, find_mark(), _ExtGtkText::point, and TEXT_LENGTH. Referenced by ext_gtk_text_backward_delete(), ext_gtk_text_insert_text(), and gtk_text_delete_text().
01014 { 01015 g_return_if_fail (text != NULL); 01016 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 01017 g_return_if_fail (index <= TEXT_LENGTH (text)); 01018 01019 text->point = find_mark (text, index); 01020 } |
|
Definition at line 885 of file extgtktext.c. References EXT_GTK_IS_TEXT, recompute_geometry(), and _ExtGtkText::word_wrap. Referenced by gtk_eb_html_init(), and gtk_text_set_arg().
00887 { 00888 g_return_if_fail (text != NULL); 00889 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 00890 00891 text->word_wrap = (word_wrap != FALSE); 00892 00893 if (GTK_WIDGET_REALIZED (text)) 00894 { 00895 recompute_geometry (text); 00896 gtk_widget_queue_draw (GTK_WIDGET (text)); 00897 } 00898 } |
|
Definition at line 1051 of file extgtktext.c. References draw_cursor(), EXT_GTK_IS_TEXT, _ExtGtkText::freeze_count, and recompute_geometry(). Referenced by ext_gtk_text_forward_delete(), ext_gtk_text_insert_alltypes(), and set_html_text().
01052 { 01053 g_return_if_fail (text != NULL); 01054 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 01055 01056 if (text->freeze_count) 01057 if (!(--text->freeze_count) && GTK_WIDGET_REALIZED (text)) 01058 { 01059 recompute_geometry (text); 01060 gtk_widget_queue_draw (GTK_WIDGET (text)); 01061 } 01062 draw_cursor (text, FALSE); 01063 } |
|
Definition at line 2692 of file extgtktext.c. References _FetchLinesData::data, _FetchLinesData::data_max, fetch_lines_iterator(), _FetchLinesData::fl_type, FLType, line_params_iterate(), and _FetchLinesData::new_lines. Referenced by delete_expose(), fetch_lines_backward(), fetch_lines_forward(), insert_expose(), and recompute_geometry().
02697 { 02698 FetchLinesData fl_data; 02699 02700 fl_data.new_lines = NULL; 02701 fl_data.data = 0; 02702 fl_data.data_max = data; 02703 fl_data.fl_type = fl_type; 02704 02705 line_params_iterate (text, mark0, tab_cont0, TRUE, &fl_data, fetch_lines_iterator); 02706 02707 return g_list_reverse (fl_data.new_lines); 02708 } |
|
Definition at line 2711 of file extgtktext.c. References CACHE_DATA, fetch_lines(), FetchLinesCount, find_this_line_start_mark(), and _ExtGtkText::line_start_cache. Referenced by scroll_up().
02712 { 02713 GList* new_lines = NULL, *new_line_start; 02714 ExtGtkPropertyMark mark; 02715 02716 if (CACHE_DATA(text->line_start_cache).start.index == 0) 02717 return; 02718 02719 mark = find_this_line_start_mark (text, 02720 CACHE_DATA(text->line_start_cache).start.index - 1, 02721 &CACHE_DATA(text->line_start_cache).start); 02722 02723 new_line_start = new_lines = fetch_lines (text, &mark, NULL, FetchLinesCount, 1); 02724 02725 while (new_line_start->next) 02726 new_line_start = new_line_start->next; 02727 02728 new_line_start->next = text->line_start_cache; 02729 text->line_start_cache->prev = new_line_start; 02730 } |
|
Definition at line 2733 of file extgtktext.c. References advance_mark(), CACHE_DATA, fetch_lines(), FetchLinesCount, LAST_INDEX, and _ExtGtkText::line_start_cache. Referenced by compute_lines_pixels(), expose_text(), find_line_containing_point(), gtk_text_update_text(), scroll_down(), and total_line_height().
02734 { 02735 ExtGtkPropertyMark mark; 02736 GList* line = text->line_start_cache; 02737 02738 while(line->next) 02739 line = line->next; 02740 02741 mark = CACHE_DATA(line).end; 02742 02743 if (LAST_INDEX (text, mark)) 02744 return; 02745 02746 advance_mark(&mark); 02747 02748 line->next = fetch_lines (text, &mark, &CACHE_DATA(line).tab_cont_next, FetchLinesCount, line_count); 02749 02750 if (line->next) 02751 line->next->prev = line; 02752 } |
|
Definition at line 2662 of file extgtktext.c. References _FetchLinesData::data, _FetchLinesData::data_max, FetchLinesCount, FetchLinesPixels, _FetchLinesData::fl_type, LINE_HEIGHT, _ExtGtkText::line_wrap, _FetchLinesData::new_lines, and _LineParams::wraps. Referenced by fetch_lines().
02663 { 02664 FetchLinesData *fldata = (FetchLinesData*) data; 02665 02666 fldata->new_lines = g_list_prepend (fldata->new_lines, lp); 02667 02668 switch (fldata->fl_type) 02669 { 02670 case FetchLinesCount: 02671 if (!text->line_wrap || !lp->wraps) 02672 fldata->data += 1; 02673 02674 if (fldata->data >= fldata->data_max) 02675 return TRUE; 02676 02677 break; 02678 case FetchLinesPixels: 02679 02680 fldata->data += LINE_HEIGHT(*lp); 02681 02682 if (fldata->data >= fldata->data_max) 02683 return TRUE; 02684 02685 break; 02686 } 02687 02688 return FALSE; 02689 } |
|
Definition at line 4089 of file extgtktext.c. References EXT_GTK_TEXT_INDEX, _ExtGtkPropertyMark::index, LAST_INDEX, MARK_CURRENT_IMAGE, MARK_CURRENT_TEXT_FONT, and _TabStopMark::to_next_tab. Referenced by find_cursor_at_line(), find_line_params(), and find_mouse_cursor_at_line().
04090 { 04091 GdkWChar ch; 04092 gint16* char_widths; 04093 GdkDrawable* image; 04094 04095 if (LAST_INDEX (text, *mark)) 04096 return 0; 04097 04098 ch = EXT_GTK_TEXT_INDEX (text, mark->index); 04099 char_widths = MARK_CURRENT_TEXT_FONT (text, mark)->char_widths; 04100 if((image=MARK_CURRENT_IMAGE(text, mark))) 04101 { 04102 #ifdef __MINGW32__ 04103 return ((GdkDrawablePrivate*) image) ->width + 2; 04104 #else 04105 return ((GdkWindowPrivate*) image) ->width + 2; 04106 #endif 04107 } 04108 04109 if (ch == '\t') 04110 { 04111 return tab_mark->to_next_tab * char_widths[' ']; 04112 } 04113 else if (ch < 256) 04114 { 04115 return char_widths[ch]; 04116 } 04117 else 04118 { 04119 return gdk_char_width_wc(MARK_CURRENT_TEXT_FONT(text, mark)->gdk_font, ch); 04120 } 04121 } |
|
Definition at line 4213 of file extgtktext.c. References CACHE_DATA, _ExtGtkText::current_line, _ExtGtkText::cursor_mark, find_cursor_at_line(), find_line_containing_point(), _ExtGtkPropertyMark::index, and pixel_height_of(). Referenced by delete_expose(), find_mouse_cursor(), gtk_text_button_release(), gtk_text_move_backward_word(), gtk_text_move_forward_word(), gtk_text_move_to_column(), gtk_text_set_position(), insert_expose(), move_cursor_buffer_ver(), move_cursor_hor(), move_cursor_ver(), and recompute_geometry().
04214 { 04215 if (GTK_WIDGET_REALIZED (text)) 04216 { 04217 find_line_containing_point (text, text->cursor_mark.index, scroll); 04218 04219 if (text->current_line) 04220 find_cursor_at_line (text, 04221 &CACHE_DATA(text->current_line), 04222 pixel_height_of(text, text->current_line)); 04223 } 04224 04225 GTK_EDITABLE (text)->current_pos = text->cursor_mark.index; 04226 } |
|
Definition at line 4153 of file extgtktext.c. References advance_mark(), advance_tab_mark(), _ExtGtkText::cursor_char, _ExtGtkText::cursor_char_offset, _ExtGtkText::cursor_mark, _ExtGtkText::cursor_pos_x, _ExtGtkText::cursor_pos_y, EXT_GTK_TEXT_INDEX, find_char_width(), _LineParams::font_descent, _ExtGtkPropertyMark::index, LAST_INDEX, LINE_DELIM, LINE_START_PIXEL, MARK_CURRENT_BACK, MARK_CURRENT_FONT, MARK_CURRENT_FORE, _LineParams::start, _LineParams::tab_cont, _PrevTabCont::tab_start, and _ExtGtkText::use_wchar. Referenced by find_cursor().
04154 { 04155 GdkWChar ch; 04156 #ifdef USE_XIM 04157 GtkEditable *editable = (GtkEditable *)text; 04158 #endif 04159 04160 ExtGtkPropertyMark mark = start_line->start; 04161 TabStopMark tab_mark = start_line->tab_cont.tab_start; 04162 gint pixel_width = LINE_START_PIXEL (*start_line); 04163 04164 while (mark.index < text->cursor_mark.index) 04165 { 04166 pixel_width += find_char_width (text, &mark, &tab_mark); 04167 04168 advance_tab_mark (text, &tab_mark, EXT_GTK_TEXT_INDEX(text, mark.index)); 04169 advance_mark (&mark); 04170 } 04171 04172 text->cursor_pos_x = pixel_width; 04173 text->cursor_pos_y = pixel_height; 04174 text->cursor_char_offset = start_line->font_descent; 04175 text->cursor_mark = mark; 04176 04177 ch = LAST_INDEX (text, mark) ? 04178 LINE_DELIM : EXT_GTK_TEXT_INDEX (text, mark.index); 04179 04180 if ((text->use_wchar) ? gdk_iswspace (ch) : isspace (ch)) 04181 text->cursor_char = 0; 04182 else 04183 text->cursor_char = ch; 04184 04185 #ifdef USE_XIM 04186 if (GTK_WIDGET_HAS_FOCUS(text) && gdk_im_ready() && editable->ic && 04187 (gdk_ic_get_style (editable->ic) & GDK_IM_PREEDIT_POSITION)) 04188 { 04189 GdkICAttributesType mask = GDK_IC_SPOT_LOCATION | 04190 GDK_IC_PREEDIT_FOREGROUND | 04191 GDK_IC_PREEDIT_BACKGROUND; 04192 04193 editable->ic_attr->spot_location.x = text->cursor_pos_x; 04194 editable->ic_attr->spot_location.y 04195 = text->cursor_pos_y - text->cursor_char_offset; 04196 editable->ic_attr->preedit_foreground = *MARK_CURRENT_FORE (text, &mark); 04197 editable->ic_attr->preedit_background = *MARK_CURRENT_BACK (text, &mark); 04198 04199 #ifndef HAVE_LIBXFT 04200 if (MARK_CURRENT_FONT (text, &mark)->type == GDK_FONT_FONTSET) 04201 { 04202 mask |= GDK_IC_PREEDIT_FONTSET; 04203 editable->ic_attr->preedit_fontset = MARK_CURRENT_FONT (text, &mark); 04204 } 04205 #endif 04206 04207 gdk_ic_set_attr (editable->ic, editable->ic_attr, mask); 04208 } 04209 #endif 04210 } |
|
Definition at line 4002 of file extgtktext.c. References CACHE_DATA, _ExtGtkText::current_line, fetch_lines_forward(), _ExtGtkText::first_cut_pixels, LAST_INDEX, LINE_HEIGHT, _ExtGtkText::line_start_cache, pixel_height_of(), scroll_int(), _ExtGtkText::text_area, TEXT_SHOW, and TEXT_SHOW_LINE. Referenced by ext_gtk_text_forward_delete(), ext_gtk_text_insert_alltypes(), and find_cursor().
04004 { 04005 GList* cache; 04006 gint height; 04007 04008 text->current_line = NULL; 04009 04010 TEXT_SHOW (text); 04011 04012 /* Scroll backwards until the point is on screen 04013 */ 04014 while (CACHE_DATA(text->line_start_cache).start.index > point) 04015 scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache))); 04016 04017 /* Now additionally try to make sure that the point is fully on screen 04018 */ 04019 if (scroll) 04020 { 04021 while (text->first_cut_pixels != 0 && 04022 text->line_start_cache->next && 04023 CACHE_DATA(text->line_start_cache->next).start.index > point) 04024 scroll_int (text, - LINE_HEIGHT(CACHE_DATA(text->line_start_cache->next))); 04025 } 04026 04027 gdk_window_get_size (text->text_area, NULL, &height); 04028 04029 for (cache = text->line_start_cache; cache; cache = cache->next) 04030 { 04031 guint lph; 04032 04033 if (CACHE_DATA(cache).end.index >= point || 04034 LAST_INDEX(text, CACHE_DATA(cache).end)) 04035 { 04036 text->current_line = cache; /* LOOK HERE, this proc has an 04037 * important side effect. */ 04038 return; 04039 } 04040 04041 TEXT_SHOW_LINE (text, cache, "cache"); 04042 04043 if (cache->next == NULL) 04044 fetch_lines_forward (text, 1); 04045 04046 if (scroll) 04047 { 04048 lph = pixel_height_of (text, cache->next); 04049 04050 /* Scroll the bottom of the line is on screen, or until 04051 * the line is the first onscreen line. 04052 */ 04053 while (cache->next != text->line_start_cache && lph > height) 04054 { 04055 TEXT_SHOW_LINE (text, cache, "cache"); 04056 TEXT_SHOW_LINE (text, cache->next, "cache->next"); 04057 scroll_int (text, LINE_HEIGHT(CACHE_DATA(cache->next))); 04058 lph = pixel_height_of (text, cache->next); 04059 } 04060 } 04061 } 04062 04063 g_assert_not_reached (); /* Must set text->current_line here */ 04064 } |
|
Definition at line 5105 of file extgtktext.c. References advance_mark(), advance_tab_mark(), decrement_mark(), _LineParams::displayable_chars, _LineParams::end, EXT_GTK_TEXT_INDEX, find_char_width(), _LineParams::font_ascent, _LineParams::font_descent, _ExtGtkPropertyMark::index, init_tab_cont(), LAST_INDEX, LINE_DELIM, _ExtGtkText::line_wrap, MARK_CURRENT_FONT, MARK_CURRENT_IMAGE, MARK_CURRENT_TEXT_FONT, _PrevTabCont::pixel_offset, _LineParams::pixel_width, _ExtGtkPropertyMark::property, _LineParams::start, _LineParams::tab_cont, _LineParams::tab_cont_next, _PrevTabCont::tab_start, _ExtGtkText::text_area, _TabStopMark::to_next_tab, _ExtGtkText::use_wchar, VFont, _ExtGtkText::word_wrap, and _LineParams::wraps. Referenced by line_params_iterate().
05109 { 05110 LineParams lp; 05111 TabStopMark tab_mark = tab_cont->tab_start; 05112 guint max_display_pixels; 05113 GdkWChar ch; 05114 gint ch_width; 05115 VFont* font; 05116 GdkDrawable * image; 05117 05118 gdk_window_get_size (text->text_area, (gint*) &max_display_pixels, NULL); 05119 05120 lp.wraps = 0; 05121 lp.tab_cont = *tab_cont; 05122 lp.start = *mark; 05123 lp.end = *mark; 05124 lp.pixel_width = tab_cont->pixel_offset; 05125 lp.displayable_chars = 0; 05126 lp.font_ascent = 0; 05127 lp.font_descent = 0; 05128 05129 init_tab_cont (text, next_cont); 05130 05131 while (!LAST_INDEX(text, lp.end)) 05132 { 05133 g_assert (lp.end.property); 05134 05135 ch = EXT_GTK_TEXT_INDEX (text, lp.end.index); 05136 font = MARK_CURRENT_FONT (text, &lp.end); 05137 05138 if (ch == LINE_DELIM) 05139 { 05140 /* Newline doesn't count in computation of line height, even 05141 * if its in a bigger font than the rest of the line. Unless, 05142 * of course, there are no other characters. */ 05143 if (!lp.font_ascent && !lp.font_descent) 05144 { 05145 lp.font_ascent = font->ascent+1; 05146 lp.font_descent = font->descent+1; 05147 } 05148 05149 lp.tab_cont_next = *next_cont; 05150 05151 return lp; 05152 } 05153 05154 ch_width = find_char_width (text, &lp.end, &tab_mark); 05155 05156 if ((ch_width + lp.pixel_width > max_display_pixels) && 05157 (lp.end.index > lp.start.index)) 05158 { 05159 lp.wraps = 1; 05160 05161 if (text->line_wrap) 05162 { 05163 next_cont->tab_start = tab_mark; 05164 next_cont->pixel_offset = 0; 05165 05166 /* 05167 * if it is an image that is overflowing, 05168 * always wrap it 05169 */ 05170 05171 if(MARK_CURRENT_IMAGE(text, &lp.end)) 05172 { 05173 decrement_mark (&lp.end); 05174 lp.displayable_chars -= 1; 05175 } 05176 05177 else if (ch == '\t') 05178 { 05179 /* Here's the tough case, a tab is wrapping. */ 05180 gint pixels_avail = max_display_pixels - lp.pixel_width; 05181 gint space_width = MARK_CURRENT_TEXT_FONT(text, &lp.end)->char_widths[' ']; 05182 gint spaces_avail = pixels_avail / space_width; 05183 05184 if (spaces_avail == 0) 05185 { 05186 decrement_mark (&lp.end); 05187 } 05188 else 05189 { 05190 advance_tab_mark (text, &next_cont->tab_start, '\t'); 05191 next_cont->pixel_offset = space_width * (tab_mark.to_next_tab - 05192 spaces_avail); 05193 lp.displayable_chars += 1; 05194 } 05195 } 05196 else 05197 { 05198 if (text->word_wrap) 05199 { 05200 ExtGtkPropertyMark saved_mark = lp.end; 05201 guint saved_characters = lp.displayable_chars; 05202 05203 lp.displayable_chars += 1; 05204 05205 if (text->use_wchar) 05206 { 05207 while (!gdk_iswspace (EXT_GTK_TEXT_INDEX (text, lp.end.index)) && 05208 (lp.end.index > lp.start.index)) 05209 { 05210 decrement_mark (&lp.end); 05211 lp.displayable_chars -= 1; 05212 } 05213 } 05214 else 05215 { 05216 while (!isspace(EXT_GTK_TEXT_INDEX (text, lp.end.index)) && 05217 (lp.end.index > lp.start.index)) 05218 { 05219 decrement_mark (&lp.end); 05220 lp.displayable_chars -= 1; 05221 } 05222 } 05223 05224 /* If whole line is one word, revert to char wrapping */ 05225 if (lp.end.index == lp.start.index) 05226 { 05227 lp.end = saved_mark; 05228 lp.displayable_chars = saved_characters; 05229 decrement_mark (&lp.end); 05230 } 05231 } 05232 else 05233 { 05234 /* Don't include this character, it will wrap. */ 05235 decrement_mark (&lp.end); 05236 } 05237 } 05238 05239 lp.tab_cont_next = *next_cont; 05240 05241 return lp; 05242 } 05243 } 05244 else 05245 { 05246 lp.displayable_chars += 1; 05247 } 05248 if((image=MARK_CURRENT_IMAGE(text, &lp.end))) 05249 { 05250 #ifdef __MINGW32__ 05251 int height=((GdkDrawablePrivate*) image) ->height; 05252 int pixel_width =((GdkDrawablePrivate*) image) ->width+2; 05253 #else 05254 int height=((GdkWindowPrivate*) image) ->height; 05255 int pixel_width =((GdkWindowPrivate*) image) ->width+2; 05256 #endif 05257 lp.pixel_width += pixel_width; 05258 lp.font_ascent = MAX(((height*3)/4)+1, lp.font_ascent); 05259 lp.font_descent = MAX((height/4)+1, lp.font_descent); 05260 } 05261 else 05262 { 05263 lp.font_ascent = MAX (font->ascent+1, lp.font_ascent); 05264 lp.font_descent = MAX (font->descent+1, lp.font_descent); 05265 lp.pixel_width += ch_width; 05266 } 05267 05268 advance_mark(&lp.end); 05269 advance_tab_mark (text, &tab_mark, ch); 05270 } 05271 05272 if (LAST_INDEX(text, lp.start)) 05273 { 05274 /* Special case, empty last line. */ 05275 font = MARK_CURRENT_FONT (text, &lp.end); 05276 lp.font_ascent = font->ascent+1; 05277 lp.font_descent = font->descent+1; 05278 } 05279 05280 lp.tab_cont_next = *next_cont; 05281 05282 return lp; 05283 } |
|
Definition at line 3955 of file extgtktext.c. References find_mark_near(), and _ExtGtkText::point. Referenced by ext_gtk_text_set_point(), gtk_text_button_press(), gtk_text_key_press(), gtk_text_set_position(), and set_vertical_scroll().
03956 { 03957 return find_mark_near (text, mark_position, &text->point); 03958 } |
|
Definition at line 3964 of file extgtktext.c. References _ExtGtkPropertyMark::index, move_mark_n(), _ExtGtkPropertyMark::offset, _ExtGtkPropertyMark::property, and _ExtGtkText::text_properties. Referenced by find_mark(), and find_this_line_start_mark().
03965 { 03966 gint diffa; 03967 gint diffb; 03968 03969 ExtGtkPropertyMark mark; 03970 03971 if (!near) 03972 diffa = mark_position + 1; 03973 else 03974 diffa = mark_position - near->index; 03975 03976 diffb = mark_position; 03977 03978 if (diffa < 0) 03979 diffa = -diffa; 03980 03981 if (diffa <= diffb) 03982 { 03983 mark = *near; 03984 } 03985 else 03986 { 03987 mark.index = 0; 03988 mark.property = text->text_properties; 03989 mark.offset = 0; 03990 } 03991 03992 move_mark_n (&mark, mark_position - mark.index); 03993 03994 return mark; 03995 } |
|
Definition at line 4272 of file extgtktext.c. References CACHE_DATA, find_cursor(), find_mouse_cursor_at_line(), _ExtGtkText::first_cut_pixels, LINE_HEIGHT, and _ExtGtkText::line_start_cache. Referenced by gtk_text_button_press(), gtk_text_motion_notify(), scroll_down(), and scroll_up().
04273 { 04274 gint pixel_height; 04275 GList* cache = text->line_start_cache; 04276 04277 g_assert (cache); 04278 04279 pixel_height = - text->first_cut_pixels; 04280 04281 for (; cache; cache = cache->next) 04282 { 04283 pixel_height += LINE_HEIGHT(CACHE_DATA(cache)); 04284 04285 if (y < pixel_height || !cache->next) 04286 { 04287 find_mouse_cursor_at_line (text, &CACHE_DATA(cache), pixel_height, x); 04288 04289 find_cursor (text, FALSE); 04290 04291 return; 04292 } 04293 } 04294 } |
|
Definition at line 4229 of file extgtktext.c. References advance_mark(), advance_tab_mark(), _ExtGtkText::cursor_char, _ExtGtkText::cursor_char_offset, _ExtGtkText::cursor_mark, _ExtGtkText::cursor_pos_x, _ExtGtkText::cursor_pos_y, _LineParams::end, EXT_GTK_TEXT_INDEX, find_char_width(), _LineParams::font_descent, _ExtGtkPropertyMark::index, LAST_INDEX, LINE_DELIM, LINE_START_PIXEL, _LineParams::start, _LineParams::tab_cont, _PrevTabCont::tab_start, and _ExtGtkText::use_wchar. Referenced by find_mouse_cursor().
04232 { 04233 ExtGtkPropertyMark mark = lp->start; 04234 TabStopMark tab_mark = lp->tab_cont.tab_start; 04235 04236 gint char_width = find_char_width(text, &mark, &tab_mark); 04237 gint pixel_width = LINE_START_PIXEL (*lp) + (char_width+1)/2; 04238 04239 text->cursor_pos_y = line_pixel_height; 04240 04241 for (;;) 04242 { 04243 GdkWChar ch = LAST_INDEX (text, mark) ? 04244 LINE_DELIM : EXT_GTK_TEXT_INDEX (text, mark.index); 04245 04246 if (button_x < pixel_width || mark.index == lp->end.index) 04247 { 04248 text->cursor_pos_x = pixel_width - (char_width+1)/2; 04249 text->cursor_mark = mark; 04250 text->cursor_char_offset = lp->font_descent; 04251 04252 if ((text->use_wchar) ? gdk_iswspace (ch) : isspace (ch)) 04253 text->cursor_char = 0; 04254 else 04255 text->cursor_char = ch; 04256 04257 break; 04258 } 04259 04260 advance_tab_mark (text, &tab_mark, ch); 04261 advance_mark (&mark); 04262 04263 pixel_width += char_width/2; 04264 04265 char_width = find_char_width (text, &mark, &tab_mark); 04266 04267 pixel_width += (char_width+1)/2; 04268 } 04269 } |
|
Definition at line 2593 of file extgtktext.c. References decrement_mark(), EXT_GTK_TEXT_INDEX, find_mark_near(), _ExtGtkPropertyMark::index, and LINE_DELIM. Referenced by fetch_lines_backward(), move_cursor_buffer_ver(), and move_cursor_ver().
02594 { 02595 ExtGtkPropertyMark mark; 02596 02597 mark = find_mark_near (text, point_position, near); 02598 02599 while (mark.index > 0 && 02600 EXT_GTK_TEXT_INDEX (text, mark.index - 1) != LINE_DELIM) 02601 decrement_mark (&mark); 02602 02603 return mark; 02604 } |
|
Definition at line 4949 of file extgtktext.c. References _ExtGtkText::first_cut_pixels, _ExtGtkText::line_start_cache, and pixel_height_of(). Referenced by scroll_down().
04950 { 04951 if (text->first_cut_pixels) 04952 return pixel_height_of(text, text->line_start_cache) + 1; 04953 else 04954 return 1; 04955 } |
|
Definition at line 3157 of file extgtktext.c. References VFont. Referenced by get_text_font().
03158 { 03159 #ifndef HAVE_LIBXFT 03160 return gdk_font_id ((const VFont*) font); 03161 #else 03162 return (guint)font; 03163 #endif 03164 } |
|
Definition at line 4301 of file extgtktext.c. References _ExtGtkText::line_start_cache, and params_mem_chunk. Referenced by gtk_text_unrealize(), and recompute_geometry().
04302 { 04303 GList* cache = text->line_start_cache; 04304 04305 if (cache) 04306 { 04307 while (cache->prev) 04308 cache = cache->prev; 04309 04310 text->line_start_cache = cache; 04311 } 04312 04313 for (; cache; cache = cache->next) 04314 g_mem_chunk_free (params_mem_chunk, cache->data); 04315 04316 g_list_free (text->line_start_cache); 04317 04318 text->line_start_cache = NULL; 04319 } |
|
Definition at line 3194 of file extgtktext.c. References _ExtGtkTextFont::char_widths, font_cache_table, font_hash(), _ExtGtkTextFont::gdk_font, _ExtGtkTextFont::ref_count, and VFont. Referenced by gtk_text_style_set(), insert_text_property(), new_text_property(), and text_properties_equal().
03195 { 03196 ExtGtkTextFont* tf=NULL; 03197 gint i; 03198 03199 #ifndef HAVE_LIBXFT 03200 if (!font_cache_table) 03201 font_cache_table = g_hash_table_new (font_hash, (GCompareFunc) gdk_font_equal); 03202 #else 03203 if (!font_cache_table) 03204 font_cache_table = g_hash_table_new (font_hash, (GCompareFunc) xft_font_equal); 03205 #endif 03206 03207 tf = g_hash_table_lookup (font_cache_table, gfont); 03208 03209 if (tf) 03210 { 03211 tf->ref_count++; 03212 return tf; 03213 } 03214 03215 tf = g_new (ExtGtkTextFont, 1); 03216 tf->ref_count = 1; 03217 03218 tf->gdk_font = gfont; 03219 #ifndef HAVE_LIBXFT 03220 gdk_font_ref (gfont); 03221 #endif 03222 03223 for(i = 0; i < 256; i += 1) 03224 #ifndef HAVE_LIBXFT 03225 tf->char_widths[i] = gdk_char_width (gfont, (char)i); 03226 #else 03227 { 03228 XGlyphInfo extents; 03229 char string[] = {(char)i, '\0'}; 03230 XftTextExtents8(gdk_display, gfont, string, 1, &extents); 03231 tf->char_widths[i] = extents.xOff; 03232 } 03233 #endif 03234 03235 g_hash_table_insert (font_cache_table, gfont, tf); 03236 03237 return tf; 03238 } |
|
Definition at line 2518 of file extgtktext.c. References DBG_CORE, draw_cursor(), eb_debug, EXT_GTK_IS_TEXT, gtk_text_adjustment(), _ExtGtkText::hadj, _ExtGtkText::last_ver_value, _ExtGtkText::line_start_cache, MIN, scroll_down(), scroll_up(), and undraw_cursor(). Referenced by ext_gtk_text_set_adjustments(), and gtk_text_adjustment().
02520 { 02521 gfloat old_val; 02522 02523 g_return_if_fail (adjustment != NULL); 02524 g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); 02525 g_return_if_fail (text != NULL); 02526 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 02527 02528 /* Clamp the value here, because we'll get really confused 02529 * if someone tries to move the adjusment outside of the 02530 * allowed bounds 02531 */ 02532 old_val = adjustment->value; 02533 02534 adjustment->value = MIN (adjustment->value, adjustment->upper - adjustment->page_size); 02535 adjustment->value = MAX (adjustment->value, 0.0); 02536 02537 if (adjustment->value != old_val) 02538 { 02539 gtk_signal_handler_block_by_func (GTK_OBJECT (adjustment), 02540 GTK_SIGNAL_FUNC (gtk_text_adjustment), 02541 text); 02542 gtk_adjustment_changed (adjustment); 02543 gtk_signal_handler_unblock_by_func (GTK_OBJECT (adjustment), 02544 GTK_SIGNAL_FUNC (gtk_text_adjustment), 02545 text); 02546 } 02547 02548 /* Just ignore it if we haven't been size-allocated and realized yet */ 02549 if (text->line_start_cache == NULL) 02550 return; 02551 02552 if (adjustment == text->hadj) 02553 { 02554 eb_debug (DBG_CORE, "extgtktext: horizontal scrolling not implemented"); 02555 } 02556 else 02557 { 02558 gint diff = ((gint)adjustment->value) - text->last_ver_value; 02559 02560 if (diff != 0) 02561 { 02562 undraw_cursor (text, FALSE); 02563 02564 if (diff > 0) 02565 scroll_down (text, diff); 02566 else /* if (diff < 0) */ 02567 scroll_up (text, diff); 02568 02569 draw_cursor (text, FALSE); 02570 02571 text->last_ver_value = adjustment->value; 02572 } 02573 } 02574 } |
|
Definition at line 1954 of file extgtktext.c. References _ExtGtkText::button, _ExtGtkText::cursor_mark, DataFunc, draw_cursor(), EXT_GTK_IS_TEXT, EXT_GTK_TEXT, find_mark(), find_mouse_cursor(), gtk_text_select_line(), gtk_text_select_word(), gtk_text_set_selection(), _ExtGtkPropertyMark::index, MARK_CURRENT_DATA, MARK_CURRENT_DATA_FUNC, _ExtGtkText::text_area, and undraw_cursor(). Referenced by gtk_text_class_init().
01956 { 01957 ExtGtkText *text; 01958 ExtGtkPropertyMark mark; 01959 GtkEditable *editable; 01960 static GdkAtom ctext_atom = GDK_NONE; 01961 DataFunc *func; 01962 01963 g_return_val_if_fail (widget != NULL, FALSE); 01964 g_return_val_if_fail (EXT_GTK_IS_TEXT (widget), FALSE); 01965 g_return_val_if_fail (event != NULL, FALSE); 01966 01967 if (ctext_atom == GDK_NONE) 01968 ctext_atom = gdk_atom_intern ("COMPOUND_TEXT", FALSE); 01969 01970 text = EXT_GTK_TEXT (widget); 01971 editable = GTK_EDITABLE (widget); 01972 01973 if (text->button && (event->button != text->button)) 01974 return FALSE; 01975 01976 text->button = event->button; 01977 01978 if (!GTK_WIDGET_HAS_FOCUS (widget)) 01979 gtk_widget_grab_focus (widget); 01980 01981 if (event->button == 1) 01982 { 01983 switch (event->type) 01984 { 01985 case GDK_BUTTON_PRESS: 01986 gtk_grab_add (widget); 01987 01988 undraw_cursor (text, FALSE); 01989 find_mouse_cursor (text, (gint)event->x, (gint)event->y); 01990 draw_cursor (text, FALSE); 01991 01992 mark=find_mark(text, text->cursor_mark.index); 01993 if (MARK_CURRENT_DATA(text,&mark)) 01994 { 01995 func=MARK_CURRENT_DATA_FUNC(text, &mark); 01996 if (func) 01997 func(text->text_area, MARK_CURRENT_DATA(text,&mark)); 01998 01999 } 02000 02001 /* Set it now, so we display things right. We'll unset it 02002 * later if things don't work out */ 02003 editable->has_selection = TRUE; 02004 gtk_text_set_selection (GTK_EDITABLE(text), 02005 text->cursor_mark.index, 02006 text->cursor_mark.index); 02007 02008 break; 02009 02010 case GDK_2BUTTON_PRESS: 02011 gtk_text_select_word (text, event->time); 02012 break; 02013 02014 case GDK_3BUTTON_PRESS: 02015 gtk_text_select_line (text, event->time); 02016 break; 02017 02018 default: 02019 break; 02020 } 02021 } 02022 else if (event->type == GDK_BUTTON_PRESS) 02023 { 02024 if ((event->button == 2) && editable->editable) 02025 { 02026 if (editable->selection_start_pos == editable->selection_end_pos || 02027 editable->has_selection) 02028 { 02029 undraw_cursor (text, FALSE); 02030 find_mouse_cursor (text, (gint)event->x, (gint)event->y); 02031 draw_cursor (text, FALSE); 02032 02033 } 02034 02035 gtk_selection_convert (widget, GDK_SELECTION_PRIMARY, 02036 ctext_atom, event->time); 02037 } 02038 else 02039 { 02040 gtk_grab_add (widget); 02041 02042 undraw_cursor (text, FALSE); 02043 find_mouse_cursor (text, event->x, event->y); 02044 draw_cursor (text, FALSE); 02045 02046 gtk_text_set_selection (GTK_EDITABLE(text), 02047 text->cursor_mark.index, 02048 text->cursor_mark.index); 02049 02050 editable->has_selection = FALSE; 02051 if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == widget->window) 02052 gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY, event->time); 02053 } 02054 } 02055 02056 return FALSE; 02057 } |
|
Definition at line 2060 of file extgtktext.c. References _ExtGtkText::button, draw_cursor(), EXT_GTK_IS_TEXT, EXT_GTK_TEXT, find_cursor(), gtk_text_update_text(), _ExtGtkText::timer, and undraw_cursor(). Referenced by gtk_text_class_init().
02062 { 02063 ExtGtkText *text; 02064 GtkEditable *editable; 02065 g_return_val_if_fail (widget != NULL, FALSE); 02066 g_return_val_if_fail (EXT_GTK_IS_TEXT (widget), FALSE); 02067 g_return_val_if_fail (event != NULL, FALSE); 02068 02069 text = EXT_GTK_TEXT (widget); 02070 02071 gtk_grab_remove (widget); 02072 02073 if (text->button != event->button) 02074 return FALSE; 02075 02076 text->button = 0; 02077 02078 if (text->timer) 02079 { 02080 gtk_timeout_remove (text->timer); 02081 text->timer = 0; 02082 } 02083 02084 if (event->button == 1) 02085 { 02086 text = EXT_GTK_TEXT (widget); 02087 editable = GTK_EDITABLE (widget); 02088 02089 gtk_grab_remove (widget); 02090 02091 editable->has_selection = FALSE; 02092 if (editable->selection_start_pos != editable->selection_end_pos) 02093 { 02094 if (gtk_selection_owner_set (widget, 02095 GDK_SELECTION_PRIMARY, 02096 event->time)) 02097 editable->has_selection = TRUE; 02098 else 02099 gtk_text_update_text (editable, editable->selection_start_pos, 02100 editable->selection_end_pos); 02101 } 02102 else 02103 { 02104 if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == widget->window) 02105 gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY, event->time); 02106 } 02107 } 02108 else if (event->button == 3) 02109 { 02110 gtk_grab_remove (widget); 02111 } 02112 02113 undraw_cursor (text, FALSE); 02114 find_cursor (text, TRUE); 02115 draw_cursor (text, FALSE); 02116 02117 return FALSE; 02118 } |
|
Definition at line 666 of file extgtktext.c. References ARG_HADJUSTMENT, ARG_LINE_WRAP, ARG_VADJUSTMENT, ARG_WORD_WRAP, ext_gtk_text_insert_text(), ext_gtk_text_set_adjustments(), gtk_text_button_press(), gtk_text_button_release(), gtk_text_delete_text(), gtk_text_destroy(), gtk_text_draw(), gtk_text_draw_focus(), gtk_text_expose(), gtk_text_finalize(), gtk_text_focus_in(), gtk_text_focus_out(), gtk_text_get_arg(), gtk_text_get_chars(), gtk_text_key_press(), gtk_text_kill_char(), gtk_text_kill_line(), gtk_text_kill_word(), gtk_text_motion_notify(), gtk_text_move_cursor(), gtk_text_move_page(), gtk_text_move_to_column(), gtk_text_move_to_row(), gtk_text_move_word(), gtk_text_real_set_editable(), gtk_text_realize(), gtk_text_set_arg(), gtk_text_set_position(), gtk_text_set_selection(), gtk_text_size_allocate(), gtk_text_size_request(), gtk_text_state_changed(), gtk_text_style_set(), gtk_text_unrealize(), gtk_text_update_text(), and parent_class. Referenced by ext_gtk_text_get_type().
00667 { 00668 GtkObjectClass *object_class; 00669 GtkWidgetClass *widget_class; 00670 GtkEditableClass *editable_class; 00671 00672 object_class = (GtkObjectClass*) class; 00673 widget_class = (GtkWidgetClass*) class; 00674 editable_class = (GtkEditableClass*) class; 00675 parent_class = gtk_type_class (GTK_TYPE_EDITABLE); 00676 00677 gtk_object_add_arg_type ("ExtGtkText::hadjustment", 00678 GTK_TYPE_ADJUSTMENT, 00679 GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT, 00680 ARG_HADJUSTMENT); 00681 gtk_object_add_arg_type ("ExtGtkText::vadjustment", 00682 GTK_TYPE_ADJUSTMENT, 00683 GTK_ARG_READWRITE | GTK_ARG_CONSTRUCT, 00684 ARG_VADJUSTMENT); 00685 gtk_object_add_arg_type ("ExtGtkText::line_wrap", 00686 GTK_TYPE_BOOL, 00687 GTK_ARG_READWRITE, 00688 ARG_LINE_WRAP); 00689 gtk_object_add_arg_type ("ExtGtkText::word_wrap", 00690 GTK_TYPE_BOOL, 00691 GTK_ARG_READWRITE, 00692 ARG_WORD_WRAP); 00693 00694 object_class->set_arg = gtk_text_set_arg; 00695 object_class->get_arg = gtk_text_get_arg; 00696 object_class->destroy = gtk_text_destroy; 00697 object_class->finalize = gtk_text_finalize; 00698 00699 widget_class->realize = gtk_text_realize; 00700 widget_class->unrealize = gtk_text_unrealize; 00701 widget_class->style_set = gtk_text_style_set; 00702 widget_class->state_changed = gtk_text_state_changed; 00703 widget_class->draw_focus = gtk_text_draw_focus; 00704 widget_class->size_request = gtk_text_size_request; 00705 widget_class->size_allocate = gtk_text_size_allocate; 00706 widget_class->draw = gtk_text_draw; 00707 widget_class->expose_event = gtk_text_expose; 00708 widget_class->button_press_event = gtk_text_button_press; 00709 widget_class->button_release_event = gtk_text_button_release; 00710 widget_class->motion_notify_event = gtk_text_motion_notify; 00711 widget_class->key_press_event = gtk_text_key_press; 00712 widget_class->focus_in_event = gtk_text_focus_in; 00713 widget_class->focus_out_event = gtk_text_focus_out; 00714 00715 widget_class->set_scroll_adjustments_signal = 00716 gtk_signal_new ("set_scroll_adjustments", 00717 GTK_RUN_LAST, 00718 object_class->type, 00719 GTK_SIGNAL_OFFSET (ExtGtkTextClass, set_scroll_adjustments), 00720 gtk_marshal_NONE__POINTER_POINTER, 00721 GTK_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT); 00722 00723 editable_class->set_editable = gtk_text_real_set_editable; 00724 editable_class->insert_text = ext_gtk_text_insert_text; 00725 editable_class->delete_text = gtk_text_delete_text; 00726 00727 editable_class->move_cursor = gtk_text_move_cursor; 00728 editable_class->move_word = gtk_text_move_word; 00729 editable_class->move_page = gtk_text_move_page; 00730 editable_class->move_to_row = gtk_text_move_to_row; 00731 editable_class->move_to_column = gtk_text_move_to_column; 00732 00733 editable_class->kill_char = gtk_text_kill_char; 00734 editable_class->kill_word = gtk_text_kill_word; 00735 editable_class->kill_line = gtk_text_kill_line; 00736 00737 editable_class->update_text = gtk_text_update_text; 00738 editable_class->get_chars = gtk_text_get_chars; 00739 editable_class->set_selection = gtk_text_set_selection; 00740 editable_class->set_position = gtk_text_set_position; 00741 00742 class->set_scroll_adjustments = ext_gtk_text_set_adjustments; 00743 } |
|
Definition at line 4673 of file extgtktext.c. References gtk_text_kill_char(). Referenced by gtk_text_key_press().
04674 { 04675 gtk_text_kill_char (GTK_EDITABLE (text), -1); 04676 } |
|
Definition at line 4707 of file extgtktext.c. References gtk_text_kill_word(). Referenced by gtk_text_key_press().
04708 { 04709 gtk_text_kill_word (GTK_EDITABLE (text), -1); 04710 } |
|
Definition at line 4667 of file extgtktext.c. References gtk_text_kill_char(). Referenced by gtk_text_key_press().
04668 { 04669 gtk_text_kill_char (GTK_EDITABLE (text), 1); 04670 } |
|
Definition at line 4701 of file extgtktext.c. References gtk_text_kill_word(). Referenced by gtk_text_key_press().
04702 { 04703 gtk_text_kill_word (GTK_EDITABLE (text), 1); 04704 } |
|
Definition at line 4730 of file extgtktext.c. References gtk_text_kill_line(), and gtk_text_move_to_column(). Referenced by gtk_text_key_press().
04731 { 04732 gtk_text_move_to_column (GTK_EDITABLE (text), 0); 04733 gtk_text_kill_line (GTK_EDITABLE (text), 1); 04734 } |
|
Definition at line 2217 of file extgtktext.c. References EXT_GTK_TEXT, ext_gtk_text_forward_delete(), ext_gtk_text_set_point(), and TEXT_LENGTH. Referenced by gtk_text_class_init().
02220 { 02221 ExtGtkText *text; 02222 02223 g_return_if_fail (start_pos >= 0); 02224 02225 text = EXT_GTK_TEXT (editable); 02226 02227 ext_gtk_text_set_point (text, start_pos); 02228 if (end_pos < 0) 02229 end_pos = TEXT_LENGTH (text); 02230 02231 if (end_pos > start_pos) 02232 ext_gtk_text_forward_delete (text, end_pos - start_pos); 02233 } |
|
Definition at line 4737 of file extgtktext.c. References gtk_text_kill_line().
04738 { 04739 gtk_text_kill_line (GTK_EDITABLE (text), 1); 04740 } |
|
Definition at line 1427 of file extgtktext.c. References EXT_GTK_IS_TEXT, _ExtGtkText::hadj, parent_class, _ExtGtkText::timer, and _ExtGtkText::vadj. Referenced by gtk_text_class_init().
01428 { 01429 ExtGtkText *text; 01430 g_return_if_fail (object != NULL); 01431 g_return_if_fail (EXT_GTK_IS_TEXT (object)); 01432 01433 text = (ExtGtkText*) object; 01434 01435 gtk_signal_disconnect_by_data (GTK_OBJECT (text->hadj), text); 01436 gtk_signal_disconnect_by_data (GTK_OBJECT (text->vadj), text); 01437 01438 if (text->timer) 01439 { 01440 gtk_timeout_remove (text->timer); 01441 text->timer = 0; 01442 } 01443 01444 GTK_OBJECT_CLASS(parent_class)->destroy (object); 01445 } |
|
Definition at line 2577 of file extgtktext.c. References EXT_GTK_IS_TEXT, ext_gtk_text_set_adjustments(), _ExtGtkText::hadj, and _ExtGtkText::vadj. Referenced by ext_gtk_text_set_adjustments().
02579 { 02580 g_return_if_fail (adjustment != NULL); 02581 g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); 02582 g_return_if_fail (text != NULL); 02583 g_return_if_fail (EXT_GTK_IS_TEXT (text)); 02584 02585 if (adjustment == text->hadj) 02586 ext_gtk_text_set_adjustments (text, NULL, text->vadj); 02587 if (adjustment == text->vadj) 02588 ext_gtk_text_set_adjustments (text, text->hadj, NULL); 02589 } |
|
Definition at line 1887 of file extgtktext.c. References expose_text(), EXT_GTK_IS_TEXT, and EXT_GTK_TEXT. Referenced by gtk_text_class_init().
01889 { 01890 g_return_if_fail (widget != NULL); 01891 g_return_if_fail (EXT_GTK_IS_TEXT (widget)); 01892 g_return_if_fail (area != NULL); 01893 01894 if (GTK_WIDGET_DRAWABLE (widget)) 01895 { 01896 expose_text (EXT_GTK_TEXT (widget), area, TRUE); 01897 gtk_widget_draw_focus (widget); 01898 } 01899 } |
|
Definition at line 1740 of file extgtktext.c. References clear_focus_area(), EXT_GTK_IS_TEXT, EXT_GTK_TEXT, TDEBUG, and TEXT_BORDER_ROOM. Referenced by delete_expose(), gtk_text_class_init(), insert_expose(), scroll_down(), and scroll_up().
01741 { 01742 ExtGtkText *text; 01743 gint width, height; 01744 gint x, y; 01745 01746 g_return_if_fail (widget != NULL); 01747 g_return_if_fail (EXT_GTK_IS_TEXT (widget)); 01748 01749 text = EXT_GTK_TEXT (widget); 01750 01751 if (GTK_WIDGET_DRAWABLE (widget)) 01752 { 01753 gint ythick = widget->style->klass->ythickness; 01754 gint xthick = widget->style->klass->xthickness; 01755 gint xextra = TEXT_BORDER_ROOM; 01756 gint yextra = TEXT_BORDER_ROOM; 01757 01758 TDEBUG (("in gtk_text_draw_focus\n")); 01759 01760 x = 0; 01761 y = 0; 01762 width = widget->allocation.width; 01763 height = widget->allocation.height; 01764 01765 if (GTK_WIDGET_HAS_FOCUS (widget)) 01766 { 01767 x += 1; 01768 y += 1; 01769 width -= 2; 01770 height -= 2; 01771 xextra -= 1; 01772 yextra -= 1; 01773 01774 gtk_paint_focus (widget->style, widget->window, 01775 NULL, widget, "text", 01776 0, 0, 01777 widget->allocation.width - 1, 01778 widget->allocation.height - 1); 01779 } 01780 01781 gtk_paint_shadow (widget->style, widget->window, 01782 GTK_STATE_NORMAL, GTK_SHADOW_IN, 01783 NULL, widget, "text", 01784 x, y, width, height); 01785 01786 x += xthick; 01787 y += ythick; 01788 width -= 2 * xthick; 01789 height -= 2 * ythick; 01790 01791 if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) 01792 { 01793 /* top rect */ 01794 clear_focus_area (text, x, y, width, yextra); 01795 /* left rect */ 01796 clear_focus_area (text, x, y + yextra, 01797 xextra, y + height - 2 * yextra); 01798 /* right rect */ 01799 clear_focus_area (text, x + width - xextra, y + yextra, 01800 xextra, height - 2 * ythick); 01801 /* bottom rect */ 01802 clear_focus_area (text, x, x + height - yextra, width, yextra); 01803 } 01804 } 01805 else 01806 { 01807 TDEBUG (("in gtk_text_draw_focus (undrawable !!!)\n")); 01808 } 01809 } |
|
Definition at line 1902 of file extgtktext.c. References expose_text(), EXT_GTK_IS_TEXT, EXT_GTK_TEXT, and TDEBUG. Referenced by gtk_text_class_init().
01904 { 01905 g_return_val_if_fail (widget != NULL, FALSE); 01906 g_return_val_if_fail (EXT_GTK_IS_TEXT (widget), FALSE); 01907 g_return_val_if_fail (event != NULL, FALSE); 01908 01909 if (event->window == EXT_GTK_TEXT (widget)->text_area) 01910 { 01911 TDEBUG (("in gtk_text_expose (expose)\n")); 01912 expose_text (EXT_GTK_TEXT (widget), &event->area, TRUE); 01913 } 01914 else if (event->count == 0) 01915 { 01916 TDEBUG (("in gtk_text_expose (focus)\n")); 01917 gtk_widget_draw_focus (widget); 01918 } 01919 01920 return FALSE; 01921 } |
|
Definition at line 1448 of file extgtktext.c. References _ExtGtkText::current_font, destroy_text_property(), EXT_GTK_IS_TEXT, _ExtGtkText::hadj, parent_class, _ExtGtkText::scratch_buffer, _ExtGtkText::tab_stops, _ExtGtkText::text, text_font_unref(), _ExtGtkText::text_properties, _ExtGtkText::use_wchar, and _ExtGtkText::vadj. Referenced by gtk_text_class_init().
01449 { 01450 ExtGtkText *text; 01451 GList *tmp_list; 01452 01453 g_return_if_fail (object != NULL); 01454 g_return_if_fail (EXT_GTK_IS_TEXT (object)); 01455 01456 text = (ExtGtkText *)object; 01457 01458 gtk_object_unref (GTK_OBJECT (text->hadj)); 01459 gtk_object_unref (GTK_OBJECT (text->vadj)); 01460 01461 /* Clean up the internal structures */ 01462 if (text->use_wchar) 01463 g_free (text->text.wc); 01464 else 01465 g_free (text->text.ch); 01466 01467 tmp_list = text->text_properties; 01468 while (tmp_list) 01469 { 01470 destroy_text_property (tmp_list->data); 01471 tmp_list = tmp_list->next; 01472 } 01473 01474 if (text->current_font) 01475 text_font_unref (text->current_font); 01476 01477 g_list_free (text->text_properties); 01478 01479 if (text->use_wchar) 01480 { 01481 if (text->scratch_buffer.wc) 01482 g_free (text->scratch_buffer.wc); 01483 } 01484 else 01485 { 01486 if (text->scratch_buffer.ch) 01487 g_free (text->scratch_buffer.ch); 01488 } 01489 01490 g_list_free (text->tab_stops); 01491 01492 GTK_OBJECT_CLASS(parent_class)->finalize (object); 01493 } |
|
Definition at line 2473 of file extgtktext.c. References draw_cursor(), EXT_GTK_IS_TEXT, EXT_GTK_TEXT, and TDEBUG. Referenced by gtk_text_class_init().
02475 { 02476 g_return_val_if_fail (widget != NULL, FALSE); 02477 g_return_val_if_fail (EXT_GTK_IS_TEXT (widget), FALSE); 02478 g_return_val_if_fail (event != NULL, FALSE); 02479 02480 TDEBUG (("in gtk_text_focus_in\n")); 02481 02482 GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); 02483 gtk_widget_draw_focus (widget); 02484 02485 #ifdef USE_XIM 02486 if (GTK_EDITABLE(widget)->ic) 02487 gdk_im_begin (GTK_EDITABLE(widget)->ic, EXT_GTK_TEXT(widget)->text_area); 02488 #endif 02489 02490 draw_cursor (EXT_GTK_TEXT(widget), TRUE); 02491 02492 return FALSE; 02493 } |
|
Definition at line 2496 of file extgtktext.c. References EXT_GTK_IS_TEXT, EXT_GTK_TEXT, TDEBUG, and undraw_cursor(). Referenced by gtk_text_class_init().
02498 { 02499 g_return_val_if_fail (widget != NULL, FALSE); 02500 g_return_val_if_fail (EXT_GTK_IS_TEXT (widget), FALSE); 02501 g_return_val_if_fail (event != NULL, FALSE); 02502 02503 TDEBUG (("in gtk_text_focus_out\n")); 02504 02505 GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); 02506 gtk_widget_draw_focus (widget); 02507 02508 undraw_cursor (EXT_GTK_TEXT(widget), TRUE); 02509 02510 #ifdef USE_XIM 02511 gdk_im_end (); 02512 #endif 02513 02514 return FALSE; 02515 } |
|
Definition at line 778 of file extgtktext.c. References ARG_HADJUSTMENT, ARG_LINE_WRAP, ARG_VADJUSTMENT, ARG_WORD_WRAP, EXT_GTK_TEXT, _ExtGtkText::hadj, _ExtGtkText::line_wrap, _ExtGtkText::vadj, and _ExtGtkText::word_wrap. Referenced by gtk_text_class_init().
00781 { 00782 ExtGtkText *text; 00783 00784 text = EXT_GTK_TEXT (object); 00785 00786 switch (arg_id) 00787 { 00788 case ARG_HADJUSTMENT: 00789 GTK_VALUE_POINTER (*arg) = text->hadj; 00790 break; 00791 case ARG_VADJUSTMENT: 00792 GTK_VALUE_POINTER (*arg) = text->vadj; 00793 break; 00794 case ARG_LINE_WRAP: 00795 GTK_VALUE_BOOL (*arg) = text->line_wrap; 00796 break; 00797 case ARG_WORD_WRAP: 00798 GTK_VALUE_BOOL (*arg) = text->word_wrap; 00799 break; 00800 default: 00801 arg->type = GTK_TYPE_INVALID; 00802 break; 00803 } 00804 } |
|
Definition at line 1382 of file extgtktext.c. References EXT_GTK_IS_TEXT, EXT_GTK_TEXT, make_forward_space(), move_gap(), _ExtGtkText::text, TEXT_LENGTH, and _ExtGtkText::use_wchar. Referenced by gtk_text_class_init().
01385 { 01386 ExtGtkText *text; 01387 01388 gchar *retval; 01389 01390 g_return_val_if_fail (editable != NULL, NULL); 01391 g_return_val_if_fail (EXT_GTK_IS_TEXT (editable), NULL); 01392 text = EXT_GTK_TEXT (editable); 01393 01394 if (end_pos < 0) 01395 end_pos = TEXT_LENGTH (text); 01396 01397 if ((start_pos < 0) || 01398 (end_pos > TEXT_LENGTH (text)) || 01399 (end_pos < start_pos)) 01400 return NULL; 01401 01402 move_gap (text, TEXT_LENGTH (text)); 01403 make_forward_space (text, 1); 01404 01405 if (text->use_wchar) 01406 { 01407 GdkWChar ch; 01408 ch = text->text.wc[end_pos]; 01409 text->text.wc[end_pos] = 0; 01410 retval = gdk_wcstombs (text->text.wc + start_pos); 01411 text->text.wc[end_pos] = ch; 01412 } 01413 else 01414 { 01415 guchar ch; 01416 ch = text->text.ch[end_pos]; 01417 text->text.ch[end_pos] = 0; 01418 retval = g_strdup (text->text.ch + start_pos); 01419 text->text.ch[end_pos] = ch; 01420 } 01421 01422 return retval; 01423 } |
|
Definition at line 807 of file extgtktext.c. References _ExtGtkText::bg_gc, _ExtGtkText::button, _ExtGtkText::current_font, _ExtGtkText::default_tab_width, _ExtGtkText::first_cut_pixels, _ExtGtkText::freeze_count, _ExtGtkText::gc, _ExtGtkText::hadj, init_properties(), INITIAL_BUFFER_SIZE, _ExtGtkText::line_start_cache, _ExtGtkText::line_wrap, params_mem_chunk, _ExtGtkText::scratch_buffer, _ExtGtkText::scratch_buffer_len, _ExtGtkText::tab_stops, _ExtGtkText::text, _ExtGtkText::text_area, _ExtGtkText::text_len, _ExtGtkText::timer, _ExtGtkText::use_wchar, _ExtGtkText::vadj, and _ExtGtkText::word_wrap. Referenced by ext_gtk_text_get_type().
00808 { 00809 GTK_WIDGET_SET_FLAGS (text, GTK_CAN_FOCUS); 00810 00811 text->text_area = NULL; 00812 text->hadj = NULL; 00813 text->vadj = NULL; 00814 text->gc = NULL; 00815 text->bg_gc = NULL; 00816 00817 text->use_wchar = FALSE; 00818 text->text.ch = g_new (guchar, INITIAL_BUFFER_SIZE); 00819 text->text_len = INITIAL_BUFFER_SIZE; 00820 00821 text->scratch_buffer.ch = NULL; 00822 text->scratch_buffer_len = 0; 00823 00824 text->freeze_count = 0; 00825 00826 if (!params_mem_chunk) 00827 params_mem_chunk = g_mem_chunk_new ("LineParams", 00828 sizeof (LineParams), 00829 256 * sizeof (LineParams), 00830 G_ALLOC_AND_FREE); 00831 00832 text->default_tab_width = 4; 00833 text->tab_stops = NULL; 00834 00835 text->tab_stops = g_list_prepend (text->tab_stops, (void*)8); 00836 text->tab_stops = g_list_prepend (text->tab_stops, (void*)8); 00837 00838 text->line_start_cache = NULL; 00839 text->first_cut_pixels = 0; 00840 00841 text->line_wrap = TRUE; 00842 text->word_wrap = FALSE; 00843 00844 00845 text->timer = 0; 00846 text->button = 0; 00847 00848 text->current_font = NULL; 00849 00850 init_properties (text); 00851 00852 GTK_EDITABLE (text)->editable = FALSE; 00853 00854 gtk_editable_set_position (GTK_EDITABLE (text), 0); 00855 } |
|
Definition at line 2236 of file extgtktext.c. References alt_keys, control_keys, _ExtGtkText::cursor_mark, EXT_GTK_IS_TEXT, EXT_GTK_TEXT, find_mark(), gtk_text_delete_backward_character(), gtk_text_delete_backward_word(), gtk_text_delete_forward_character(), gtk_text_delete_forward_word(), gtk_text_delete_line(), gtk_text_move_backward_word(), gtk_text_move_beginning_of_line(), gtk_text_move_end_of_line(), gtk_text_move_forward_word(), gtk_text_set_selection(), _ExtGtkPropertyMark::index, KEY_SCROLL_PIXELS, move_cursor_buffer_ver(), move_cursor_hor(), move_cursor_page_ver(), move_cursor_ver(), _ExtGtkText::point, scroll_int(), and _ExtGtkText::vadj. Referenced by gtk_text_class_init().
02238 { 02239 ExtGtkText *text; 02240 GtkEditable *editable; 02241 gchar key; 02242 gint return_val; 02243 gint position; 02244 02245 g_return_val_if_fail (widget != NULL, FALSE); 02246 g_return_val_if_fail (EXT_GTK_IS_TEXT (widget), FALSE); 02247 g_return_val_if_fail (event != NULL, FALSE); 02248 02249 return_val = FALSE; 02250 02251 text = EXT_GTK_TEXT (widget); 02252 editable = GTK_EDITABLE (widget); 02253 02254 key = event->keyval; 02255 return_val = TRUE; 02256 02257 if ((GTK_EDITABLE(text)->editable == FALSE)) 02258 { 02259 switch (event->keyval) 02260 { 02261 case GDK_Home: 02262 if (event->state & GDK_CONTROL_MASK) 02263 scroll_int (text, -text->vadj->value); 02264 else 02265 return_val = FALSE; 02266 break; 02267 case GDK_End: 02268 if (event->state & GDK_CONTROL_MASK) 02269 scroll_int (text, +text->vadj->upper); 02270 else 02271 return_val = FALSE; 02272 break; 02273 case GDK_Page_Up: scroll_int (text, -text->vadj->page_increment); break; 02274 case GDK_Page_Down: scroll_int (text, +text->vadj->page_increment); break; 02275 case GDK_Up: scroll_int (text, -KEY_SCROLL_PIXELS); break; 02276 case GDK_Down: scroll_int (text, +KEY_SCROLL_PIXELS); break; 02277 case GDK_Return: 02278 if (event->state & GDK_CONTROL_MASK) 02279 gtk_signal_emit_by_name (GTK_OBJECT (text), "activate"); 02280 else 02281 return_val = FALSE; 02282 break; 02283 default: 02284 return_val = FALSE; 02285 break; 02286 } 02287 } 02288 else 02289 { 02290 gint extend_selection; 02291 gint extend_start; 02292 guint initial_pos = editable->current_pos; 02293 02294 text->point = find_mark (text, text->cursor_mark.index); 02295 02296 extend_selection = event->state & GDK_SHIFT_MASK; 02297 extend_start = FALSE; 02298 02299 if (extend_selection) 02300 { 02301 editable->has_selection = TRUE; 02302 02303 if (editable->selection_start_pos == editable->selection_end_pos) 02304 { 02305 editable->selection_start_pos = text->point.index; 02306 editable->selection_end_pos = text->point.index; 02307 } 02308 02309 extend_start = (text->point.index == editable->selection_start_pos); 02310 } 02311 02312 switch (event->keyval) 02313 { 02314 case GDK_Home: 02315 if (event->state & GDK_CONTROL_MASK) 02316 move_cursor_buffer_ver (text, -1); 02317 else 02318 gtk_text_move_beginning_of_line (text); 02319 break; 02320 case GDK_End: 02321 if (event->state & GDK_CONTROL_MASK) 02322 move_cursor_buffer_ver (text, +1); 02323 else 02324 gtk_text_move_end_of_line (text); 02325 break; 02326 case GDK_Page_Up: move_cursor_page_ver (text, -1); break; 02327 case GDK_Page_Down: move_cursor_page_ver (text, +1); break; 02328 /* CUA has Ctrl-Up/Ctrl-Down as paragraph up down */ 02329 case GDK_Up: move_cursor_ver (text, -1); break; 02330 case GDK_Down: move_cursor_ver (text, +1); break; 02331 case GDK_Left: 02332 if (event->state & GDK_CONTROL_MASK) 02333 gtk_text_move_backward_word (text); 02334 else 02335 move_cursor_hor (text, -1); 02336 break; 02337 case GDK_Right: 02338 if (event->state & GDK_CONTROL_MASK) 02339 gtk_text_move_forward_word (text); 02340 else 02341 move_cursor_hor (text, +1); 02342 break; 02343 02344 case GDK_BackSpace: 02345 if (event->state & GDK_CONTROL_MASK) 02346 gtk_text_delete_backward_word (text); 02347 else 02348 gtk_text_delete_backward_character (text); 02349 break; 02350 case GDK_Clear: 02351 gtk_text_delete_line (text); 02352 break; 02353 case GDK_Insert: 02354 if (event->state & GDK_SHIFT_MASK) 02355 { 02356 extend_selection = FALSE; 02357 gtk_editable_paste_clipboard (editable); 02358 } 02359 else if (event->state & GDK_CONTROL_MASK) 02360 { 02361 gtk_editable_copy_clipboard (editable); 02362 } 02363 else 02364 { 02365 /* gtk_toggle_insert(text) -- IMPLEMENT */ 02366 } 02367 break; 02368 case GDK_Delete: 02369 if (event->state & GDK_CONTROL_MASK) 02370 gtk_text_delete_forward_word (text); 02371 else if (event->state & GDK_SHIFT_MASK) 02372 { 02373 extend_selection = FALSE; 02374 gtk_editable_cut_clipboard (editable); 02375 } 02376 else 02377 gtk_text_delete_forward_character (text); 02378 break; 02379 case GDK_Tab: 02380 position = text->point.index; 02381 gtk_editable_insert_text (editable, "\t", 1, &position); 02382 break; 02383 case GDK_Return: 02384 if (event->state & GDK_CONTROL_MASK) 02385 gtk_signal_emit_by_name (GTK_OBJECT (text), "activate"); 02386 else 02387 { 02388 position = text->point.index; 02389 gtk_editable_insert_text (editable, "\n", 1, &position); 02390 } 02391 break; 02392 case GDK_Escape: 02393 /* Don't insert literally */ 02394 return_val = FALSE; 02395 break; 02396 02397 default: 02398 return_val = FALSE; 02399 02400 if (event->state & GDK_CONTROL_MASK) 02401 { 02402 if ((key >= 'A') && (key <= 'Z')) 02403 key -= 'A' - 'a'; 02404 02405 if ((key >= 'a') && (key <= 'z') && control_keys[(int) (key - 'a')]) 02406 { 02407 (* control_keys[(int) (key - 'a')]) (editable, event->time); 02408 return_val = TRUE; 02409 } 02410 02411 break; 02412 } 02413 else if (event->state & GDK_MOD1_MASK) 02414 { 02415 if ((key >= 'A') && (key <= 'Z')) 02416 key -= 'A' - 'a'; 02417 02418 if ((key >= 'a') && (key <= 'z') && alt_keys[(int) (key - 'a')]) 02419 { 02420 (* alt_keys[(int) (key - 'a')]) (editable, event->time); 02421 return_val = TRUE; 02422 } 02423 02424 break; 02425 } 02426 else if (event->length > 0) 02427 { 02428 extend_selection = FALSE; 02429 02430 gtk_editable_delete_selection (editable); 02431 position = text->point.index; 02432 gtk_editable_insert_text (editable, event->string, event->length, &position); 02433 02434 return_val = TRUE; 02435 } 02436 else 02437 return_val = FALSE; 02438 } 02439 02440 if (return_val && (editable->current_pos != initial_pos)) 02441 { 02442 if (extend_selection) 02443 { 02444 if (editable->current_pos < editable->selection_start_pos) 02445 gtk_text_set_selection (editable, editable->current_pos, 02446 editable->selection_end_pos); 02447 else if (editable->current_pos > editable->selection_end_pos) 02448 gtk_text_set_selection (editable, editable->selection_start_pos, 02449 editable->current_pos); 02450 else 02451 { 02452 if (extend_start) 02453 gtk_text_set_selection (editable, editable->current_pos, 02454 editable->selection_end_pos); 02455 else 02456 gtk_text_set_selection (editable, editable->selection_start_pos, 02457 editable->current_pos); 02458 } 02459 } 02460 else 02461 gtk_text_set_selection (editable, 0, 0); 02462 02463 gtk_editable_claim_selection (editable, 02464 editable->selection_start_pos != editable->selection_end_pos, 02465 event->time); 02466 } 02467 } 02468 02469 return return_val; 02470 } |
|
Definition at line 4642 of file extgtktext.c. References EXT_GTK_TEXT, _ExtGtkPropertyMark::index, _ExtGtkText::point, and TEXT_LENGTH. Referenced by gtk_text_class_init(), gtk_text_delete_backward_character(), and gtk_text_delete_forward_character().
04644 { 04645 ExtGtkText *text; 04646 04647 text = EXT_GTK_TEXT (editable); 04648 04649 if (editable->selection_start_pos != editable->selection_end_pos) 04650 gtk_editable_delete_selection (editable); 04651 else 04652 { 04653 if (direction >= 0) 04654 { 04655 if (text->point.index + 1 <= TEXT_LENGTH (text)) 04656 gtk_editable_delete_text (editable, text->point.index, text->point.index + 1); 04657 } 04658 else 04659 { 04660 if (text->point.index > 0) 04661 gtk_editable_delete_text (editable, text->point.index - 1, text->point.index); 04662 } 04663 } 04664 } |
|
Definition at line 4713 of file extgtktext.c. References gtk_text_move_to_column(). Referenced by gtk_text_class_init(), gtk_text_delete_line(), and gtk_text_delete_to_line_end().
04715 { 04716 gint old_pos = editable->current_pos; 04717 if (direction >= 0) 04718 { 04719 gtk_text_move_to_column (editable, -1); 04720 gtk_editable_delete_text (editable, old_pos, editable->current_pos); 04721 } 04722 else 04723 { 04724 gtk_text_move_to_column (editable, 0); 04725 gtk_editable_delete_text (editable, editable->current_pos, old_pos); 04726 } 04727 } |
|
Definition at line 4679 of file extgtktext.c. References gtk_text_move_word(). Referenced by gtk_text_class_init(), gtk_text_delete_backward_word(), and gtk_text_delete_forward_word().
04681 { 04682 if (editable->selection_start_pos != editable->selection_end_pos) 04683 gtk_editable_delete_selection (editable); 04684 else 04685 { 04686 gint old_pos = editable->current_pos; 04687 if (direction >= 0) 04688 { 04689 gtk_text_move_word (editable, 1); 04690 gtk_editable_delete_text (editable, old_pos, editable->current_pos); 04691 } 04692 else 04693 { 04694 gtk_text_move_word (editable, -1); 04695 gtk_editable_delete_text (editable, editable->current_pos, old_pos); 04696 } 04697 } 04698 } |
|
Definition at line 2121 of file extgtktext.c. References _ExtGtkText::button, _ExtGtkText::cursor_mark, draw_cursor(), EXT_GTK_IS_TEXT, EXT_GTK_TEXT, find_mouse_cursor(), gtk_text_scroll_timeout(), gtk_text_set_selection(), _ExtGtkPropertyMark::index, scroll_int(), SCROLL_TIME, _ExtGtkText::text_area, _ExtGtkText::timer, and undraw_cursor(). Referenced by gtk_text_class_init(), and gtk_text_scroll_timeout().
02123 { 02124 ExtGtkText *text; 02125 gint x, y; 02126 gint height; 02127 GdkModifierType mask; 02128 02129 g_return_val_if_fail (widget != NULL, FALSE); 02130 g_return_val_if_fail (EXT_GTK_IS_TEXT (widget), FALSE); 02131 g_return_val_if_fail (event != NULL, FALSE); 02132 02133 text = EXT_GTK_TEXT (widget); 02134 02135 x = event->x; 02136 y = event->y; 02137 mask = event->state; 02138 if (event->is_hint || (text->text_area != event->window)) 02139 { 02140 gdk_window_get_pointer (text->text_area, &x, &y, &mask); 02141 } 02142 02143 if ((text->button == 0) || 02144 !(mask & (GDK_BUTTON1_MASK | GDK_BUTTON3_MASK))) 02145 return FALSE; 02146 02147 gdk_window_get_size (text->text_area, NULL, &height); 02148 02149 if ((y < 0) || (y > height)) 02150 { 02151 if (text->timer == 0) 02152 { 02153 text->timer = gtk_timeout_add (SCROLL_TIME, 02154 gtk_text_scroll_timeout, 02155 text); 02156 02157 if (y < 0) 02158 scroll_int (text, y/2); 02159 else 02160 scroll_int (text, (y - height)/2); 02161 } 02162 else 02163 return FALSE; 02164 } 02165 02166 undraw_cursor (EXT_GTK_TEXT (widget), FALSE); 02167 find_mouse_cursor (EXT_GTK_TEXT (widget), x, y); 02168 draw_cursor (EXT_GTK_TEXT (widget), FALSE); 02169 02170 gtk_text_set_selection (GTK_EDITABLE(text), 02171 GTK_EDITABLE(text)->selection_start_pos, 02172 text->cursor_mark.index); 02173 02174 return FALSE; 02175 } |
|
Definition at line 4483 of file extgtktext.c. References move_cursor_hor().
04484 { 04485 move_cursor_hor (text, -1); 04486 } |
|
Definition at line 4549 of file extgtktext.c. References _ExtGtkText::cursor_mark, _ExtGtkText::cursor_virtual_x, decrement_mark(), draw_cursor(), EXT_GTK_TEXT_INDEX, find_cursor(), _ExtGtkPropertyMark::index, undraw_cursor(), and _ExtGtkText::use_wchar. Referenced by gtk_text_key_press(), gtk_text_move_word(), and gtk_text_select_word().
04550 { 04551 text->cursor_virtual_x = 0; 04552 04553 undraw_cursor (text, FALSE); 04554 04555 if (text->use_wchar) 04556 { 04557 while ((text->cursor_mark.index > 0) && 04558 !gdk_iswalnum (EXT_GTK_TEXT_INDEX(text, text->cursor_mark.index-1))) 04559 decrement_mark (&text->cursor_mark); 04560 04561 while ((text->cursor_mark.index > 0) && 04562 gdk_iswalnum (EXT_GTK_TEXT_INDEX(text, text->cursor_mark.index-1))) 04563 decrement_mark (&text->cursor_mark); 04564 } 04565 else 04566 { 04567 while ((text->cursor_mark.index > 0) && 04568 !isalnum (EXT_GTK_TEXT_INDEX(text, text->cursor_mark.index-1))) 04569 decrement_mark (&text->cursor_mark); 04570 04571 while ((text->cursor_mark.index > 0) && 04572 isalnum (EXT_GTK_TEXT_INDEX(text, text->cursor_mark.index-1))) 04573 decrement_mark (&text->cursor_mark); 04574 } 04575 04576 find_cursor (text, TRUE); 04577 draw_cursor (text, FALSE); 04578 } |
|
Definition at line 4629 of file extgtktext.c. References gtk_text_move_to_column(). Referenced by gtk_text_key_press(), and gtk_text_select_line().
04630 { 04631 gtk_text_move_to_column (GTK_EDITABLE (text), 0); 04632 04633 } |
|
Definition at line 4449 of file extgtktext.c. References EXT_GTK_TEXT, move_cursor_hor(), and move_cursor_ver(). Referenced by gtk_text_class_init().
04452 { 04453 if (x > 0) 04454 { 04455 while (x-- != 0) 04456 move_cursor_hor (EXT_GTK_TEXT (editable), 1); 04457 } 04458 else if (x < 0) 04459 { 04460 while (x++ != 0) 04461 move_cursor_hor (EXT_GTK_TEXT (editable), -1); 04462 } 04463 04464 if (y > 0) 04465 { 04466 while (y-- != 0) 04467 move_cursor_ver (EXT_GTK_TEXT (editable), 1); 04468 } 04469 else if (y < 0) 04470 { 04471 while (y++ != 0) 04472 move_cursor_ver (EXT_GTK_TEXT (editable), -1); 04473 } 04474 } |
|
Definition at line 4636 of file extgtktext.c. References gtk_text_move_to_column(). Referenced by gtk_text_key_press(), and gtk_text_select_line().
04637 { 04638 gtk_text_move_to_column (GTK_EDITABLE (text), -1); 04639 } |
|
Definition at line 4477 of file extgtktext.c. References move_cursor_hor(). Referenced by gtk_text_select_line().
04478 { 04479 move_cursor_hor (text, 1); 04480 } |
|
|
Definition at line 4489 of file extgtktext.c. References move_cursor_ver().
04490 { 04491 move_cursor_ver (text, 1); 04492 } |
|
Definition at line 4581 of file extgtktext.c. References EXT_GTK_TEXT, and scroll_int(). Referenced by gtk_text_class_init().
04584 { 04585 if (y != 0) 04586 scroll_int (EXT_GTK_TEXT (editable), 04587 y * EXT_GTK_TEXT(editable)->vadj->page_increment); 04588 } |
|
Definition at line 4495 of file extgtktext.c. References move_cursor_ver().
04496 { 04497 move_cursor_ver (text, -1); 04498 } |
|
Definition at line 4597 of file extgtktext.c. References advance_mark(), _ExtGtkText::cursor_mark, _ExtGtkText::cursor_virtual_x, decrement_mark(), draw_cursor(), EXT_GTK_TEXT, EXT_GTK_TEXT_INDEX, find_cursor(), _ExtGtkPropertyMark::index, LAST_INDEX, LINE_DELIM, and undraw_cursor(). Referenced by gtk_text_class_init(), gtk_text_delete_line(), gtk_text_kill_line(), gtk_text_move_beginning_of_line(), and gtk_text_move_end_of_line().
04599 { 04600 ExtGtkText *text; 04601 04602 text = EXT_GTK_TEXT (editable); 04603 04604 text->cursor_virtual_x = 0; /* FIXME */ 04605 04606 undraw_cursor (text, FALSE); 04607 04608 /* Move to the beginning of the line */ 04609 while ((text->cursor_mark.index > 0) && 04610 (EXT_GTK_TEXT_INDEX (text, text->cursor_mark.index - 1) != LINE_DELIM)) 04611 decrement_mark (&text->cursor_mark); 04612 04613 while (!LAST_INDEX (text, text->cursor_mark) && 04614 (EXT_GTK_TEXT_INDEX (text, text->cursor_mark.index) != LINE_DELIM)) 04615 { 04616 if (column > 0) 04617 column--; 04618 else if (column == 0) 04619 break; 04620 04621 advance_mark (&text->cursor_mark); 04622 } 04623 04624 find_cursor (text, TRUE); 04625 draw_cursor (text, FALSE); 04626 } |
|
Definition at line 4591 of file extgtktext.c. Referenced by gtk_text_class_init().
04593 { 04594 } |
|
Definition at line 4501 of file extgtktext.c. References EXT_GTK_TEXT, gtk_text_move_backward_word(), and gtk_text_move_forward_word(). Referenced by gtk_text_class_init(), and gtk_text_kill_word().
04503 { 04504 if (n > 0) 04505 { 04506 while (n-- != 0) 04507 gtk_text_move_forward_word (EXT_GTK_TEXT (editable)); 04508 } 04509 else if (n < 0) 04510 { 04511 while (n++ != 0) 04512 gtk_text_move_backward_word (EXT_GTK_TEXT (editable)); 04513 } 04514 } |
|
Definition at line 927 of file extgtktext.c. References EXT_GTK_IS_TEXT, EXT_GTK_TEXT, and recompute_geometry(). Referenced by gtk_text_class_init().
00929 { 00930 ExtGtkText *text; 00931 00932 g_return_if_fail (editable != NULL); 00933 g_return_if_fail (EXT_GTK_IS_TEXT (editable)); 00934 00935 text = EXT_GTK_TEXT (editable); 00936 00937 editable->editable = (is_editable != FALSE); 00938 00939 if (GTK_WIDGET_REALIZED (text)) 00940 { 00941 recompute_geometry (text); 00942 gtk_widget_queue_draw (GTK_WIDGET (text)); 00943 } 00944 } |
|
Definition at line 1496 of file extgtktext.c. References _ExtGtkText::bg_gc, create_bg_gc(), EXT_GTK_IS_TEXT, EXT_GTK_TEXT, _ExtGtkText::gc, init_properties(), realize_properties(), recompute_geometry(), _ExtGtkText::text_area, and TEXT_BORDER_ROOM. Referenced by gtk_text_class_init().
01497 { 01498 ExtGtkText *text; 01499 GtkEditable *editable; 01500 GdkWindowAttr attributes; 01501 gint attributes_mask; 01502 01503 g_return_if_fail (widget != NULL); 01504 g_return_if_fail (EXT_GTK_IS_TEXT (widget)); 01505 01506 text = EXT_GTK_TEXT (widget); 01507 editable = GTK_EDITABLE (widget); 01508 GTK_WIDGET_SET_FLAGS (text, GTK_REALIZED); 01509 01510 attributes.window_type = GDK_WINDOW_CHILD; 01511 attributes.x = widget->allocation.x; 01512 attributes.y = widget->allocation.y; 01513 attributes.width = widget->allocation.width; 01514 attributes.height = widget->allocation.height; 01515 attributes.wclass = GDK_INPUT_OUTPUT; 01516 attributes.visual = gtk_widget_get_visual (widget); 01517 attributes.colormap = gtk_widget_get_colormap (widget); 01518 attributes.event_mask = gtk_widget_get_events (widget); 01519 attributes.event_mask |= (GDK_EXPOSURE_MASK | 01520 GDK_BUTTON_PRESS_MASK | 01521 GDK_BUTTON_RELEASE_MASK | 01522 GDK_BUTTON_MOTION_MASK | 01523 GDK_ENTER_NOTIFY_MASK | 01524 GDK_LEAVE_NOTIFY_MASK | 01525 GDK_KEY_PRESS_MASK); 01526 attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; 01527 01528 widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); 01529 gdk_window_set_user_data (widget->window, text); 01530 01531 attributes.x = (widget->style->klass->xthickness + TEXT_BORDER_ROOM); 01532 attributes.y = (widget->style->klass->ythickness + TEXT_BORDER_ROOM); 01533 attributes.width = MAX (1, (gint)widget->allocation.width - (gint)attributes.x * 2); 01534 attributes.height = MAX (1, (gint)widget->allocation.height - (gint)attributes.y * 2); 01535 01536 text->text_area = gdk_window_new (widget->window, &attributes, attributes_mask); 01537 gdk_window_set_user_data (text->text_area, text); 01538 01539 widget->style = gtk_style_attach (widget->style, widget->window); 01540 01541 /* Can't call gtk_style_set_background here because it's handled specially */ 01542 gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]); 01543 gdk_window_set_background (text->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]); 01544 01545 if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) 01546 text->bg_gc = create_bg_gc (text); 01547 01548 01549 text->gc = gdk_gc_new (text->text_area); 01550 gdk_gc_set_exposures (text->gc, TRUE); 01551 gdk_gc_set_foreground (text->gc, &widget->style->text[GTK_STATE_NORMAL]); 01552 01553 #ifdef USE_XIM 01554 if (gdk_im_ready () && (editable->ic_attr = gdk_ic_attr_new ()) != NULL) 01555 { 01556 gint width, height; 01557 GdkColormap *colormap; 01558 GdkEventMask mask; 01559 GdkICAttr *attr = editable->ic_attr; 01560 GdkICAttributesType attrmask = GDK_IC_ALL_REQ; 01561 GdkIMStyle style; 01562 GdkIMStyle supported_style = GDK_IM_PREEDIT_NONE | 01563 GDK_IM_PREEDIT_NOTHING | 01564 GDK_IM_PREEDIT_POSITION | 01565 GDK_IM_STATUS_NONE | 01566 GDK_IM_STATUS_NOTHING; 01567 01568 if (widget->style && widget->style->font->type != GDK_FONT_FONTSET) 01569 supported_style &= ~GDK_IM_PREEDIT_POSITION; 01570 01571 attr->style = style = gdk_im_decide_style (supported_style); 01572 attr->client_window = text->text_area; 01573 01574 if ((colormap = gtk_widget_get_colormap (widget)) != 01575 gtk_widget_get_default_colormap ()) 01576 { 01577 attrmask |= GDK_IC_PREEDIT_COLORMAP; 01578 attr->preedit_colormap = colormap; 01579 } 01580 01581 switch (style & GDK_IM_PREEDIT_MASK) 01582 { 01583 case GDK_IM_PREEDIT_POSITION: 01584 if (widget->style && widget->style->font->type != GDK_FONT_FONTSET) 01585 { 01586 g_warning ("over-the-spot style requires fontset"); 01587 break; 01588 } 01589 01590 attrmask |= GDK_IC_PREEDIT_POSITION_REQ; 01591 gdk_window_get_size (text->text_area, &width, &height); 01592 attr->spot_location.x = 0; 01593 attr->spot_location.y = height; 01594 attr->preedit_area.x = 0; 01595 attr->preedit_area.y = 0; 01596 attr->preedit_area.width = width; 01597 attr->preedit_area.height = height; 01598 attr->preedit_fontset = widget->style->font; 01599 01600 break; 01601 } 01602 editable->ic = gdk_ic_new (attr, attrmask); 01603 01604 if (editable->ic == NULL) 01605 g_warning ("Can't create input context."); 01606 else 01607 { 01608 mask = gdk_window_get_events (text->text_area); 01609 mask |= gdk_ic_get_events (editable->ic); 01610 gdk_window_set_events (text->text_area, mask); 01611 01612 if (GTK_WIDGET_HAS_FOCUS (widget)) 01613 gdk_im_begin (editable->ic, text->text_area); 01614 } 01615 } 01616 #endif 01617 01618 realize_properties (text); 01619 gdk_window_show (text->text_area); 01620 init_properties (text); 01621 01622 if (editable->selection_start_pos != editable->selection_end_pos) 01623 gtk_editable_claim_selection (editable, TRUE, GDK_CURRENT_TIME); 01624 01625 recompute_geometry (text); 01626 } |
|
Definition at line 1924 of file extgtktext.c. References EXT_GTK_TEXT, gtk_text_motion_notify(), _ExtGtkText::text_area, and _ExtGtkText::timer. Referenced by gtk_text_motion_notify().
01925 { 01926 ExtGtkText *text; 01927 GdkEventMotion event; 01928 gint x, y; 01929 GdkModifierType mask; 01930 01931 GDK_THREADS_ENTER (); 01932 01933 text = EXT_GTK_TEXT (data); 01934 01935 text->timer = 0; 01936 gdk_window_get_pointer (text->text_area, &x, &y, &mask); 01937 01938 if (mask & (GDK_BUTTON1_MASK | GDK_BUTTON3_MASK)) 01939 { 01940 event.is_hint = 0; 01941 event.x = x; 01942 event.y = y; 01943 event.state = mask; 01944 01945 gtk_text_motion_notify (GTK_WIDGET (text), &event); 01946 } 01947 01948 GDK_THREADS_LEAVE (); 01949 01950 return FALSE; 01951 } |
|
Definition at line 4763 of file extgtktext.c. References _ExtGtkText::cursor_mark, gtk_text_move_beginning_of_line(), gtk_text_move_end_of_line(), gtk_text_move_forward_character(), gtk_text_set_selection(), and _ExtGtkPropertyMark::index. Referenced by gtk_text_button_press().
04764 { 04765 gint start_pos; 04766 gint end_pos; 04767 04768 GtkEditable *editable; 04769 editable = GTK_EDITABLE (text); 04770 04771 gtk_text_move_beginning_of_line (text); 04772 start_pos = text->cursor_mark.index; 04773 04774 gtk_text_move_end_of_line (text); 04775 gtk_text_move_forward_character (text); 04776 end_pos = text->cursor_mark.index; 04777 04778 editable->has_selection = TRUE; 04779 gtk_text_set_selection (editable, start_pos, end_pos); 04780 gtk_editable_claim_selection (editable, start_pos != end_pos, time); 04781 } |
|
Definition at line 4743 of file extgtktext.c. References _ExtGtkText::cursor_mark, gtk_text_move_backward_word(), gtk_text_move_forward_word(), gtk_text_set_selection(), and _ExtGtkPropertyMark::index. Referenced by gtk_text_button_press().
04744 { 04745 gint start_pos; 04746 gint end_pos; 04747 04748 GtkEditable *editable; 04749 editable = GTK_EDITABLE (text); 04750 04751 gtk_text_move_backward_word (text); 04752 start_pos = text->cursor_mark.index; 04753 04754 gtk_text_move_forward_word (text); 04755 end_pos = text->cursor_mark.index; 04756 04757 editable->has_selection = TRUE; 04758 gtk_text_set_selection (editable, start_pos, end_pos); 04759 gtk_editable_claim_selection (editable, start_pos != end_pos, time); 04760 } |
|
Definition at line 746 of file extgtktext.c. References ARG_HADJUSTMENT, ARG_LINE_WRAP, ARG_VADJUSTMENT, ARG_WORD_WRAP, EXT_GTK_TEXT, ext_gtk_text_set_adjustments(), ext_gtk_text_set_line_wrap(), ext_gtk_text_set_word_wrap(), _ExtGtkText::hadj, and _ExtGtkText::vadj. Referenced by gtk_text_class_init().
00749 { 00750 ExtGtkText *text; 00751 00752 text = EXT_GTK_TEXT (object); 00753 00754 switch (arg_id) 00755 { 00756 case ARG_HADJUSTMENT: 00757 ext_gtk_text_set_adjustments (text, 00758 GTK_VALUE_POINTER (*arg), 00759 text->vadj); 00760 break; 00761 case ARG_VADJUSTMENT: 00762 ext_gtk_text_set_adjustments (text, 00763 text->hadj, 00764 GTK_VALUE_POINTER (*arg)); 00765 break; 00766 case ARG_LINE_WRAP: 00767 ext_gtk_text_set_line_wrap (text, GTK_VALUE_BOOL (*arg)); 00768 break; 00769 case ARG_WORD_WRAP: 00770 ext_gtk_text_set_word_wrap (text, GTK_VALUE_BOOL (*arg)); 00771 break; 00772 default: 00773 break; 00774 } 00775 } |
|
Definition at line 1369 of file extgtktext.c. References _ExtGtkText::cursor_mark, draw_cursor(), find_cursor(), find_mark(), and undraw_cursor(). Referenced by gtk_text_class_init().
01371 { 01372 ExtGtkText *text = (ExtGtkText *) editable; 01373 01374 undraw_cursor (text, FALSE); 01375 text->cursor_mark = find_mark (text, position); 01376 find_cursor (text, TRUE); 01377 draw_cursor (text, FALSE); 01378 gtk_editable_select_region (editable, 0, 0); 01379 } |
|
Definition at line 5963 of file extgtktext.c. References draw_cursor(), EXT_GTK_TEXT, gtk_text_update_text(), MIN, TEXT_LENGTH, and undraw_cursor(). Referenced by gtk_text_button_press(), gtk_text_class_init(), gtk_text_key_press(), gtk_text_motion_notify(), gtk_text_select_line(), and gtk_text_select_word().
05966 { 05967 ExtGtkText *text = EXT_GTK_TEXT (editable); 05968 05969 guint start1, end1, start2, end2; 05970 05971 if (end < 0) 05972 end = TEXT_LENGTH (text); 05973 05974 start1 = MIN(start,end); 05975 end1 = MAX(start,end); 05976 start2 = MIN(editable->selection_start_pos, editable->selection_end_pos); 05977 end2 = MAX(editable->selection_start_pos, editable->selection_end_pos); 05978 05979 if (start2 < start1) 05980 { 05981 guint tmp; 05982 05983 tmp = start1; start1 = start2; start2 = tmp; 05984 tmp = end1; end1 = end2; end2 = tmp; 05985 } 05986 05987 undraw_cursor (text, FALSE); 05988 editable->selection_start_pos = start; 05989 editable->selection_end_pos = end; 05990 draw_cursor (text, FALSE); 05991 05992 /* Expose only what changed */ 05993 05994 if (start1 < start2) 05995 gtk_text_update_text (editable, start1, MIN(end1, start2)); 05996 05997 if (end2 > end1) 05998 gtk_text_update_text (editable, MAX(end1, start2), end2); 05999 else if (end2 < end1) 06000 gtk_text_update_text (editable, end2, end1); 06001 } |
|
Definition at line 1840 of file extgtktext.c. References EXT_GTK_IS_TEXT, EXT_GTK_TEXT, recompute_geometry(), _ExtGtkText::text_area, and TEXT_BORDER_ROOM. Referenced by gtk_text_class_init().
01842 { 01843 ExtGtkText *text; 01844 GtkEditable *editable; 01845 01846 g_return_if_fail (widget != NULL); 01847 g_return_if_fail (EXT_GTK_IS_TEXT (widget)); 01848 g_return_if_fail (allocation != NULL); 01849 01850 text = EXT_GTK_TEXT (widget); 01851 editable = GTK_EDITABLE (widget); 01852 01853 widget->allocation = *allocation; 01854 if (GTK_WIDGET_REALIZED (widget)) 01855 { 01856 gdk_window_move_resize (widget->window, 01857 allocation->x, allocation->y, 01858 allocation->width, allocation->height); 01859 01860 gdk_window_move_resize (text->text_area, 01861 widget->style->klass->xthickness + TEXT_BORDER_ROOM, 01862 widget->style->klass->ythickness + TEXT_BORDER_ROOM, 01863 MAX (1, (gint)widget->allocation.width - (gint)(widget->style->klass->xthickness + 01864 (gint)TEXT_BORDER_ROOM) * 2), 01865 MAX (1, (gint)widget->allocation.height - (gint)(widget->style->klass->ythickness + 01866 (gint)TEXT_BORDER_ROOM) * 2)); 01867 01868 #ifdef USE_XIM 01869 if (editable->ic && (gdk_ic_get_style (editable->ic) & GDK_IM_PREEDIT_POSITION)) 01870 { 01871 gint width, height; 01872 01873 gdk_window_get_size (text->text_area, &width, &height); 01874 editable->ic_attr->preedit_area.width = width; 01875 editable->ic_attr->preedit_area.height = height; 01876 01877 gdk_ic_set_attr (editable->ic, 01878 editable->ic_attr, GDK_IC_PREEDIT_AREA); 01879 } 01880 #endif 01881 01882 recompute_geometry (text); 01883 } 01884 } |
|
Definition at line 1812 of file extgtktext.c. References EXT_GTK_IS_TEXT, MIN_TEXT_HEIGHT_LINES, MIN_TEXT_WIDTH_LINES, and TEXT_BORDER_ROOM. Referenced by gtk_text_class_init().
01814 { 01815 gint xthickness; 01816 gint ythickness; 01817 gint char_height; 01818 gint char_width; 01819 01820 g_return_if_fail (widget != NULL); 01821 g_return_if_fail (EXT_GTK_IS_TEXT (widget)); 01822 g_return_if_fail (requisition != NULL); 01823 01824 xthickness = widget->style->klass->xthickness + TEXT_BORDER_ROOM; 01825 ythickness = widget->style->klass->ythickness + TEXT_BORDER_ROOM; 01826 01827 char_height = MIN_TEXT_HEIGHT_LINES * (widget->style->font->ascent + 01828 widget->style->font->descent); 01829 01830 char_width = MIN_TEXT_WIDTH_LINES * (gdk_text_width (widget->style->font, 01831 "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 01832 26) 01833 / 26); 01834 01835 requisition->width = char_width + xthickness * 2; 01836 requisition->height = char_height + ythickness * 2; 01837 } |
|
Definition at line 1661 of file extgtktext.c. References EXT_GTK_TEXT, and _ExtGtkText::text_area. Referenced by gtk_text_class_init().
01663 { 01664 ExtGtkText *text = EXT_GTK_TEXT (widget); 01665 01666 if (GTK_WIDGET_REALIZED (widget)) 01667 { 01668 gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]); 01669 gdk_window_set_background (text->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]); 01670 } 01671 } |
|
Definition at line 1629 of file extgtktext.c. References _ExtGtkText::bg_gc, create_bg_gc(), _ExtGtkText::current_font, EXT_GTK_TEXT, get_text_font(), recompute_geometry(), _ExtGtkText::text_area, and text_font_unref(). Referenced by gtk_text_class_init().
01631 { 01632 ExtGtkText *text = EXT_GTK_TEXT (widget); 01633 01634 if (GTK_WIDGET_REALIZED (widget)) 01635 { 01636 gdk_window_set_background (widget->window, &widget->style->base[GTK_WIDGET_STATE (widget)]); 01637 gdk_window_set_background (text->text_area, &widget->style->base[GTK_WIDGET_STATE (widget)]); 01638 01639 if (text->bg_gc) 01640 { 01641 gdk_gc_destroy (text->bg_gc); 01642 text->bg_gc = NULL; 01643 } 01644 01645 if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) 01646 text->bg_gc = create_bg_gc (text); 01647 01648 recompute_geometry (text); 01649 } 01650 01651 if (text->current_font) 01652 text_font_unref (text->current_font); 01653 #ifndef HAVE_LIBXFT 01654 text->current_font = get_text_font (widget->style->font); 01655 #else 01656 text->current_font = get_text_font(default_font); 01657 #endif 01658 } |
|
Definition at line 1674 of file extgtktext.c. References _ExtGtkText::bg_gc, EXT_GTK_IS_TEXT, EXT_GTK_TEXT, free_cache(), _ExtGtkText::gc, parent_class, _ExtGtkText::text_area, and unrealize_properties(). Referenced by gtk_text_class_init().
01675 { 01676 ExtGtkText *text; 01677 01678 g_return_if_fail (widget != NULL); 01679 g_return_if_fail (EXT_GTK_IS_TEXT (widget)); 01680 01681 text = EXT_GTK_TEXT (widget); 01682 01683 #ifdef USE_XIM 01684 if (GTK_EDITABLE (widget)->ic) 01685 { 01686 gdk_ic_destroy (GTK_EDITABLE (widget)->ic); 01687 GTK_EDITABLE (widget)->ic = NULL; 01688 } 01689 if (GTK_EDITABLE (widget)->ic_attr) 01690 { 01691 gdk_ic_attr_destroy (GTK_EDITABLE (widget)->ic_attr); 01692 GTK_EDITABLE (widget)->ic_attr = NULL; 01693 } 01694 #endif 01695 01696 gdk_window_set_user_data (text->text_area, NULL); 01697 gdk_window_destroy (text->text_area); 01698 text->text_area = NULL; 01699 01700 gdk_gc_destroy (text->gc); 01701 text->gc = NULL; 01702 01703 if (text->bg_gc) 01704 { 01705 gdk_gc_destroy (text->bg_gc); 01706 text->bg_gc = NULL; 01707 } 01708 01709 01710 unrealize_properties (text); 01711 01712 free_cache (text); 01713 01714 if (GTK_WIDGET_CLASS (parent_class)->unrealize) 01715 (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); 01716 } |
|
Definition at line 5848 of file extgtktext.c. References CACHE_DATA, expose_text(), EXT_GTK_TEXT, fetch_lines_forward(), _ExtGtkText::first_cut_pixels, LINE_HEIGHT, _ExtGtkText::line_start_cache, TDEBUG, _ExtGtkText::text_area, and TEXT_LENGTH. Referenced by gtk_text_button_release(), gtk_text_class_init(), and gtk_text_set_selection().
05851 { 05852 ExtGtkText *text = EXT_GTK_TEXT (editable); 05853 05854 GList *cache = text->line_start_cache; 05855 gint pixels = - text->first_cut_pixels; 05856 GdkRectangle area; 05857 gint width; 05858 gint height; 05859 05860 if (end_pos < 0) 05861 end_pos = TEXT_LENGTH (text); 05862 05863 if (end_pos < start_pos) 05864 return; 05865 05866 gdk_window_get_size (text->text_area, &width, &height); 05867 area.x = 0; 05868 area.y = -1; 05869 area.width = width; 05870 area.height = 0; 05871 05872 TDEBUG (("in expose span start=%d stop=%d\n", start_pos, end_pos)); 05873 05874 for (; pixels < height; cache = cache->next) 05875 { 05876 if (CACHE_DATA(cache).start.index < end_pos) 05877 { 05878 if (CACHE_DATA(cache).end.index >= start_pos) 05879 { 05880 if (area.y < 0) 05881 area.y = MAX(0,pixels); 05882 area.height = pixels + LINE_HEIGHT(CACHE_DATA(cache)) - area.y; 05883 } 05884 } 05885 else 05886 break; 05887 05888 pixels += LINE_HEIGHT(CACHE_DATA(cache)); 05889 05890 if (!cache->next) 05891 { 05892 fetch_lines_forward (text, 1); 05893 05894 if (!cache->next) 05895 break; 05896 } 05897 } 05898 05899 if (area.y >= 0) 05900 expose_text (text, &area, TRUE); 05901 } |
|
Definition at line 3843 of file extgtktext.c. References _ExtGtkPropertyMark::index, new_text_property(), _ExtGtkText::point, SET_PROPERTY_MARK, _ExtGtkText::text_properties, and _ExtGtkText::text_properties_end. Referenced by gtk_text_init(), and gtk_text_realize().
03844 { 03845 if (!text->text_properties) 03846 { 03847 text->text_properties = g_list_alloc(); 03848 text->text_properties->next = NULL; 03849 text->text_properties->prev = NULL; 03850 text->text_properties->data = new_text_property (text, NULL, NULL, NULL, FALSE, FALSE, NULL, NULL, NULL,0,NULL, 1); 03851 text->text_properties_end = text->text_properties; 03852 03853 SET_PROPERTY_MARK (&text->point, text->text_properties, 0); 03854 03855 text->point.index = 0; 03856 } 03857 } |
|
Definition at line 2607 of file extgtktext.c. References _ExtGtkText::default_tab_width, _PrevTabCont::pixel_offset, _PrevTabCont::tab_start, _ExtGtkText::tab_stops, _TabStopMark::tab_stops, and _TabStopMark::to_next_tab. Referenced by find_line_params(), and line_params_iterate().
02608 { 02609 tab_cont->pixel_offset = 0; 02610 tab_cont->tab_start.tab_stops = text->tab_stops; 02611 tab_cont->tab_start.to_next_tab = (gulong) text->tab_stops->data; 02612 02613 if (!tab_cont->tab_start.to_next_tab) 02614 tab_cont->tab_start.to_next_tab = text->default_tab_width; 02615 } |
|
Definition at line 3064 of file extgtktext.c. References adjust_adj(), CACHE_DATA, correct_cache_insert(), _ExtGtkText::current_line, _ExtGtkText::cursor_mark, _ExtGtkText::cursor_virtual_x, draw_cursor(), expose_text(), fetch_lines(), FetchLinesCount, find_cursor(), _ExtGtkText::gc, gtk_text_draw_focus(), LINE_HEIGHT, pixel_height_of(), _ExtGtkText::point, process_exposes(), swap_lines(), _ExtGtkText::text_area, TEXT_ASSERT, TEXT_SHOW, TEXT_SHOW_ADJ, total_line_height(), undraw_cursor(), and _ExtGtkText::vadj. Referenced by ext_gtk_text_insert_alltypes().
03066 { 03067 GtkWidget *widget = GTK_WIDGET (text); 03068 03069 gint pixel_height; 03070 guint new_pixels = 0; 03071 GdkRectangle rect; 03072 GList* new_lines = NULL; 03073 gint width, height; 03074 03075 text->cursor_virtual_x = 0; 03076 03077 undraw_cursor (text, FALSE); 03078 03079 correct_cache_insert (text, nchars); 03080 03081 TEXT_SHOW_ADJ (text, text->vadj, "vadj"); 03082 03083 pixel_height = pixel_height_of(text, text->current_line) - 03084 LINE_HEIGHT(CACHE_DATA(text->current_line)); 03085 03086 new_lines = fetch_lines (text, 03087 &CACHE_DATA(text->current_line).start, 03088 &CACHE_DATA(text->current_line).tab_cont, 03089 FetchLinesCount, 03090 new_line_count); 03091 03092 swap_lines (text, text->current_line, new_lines, 1); 03093 03094 text->current_line = new_lines; 03095 03096 new_pixels = total_line_height (text, new_lines, new_line_count); 03097 03098 gdk_window_get_size (text->text_area, &width, &height); 03099 03100 if (old_pixels != new_pixels) 03101 { 03102 if (!widget->style->bg_pixmap[GTK_STATE_NORMAL]) 03103 { 03104 gdk_draw_pixmap (text->text_area, 03105 text->gc, 03106 text->text_area, 03107 0, 03108 pixel_height + old_pixels, 03109 0, 03110 pixel_height + new_pixels, 03111 width, 03112 height + (old_pixels - new_pixels) - pixel_height); 03113 03114 } 03115 text->vadj->upper += new_pixels; 03116 text->vadj->upper -= old_pixels; 03117 adjust_adj (text, text->vadj); 03118 } 03119 03120 rect.x = 0; 03121 rect.y = pixel_height; 03122 rect.width = width; 03123 rect.height = new_pixels; 03124 03125 expose_text (text, &rect, FALSE); 03126 gtk_text_draw_focus ( (GtkWidget *) text); 03127 03128 text->cursor_mark = text->point; 03129 03130 find_cursor (text, TRUE); 03131 03132 draw_cursor (text, FALSE); 03133 03134 if (old_pixels != new_pixels) 03135 { 03136 if (widget->style->bg_pixmap[GTK_STATE_NORMAL]) 03137 { 03138 rect.x = 0; 03139 rect.y = pixel_height + new_pixels; 03140 rect.width = width; 03141 rect.height = height - rect.y; 03142 03143 expose_text (text, &rect, FALSE); 03144 } 03145 else 03146 process_exposes (text); 03147 } 03148 03149 TEXT_SHOW_ADJ (text, text->vadj, "vadj"); 03150 TEXT_ASSERT (text); 03151 TEXT_SHOW(text); 03152 } |
|
Definition at line 3555 of file extgtktext.c. References _TextProperty::back_color, DataFunc, _TextProperty::flags, _TextProperty::font, _TextProperty::fore_color, _ExtGtkTextFont::gdk_font, get_text_font(), _TextProperty::image, _TextProperty::length, MARK_CURRENT_PROPERTY, MARK_LIST_PTR, MARK_NEXT_LIST_PTR, MARK_OFFSET, MARK_PREV_LIST_PTR, MARK_PREV_PROPERTY, MARK_PROPERTY_LENGTH, _TextProperty::mask, new_text_property(), _ExtGtkText::point, PROPERTY_BACKGROUND, PROPERTY_DATA, PROPERTY_DIVIDER, PROPERTY_FONT, PROPERTY_FOREGROUND, PROPERTY_IMAGE, PROPERTY_UNDERLINED, realize_property(), SET_PROPERTY_MARK, _ExtGtkText::text_properties, _ExtGtkText::text_properties_end, text_properties_equal(), unrealize_property(), _TextProperty::user_data, _TextProperty::user_data_func, _TextProperty::user_data_length, and VFont. Referenced by ext_gtk_text_insert_alltypes().
03562 { 03563 ExtGtkPropertyMark *mark = &text->point; 03564 TextProperty* forward_prop = MARK_CURRENT_PROPERTY(mark); 03565 TextProperty* backward_prop = MARK_PREV_PROPERTY(mark); 03566 03567 if (MARK_OFFSET(mark) == 0) 03568 { 03569 /* Point is on the boundary of two properties. 03570 * If it is the same as either, grow, else insert 03571 * a new one. */ 03572 03573 if (text_properties_equal(forward_prop, font, fore, back, underlined, divider, image, user_data, user_data_length, user_data_func)) 03574 { 03575 /* Grow the property in front of us. */ 03576 03577 MARK_PROPERTY_LENGTH(mark) += len; 03578 } 03579 else if (backward_prop && 03580 text_properties_equal(backward_prop, font, fore, back, underlined, divider, image, user_data, user_data_length, user_data_func)) 03581 { 03582 /* Grow property behind us, point property and offset 03583 * change. */ 03584 03585 SET_PROPERTY_MARK (&text->point, 03586 MARK_PREV_LIST_PTR (mark), 03587 backward_prop->length); 03588 03589 backward_prop->length += len; 03590 } 03591 else if ((MARK_NEXT_LIST_PTR(mark) == NULL) && 03592 (forward_prop->length == 1)) 03593 { 03594 /* Next property just has last position, take it over */ 03595 03596 if (GTK_WIDGET_REALIZED (text)) 03597 unrealize_property (text, forward_prop); 03598 03599 forward_prop->flags = 0; 03600 if (font) 03601 { 03602 forward_prop->flags |= PROPERTY_FONT; 03603 forward_prop->font = get_text_font (font); 03604 } 03605 else 03606 forward_prop->font = NULL; 03607 03608 if (fore) 03609 { 03610 forward_prop->flags |= PROPERTY_FOREGROUND; 03611 forward_prop->fore_color = *fore; 03612 } 03613 if (back) 03614 { 03615 forward_prop->flags |= PROPERTY_BACKGROUND; 03616 forward_prop->back_color = *back; 03617 } 03618 if (underlined) 03619 { 03620 forward_prop->flags |= PROPERTY_UNDERLINED; 03621 } 03622 if (image) 03623 { 03624 forward_prop->flags |= PROPERTY_IMAGE; 03625 forward_prop->image = image; 03626 forward_prop->mask = mask; 03627 } 03628 if(divider) 03629 { 03630 forward_prop->flags |= PROPERTY_DIVIDER; 03631 } 03632 if (user_data!=NULL) 03633 { 03634 forward_prop->flags |= PROPERTY_DATA; 03635 forward_prop->user_data_length=user_data_length; 03636 forward_prop->user_data = g_malloc(user_data_length); 03637 memcpy(forward_prop->user_data , user_data, user_data_length); 03638 forward_prop->user_data_func=user_data_func; 03639 } 03640 else 03641 { 03642 forward_prop->user_data=NULL; 03643 forward_prop->user_data_length=0; 03644 forward_prop->user_data_func=NULL; 03645 } 03646 forward_prop->length += len; 03647 03648 if (GTK_WIDGET_REALIZED (text)) 03649 realize_property (text, forward_prop); 03650 } 03651 else 03652 { 03653 /* Splice a new property into the list. */ 03654 03655 GList* new_prop = g_list_alloc(); 03656 03657 new_prop->next = MARK_LIST_PTR(mark); 03658 new_prop->prev = MARK_PREV_LIST_PTR(mark); 03659 new_prop->next->prev = new_prop; 03660 03661 if (new_prop->prev) 03662 new_prop->prev->next = new_prop; 03663 03664 new_prop->data = new_text_property (text, font, fore, back, underlined, divider, image,mask,user_data, user_data_length, user_data_func,len); 03665 03666 SET_PROPERTY_MARK (mark, new_prop, 0); 03667 } 03668 } 03669 else 03670 { 03671 /* The following will screw up the line_start cache, 03672 * we'll fix it up in correct_cache_insert 03673 */ 03674 03675 /* In the middle of forward_prop, if properties are equal, 03676 * just add to its length, else split it into two and splice 03677 * in a new one. */ 03678 if (text_properties_equal (forward_prop, font, fore, back, underlined, divider, image, user_data, user_data_length, user_data_func)) 03679 { 03680 forward_prop->length += len; 03681 } 03682 else if ((MARK_NEXT_LIST_PTR(mark) == NULL) && 03683 (MARK_OFFSET(mark) + 1 == forward_prop->length)) 03684 { 03685 /* Inserting before only the last position in the text */ 03686 03687 GList* new_prop; 03688 forward_prop->length -= 1; 03689 03690 new_prop = g_list_alloc(); 03691 new_prop->data = new_text_property (text, font, fore, back, underlined, divider, image, mask, user_data,user_data_length, user_data_func, len+1); 03692 new_prop->prev = MARK_LIST_PTR(mark); 03693 new_prop->next = NULL; 03694 MARK_NEXT_LIST_PTR(mark) = new_prop; 03695 03696 SET_PROPERTY_MARK (mark, new_prop, 0); 03697 } 03698 else 03699 { 03700 GList* new_prop = g_list_alloc(); 03701 GList* new_prop_forward = g_list_alloc(); 03702 gint old_length = forward_prop->length; 03703 GList* next = MARK_NEXT_LIST_PTR(mark); 03704 03705 /* Set the new lengths according to where they are split. Construct 03706 * two new properties. */ 03707 forward_prop->length = MARK_OFFSET(mark); 03708 03709 new_prop_forward->data = 03710 new_text_property(text, 03711 forward_prop->flags & PROPERTY_FONT ? 03712 forward_prop->font->gdk_font : NULL, 03713 forward_prop->flags & PROPERTY_FOREGROUND ? 03714 &forward_prop->fore_color : NULL, 03715 forward_prop->flags & PROPERTY_BACKGROUND ? 03716 &forward_prop->back_color : NULL, 03717 forward_prop->flags & PROPERTY_UNDERLINED ? 03718 TRUE : FALSE, 03719 forward_prop->flags & PROPERTY_DIVIDER? 03720 TRUE : FALSE, 03721 forward_prop->flags & PROPERTY_IMAGE ? 03722 forward_prop->image: NULL, 03723 forward_prop->flags & PROPERTY_IMAGE ? 03724 forward_prop->mask: NULL, 03725 (forward_prop->flags & PROPERTY_DATA) ? 03726 forward_prop->user_data: NULL, 03727 (forward_prop->flags & PROPERTY_DATA) ? 03728 forward_prop->user_data_length:0, 03729 (forward_prop->flags & PROPERTY_DATA) ? 03730 forward_prop->user_data_func:NULL, 03731 old_length - forward_prop->length); 03732 03733 new_prop->data = new_text_property(text, font, fore, back, underlined, divider, image, mask, user_data,user_data_length, user_data_func, len); 03734 /* Now splice things in. */ 03735 MARK_NEXT_LIST_PTR(mark) = new_prop; 03736 new_prop->prev = MARK_LIST_PTR(mark); 03737 03738 new_prop->next = new_prop_forward; 03739 new_prop_forward->prev = new_prop; 03740 03741 new_prop_forward->next = next; 03742 03743 if (next) 03744 next->prev = new_prop_forward; 03745 03746 SET_PROPERTY_MARK (mark, new_prop, 0); 03747 } 03748 } 03749 03750 while (text->text_properties_end->next) 03751 text->text_properties_end = text->text_properties_end->next; 03752 03753 while (text->text_properties->prev) 03754 text->text_properties = text->text_properties->prev; 03755 } |
|
Definition at line 4932 of file extgtktext.c. References _ExtGtkText::line_start_cache, pixel_height_of(), and _ExtGtkText::text_area. Referenced by scroll_up().
04933 { 04934 GList *cache = text->line_start_cache; 04935 gint height; 04936 04937 gdk_window_get_size (text->text_area, NULL, &height); 04938 04939 for (; cache->next; cache = cache->next) 04940 if (pixel_height_of(text, cache->next) > height) 04941 break; 04942 04943 if (cache) 04944 return pixel_height_of(text, cache) - 1; 04945 else 04946 return 0; 04947 } |
|
Definition at line 2618 of file extgtktext.c. References advance_mark(), _LineParams::end, find_line_params(), init_tab_cont(), LAST_INDEX, LineIteratorFunction, and params_mem_chunk. Referenced by fetch_lines(), and set_vertical_scroll().
02628 { 02629 ExtGtkPropertyMark mark = *mark0; 02630 PrevTabCont tab_conts[2]; 02631 LineParams *lp, lpbuf; 02632 gint tab_cont_index = 0; 02633 02634 if (tab_mark0) 02635 tab_conts[0] = *tab_mark0; 02636 else 02637 init_tab_cont (text, tab_conts); 02638 02639 for (;;) 02640 { 02641 if (alloc) 02642 lp = g_chunk_new (LineParams, params_mem_chunk); 02643 else 02644 lp = &lpbuf; 02645 02646 *lp = find_line_params (text, &mark, tab_conts + tab_cont_index, 02647 tab_conts + (tab_cont_index + 1) % 2); 02648 02649 if ((*iter) (text, lp, data)) 02650 return; 02651 02652 if (LAST_INDEX (text, lp->end)) 02653 break; 02654 02655 mark = lp->end; 02656 advance_mark (&mark); 02657 tab_cont_index = (tab_cont_index + 1) % 2; 02658 } 02659 } |
|
Definition at line 3514 of file extgtktext.c. References _ExtGtkText::gap_position, _ExtGtkText::gap_size, MIN_GAP_SIZE, _ExtGtkText::text, _ExtGtkText::text_end, _ExtGtkText::text_len, and _ExtGtkText::use_wchar. Referenced by ext_gtk_text_insert_alltypes(), and gtk_text_get_chars().
03515 { 03516 if (text->gap_size < len) 03517 { 03518 guint sum = MAX(2*len, MIN_GAP_SIZE) + text->text_end; 03519 03520 if (sum >= text->text_len) 03521 { 03522 guint i = 1; 03523 03524 while (i <= sum) i <<= 1; 03525 03526 if (text->use_wchar) 03527 text->text.wc = (GdkWChar *)g_realloc(text->text.wc, 03528 i*sizeof(GdkWChar)); 03529 else 03530 text->text.ch = (guchar *)g_realloc(text->text.ch, i); 03531 text->text_len = i; 03532 } 03533 03534 if (text->use_wchar) 03535 g_memmove (text->text.wc + text->gap_position + text->gap_size + 2*len, 03536 text->text.wc + text->gap_position + text->gap_size, 03537 (text->text_end - (text->gap_position + text->gap_size)) 03538 *sizeof(GdkWChar)); 03539 else 03540 g_memmove (text->text.ch + text->gap_position + text->gap_size + 2*len, 03541 text->text.ch + text->gap_position + text->gap_size, 03542 text->text_end - (text->gap_position + text->gap_size)); 03543 03544 text->text_end += len*2; 03545 text->gap_size += len*2; 03546 } 03547 } |
|
Definition at line 4351 of file extgtktext.c. References _ExtGtkText::cursor_mark, draw_cursor(), find_cursor(), find_this_line_start_mark(), scroll_int(), TEXT_LENGTH, undraw_cursor(), and _ExtGtkText::vadj. Referenced by gtk_text_key_press().
04352 { 04353 undraw_cursor (text, FALSE); 04354 04355 if (dir > 0) 04356 { 04357 scroll_int (text, text->vadj->upper); 04358 text->cursor_mark = find_this_line_start_mark (text, 04359 TEXT_LENGTH (text), 04360 &text->cursor_mark); 04361 } 04362 else 04363 { 04364 scroll_int (text, - text->vadj->value); 04365 text->cursor_mark = find_this_line_start_mark (text, 04366 0, 04367 &text->cursor_mark); 04368 } 04369 04370 find_cursor (text, TRUE); 04371 draw_cursor (text, FALSE); 04372 } |
|
Definition at line 4429 of file extgtktext.c. References _ExtGtkText::cursor_mark, _ExtGtkText::cursor_virtual_x, draw_cursor(), find_cursor(), _ExtGtkPropertyMark::index, move_mark_n(), TEXT_LENGTH, and undraw_cursor(). Referenced by gtk_text_key_press(), gtk_text_move_backward_character(), gtk_text_move_cursor(), and gtk_text_move_forward_character().
04430 { 04431 /* count should be +-1. */ 04432 if ( (count > 0 && text->cursor_mark.index + count > TEXT_LENGTH(text)) || 04433 (count < 0 && text->cursor_mark.index < (- count)) || 04434 (count == 0) ) 04435 return; 04436 04437 text->cursor_virtual_x = 0; 04438 04439 undraw_cursor (text, FALSE); 04440 04441 move_mark_n (&text->cursor_mark, count); 04442 04443 find_cursor (text, TRUE); 04444 04445 draw_cursor (text, FALSE); 04446 } |
|
Definition at line 4375 of file extgtktext.c. References scroll_int(), and _ExtGtkText::vadj. Referenced by gtk_text_key_press().
04376 { 04377 scroll_int (text, dir * text->vadj->page_increment); 04378 } |
|
Definition at line 4381 of file extgtktext.c. References advance_mark(), _ExtGtkText::cursor_mark, _ExtGtkText::cursor_virtual_x, decrement_mark(), draw_cursor(), EXT_GTK_TEXT_INDEX, find_cursor(), find_this_line_start_mark(), _ExtGtkPropertyMark::index, LAST_INDEX, LINE_DELIM, and undraw_cursor(). Referenced by gtk_text_key_press(), gtk_text_move_cursor(), gtk_text_move_next_line(), and gtk_text_move_previous_line().
04382 { 04383 gint i; 04384 ExtGtkPropertyMark mark; 04385 gint offset; 04386 04387 mark = find_this_line_start_mark (text, text->cursor_mark.index, &text->cursor_mark); 04388 offset = text->cursor_mark.index - mark.index; 04389 04390 if (offset > text->cursor_virtual_x) 04391 text->cursor_virtual_x = offset; 04392 04393 if (count < 0) 04394 { 04395 if (mark.index == 0) 04396 return; 04397 04398 decrement_mark (&mark); 04399 mark = find_this_line_start_mark (text, mark.index, &mark); 04400 } 04401 else 04402 { 04403 mark = text->cursor_mark; 04404 04405 while (!LAST_INDEX(text, mark) && EXT_GTK_TEXT_INDEX(text, mark.index) != LINE_DELIM) 04406 advance_mark (&mark); 04407 04408 if (LAST_INDEX(text, mark)) 04409 return; 04410 04411 advance_mark (&mark); 04412 } 04413 04414 for (i=0; i < text->cursor_virtual_x; i += 1, advance_mark(&mark)) 04415 if (LAST_INDEX(text, mark) || 04416 EXT_GTK_TEXT_INDEX(text, mark.index) == LINE_DELIM) 04417 break; 04418 04419 undraw_cursor (text, FALSE); 04420 04421 text->cursor_mark = mark; 04422 04423 find_cursor (text, TRUE); 04424 04425 draw_cursor (text, FALSE); 04426 } |
|
Definition at line 3478 of file extgtktext.c. References _ExtGtkText::gap_position, _ExtGtkText::gap_size, _ExtGtkText::text, and _ExtGtkText::use_wchar. Referenced by ext_gtk_text_forward_delete(), ext_gtk_text_insert_alltypes(), and gtk_text_get_chars().
03479 { 03480 if (text->gap_position < index) 03481 { 03482 gint diff = index - text->gap_position; 03483 03484 if (text->use_wchar) 03485 g_memmove (text->text.wc + text->gap_position, 03486 text->text.wc + text->gap_position + text->gap_size, 03487 diff*sizeof (GdkWChar)); 03488 else 03489 g_memmove (text->text.ch + text->gap_position, 03490 text->text.ch + text->gap_position + text->gap_size, 03491 diff); 03492 03493 text->gap_position = index; 03494 } 03495 else if (text->gap_position > index) 03496 { 03497 gint diff = text->gap_position - index; 03498 03499 if (text->use_wchar) 03500 g_memmove (text->text.wc + index + text->gap_size, 03501 text->text.wc + index, 03502 diff*sizeof (GdkWChar)); 03503 else 03504 g_memmove (text->text.ch + index + text->gap_size, 03505 text->text.ch + index, 03506 diff); 03507 03508 text->gap_position = index; 03509 } 03510 } |
|
Definition at line 3865 of file extgtktext.c. References advance_mark_n(), and decrement_mark_n(). Referenced by correct_cache_insert(), ext_gtk_text_forward_delete(), find_mark_near(), and move_cursor_hor().
03866 { 03867 if (n > 0) 03868 advance_mark_n(mark, n); 03869 else if (n < 0) 03870 decrement_mark_n(mark, -n); 03871 } |
|
Definition at line 3376 of file extgtktext.c. References _TextProperty::back_color, DataFunc, _TextProperty::flags, _TextProperty::font, _TextProperty::fore_color, get_text_font(), _TextProperty::image, _TextProperty::length, _TextProperty::mask, PROPERTY_BACKGROUND, PROPERTY_DATA, PROPERTY_DIVIDER, PROPERTY_FONT, PROPERTY_FOREGROUND, PROPERTY_IMAGE, PROPERTY_UNDERLINED, realize_property(), text_property_chunk, _TextProperty::user_data, _TextProperty::user_data_func, _TextProperty::user_data_length, and VFont. Referenced by init_properties(), and insert_text_property().
03380 { 03381 TextProperty *prop; 03382 03383 if (text_property_chunk == NULL) 03384 { 03385 text_property_chunk = g_mem_chunk_new ("text property mem chunk", 03386 sizeof(TextProperty), 03387 1024*sizeof(TextProperty), 03388 G_ALLOC_AND_FREE); 03389 } 03390 03391 prop = g_chunk_new(TextProperty, text_property_chunk); 03392 03393 prop->flags = 0; 03394 prop->user_data=NULL; 03395 prop->user_data_func=NULL; 03396 if (font) 03397 { 03398 prop->flags |= PROPERTY_FONT; 03399 prop->font = get_text_font (font); 03400 } 03401 else 03402 prop->font = NULL; 03403 03404 if (fore) 03405 { 03406 prop->flags |= PROPERTY_FOREGROUND; 03407 prop->fore_color = *fore; 03408 } 03409 03410 if (back) 03411 { 03412 prop->flags |= PROPERTY_BACKGROUND; 03413 prop->back_color = *back; 03414 } 03415 03416 if (underlined) 03417 { 03418 prop->flags |= PROPERTY_UNDERLINED; 03419 } 03420 03421 if (divider) 03422 { 03423 prop->flags |= PROPERTY_DIVIDER; 03424 } 03425 03426 if (image) 03427 { 03428 prop->flags |= PROPERTY_IMAGE; 03429 prop->image = image; 03430 prop->mask = mask; 03431 } 03432 else 03433 { 03434 prop->image=NULL; 03435 prop->mask =NULL; 03436 } 03437 if (user_data) 03438 { 03439 prop->flags |= PROPERTY_DATA; 03440 prop->user_data_length=user_data_length; 03441 prop->user_data=g_malloc(user_data_length); 03442 prop->user_data_func=user_data_func; 03443 memcpy(prop->user_data, user_data, user_data_length); 03444 } 03445 else 03446 { 03447 prop->user_data=NULL; 03448 prop->user_data_length=0; 03449 prop->user_data_func=NULL; 03450 } 03451 03452 prop->length = length; 03453 03454 if (GTK_WIDGET_REALIZED (text)) 03455 realize_property (text, prop); 03456 03457 return prop; 03458 } |
|
Definition at line 4067 of file extgtktext.c. References CACHE_DATA, _ExtGtkText::first_cut_pixels, LINE_HEIGHT, and _ExtGtkText::line_start_cache. Referenced by delete_expose(), find_cursor(), find_line_containing_point(), first_visible_line_height(), insert_expose(), and last_visible_line_height().
04068 { 04069 gint pixels = - text->first_cut_pixels; 04070 GList *cache = text->line_start_cache; 04071 04072 while (TRUE) { 04073 pixels += LINE_HEIGHT (CACHE_DATA(cache)); 04074 04075 if (cache->data == cache_line->data) 04076 break; 04077 04078 cache = cache->next; 04079 } 04080 04081 return pixels; 04082 } |
|
Definition at line 4913 of file extgtktext.c. References _ExtGtkText::text_area. Referenced by delete_expose(), insert_expose(), scroll_down(), and scroll_up().
04914 { 04915 GdkEvent *event; 04916 04917 /* Make sure graphics expose events are processed before scrolling 04918 * again */ 04919 04920 while ((event = gdk_event_get_graphics_expose (text->text_area)) != NULL) 04921 { 04922 gtk_widget_event (GTK_WIDGET (text), event); 04923 if (event->expose.count == 0) 04924 { 04925 gdk_event_free (event); 04926 break; 04927 } 04928 gdk_event_free (event); 04929 } 04930 } |
|
Definition at line 3338 of file extgtktext.c. References realize_property(), and _ExtGtkText::text_properties. Referenced by gtk_text_realize().
03339 { 03340 GList *tmp_list = text->text_properties; 03341 03342 while (tmp_list) 03343 { 03344 realize_property (text, tmp_list->data); 03345 03346 tmp_list = tmp_list->next; 03347 } 03348 } |
|
Definition at line 3326 of file extgtktext.c. References _TextProperty::back_color, _TextProperty::flags, _TextProperty::fore_color, PROPERTY_BACKGROUND, and PROPERTY_FOREGROUND. Referenced by insert_text_property(), new_text_property(), and realize_properties().
03327 { 03328 GdkColormap *colormap = gtk_widget_get_colormap (GTK_WIDGET (text)); 03329 03330 if (prop->flags & PROPERTY_FOREGROUND) 03331 gdk_colormap_alloc_color (colormap, &prop->fore_color, FALSE, FALSE); 03332 03333 if (prop->flags & PROPERTY_BACKGROUND) 03334 gdk_colormap_alloc_color (colormap, &prop->back_color, FALSE, FALSE); 03335 } |
|
Definition at line 5904 of file extgtktext.c. References advance_mark(), CACHE_DATA, decrement_mark(), EXT_GTK_TEXT_INDEX, fetch_lines(), FetchLinesCount, FetchLinesPixels, find_cursor(), _ExtGtkText::first_cut_pixels, free_cache(), _ExtGtkPropertyMark::index, LAST_INDEX, LINE_DELIM, _ExtGtkText::line_start_cache, set_vertical_scroll(), and _ExtGtkText::text_area. Referenced by ext_gtk_text_set_line_wrap(), ext_gtk_text_set_word_wrap(), ext_gtk_text_thaw(), gtk_text_real_set_editable(), gtk_text_realize(), gtk_text_size_allocate(), and gtk_text_style_set().
05905 { 05906 ExtGtkPropertyMark mark, start_mark; 05907 GList *new_lines; 05908 gint height; 05909 gint width; 05910 05911 free_cache (text); 05912 05913 mark = start_mark = set_vertical_scroll (text); 05914 05915 /* We need a real start of a line when calling fetch_lines(). 05916 * not the start of a wrapped line. 05917 */ 05918 while (mark.index > 0 && 05919 EXT_GTK_TEXT_INDEX (text, mark.index - 1) != LINE_DELIM) 05920 decrement_mark (&mark); 05921 05922 gdk_window_get_size (text->text_area, &width, &height); 05923 05924 /* Fetch an entire line, to make sure that we get all the text 05925 * we backed over above, in addition to enough text to fill up 05926 * the space vertically 05927 */ 05928 05929 new_lines = fetch_lines (text, 05930 &mark, 05931 NULL, 05932 FetchLinesCount, 05933 1); 05934 05935 mark = CACHE_DATA (g_list_last (new_lines)).end; 05936 if (!LAST_INDEX (text, mark)) 05937 { 05938 advance_mark (&mark); 05939 05940 new_lines = g_list_concat (new_lines, 05941 fetch_lines (text, 05942 &mark, 05943 NULL, 05944 FetchLinesPixels, 05945 height + text->first_cut_pixels)); 05946 } 05947 05948 /* Now work forward to the actual first onscreen line */ 05949 05950 while (CACHE_DATA (new_lines).start.index < start_mark.index) 05951 new_lines = new_lines->next; 05952 05953 text->line_start_cache = new_lines; 05954 05955 find_cursor (text, TRUE); 05956 } |
|
Definition at line 4322 of file extgtktext.c. References _ExtGtkText::line_start_cache, and params_mem_chunk. Referenced by swap_lines().
04323 { 04324 GList *list; 04325 04326 if (member == NULL) 04327 return NULL; 04328 04329 if (member == text->line_start_cache) 04330 text->line_start_cache = text->line_start_cache->next; 04331 04332 if (member->prev) 04333 member->prev->next = member->next; 04334 04335 if (member->next) 04336 member->next->prev = member->prev; 04337 04338 list = member->next; 04339 04340 g_mem_chunk_free (params_mem_chunk, member->data); 04341 g_list_free_1 (member); 04342 04343 return list; 04344 } |
|
Definition at line 4958 of file extgtktext.c. References CACHE_DATA, _ExtGtkText::current_line, _ExtGtkText::cursor_pos_x, _ExtGtkText::cursor_pos_y, drawn_cursor_min(), expose_text(), fetch_lines_forward(), find_mouse_cursor(), _ExtGtkText::first_cut_pixels, _ExtGtkText::first_line_start_index, _ExtGtkText::first_onscreen_ver_pixel, first_visible_line_height(), _ExtGtkText::gc, gtk_text_draw_focus(), LINE_HEIGHT, _ExtGtkText::line_start_cache, MIN, process_exposes(), and _ExtGtkText::text_area. Referenced by gtk_text_adjustment().
04959 { 04960 GdkRectangle rect; 04961 gint real_diff = 0; 04962 gint width, height; 04963 04964 text->first_onscreen_ver_pixel += diff0; 04965 04966 while (diff0-- > 0) 04967 { 04968 if (text->first_cut_pixels < LINE_HEIGHT(CACHE_DATA(text->line_start_cache)) - 1) 04969 { 04970 text->first_cut_pixels += 1; 04971 } 04972 else 04973 { 04974 text->first_cut_pixels = 0; 04975 04976 text->line_start_cache = text->line_start_cache->next; 04977 g_assert (text->line_start_cache); 04978 04979 text->first_line_start_index = 04980 CACHE_DATA(text->line_start_cache).start.index; 04981 04982 if (!text->line_start_cache->next) 04983 fetch_lines_forward (text, 1); 04984 } 04985 04986 real_diff += 1; 04987 } 04988 04989 gdk_window_get_size (text->text_area, &width, &height); 04990 if (height > real_diff) 04991 gdk_draw_pixmap (text->text_area, 04992 text->gc, 04993 text->text_area, 04994 0, 04995 real_diff, 04996 0, 04997 0, 04998 width, 04999 height - real_diff); 05000 05001 rect.x = 0; 05002 rect.y = MAX (0, height - real_diff); 05003 rect.width = width; 05004 rect.height = MIN (height, real_diff); 05005 05006 expose_text (text, &rect, FALSE); 05007 gtk_text_draw_focus ( (GtkWidget *) text); 05008 05009 if (text->current_line) 05010 { 05011 gint cursor_min; 05012 05013 text->cursor_pos_y -= real_diff; 05014 cursor_min = drawn_cursor_min(text); 05015 05016 if (cursor_min < 0) 05017 find_mouse_cursor (text, text->cursor_pos_x, 05018 first_visible_line_height (text)); 05019 } 05020 05021 if (height > real_diff) 05022 process_exposes (text); 05023 } |
|
Definition at line 4899 of file extgtktext.c. References MIN, and _ExtGtkText::vadj. Referenced by find_line_containing_point(), gtk_text_key_press(), gtk_text_motion_notify(), gtk_text_move_page(), move_cursor_buffer_ver(), and move_cursor_page_ver().
04900 { 04901 gfloat upper; 04902 04903 text->vadj->value += diff; 04904 04905 upper = text->vadj->upper - text->vadj->page_size; 04906 text->vadj->value = MIN (text->vadj->value, upper); 04907 text->vadj->value = MAX (text->vadj->value, 0.0); 04908 04909 gtk_signal_emit_by_name (GTK_OBJECT (text->vadj), "value_changed"); 04910 } |
|
Definition at line 5026 of file extgtktext.c. References CACHE_DATA, _ExtGtkText::current_line, _ExtGtkText::cursor_pos_x, _ExtGtkText::cursor_pos_y, drawn_cursor_max(), expose_text(), fetch_lines_backward(), find_mouse_cursor(), _ExtGtkText::first_cut_pixels, _ExtGtkText::first_line_start_index, _ExtGtkText::first_onscreen_ver_pixel, _ExtGtkText::gc, gtk_text_draw_focus(), last_visible_line_height(), LINE_HEIGHT, _ExtGtkText::line_start_cache, MIN, process_exposes(), and _ExtGtkText::text_area. Referenced by gtk_text_adjustment().
05027 { 05028 gint real_diff = 0; 05029 GdkRectangle rect; 05030 gint width, height; 05031 05032 text->first_onscreen_ver_pixel += diff0; 05033 05034 while (diff0++ < 0) 05035 { 05036 g_assert (text->line_start_cache); 05037 05038 if (text->first_cut_pixels > 0) 05039 { 05040 text->first_cut_pixels -= 1; 05041 } 05042 else 05043 { 05044 if (!text->line_start_cache->prev) 05045 fetch_lines_backward (text); 05046 05047 text->line_start_cache = text->line_start_cache->prev; 05048 05049 text->first_line_start_index = 05050 CACHE_DATA(text->line_start_cache).start.index; 05051 05052 text->first_cut_pixels = LINE_HEIGHT(CACHE_DATA(text->line_start_cache)) - 1; 05053 } 05054 05055 real_diff += 1; 05056 } 05057 05058 gdk_window_get_size (text->text_area, &width, &height); 05059 if (height > real_diff) 05060 gdk_draw_pixmap (text->text_area, 05061 text->gc, 05062 text->text_area, 05063 0, 05064 0, 05065 0, 05066 real_diff, 05067 width, 05068 height - real_diff); 05069 05070 rect.x = 0; 05071 rect.y = 0; 05072 rect.width = width; 05073 rect.height = MIN (height, real_diff); 05074 05075 expose_text (text, &rect, FALSE); 05076 gtk_text_draw_focus ( (GtkWidget *) text); 05077 05078 if (text->current_line) 05079 { 05080 gint cursor_max; 05081 gint height; 05082 05083 text->cursor_pos_y += real_diff; 05084 cursor_max = drawn_cursor_max(text); 05085 gdk_window_get_size (text->text_area, NULL, &height); 05086 05087 if (cursor_max >= height) 05088 find_mouse_cursor (text, text->cursor_pos_x, 05089 last_visible_line_height (text)); 05090 } 05091 05092 if (height > real_diff) 05093 process_exposes (text); 05094 } |
|
Definition at line 4859 of file extgtktext.c. References find_mark(), KEY_SCROLL_PIXELS, _SetVerticalScrollData::last_didnt_wrap, _ExtGtkText::last_ver_value, line_params_iterate(), _SetVerticalScrollData::mark, MIN, _SetVerticalScrollData::pixel_height, SCROLL_PIXELS, set_vertical_scroll_find_iterator(), set_vertical_scroll_iterator(), _ExtGtkText::text_area, and _ExtGtkText::vadj. Referenced by recompute_geometry().
04860 { 04861 ExtGtkPropertyMark mark = find_mark (text, 0); 04862 SetVerticalScrollData data; 04863 gint height; 04864 gint orig_value; 04865 04866 data.pixel_height = 0; 04867 line_params_iterate (text, &mark, NULL, FALSE, &data, set_vertical_scroll_iterator); 04868 04869 text->vadj->upper = (float) data.pixel_height; 04870 orig_value = (gint) text->vadj->value; 04871 04872 gdk_window_get_size (text->text_area, NULL, &height); 04873 04874 text->vadj->step_increment = MIN (text->vadj->upper, (float) SCROLL_PIXELS); 04875 text->vadj->page_increment = MIN (text->vadj->upper, height - (float) KEY_SCROLL_PIXELS); 04876 text->vadj->page_size = MIN (text->vadj->upper, height); 04877 text->vadj->value = MIN (text->vadj->value, text->vadj->upper - text->vadj->page_size); 04878 text->vadj->value = MAX (text->vadj->value, 0.0); 04879 04880 text->last_ver_value = (gint)text->vadj->value; 04881 04882 gtk_signal_emit_by_name (GTK_OBJECT (text->vadj), "changed"); 04883 04884 if (text->vadj->value != orig_value) 04885 { 04886 /* We got clipped, and don't really know which line to put first. */ 04887 data.pixel_height = 0; 04888 data.last_didnt_wrap = TRUE; 04889 04890 line_params_iterate (text, &mark, NULL, 04891 FALSE, &data, 04892 set_vertical_scroll_find_iterator); 04893 } 04894 04895 return data.mark; 04896 } |
|
Definition at line 4832 of file extgtktext.c. References _ExtGtkText::first_cut_pixels, _ExtGtkText::first_line_start_index, _ExtGtkText::first_onscreen_ver_pixel, _ExtGtkPropertyMark::index, LINE_HEIGHT, _SetVerticalScrollData::mark, _SetVerticalScrollData::pixel_height, _LineParams::start, and _ExtGtkText::vadj. Referenced by set_vertical_scroll().
04833 { 04834 SetVerticalScrollData *svdata = (SetVerticalScrollData *) data; 04835 gint return_val; 04836 04837 if (svdata->pixel_height <= (gint) text->vadj->value && 04838 svdata->pixel_height + LINE_HEIGHT(*lp) > (gint) text->vadj->value) 04839 { 04840 svdata->mark = lp->start; 04841 04842 text->first_cut_pixels = (gint)text->vadj->value - svdata->pixel_height; 04843 text->first_onscreen_ver_pixel = svdata->pixel_height; 04844 text->first_line_start_index = lp->start.index; 04845 04846 return_val = TRUE; 04847 } 04848 else 04849 { 04850 svdata->pixel_height += LINE_HEIGHT (*lp); 04851 04852 return_val = FALSE; 04853 } 04854 04855 return return_val; 04856 } |
|
Definition at line 4804 of file extgtktext.c. References set_vertical_scroll_iterator(). Referenced by set_vertical_scroll(), and set_vertical_scroll_iterator().
04805 { 04806 SetVerticalScrollData *svdata = (SetVerticalScrollData *) data; 04807 04808 if ((text->first_line_start_index >= lp->start.index) && 04809 (text->first_line_start_index <= lp->end.index)) 04810 { 04811 svdata->mark = lp->start; 04812 04813 if (text->first_line_start_index == lp->start.index) 04814 { 04815 text->first_onscreen_ver_pixel = svdata->pixel_height + text->first_cut_pixels; 04816 } 04817 else 04818 { 04819 text->first_onscreen_ver_pixel = svdata->pixel_height; 04820 text->first_cut_pixels = 0; 04821 } 04822 04823 text->vadj->value = (float) text->first_onscreen_ver_pixel; 04824 } 04825 04826 svdata->pixel_height += LINE_HEIGHT (*lp); 04827 04828 return FALSE; 04829 } |
|
Definition at line 2809 of file extgtktext.c. References CACHE_DATA, _ExtGtkText::line_start_cache, _ExtGtkText::line_wrap, and remove_cache_line(). Referenced by delete_expose(), and insert_expose().
02810 { 02811 if (old == text->line_start_cache) 02812 { 02813 GList* last; 02814 02815 for (; old_line_count > 0; old_line_count -= 1) 02816 { 02817 while (text->line_start_cache && 02818 text->line_wrap && 02819 CACHE_DATA(text->line_start_cache).wraps) 02820 remove_cache_line(text, text->line_start_cache); 02821 02822 remove_cache_line(text, text->line_start_cache); 02823 } 02824 02825 last = g_list_last (new); 02826 02827 last->next = text->line_start_cache; 02828 02829 if (text->line_start_cache) 02830 text->line_start_cache->prev = last; 02831 02832 text->line_start_cache = new; 02833 } 02834 else 02835 { 02836 GList *last; 02837 02838 g_assert (old->prev); 02839 02840 last = old->prev; 02841 02842 for (; old_line_count > 0; old_line_count -= 1) 02843 { 02844 while (old && text->line_wrap && CACHE_DATA(old).wraps) 02845 old = remove_cache_line (text, old); 02846 02847 old = remove_cache_line (text, old); 02848 } 02849 02850 last->next = new; 02851 new->prev = last; 02852 02853 last = g_list_last (new); 02854 02855 last->next = old; 02856 02857 if (old) 02858 old->prev = last; 02859 } 02860 } |
|
Definition at line 3240 of file extgtktext.c. References font_cache_table, _ExtGtkTextFont::gdk_font, and _ExtGtkTextFont::ref_count. Referenced by destroy_text_property(), gtk_text_finalize(), gtk_text_style_set(), and text_properties_equal().
03241 { 03242 text_font->ref_count--; 03243 if (text_font->ref_count == 0) 03244 { 03245 g_hash_table_remove (font_cache_table, text_font->gdk_font); 03246 #ifndef HAVE_LIBXFT 03247 gdk_font_unref (text_font->gdk_font); 03248 #endif 03249 g_free (text_font); 03250 } 03251 } |
|
Definition at line 3254 of file extgtktext.c. References _TextProperty::back_color, DataFunc, _TextProperty::flags, _TextProperty::font, _TextProperty::fore_color, get_text_font(), _TextProperty::image, PROPERTY_BACKGROUND, PROPERTY_DATA, PROPERTY_DIVIDER, PROPERTY_FONT, PROPERTY_FOREGROUND, PROPERTY_IMAGE, PROPERTY_UNDERLINED, text_font_unref(), _TextProperty::user_data, and VFont. Referenced by insert_text_property().
03259 { 03260 if (prop->flags & PROPERTY_FONT) 03261 { 03262 gboolean retval; 03263 ExtGtkTextFont *text_font; 03264 03265 if (!font) 03266 return FALSE; 03267 03268 text_font = get_text_font (font); 03269 03270 retval = (prop->font == text_font); 03271 text_font_unref (text_font); 03272 03273 if (!retval) 03274 return FALSE; 03275 } 03276 else 03277 if (font != NULL) 03278 return FALSE; 03279 03280 if (prop->flags & PROPERTY_FOREGROUND) 03281 { 03282 if (!fore || !gdk_color_equal (&prop->fore_color, fore)) 03283 return FALSE; 03284 } 03285 else 03286 if (fore != NULL) 03287 return FALSE; 03288 03289 if (prop->flags & PROPERTY_BACKGROUND) 03290 { 03291 if (!back || !gdk_color_equal (&prop->back_color, back)) 03292 return FALSE; 03293 } 03294 else 03295 if (back != NULL) 03296 return FALSE; 03297 03298 if (((prop->flags & PROPERTY_UNDERLINED)?TRUE:FALSE)!=underlined) 03299 return FALSE; 03300 03301 if (((prop->flags & PROPERTY_DIVIDER)?TRUE:FALSE)!=divider) 03302 return FALSE; 03303 03304 if (prop->flags & PROPERTY_IMAGE) 03305 { 03306 if (image != prop->image) 03307 return FALSE; 03308 } 03309 else 03310 if (image !=NULL) 03311 return FALSE; 03312 03313 if (prop->flags & PROPERTY_DATA) 03314 { 03315 if (memcmp(prop->user_data, user_data,user_data_length)!=0) 03316 return FALSE; 03317 } 03318 else 03319 if (user_data!=NULL) 03320 return FALSE; 03321 03322 return TRUE; 03323 } |
|
Definition at line 2790 of file extgtktext.c. References CACHE_DATA, fetch_lines_forward(), LINE_HEIGHT, and _ExtGtkText::line_wrap. Referenced by delete_expose(), ext_gtk_text_insert_alltypes(), and insert_expose().
02791 { 02792 gint height = 0; 02793 02794 for (; line && line_count > 0; line = line->next) 02795 { 02796 height += LINE_HEIGHT(CACHE_DATA(line)); 02797 02798 if (!text->line_wrap || !CACHE_DATA(line).wraps) 02799 line_count -= 1; 02800 02801 if (!line->next) 02802 fetch_lines_forward (text, line_count); 02803 } 02804 02805 return height; 02806 } |
|
|
Definition at line 3363 of file extgtktext.c. References _ExtGtkText::text_properties, and unrealize_property(). Referenced by gtk_text_unrealize().
03364 { 03365 GList *tmp_list = text->text_properties; 03366 03367 while (tmp_list) 03368 { 03369 unrealize_property (text, tmp_list->data); 03370 03371 tmp_list = tmp_list->next; 03372 } 03373 } |
|
Definition at line 3351 of file extgtktext.c. References _TextProperty::back_color, _TextProperty::flags, _TextProperty::fore_color, PROPERTY_BACKGROUND, and PROPERTY_FOREGROUND. Referenced by delete_text_property(), insert_text_property(), and unrealize_properties().
03352 { 03353 GdkColormap *colormap = gtk_widget_get_colormap (GTK_WIDGET (text)); 03354 03355 if (prop->flags & PROPERTY_FOREGROUND) 03356 gdk_colormap_free_colors (colormap, &prop->fore_color, 1); 03357 03358 if (prop->flags & PROPERTY_BACKGROUND) 03359 gdk_colormap_free_colors (colormap, &prop->back_color, 1); 03360 } |
|
Initial value: { NULL, (GtkTextFunction)gtk_text_move_backward_word, NULL, (GtkTextFunction)gtk_text_delete_forward_word, NULL, (GtkTextFunction)gtk_text_move_forward_word, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, } Definition at line 553 of file extgtktext.c. Referenced by gtk_text_key_press(). |
|
Initial value: { (GtkTextFunction)gtk_text_move_beginning_of_line, (GtkTextFunction)gtk_text_move_backward_character, (GtkTextFunction)gtk_editable_copy_clipboard, (GtkTextFunction)gtk_text_delete_forward_character, (GtkTextFunction)gtk_text_move_end_of_line, (GtkTextFunction)gtk_text_move_forward_character, NULL, (GtkTextFunction)gtk_text_delete_backward_character, NULL, NULL, (GtkTextFunction)gtk_text_delete_to_line_end, NULL, NULL, (GtkTextFunction)gtk_text_move_next_line, NULL, (GtkTextFunction)gtk_text_move_previous_line, NULL, NULL, NULL, NULL, (GtkTextFunction)gtk_text_delete_line, (GtkTextFunction)gtk_editable_paste_clipboard, (GtkTextFunction)gtk_text_delete_backward_word, (GtkTextFunction)gtk_editable_cut_clipboard, NULL, NULL, } Definition at line 523 of file extgtktext.c. Referenced by gtk_text_key_press(). |
|
Definition at line 3166 of file extgtktext.c. Referenced by get_text_font(), and text_font_unref(). |
|
Definition at line 514 of file extgtktext.c. Referenced by free_cache(), gtk_text_init(), line_params_iterate(), and remove_cache_line(). |
|
Definition at line 517 of file extgtktext.c. Referenced by gtk_text_class_init(), gtk_text_destroy(), gtk_text_finalize(), and gtk_text_unrealize(). |
|
Definition at line 515 of file extgtktext.c. Referenced by destroy_text_property(), and new_text_property(). |