dtmail: Further Coverity fixes
[oweals/cde.git] / cde / programs / dtmail / MotifApp / BusyPixmap.C
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /* $XConsortium: BusyPixmap.C /main/3 1996/04/21 19:32:02 drk $ */
24 /*
25  *+SNOTICE
26  *
27  *      RESTRICTED CONFIDENTIAL INFORMATION:
28  *      
29  *      The information in this document is subject to special
30  *      restrictions in a confidential disclosure agreement bertween
31  *      HP, IBM, Sun, USL, SCO and Univel.  Do not distribute this
32  *      document outside HP, IBM, Sun, USL, SCO, or Univel wihtout
33  *      Sun's specific written approval.  This documment and all copies
34  *      and derivative works thereof must be returned or destroyed at
35  *      Sun's request.
36  *
37  *      Copyright 1993 Sun Microsystems, Inc.  All rights reserved.
38  *
39  *+ENOTICE
40  */
41
42 ///////////////////////////////////////////////////////////////////////////////
43 //////////////////////////////////////////////////////////////////////////////
44 //         This example code is from the book:
45 //
46 //           Object-Oriented Programming with C++ and OSF/Motif
47 //         by
48 //           Douglas Young
49 //           Prentice Hall, 1992
50 //           ISBN 0-13-630252-1 
51 //
52 //         Copyright 1991 by Prentice Hall
53 //         All Rights Reserved
54 //
55 //  Permission to use, copy, modify, and distribute this software for 
56 //  any purpose except publication and without fee is hereby granted, provided 
57 //  that the above copyright notice appear in all copies of the software.
58 ///////////////////////////////////////////////////////////////////////////////
59 //////////////////////////////////////////////////////////////////////////////
60
61
62 ///////////////////////////////////////////////////
63 // BusyPixmap.C
64 ///////////////////////////////////////////////////
65 #include "BusyPixmap.h"
66 #include <Xm/Xm.h>
67
68 #define NUMPIXMAPS  8
69 #define PIXMAPSIZE  50
70
71 BusyPixmap::BusyPixmap ( Widget w ) : 
72         PixmapCycler ( NUMPIXMAPS, PIXMAPSIZE, PIXMAPSIZE ),
73         _gc(NULL),
74         _inverseGC(NULL)
75 {
76     _w = w;
77 }
78
79 void BusyPixmap::createPixmaps()
80 {
81     int angle, delta, i;
82     XGCValues  gcv;
83     
84     // Create a graphics context used to draw each pixmap,
85     // based on the colors of the given widget
86     
87     XtVaGetValues ( _w, 
88                    XmNforeground, &gcv.foreground,
89                    XmNbackground, &gcv.background,
90                    NULL );
91     
92     _gc = XtGetGC ( _w,  GCForeground | GCBackground, &gcv );
93     
94     // Create a second GC used to fill the pixmap with
95     // the background color of the widget
96     
97     XtVaGetValues ( _w, 
98                    XmNforeground, &gcv.background,
99                    XmNbackground, &gcv.foreground,
100                    NULL );
101     
102     _inverseGC = XtGetGC ( _w,  GCForeground | GCBackground, &gcv );
103     
104     // Define the starting increment, and a slice of the pie.
105     // The size of the pie slice depends on the number of pixmaps
106     // to be created.
107     
108     angle = 360;
109     delta = 360 / NUMPIXMAPS;
110     
111     for ( i = 0; i < NUMPIXMAPS; i++)
112     {
113         // Create a pixmap for each slice of the pie. X measures
114         // counterclockwise, so subtract the size of each slice
115         // so the sequence moves clockwise.
116         
117         _pixmapList[i] = createBusyPixmap ( angle, delta ); 
118         angle -= delta;
119     }
120     
121     // Release the GCs after all pixmaps have been created
122     
123     XtReleaseGC ( _w, _gc );
124     XtReleaseGC ( _w, _inverseGC );
125 }
126
127 Pixmap BusyPixmap::createBusyPixmap ( int    start, 
128                                      int    end )
129 {
130     Pixmap    pm;
131     const int margin = 1;
132     
133     // Create a pixmap. Use the root window used by the widget,
134     // because the widget may not be realized, or may be a gadget
135     
136     pm = XCreatePixmap ( XtDisplay ( _w ), 
137                         RootWindowOfScreen ( XtScreen ( _w ) ),
138                         _width, _height,
139                         DefaultDepthOfScreen ( XtScreen ( _w ) ) );
140     
141     // Pixmaps have to be cleared by filling them with a background color
142     
143     XFillRectangle ( XtDisplay ( _w ), 
144                     pm, 
145                     _inverseGC, 
146                     0, 0, _width, _height );
147     
148     // Draw a complete circle just inside the bounds of the pxmap
149     
150     XDrawArc ( XtDisplay ( _w ), 
151               pm,
152               _gc, 
153               margin, margin, 
154               _width - 2 * margin, 
155               _height - 2 * margin, 
156               0, 360 * 64 );
157     
158     // Draw the pie slice as a solid color
159     
160     XFillArc ( XtDisplay ( _w ), 
161               pm,
162               _gc, 
163               margin, margin, 
164               _width - 2 * margin, 
165               _height - 2 * margin, 
166               start * 64, end * 64 );
167     
168     return pm;
169 }