![]() ![]() | ![]() |
1.1 bertrand 1: /*
2: ================================================================================
1.16 ! bertrand 3: RPL/2 (R) version 4.0.21
1.15 bertrand 4: Copyright (C) 1989-2011 Dr. BERTRAND Joël
1.1 bertrand 5:
6: This file is part of RPL/2.
7:
8: RPL/2 is free software; you can redistribute it and/or modify it
9: under the terms of the CeCILL V2 License as published by the french
10: CEA, CNRS and INRIA.
11:
12: RPL/2 is distributed in the hope that it will be useful, but WITHOUT
13: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14: FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL V2 License
15: for more details.
16:
17: You should have received a copy of the CeCILL License
18: along with RPL/2. If not, write to info@cecill.info.
19: ================================================================================
20: */
21:
22:
1.11 bertrand 23: #include "rpl-conv.h"
1.1 bertrand 24:
25: #ifdef MOTIF_SUPPORT
26: # include <X11/Xlib.h>
27: # include <Xm/XmAll.h>
28: # include <X11/xpm.h>
29: #endif
30:
31:
32: void
33: encart(struct_processus *s_etat_processus, unsigned long duree)
34: {
35: # ifdef MOTIF_SUPPORT
36: # include "rpl.xpm"
37:
38: Display *display;
39:
40: int argc;
41: int erreur;
42: int hauteur;
43: int hauteur_xpm;
44: int largeur;
45: int largeur_xpm;
46:
47: Pixel couleur_arriere_plan;
48: Pixel couleur_avant_plan;
49:
50: Pixmap pixmap_rpl;
51: Pixmap pixmap_rpl_masque;
52:
53: Position hauteur_popup;
54: Position largeur_popup;
55:
56: String *argv;
57:
58: struct timespec attente;
59:
60: struct timeval temps_ecoule;
61: struct timeval horodatage_initial;
62: struct timeval horodatage_final;
63:
64: unsigned long decor;
65: unsigned long fonctions;
66:
67: Widget cadre;
68: Widget form;
69: Widget objet_principal;
70: Widget pixmap;
71:
72: XEvent evenement;
73:
74: XtAppContext app;
75:
76: if (strstr(XmVERSION_STRING, "LessTif") != NULL)
77: {
78: printf("Lesstif is broken, please consider an upgrade to OpenMotif.\n");
79: return;
80: }
81:
82: argc = 0;
83: argv = NULL;
84:
85: display = XOpenDisplay(NULL);
86:
87: // Si display est nul, il n'y pas de serveur X.
88:
89: if (display != NULL)
90: {
91: XCloseDisplay(display);
92:
93: objet_principal = XtVaOpenApplication(&app, "rpl",
94: NULL, 0, &argc, argv, NULL, topLevelShellWidgetClass, NULL);
95: XSynchronize(XtDisplay(objet_principal), False);
96:
97: form = XtVaCreateManagedWidget("rplSplashScreen",
98: xmFormWidgetClass, objet_principal,
99: NULL);
100:
101: cadre = XtVaCreateManagedWidget("rplExternalFrame",
102: xmFrameWidgetClass, form,
103: XmNtopAttachment, XmATTACH_FORM,
104: XmNbottomAttachment, XmATTACH_FORM,
105: XmNleftAttachment, XmATTACH_FORM,
106: XmNrightAttachment, XmATTACH_FORM,
107: XmNtopOffset, 5,
108: XmNleftOffset, 5,
109: XmNrightOffset, 5,
110: XmNbottomOffset, 5,
111: XmNmarginWidth, 5,
112: XmNmarginHeight, 5,
113: NULL);
114:
115: XtVaGetValues(form,
116: XmNforeground, &couleur_avant_plan,
117: XmNbackground, &couleur_arriere_plan,
118: NULL);
119:
120: if ((erreur = XCreatePixmapFromData(XtDisplay(form),
121: DefaultRootWindow(XtDisplay(form)), rpl_xpm,
122: &pixmap_rpl, &pixmap_rpl_masque, NULL)) != 0)
123: {
124: (*s_etat_processus).erreur_systeme = d_es_allocation_memoire;
125: return;
126: }
127:
128: pixmap = XtVaCreateManagedWidget("rplPixmap",
129: xmLabelWidgetClass, cadre,
130: XmNlabelType, XmPIXMAP,
131: XmNlabelPixmap, pixmap_rpl,
132: NULL);
133:
134: XtVaGetValues(objet_principal,
135: XmNmwmDecorations, &decor,
136: XmNmwmFunctions, &fonctions,
137: NULL);
138:
139: decor &= ~(MWM_DECOR_ALL + MWM_DECOR_MAXIMIZE + MWM_DECOR_RESIZEH
140: + MWM_DECOR_TITLE + MWM_DECOR_MENU + MWM_DECOR_BORDER);
141: fonctions &= ~(MWM_FUNC_ALL + MWM_FUNC_RESIZE + MWM_FUNC_CLOSE
142: + MWM_FUNC_MINIMIZE + MWM_FUNC_MAXIMIZE);
143:
144: largeur = WidthOfScreen(XtScreen(form));
145: hauteur = HeightOfScreen(XtScreen(form));
146:
147: XtVaSetValues(objet_principal,
148: XmNmwmDecorations, decor,
149: XmNmwmFunctions, fonctions,
150: NULL);
151:
152: #if 0
153: XtRealizeWidget(objet_principal);
154:
155: XtVaGetValues(objet_principal,
156: XmNheight, &hauteur_popup,
157: XmNwidth, &largeur_popup,
158: NULL);
159:
160: XtVaSetValues(objet_principal,
161: XmNx, (largeur - largeur_popup) / 2,
162: XmNy, (hauteur - hauteur_popup) / 2,
163: NULL);
164: #else
165: sscanf(rpl_xpm[0], "%d %d", &largeur_xpm, &hauteur_xpm);
166:
167: largeur_popup = largeur_xpm + 28;
168: hauteur_popup = hauteur_xpm + 28;
169:
170: XtVaSetValues(objet_principal,
171: XmNx, (largeur - largeur_popup) / 2,
172: XmNy, (hauteur - hauteur_popup) / 2,
173: NULL);
174:
175: XtRealizeWidget(objet_principal);
176: #endif
177:
178: XFlush(XtDisplay(form));
179:
180: attente.tv_sec = 0;
181: attente.tv_nsec = 1000;
182:
183: gettimeofday(&horodatage_initial, NULL);
184:
185: do
186: {
187: if (XtAppPending(app) != 0)
188: {
189: XtAppNextEvent(app, &evenement);
190: XtDispatchEvent(&evenement);
191: }
192:
193: nanosleep(&attente, NULL);
194: gettimeofday(&horodatage_final, NULL);
195:
196: temps_ecoule.tv_sec = horodatage_final.tv_sec
197: - horodatage_initial.tv_sec;
198: temps_ecoule.tv_usec = horodatage_final.tv_usec
199: - horodatage_initial.tv_usec;
200:
201: if (temps_ecoule.tv_usec < 0)
202: {
203: temps_ecoule.tv_usec += 1000000;
204: temps_ecoule.tv_sec--;
205: }
206: } while (((temps_ecoule.tv_usec / ((double) 1000000))
207: + temps_ecoule.tv_sec) < (duree / ((double) 1000000)));
208:
209: XtUnrealizeWidget(objet_principal);
210:
211: XmDestroyPixmap(XtScreen(form), pixmap_rpl);
212: XmDestroyPixmap(XtScreen(form), pixmap_rpl_masque);
213:
214: XtDestroyWidget(pixmap);
215: XtDestroyWidget(cadre);
216: XtDestroyWidget(form);
217: XtDestroyWidget(objet_principal);
218:
219: while(XtAppPending(app) == 0)
220: {
221: nanosleep(&attente, NULL);
222: }
223:
224: while(XtAppPending(app) != 0)
225: {
226: XtAppNextEvent(app, &evenement);
227: XtDispatchEvent(&evenement);
228: nanosleep(&attente, NULL);
229: }
230:
231: XtDestroyApplicationContext(app);
232: }
233: # endif
234:
235: return;
236: }
237:
238: // vim: ts=4