1 /* $Id$ $Revision$ */
2 /* vim:set shiftwidth=4 ts=8: */
3 
4 /*************************************************************************
5  * Copyright (c) 2011 AT&T Intellectual Property
6  * All rights reserved. This program and the accompanying materials
7  * are made available under the terms of the Eclipse Public License v1.0
8  * which accompanies this distribution, and is available at
9  * http://www.eclipse.org/legal/epl-v10.html
10  *
11  * Contributors: See CVS logs. Details at http://www.graphviz.org/
12  *************************************************************************/
13 
14 /* Krishnam Raju Pericherla */
15 
16 #include <gtk/gtk.h>
17 #include "common.h"
18 #include "g.h"
19 #include "gcommon.h"
20 #include "mem.h"
21 
22 int Gxfd;
23 GtkWidget *Groot;
24 GdkDisplay *Gdisplay;
25 int Gpopdownflag;
26 int Gscreenn;
27 int Gdepth;
28 Glazyq_t Glazyq;
29 
30 PIXpoint_t *Gppp;
31 int Gppn, Gppi;
32 
33 char *Gbufp = NULL;
34 int Gbufn = 0, Gbufi = 0;
35 
36 Gfont_t *Gfontp;
37 GdkFont *deffont;
38 int Gfontn;
39 
40 int argn;
41 
Ginitgraphics(void)42 int Ginitgraphics(void)
43 {
44 
45     gtk_init(0, NULL);
46 
47     Gpopdownflag = FALSE;
48     Gdisplay = gdk_display_get_default();
49     deffont = gdk_font_load("fixed");
50 
51     Gpopdownflag = FALSE;
52     Glazyq.flag = 0;
53     Gbufp = Marrayalloc((long) BUFINCR * BUFSIZE);
54     Gbufn = BUFINCR;
55     Gppp = Marrayalloc((long) PPINCR * PPSIZE);
56     Gppn = BUFINCR;
57     Gfontp = Marrayalloc((long) FONTSIZE);
58     Gfontn = 1;
59     Gfontp[0].name = strdup("default");
60     if (!Gdefaultfont)
61 	Gfontp[0].font = deffont;
62     else if (Gdefaultfont[0] != '\000')
63 	Gfontp[0].font = gdk_font_load(Gdefaultfont);
64     else
65 	Gfontp[0].font = NULL;
66     return 0;
67 }
68 
Gtermgraphics(void)69 int Gtermgraphics(void)
70 {
71     int fi;
72 
73     for (fi = 0; fi < Gfontn; fi++)
74 	free(Gfontp[fi].name);
75 
76     Marrayfree(Gfontp), Gfontp = NULL, Gfontn = 0;
77     Marrayfree(Gppp), Gppp = NULL, Gppn = 0;
78     Marrayfree(Gbufp), Gbufp = NULL, Gbufn = 0;
79 
80     return 0;
81 }
82 
Gflushlazyq(void)83 void Gflushlazyq(void)
84 {
85 
86 }
87 
Glazymanage(GtkWidget w)88 void Glazymanage(GtkWidget w)
89 {
90 
91 }
92 
Gsync(void)93 int Gsync(void)
94 {
95     if (Glazyq.flag)
96 	Gflushlazyq();
97     gdk_display_sync(Gdisplay);
98     return 0;
99 }
100 
Gresetbstate(int wi)101 int Gresetbstate(int wi)
102 {
103     Gcw_t *cw;
104     int bn;
105 
106     cw = Gwidgets[wi].u.c;
107     bn = cw->bstate[0] + cw->bstate[1] + cw->bstate[2];
108     cw->bstate[0] = cw->bstate[1] = cw->bstate[2] = 0;
109     cw->buttonsdown -= bn;
110     Gbuttonsdown -= bn;
111     return 0;
112 }
113 
Gprocessevents(int waitflag,Geventmode_t mode)114 int Gprocessevents(int waitflag, Geventmode_t mode)
115 {
116     int rtn;
117 
118     if (Glazyq.flag)
119 	Gflushlazyq();
120     rtn = 0;
121     switch (waitflag) {
122     case TRUE:
123 	gtk_main_iteration();
124 	if (mode == G_ONEEVENT)
125 	    return 1;
126 	rtn = 1;
127     case FALSE:
128 	while (gtk_events_pending()) {
129 	    gtk_main_iteration();
130 	    if (mode == G_ONEEVENT)
131 		return 1;
132 	    rtn = 1;
133 	}
134 	break;
135     }
136     return rtn;
137 }
138