ARB
AW_window_ogl.cxx
Go to the documentation of this file.
1 // ============================================================= //
2 // //
3 // File : AW_window_ogl.cxx //
4 // Purpose : open gl window //
5 // //
6 // Institute of Microbiology (Technical University Munich) //
7 // http://www.arb-home.de/ //
8 // //
9 // ============================================================= //
10 
11 #include "aw_window_ogl.hxx"
12 
13 // Extended by Daniel Koitzsch & Christian Becker 19-05-04
14 
15 #ifndef ARB_OPENGL
16 #error only compiles in ARB_OPENGL mode
17 #endif // ARB_OPENGL
18 
19 #define GLX_GLXEXT_PROTOTYPES
20 
21 #include <aw_window_Xm.hxx>
22 #include <aw_root.hxx>
23 #include <arbdb.h>
24 
25 #include <Xm/Frame.h>
26 #include <Xm/RowColumn.h>
27 #include <Xm/DrawingA.h>
28 #include <Xm/Form.h>
29 #include <Xm/Separator.h>
30 #include <Xm/MainW.h>
31 #include <Xm/CascadeB.h>
32 #include <Xm/MenuShell.h>
33 #include <Xm/ScrollBar.h>
34 
35 #include <X11/IntrinsicP.h>
36 #include <X11/StringDefs.h>
37 
38 #include "GLwMDrawA.h" //* Provides a special motif widget class
39 
40 // defined here by Yadhu in order to make it more General
42 
43 
45 }
46 
48 }
49 
50 void AW_window_menu_modes_opengl::init(AW_root *root_in, const char *wid,
51  const char *windowname, int width, int height) {
52 
53  Widget main_window;
54  Widget help_popup;
55  Widget help_label;
56  Widget separator;
57  Widget form1;
58  Widget form2;
59  const char *help_button = "HELP";
60  const char *help_mnemonic = "H";
61 
62 #if defined(DUMP_MENU_LIST)
63  initMenuListing(windowname);
64 #endif // DUMP_MENU_LIST
65  root = root_in; // for macro
66  set_title_and_id(windowname, wid);
67 
68  int posx = 50;
69  int posy = 50;
70 
71  p_w->shell = aw_create_shell(this, true, true, width, height, posx, posy);
72 
73  main_window = XtVaCreateManagedWidget("mainWindow1",
74  xmMainWindowWidgetClass, p_w->shell,
75  NULp);
76 
77  p_w->menu_bar[0] = XtVaCreateManagedWidget("menu1", xmRowColumnWidgetClass,
78  main_window,
79  XmNrowColumnType, XmMENU_BAR,
80  NULp);
81 
82  // create shell for help-cascade
83  help_popup = XtVaCreatePopupShell("menu_shell", xmMenuShellWidgetClass,
84  p_w->menu_bar[0],
85  XmNwidth, 1,
86  XmNheight, 1,
87  XmNallowShellResize, true,
88  XmNoverrideRedirect, true,
89  NULp);
90 
91  // create row column in Pull-Down shell
92  p_w->help_pull_down = XtVaCreateWidget("menu_row_column",
93  xmRowColumnWidgetClass, help_popup,
94  XmNrowColumnType, XmMENU_PULLDOWN,
95  NULp);
96 
97  // create HELP-label in menu bar
98  help_label = XtVaCreateManagedWidget("menu1_top_b1",
99  xmCascadeButtonWidgetClass, p_w->menu_bar[0],
100  RES_CONVERT(XmNlabelString, help_button),
101  RES_CONVERT(XmNmnemonic, help_mnemonic),
102  XmNsubMenuId, p_w->help_pull_down, NULp);
103  XtVaSetValues(p_w->menu_bar[0], XmNmenuHelpWidget, help_label, NULp);
104  // insert help_label to button_list
105  root->make_sensitive(help_label, AWM_ALL);
106 
107  form1 = XtVaCreateManagedWidget("form1",
108  xmFormWidgetClass,
109  main_window,
110  XmNresizePolicy, XmRESIZE_NONE,
111  NULp);
112 
113  p_w->mode_area = XtVaCreateManagedWidget("mode area",
114  xmDrawingAreaWidgetClass,
115  form1,
116  XmNresizePolicy, XmRESIZE_NONE,
117  XmNwidth, 38,
118  XmNheight, height,
119  XmNx, 0,
120  XmNy, 0,
121  XmNleftOffset, 0,
122  XmNtopOffset, 0,
123  XmNbottomAttachment, XmATTACH_FORM,
124  XmNleftAttachment, XmATTACH_POSITION,
125  XmNtopAttachment, XmATTACH_POSITION,
126  XmNmarginHeight, 2,
127  XmNmarginWidth, 1,
128  NULp);
129 
130  separator = XtVaCreateManagedWidget("separator",
131  xmSeparatorWidgetClass,
132  form1,
133  XmNx, 37,
134  XmNshadowThickness, 4,
135  XmNorientation, XmVERTICAL,
136  XmNbottomAttachment, XmATTACH_FORM,
137  XmNtopAttachment, XmATTACH_FORM,
138  XmNleftAttachment, XmATTACH_NONE,
139  XmNleftWidget, NULp,
140  XmNrightAttachment, XmATTACH_NONE,
141  XmNleftOffset, 70,
142  XmNleftPosition, 0,
143  NULp);
144 
145  form2 = XtVaCreateManagedWidget("form2",
146  xmFormWidgetClass,
147  form1,
148  XmNwidth, width,
149  XmNheight, height,
150  XmNtopOffset, 0,
151  XmNbottomOffset, 0,
152  XmNleftOffset, 0,
153  XmNrightOffset, 0,
154  XmNrightAttachment, XmATTACH_FORM,
155  XmNbottomAttachment, XmATTACH_FORM,
156  XmNleftAttachment, XmATTACH_WIDGET,
157  XmNleftWidget, separator,
158  XmNtopAttachment, XmATTACH_POSITION,
159  XmNresizePolicy, XmRESIZE_NONE,
160  XmNx, 0,
161  XmNy, 0,
162  NULp);
164  new AW_area_management(form2, XtVaCreateManagedWidget("info_area",
165  xmDrawingAreaWidgetClass,
166  form2,
167  XmNheight, 0,
168  XmNbottomAttachment, XmATTACH_NONE,
169  XmNtopAttachment, XmATTACH_FORM,
170  XmNleftAttachment, XmATTACH_FORM,
171  XmNrightAttachment, XmATTACH_FORM,
172  XmNmarginHeight, 2,
173  XmNmarginWidth, 2,
174  NULp));
175 
177  new AW_area_management(form2, XtVaCreateManagedWidget("bottom_area",
178  xmDrawingAreaWidgetClass,
179  form2,
180  XmNheight, 0,
181  XmNbottomAttachment, XmATTACH_FORM,
182  XmNtopAttachment, XmATTACH_NONE,
183  XmNleftAttachment, XmATTACH_FORM,
184  XmNrightAttachment, XmATTACH_FORM,
185  NULp));
186 
187  p_w->scroll_bar_horizontal = XtVaCreateWidget("scroll_bar_horizontal",
188  xmScrollBarWidgetClass,
189  form2,
190  XmNheight, 15,
191  XmNminimum, 0,
192  XmNmaximum, AW_SCROLL_MAX,
193  XmNincrement, 10,
194  XmNsliderSize, AW_SCROLL_MAX,
195  XmNrightAttachment, XmATTACH_FORM,
196  XmNbottomAttachment, XmATTACH_FORM,
197  XmNbottomOffset, 0,
198  XmNleftAttachment, XmATTACH_FORM,
199  XmNtopAttachment, XmATTACH_NONE,
200  XmNorientation, XmHORIZONTAL,
201  XmNrightOffset, 18,
202  NULp);
203 
204  p_w->scroll_bar_vertical = XtVaCreateWidget("scroll_bar_vertical",
205  xmScrollBarWidgetClass,
206  form2,
207  XmNwidth, 15,
208  XmNminimum, 0,
209  XmNmaximum, AW_SCROLL_MAX,
210  XmNincrement, 10,
211  XmNsliderSize, AW_SCROLL_MAX,
212  XmNrightAttachment, XmATTACH_FORM,
213  XmNbottomAttachment, XmATTACH_WIDGET,
214  XmNbottomWidget, p_w->scroll_bar_horizontal,
215  XmNbottomOffset, 3,
216  XmNleftOffset, 3,
217  XmNrightOffset, 3,
218  XmNleftAttachment, XmATTACH_NONE,
219  XmNtopAttachment, XmATTACH_WIDGET,
220  XmNtopWidget, INFO_WIDGET,
221  NULp);
222 
223  p_w->frame = XtVaCreateManagedWidget("draw_area",
224  xmFrameWidgetClass,
225  form2,
226  XmNshadowType, XmSHADOW_IN,
227  XmNshadowThickness, 2,
228  XmNleftOffset, 3,
229  XmNtopOffset, 3,
230  XmNbottomOffset, 3,
231  XmNrightOffset, 3,
232  XmNtopOffset, 0,
233  NULp);
234 
235  Arg args[20];
236  int n;
237  Widget glw;
238  n = 0;
239 
240  XtSetArg(args[n], (char *) GLwNrgba, True); n++;
241  XtSetArg(args[n], (char *) GLwNallocateBackground, True); n++;
242  XtSetArg(args[n], (char *) GLwNallocateOtherColors, True); n++;
243  XtSetArg(args[n], (char *) GLwNdoublebuffer, True); n++;
244  XtSetArg(args[n], (char *) GLwNdepthSize, True); n++;
245  XtSetArg(args[n], (char *) GLwNredSize, 4); n++;
246  XtSetArg(args[n], (char *) GLwNgreenSize, 4); n++;
247  XtSetArg(args[n], (char *) GLwNblueSize, 4); n++;
248 
249  static int alpha_Attributes[] = { GLX_RGBA,
250  GLX_DEPTH_SIZE, 12,
251  GLX_RED_SIZE, 4,
252  GLX_GREEN_SIZE, 4,
253  GLX_BLUE_SIZE, 4,
254  GLX_ALPHA_SIZE, 4,
255  None };
256 
257  Widget tmp = XtCreateWidget("glw", glwMDrawingAreaWidgetClass,
258  form2, args, n);
259 
260  XVisualInfo *vi;
261  Display *dpy;
262  dpy = XtDisplay(tmp);
263  vi = glXChooseVisual(dpy, DefaultScreen(dpy), alpha_Attributes);
264  if (vi) {
265  XtSetArg(args[n], (char *) GLwNalphaSize, 4); n++;
267  printf("Alpha channel supported\n");
268  }
269  else {
270  AW_alpha_Size_Supported = false;
271  printf("Alpha channel NOT supported\n");
272  }
273 
274  XtSetArg(args[n], XmNmarginHeight, 0); n++;
275  XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
276  XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
277  XtSetArg(args[n], XmNtopWidget, p_w->areas[AW_INFO_AREA]->get_area()); n++;
278  XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
279  XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
280 
281  glw = XtCreateManagedWidget("glw", glwMDrawingAreaWidgetClass,
282  form2, args, n);
283 
285 
286  XmMainWindowSetAreas(main_window, p_w->menu_bar[0], (Widget) NULp, (Widget) NULp, (Widget) NULp, form1);
287 
288  aw_realize_widget(this);
289 
290  create_devices();
293 }
294 
295 
296 
void aw_realize_widget(AW_window *aww)
Definition: AW_window.cxx:2381
Widget menu_bar[AW_MAX_MENU_DEEP]
#define GLwNalphaSize
Definition: GLwDrawA.h:119
bool AW_alpha_Size_Supported
void create_window_variables()
Definition: AW_window.cxx:974
Widget get_area() const
Widget scroll_bar_horizontal
void create_devices()
Definition: AW_window.cxx:2117
AW_root * root
Definition: aw_window.hxx:275
#define GLwNdoublebuffer
Definition: GLwDrawA.h:109
#define GLwNredSize
Definition: GLwDrawA.h:115
void set_title_and_id(const char *title, const char *id)
Definition: AW_window.cxx:2395
#define GLwNallocateOtherColors
Definition: GLwDrawA.h:92
AW_area_management * areas[AW_MAX_AREA]
virtual void init(AW_root *root, const char *wid, const char *windowname, int width, int height)
#define INFO_WIDGET
Widget scroll_bar_vertical
static Display * dpy
Widget aw_create_shell(AW_window *aww, bool allow_resize, bool allow_close, int width, int height, int posx, int posy)
Definition: AW_window.cxx:2251
#define GLwNallocateBackground
Definition: GLwDrawA.h:91
#define GLwNblueSize
Definition: GLwDrawA.h:117
#define RES_CONVERT(res_name, res_value)
AW_window_Motif * p_w
Definition: aw_window.hxx:291
#define AW_SCROLL_MAX
void make_sensitive(Widget w, AW_active mask)
Definition: AW_window.cxx:3286
#define NULp
Definition: cxxforward.h:116
void aw_insert_default_help_entries(AW_window *aww)
Definition: AW_window.cxx:2132
#define GLwNdepthSize
Definition: GLwDrawA.h:121
#define GLwNgreenSize
Definition: GLwDrawA.h:116
#define GLwNrgba
Definition: GLwDrawA.h:107
struct _WidgetRec * Widget
Definition: aw_base.hxx:48