1 /* This file is part of the Linux Trace Toolkit viewer
2 * Copyright (C) 2003-2004 Mathieu Desnoyers
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License Version 2 as
6 * published by the Free Software Foundation;
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
23 #include <lttv/state.h>
25 typedef struct _DrawContext DrawContext
;
26 typedef struct _DrawInfo DrawInfo
;
27 typedef struct _ItemInfo ItemInfo
;
29 typedef struct _IconStruct IconStruct
;
31 typedef struct _DrawOperation DrawOperation
;
34 typedef struct _PropertiesText PropertiesText
;
35 typedef struct _PropertiesIcon PropertiesIcon
;
36 typedef struct _PropertiesLine PropertiesLine
;
37 typedef struct _PropertiesArc PropertiesArc
;
38 typedef struct _PropertiesBG PropertiesBG
;
40 typedef enum _DrawableItems DrawableItems
;
42 ITEM_TEXT
, ITEM_ICON
, ITEM_LINE
, ITEM_POINT
, ITEM_BACKGROUND
46 typedef enum _RelPos
{
51 /* The DrawContext keeps information about the current drawing position and
52 * the previous one, so we can use both to draw lines.
54 * over : position for drawing over the middle line.
55 * middle : middle line position.
56 * under : position for drawing under the middle line.
58 * the modify_* are used to take into account that we should go forward
59 * when we draw a text, an arc or an icon, while it's unneeded when we
60 * draw a line or background.
66 GdkDrawable
*drawable
;
68 PangoLayout
*pango_layout
;
74 /* LttvExecutionState is accessible through the LttvTracefileState. Is has
75 * a pointer to the LttvProcessState which points to the top of stack
76 * execution state : LttvExecutionState *state.
78 * LttvExecutionState contains (useful here):
79 * LttvExecutionMode t,
80 * LttvExecutionSubmode n,
84 * LttvTraceState will be used in the case we need the string of the
85 * different processes, eventtype_names, syscall_names, trap_names, irq_names.
87 * LttvTracefileState also gives the cpu_name and, as it herits from
88 * LttvTracefileContext, it gives the LttEvent structure, which is needed
89 * to get facility name and event name.
96 ItemInfo
*modify_over
;
97 ItemInfo
*modify_middle
;
98 ItemInfo
*modify_under
;
99 LttvProcessStatus status
;
107 * Structure used to keep information about icons.
116 * The Item element is only used so the DrawOperation is modifiable by users.
117 * During drawing, only the Hook is needed.
119 struct _DrawOperation
{
125 * We define here each items that can be drawn, together with their
126 * associated priority. Many item types can have the same priority,
127 * it's only used for quicksorting the operations when we add a new one
128 * to the array of operations to perform. Lower priorities are executed
129 * first. So, for example, we may want to give background color a value
130 * of 10 while a line would have 20, so the background color, which
131 * is in fact a rectangle, does not hide the line.
134 static int Items_Priorities
[] = {
139 10 /* ITEM_BACKGROUND */
143 * Here are the different structures describing each item type that can be
144 * drawn. They contain the information necessary to draw the item : not the
145 * position (this is provided by the DrawContext), but the text, icon name,
146 * line width, color; all the properties of the specific items.
149 struct _PropertiesText
{
150 GdkColor
*foreground
;
151 GdkColor
*background
;
158 struct _PropertiesIcon
{
165 struct _PropertiesLine
{
172 struct _PropertiesArc
{
174 gint size
; /* We force circle by width = height */
179 struct _PropertiesBG
{
185 void draw_item( GdkDrawable
*drawable
,
189 LttvTracefileState
*tfs
,
190 LttvIAttribute
*attributes
);
193 * The tree of attributes used to store drawing operations goes like this :
196 * "facility-event_type"
206 * So if, for example, we want to add a hook to get called each time we
207 * receive an event that is in state LTTV_STATE_SYSCALL, we put the
208 * pointer to the GArray of DrawOperation in
209 * process_states/ "name associated with LTTV_STATE_SYSCALL"
213 * The add_operation has to do a quick sort by priority to keep the operations
214 * in the right order.
216 void add_operation( LttvIAttribute
*attributes
,
218 DrawOperation
*operation
);
221 * The del_operation seeks the array present at pathname (if any) and
222 * removes the DrawOperation if present. It returns 0 on success, -1
225 gint
del_operation( LttvIAttribute
*attributes
,
227 DrawOperation
*operation
);
230 * The clean_operations removes all operations present at a pathname.
231 * returns 0 on success, -1 if it fails.
233 gint
clean_operations( LttvIAttribute
*attributes
,
238 * The list_operations gives a pointer to the operation array associated
239 * with the pathname. It will be NULL if no operation is present.
241 void list_operations( LttvIAttribute
*attributes
,
248 * exec_operation executes the operations if present in the attributes, or
249 * do nothing if not present.
251 void exec_operations( LttvIAttribute
*attributes
,
256 * Functions to create Properties structures.
259 PropertiesText
*properties_text_create(
260 GdkColor
*foreground
,
261 GdkColor
*background
,
266 PropertiesIcon
*properties_icon_create(
272 PropertiesLine
*properties_line_create(
278 PropertiesArc
*properties_arc_create(
284 PropertiesBG
*properties_bg_create(
291 * Here follow the prototypes of the hook functions used to draw the
295 gboolean
draw_text( void *hook_data
, void *call_data
);
296 gboolean
draw_icon( void *hook_data
, void *call_data
);
297 gboolean
draw_line( void *hook_data
, void *call_data
);
298 gboolean
draw_arc( void *hook_data
, void *call_data
);
299 gboolean
draw_bg( void *hook_data
, void *call_data
);
302 #endif // _DRAW_ITEM_H