diff options
Diffstat (limited to 'src/glibext')
| -rw-r--r-- | src/glibext/gbufferline.h | 3 | ||||
| -rw-r--r-- | src/glibext/gcodebuffer.c | 111 | ||||
| -rw-r--r-- | src/glibext/gcodebuffer.h | 12 | ||||
| -rw-r--r-- | src/glibext/gfontcache.h | 2 | 
4 files changed, 58 insertions, 70 deletions
diff --git a/src/glibext/gbufferline.h b/src/glibext/gbufferline.h index 2a46b5a..7b063ac 100644 --- a/src/glibext/gbufferline.h +++ b/src/glibext/gbufferline.h @@ -113,9 +113,6 @@ typedef enum _RenderingTagType  #define COL_MARGIN 23 -/* Accompagnement du dessin pour compléments */ -typedef void (* buffer_line_draw_fc) (GBufferLine *, GdkDrawable *, GdkGC *, gint, gint, void *); -  /* Détermine le type de la représentation de fragments de texte en ligne. */  GType g_buffer_line_get_type(void); 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); -  } diff --git a/src/glibext/gcodebuffer.h b/src/glibext/gcodebuffer.h index 4ae5c58..e2ff8b0 100644 --- a/src/glibext/gcodebuffer.h +++ b/src/glibext/gcodebuffer.h @@ -121,8 +121,11 @@ GCodeBuffer *g_buffer_view_get_buffer(const GBufferView *);  /* Fournit la hauteur d'impression d'une ligne visualisée. */  gint g_buffer_view_get_line_height(GBufferView *); -/* Fournit les dimensions requises par une visualisation. */ -void g_buffer_view_get_size(GBufferView *, gint *, gint *, bool, bool); +/* Fournit la largeur requise par une visualisation. */ +gint g_buffer_view_get_width(GBufferView *, bool, bool); + +/* Fournit la hauteur requise par une visualisation. */ +gint g_buffer_view_get_height(const GBufferView *);  /* Calcule la position idéale de curseur pour un point donné. */  vmpa_t g_buffer_view_compute_caret(GBufferView *, gint, gint, GdkRectangle *); @@ -136,11 +139,8 @@ bool g_buffer_view_unhighlight_segments(GBufferView *);  /* Surligne tous les segments similaires à celui sous la souris. */  void g_buffer_view_highlight_segments(GBufferView *, gint, gint); -/* Définit à une procédure à appeler lors des dessins de ligne. */ -void g_buffer_view_define_extra_drawing(GBufferView *, buffer_line_draw_fc, void *); -  /* Imprime la visualisation du tampon de code désassemblé. */ -void g_buffer_view_draw(const GBufferView *, const GdkEventExpose *, GdkGC *, gint, gint, bool, bool); +void g_buffer_view_draw(const GBufferView *, cairo_t *, gint, gint, const cairo_rectangle_int_t *, bool, bool);  /* Fournit la ligne présente à une ordonnée donnée. */  GBufferLine *g_buffer_view_find_line_at(GBufferView *, gint, size_t *); diff --git a/src/glibext/gfontcache.h b/src/glibext/gfontcache.h index e6ef2d6..2132a34 100644 --- a/src/glibext/gfontcache.h +++ b/src/glibext/gfontcache.h @@ -27,7 +27,7 @@  #include <glib.h>  #include <glib-object.h> -#include <gtk/gtkwidget.h> +#include <gtk/gtk.h>  #include <pango/pango-context.h>  #include <pango/pango-font.h>  | 
