summaryrefslogtreecommitdiff
path: root/src/glibext/gcodebuffer.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2014-01-26 23:00:18 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2014-01-26 23:00:18 (GMT)
commit84790a5b420d0a9ce658013573b180ce059db325 (patch)
tree5000d25a0d5ede63e671364e1e017fbb6674b5f5 /src/glibext/gcodebuffer.c
parentabb191e42e356914bd09176a6d6c5bf89ec50bbf (diff)
Saved the first steps of the migration to GTK+ v3.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@367 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/glibext/gcodebuffer.c')
-rw-r--r--src/glibext/gcodebuffer.c111
1 files changed, 51 insertions, 60 deletions
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c
index 70064e3..8a70ad5 100644
--- a/src/glibext/gcodebuffer.c
+++ b/src/glibext/gcodebuffer.c
@@ -151,8 +151,6 @@ struct _GBufferView
gint last_width; /* Plus grande col. de fusion */
BufferLineColumn last_merge; /* Colonne de fusion extrême */
- buffer_line_draw_fc drawing_extra; /* Fonction d'accompagnement */
- void *drawing_data; /* Donnée utilisateur */
GSList *highlighted; /* Segments mis en évidence */
};
@@ -978,33 +976,29 @@ gint g_buffer_view_get_line_height(GBufferView *view)
/******************************************************************************
* *
-* Paramètres : view = visualisation à consulter. *
-* width = largeur requise pour une pleine visualisation. [OUT]*
-* height = hauteur requise pour une pleine visualisation. [OUT]*
-* addr = indique si les positions doivent être affichées. *
-* code = indique si le code binaire doit être affiché. *
+* Paramètres : view = visualisation à consulter. *
+* addr = indique si les positions doivent être affichées. *
+* code = indique si le code binaire doit être affiché. *
* *
-* Description : Fournit les dimensions requises par une visualisation. *
+* Description : Fournit la largeur requise par une visualisation. *
* *
-* Retour : - *
+* Retour : Dimension calculée. *
* *
* Remarques : - *
* *
******************************************************************************/
-void g_buffer_view_get_size(GBufferView *view, gint *width, gint *height, bool addr, bool code)
+gint g_buffer_view_get_width(GBufferView *view, bool addr, bool code)
{
+ gint result; /* Taille à retourner */
gint col_width; /* Calcul selon les colonnes */
gint full_width; /* Calcul selon les fusions */
BufferLineColumn i; /* Boucle de parcours */
- size_t first; /* Première ligne intégrée */
- size_t last; /* Dernière ligne intégrée */
if (!WIDTHS_CACHED(view))
g_buffer_view_compute_required_widths(view, addr, code);
- *width = view->left_text;
- *height = view->line_height;
+ result = view->left_text;
col_width = 0;
full_width = 0;
@@ -1041,12 +1035,40 @@ void g_buffer_view_get_size(GBufferView *view, gint *width, gint *height, bool a
/* Mise en concurrence et poursuite... */
- *width += + MAX(col_width, full_width);
+ result += + MAX(col_width, full_width);
+
+ return result;
+
+}
+
+
+
+/******************************************************************************
+* *
+* Paramètres : view = visualisation à consulter. *
+* *
+* Description : Fournit la hauteur requise par une visualisation. *
+* *
+* Retour : Dimension calculée. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+gint g_buffer_view_get_height(const GBufferView *view)
+{
+ gint result; /* Taille à retourner */
+ size_t first; /* Première ligne intégrée */
+ size_t last; /* Dernière ligne intégrée */
+
+ result = view->line_height;
first = g_code_buffer_get_index_from_address(view->buffer, view->start, true);
last = g_code_buffer_get_index_from_address(view->buffer, view->end, false);
- *height *= (last - first + 1);
+ result *= (last - first + 1);
+
+ return result;
}
@@ -1146,6 +1168,8 @@ vmpa_t g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, bool ctr
for (i = BLC_ASSEMBLY_HEAD; i < BLC_COUNT; i++)
right_pos += view->max_widths[i] + COL_MARGIN;
break;
+ default: /* GDK_SCROLL_SMOOTH */
+ break;
}
first = g_code_buffer_get_index_from_address(view->buffer, view->start, true);
@@ -1207,6 +1231,9 @@ vmpa_t g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, bool ctr
break;
+ default: /* GDK_SCROLL_SMOOTH */
+ break;
+
}
if (result && !computed)
@@ -1324,33 +1351,11 @@ void g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y)
/******************************************************************************
* *
-* Paramètres : view = visualisation à mettre à jour. *
-* method = procédure à appeler à chaque dessin de ligne. *
-* data = donnée utilisateur à passer lors des appels. *
-* *
-* Description : Définit à une procédure à appeler lors des dessins de ligne. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_buffer_view_define_extra_drawing(GBufferView *view, buffer_line_draw_fc method, void *data)
-{
- view->drawing_extra = method;
- view->drawing_data = data;
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : view = visualisation à représenter. *
-* event = informations liées à l'événement. *
-* gc = contexte graphique à utiliser pour les pinceaux. *
+* cr = contexte graphique dédié à la procédure. *
* fake_x = abscisse réelle du point 0 à l'écran. *
* fake_y = ordonnée réelle du point 0 à l'écran. *
+* area = position et surface à traiter. *
* addr = indique si les positions doivent être affichées. *
* code = indique si le code binaire doit être affiché. *
* *
@@ -1362,42 +1367,30 @@ void g_buffer_view_define_extra_drawing(GBufferView *view, buffer_line_draw_fc m
* *
******************************************************************************/
-void g_buffer_view_draw(const GBufferView *view, const GdkEventExpose *event, GdkGC *gc, gint fake_x, gint fake_y, bool addr, bool code)
+void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint fake_x, gint fake_y, const cairo_rectangle_int_t *area, bool addr, bool code)
{
- cairo_t *cairo; /* Gestionnaire de rendu */
gint real_x; /* Abscisse réelle pour tampon */
gint real_y; /* Ordonnée réelle pour tampon */
-
size_t first; /* Première ligne visée */
size_t end; /* Dernière ligne avant limite */
size_t last; /* Dernière ligne visée + 1 */
gint y; /* Point de départ + décallage */
-
-
GBufferLine **lines; /* Liste des lignes à traiter */
size_t i; /* Boucle de parcours */
-
- cairo = gdk_cairo_create(event->window);
-
- gdk_cairo_region(cairo, event->region);
- cairo_clip(cairo);
-
real_x = fake_x + view->left_text;
- real_y = fake_y + event->area.y;
-
-
+ real_y = fake_y + area->y;
first = g_code_buffer_get_index_from_address(view->buffer, view->start, true);
first += (real_y / view->line_height);
- last = first + (event->area.height / view->line_height);
- if (event->area.height % view->line_height > 0) last++;
+ last = first + (area->height / view->line_height);
+ if (area->height % view->line_height > 0) last++;
end = g_code_buffer_get_index_from_address(view->buffer, view->end, false);
last = MIN(last, end);
- y = event->area.y - (real_y % view->line_height);
+ y = area->y - (real_y % view->line_height);
lines = view->buffer->lines;
@@ -1410,15 +1403,13 @@ void g_buffer_view_draw(const GBufferView *view, const GdkEventExpose *event, Gd
view->drawing_extra(lines[i], drawable, gc, fake_x, y, view->drawing_data);
*/
- g_buffer_line_draw(lines[i], cairo, view->fcache,
+ g_buffer_line_draw(lines[i], cr, view->fcache,
view->max_widths, real_x, y, addr, code);
y += view->line_height;
}
- cairo_destroy(cairo);
-
}