source: branches/species/GL/glAW/AW_window_ogl.cxx

Last change on this file was 19704, checked in by westram, 4 days ago
  • window-local IDs
    • privatize fields (title + ID)
    • DRY generating code
    • sync names of methods
File size: 14.1 KB
Line 
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
41bool AW_alpha_Size_Supported = false;
42
43
44AW_window_menu_modes_opengl::AW_window_menu_modes_opengl() {
45}
46
47AW_window_menu_modes_opengl::~AW_window_menu_modes_opengl() {
48}
49
50void 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);
163    p_w->areas[AW_INFO_AREA] =
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
176    p_w->areas[AW_BOTTOM_AREA] =
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++;
266        AW_alpha_Size_Supported = true;
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
284    p_w->areas[AW_MIDDLE_AREA] = new AW_area_management(p_w->frame, glw);
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();
291    aw_insert_default_help_entries(this);
292    create_window_variables();
293}
294
295
296
Note: See TracBrowser for help on using the repository browser.