summaryrefslogtreecommitdiff
path: root/src/gtkext/gtkdisplaypanel-int.h
blob: bc0e22977daea7ebc1006f2cd970e8ed8aee8bf3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150

/* Chrysalide - Outil d'analyse de fichiers binaires
 * gtkdisplaypanel-int.h - définitions internes propre à l'affichage de contenu de binaire
 *
 * Copyright (C) 2010-2014 Cyrille Bagard
 *
 *  This file is part of Chrysalide.
 *
 *  Chrysalide is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  Chrysalide is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
 */


#ifndef _GTK_DISPLAYPANEL_INT_H
#define _GTK_DISPLAYPANEL_INT_H


#include "gtkdisplaypanel.h"


#include <stdbool.h>
#include <gtk/gtk.h>



/* Prend acte de l'association d'un binaire chargé. */
typedef void (* attach_binary_fc) (GtkDisplayPanel *, GLoadedBinary *);

/* Indique les dimensions de travail du composant d'affichage. */
typedef void (* compute_requested_size_fc) (GtkDisplayPanel *, gint *, gint *);

/* Détermine la taille des bonds lors de défilements. */
typedef void (* compute_scroll_inc_fc) (GtkDisplayPanel *, gint, GtkOrientation, gdouble *, gdouble *);

/* Réagit à un défilement chez une barre associée au composant. */
typedef void (* adjust_scroll_value_fc) (GtkDisplayPanel *, GtkAdjustment *, GtkOrientation);

/* Réagit à la sélection externe d'une adresse. */
typedef void (* define_address_fc) (GtkDisplayPanel *, const vmpa2t *);

/* Actualise les besoins internes avant un redimensionnement. */
typedef void (* prepare_resize_fc) (GtkDisplayPanel *);

/* Indique la position courante du curseur. */
typedef const vmpa2t * (* get_caret_location_fc) (const GtkDisplayPanel *);

/* Indique la position d'affichage d'une adresse donnée. */
typedef bool (* get_addr_coordinates_fc) (const GtkDisplayPanel *, const vmpa2t *, gint *, gint *, ScrollPositionTweak);

/* Fournit des éléments liés à la position courante dans la vue. */
typedef bool (* get_view_position_fc) (const GtkDisplayPanel *, GBufferLine **, GObject **);

/* Déplace le curseur à un emplacement défini. */
typedef bool (* move_caret_to_fc) (GtkDisplayPanel *, gint, gint);

/* Place en cache un rendu destiné à l'aperçu graphique rapide. */
typedef void (* cache_glance_fc) (GtkDisplayPanel *, cairo_t *, const GtkAllocation *, double);



/* Composant d'affichage générique (instance) */
struct _GtkDisplayPanel
{
    GtkFixed parent;                        /* A laisser en premier        */

    GtkAdjustment *hadjustment;             /* Barre de défilement horiz.  */
    GtkAdjustment *vadjustment;             /* Barre de défilement vert.   */
    GtkScrollablePolicy hscroll_policy;     /* Politique horizontale       */           
    GtkScrollablePolicy vscroll_policy;     /* Politique verticale         */           

    bool show_border;                       /* Affichage d'une bordure ?   */
    BinaryView content;                     /* Type de contenu             */
    const bool *display;                    /* Affichage des colonnes ?    */

    GLoadedBinary *binary;                  /* Binaire à visualiser        */

    //define_address_fc define;               /* Centrage sur une partie     */
    prepare_resize_fc resize;               /* Prépare une nouvelle taille */

};

/* Composant d'affichage générique (classe) */
struct _GtkDisplayPanelClass
{
    GtkFixedClass parent;                   /* A laisser en premier        */

    attach_binary_fc attach;                /* Association avec un binaire */
    compute_requested_size_fc compute_size; /* Calcul de la taille requise */
    compute_scroll_inc_fc compute_inc;      /* Calcul des bonds            */
    adjust_scroll_value_fc adjust;          /* Réaction à un défilement    */
    define_address_fc define;               /* Centrage sur une partie     */
    get_caret_location_fc get_caret_loc;    /* Adresse du curseur          */
    get_addr_coordinates_fc get_coordinates;/* Conversion adresse <-> pos. */
    get_view_position_fc get_position;      /* Indications sur la position */
    move_caret_to_fc move_caret_to;         /* Déplacement du curseur      */
    cache_glance_fc cache_glance;           /* Cache de la mignature       */

    /* Signaux */

    void (* move_request) (GtkDisplayPanel *, const vmpa2t *);

    void (* caret_moved) (GtkDisplayPanel *, const vmpa2t *);

};

/* Propriétés propres au composant d'affichage */
typedef enum _ViewPanelProps
{
    VPP_0,
    VPP_HADJUSTMENT,
    VPP_VADJUSTMENT,
    VPP_HSCROLL_POLICY,
    VPP_VSCROLL_POLICY

} ViewPanelProps;


/* Définit un chemin décrivant la bordure autour du panneau. */
void gtk_display_panel_define_border_path(GtkDisplayPanel *, cairo_t *, gint, gint);

/* Dessine si besoin est une bordure autour du composant. */
void gtk_display_panel_draw_border(GtkDisplayPanel *, cairo_t *);



/* --------------------------- CONVERSIONS DE COORDONNEES --------------------------- */


/* Transcrit les coordonnées à l'écran en coordonnées absolues. */
void gtk_display_panel_compute_fake_coord(GtkDisplayPanel *, gint *, gint *);

/* Transcrit les coordonnées absolues en coordonnées à l'écran. */
void gtk_display_panel_compute_real_coord(GtkDisplayPanel *, gint *, gint *);

/* Transcrit les coordonnées absolues en coordonnées à l'écran. */
void gtk_display_panel_compute_relative_coords(GtkDisplayPanel *, gint *, gint *);



#endif  /* _GTK_DISPLAYPANEL_INT_H */