08f605ffc5fa13ae895d9fe67d8b6b1ba3aaf12a
[AXE.git] / src / pixmap.h
1 /**************************************************************************
2 **  (c) Copyright 1998, Andromeda Technology & Automation
3 ***************************************************************************
4 ** MODULE INFORMATION *
5 ***********************
6 **      FILE NAME      : pixmap.h
7 **      SYSTEM NAME    : AXE - Andromeda X-windows Encapsulation
8 **      VERSION NUMBER : $Revision: 1.1 $
9 **
10 **  DESCRIPTION      : Definition of pixmap classes: pixmap, bitmap
11 **
12 **  EXPORTED OBJECTS : class pixmap
13 **  LOCAL    OBJECTS : 
14 **  MODULES  USED    :
15 ***************************************************************************
16 **  ADMINISTRATIVE INFORMATION *
17 ********************************
18 **      ORIGINAL AUTHOR : Arjen Baart - arjen@andromeda.nl
19 **      CREATION DATE   : Jul 13, 2000
20 **      MODIFICATIONS   : 
21 **************************************************************************/
22
23 /*****************************
24    $Log: pixmap.h,v $
25    Revision 1.1  2002-07-25 08:01:27  arjen
26    First checkin, AXE release 0.2
27
28 *****************************/
29
30 /* static const char *RCSID = "$Id: pixmap.h,v 1.1 2002-07-25 08:01:27 arjen Exp $"; */
31
32 #ifndef AXE_PIXMAP_H
33 #define AXE_PIXMAP_H
34
35 #include <X11/Xlib.h>
36 #include <X11/xpm.h>
37 #include "display.h"
38
39 /*
40 ///////////////////////////////////////////////////////////////////////////
41 //  NAME           : pixmap
42 //  BASECLASS      :
43 //  MEMBERS        : Pixmap pixm;
44 //  OPERATORS      :
45 //  METHODS        :
46 //
47 //  DESCRIPTION    :
48 //
49 //  RELATIONS      :
50 //  SEE ALSO       :
51 //  LAST MODIFIED  : Jul 13, 2000
52 ///////////////////////////////////////////////////////////////////////////
53 */
54
55 class pixmap
56 {
57    Pixmap pixm;
58    unsigned   w, h;   //  Size of the pixmap
59
60 public:
61
62    pixmap()
63    {
64       pixm = 0;
65    }
66
67    pixmap(char *data, unsigned int w, unsigned int h)
68    {
69       pixm = XCreateBitmapFromData(stddpy, stddpy.Root(), data, w, h);
70    }
71
72    pixmap(char *filename)
73    {
74       XpmAttributes    attr;
75
76       attr.valuemask = 0;
77
78       XpmReadFileToPixmap(stddpy, stddpy.Root(), filename, &pixm, NULL, &attr);
79       w = attr.width;
80       h = attr.height;
81    }
82
83    pixmap(char *data[])
84    {
85       XpmAttributes    attr;
86
87       attr.valuemask = 0;
88
89       XpmCreatePixmapFromData(stddpy, stddpy.Root(), data, &pixm, NULL, &attr);
90       w = attr.width;
91       h = attr.height;
92    }
93
94    ~pixmap()
95    {
96       if (pixm != 0)
97       {
98          XFreePixmap(stddpy, pixm);
99       }
100    }
101
102    void read(char *filename)
103    {
104 extern pixmap nopicture;
105       XpmAttributes    attr;
106       int              error;
107
108       if (pixm != 0)
109       {
110          XFreePixmap(stddpy, pixm);
111       }
112
113       attr.valuemask = 0;
114       error = XpmReadFileToPixmap(stddpy, stddpy.Root(), filename, &pixm, NULL, &attr);
115       if (error != XpmSuccess)
116       {
117          cerr << "Error " << error << " reading XPM file " << filename << "\n";
118          pixm = nopicture.pixm;
119          w = nopicture.w;
120          h = nopicture.h;
121       }
122       else
123       {
124          w = attr.width;
125          h = attr.height;
126       }
127    }
128
129    void create(char *data[])
130    {
131       XpmAttributes    attr;
132
133       if (pixm != 0)
134       {
135          XFreePixmap(stddpy, pixm);
136       }
137
138       attr.valuemask = 0;
139
140       XpmCreatePixmapFromData(stddpy, stddpy.Root(), data, &pixm, NULL, &attr);
141       w = attr.width;
142       h = attr.height;
143    }
144
145    operator Pixmap() const
146    {
147       return pixm;
148    }
149
150    size Size() const
151    {
152       return size(w, h);
153    }
154 };
155
156
157 #endif /* AXE_PIXMAP_H  */