]> Pileus Git - ~andy/gtk/blob - demos/testpixbuf.c
gdk-pixbuf-loader.c: Fixed init function to properly initialize all
[~andy/gtk] / demos / testpixbuf.c
1
2 /* testpixbuf -- test program for gdk-pixbuf code
3  * Copyright (C) 1999 Mark Crichton, Larry Ewing
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
20
21 #include <stdlib.h>
22 #include <unistd.h>
23 #include <string.h>
24
25 #include <gtk/gtk.h>
26 #include "gdk-pixbuf.h"
27 #include "gdk-pixbuf-io.h"
28 #include "gdk-pixbuf-loader.h"
29
30 #define DEFAULT_WIDTH  24
31 #define DEFAULT_HEIGHT 24
32
33 static const unsigned char default_image[] = {
34         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
35         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
36         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
37         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
38         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
39         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
40         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
41         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
42         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
43         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
44         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
45         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
46         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
47         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
48         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
49         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
50         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
51         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
52         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
53         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
54         0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
55         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
56         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
57         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
58         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
59         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
60         0x00, 0x00, 0x00, 0xae, 0xb3, 0xb3, 0xc6, 0xc9, 0xcd, 0xd7, 0xd4, 0xdf,
61         0xec, 0xde, 0xf3, 0xe7, 0xcb, 0xe9, 0xd9, 0xb5, 0xd3, 0x00, 0x00, 0x00,
62         0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
63         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
64         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
65         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xb1, 0xb7, 0xa5,
66         0xb0, 0xb8, 0xad, 0xb3, 0xb9, 0xb6, 0xc1, 0xc6, 0xc8, 0xd5, 0xd3, 0xdc,
67         0xec, 0xde, 0xf3, 0xe5, 0xca, 0xe6, 0xe0, 0xbb, 0xd7, 0xe1, 0xad, 0xc2,
68         0xe3, 0xac, 0xa3, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
69         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
70         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
71         0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xca, 0xc1, 0xa4, 0xc5, 0xc7, 0xac,
72         0xb7, 0xbe, 0xaf, 0xad, 0xb4, 0xaf, 0xbd, 0xc2, 0xc3, 0xd1, 0xd0, 0xd8,
73         0xec, 0xde, 0xf3, 0xe5, 0xc7, 0xe4, 0xe0, 0xb6, 0xd1, 0xe7, 0xa9, 0xb4,
74         0xed, 0xcd, 0xb6, 0xd6, 0xcf, 0xae, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
75         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
76         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
77         0x00, 0x00, 0x00, 0xdf, 0xa7, 0x9f, 0xdd, 0xbf, 0xaa, 0xcf, 0xc5, 0xa9,
78         0xc1, 0xc4, 0xac, 0xb2, 0xba, 0xaf, 0xb6, 0xbb, 0xbb, 0xcd, 0xce, 0xd4,
79         0xec, 0xde, 0xf3, 0xe4, 0xc4, 0xe1, 0xe0, 0xaf, 0xc7, 0xea, 0xbc, 0xae,
80         0xe1, 0xd6, 0xb6, 0xc7, 0xcc, 0xae, 0xa2, 0xab, 0x9a, 0x00, 0x00, 0x00,
81         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
82         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
83         0x00, 0x00, 0x00, 0xe3, 0xab, 0xc0, 0xe6, 0xa3, 0xa7, 0xdf, 0xba, 0xa8,
84         0xcf, 0xc5, 0xa9, 0xbd, 0xc2, 0xae, 0xad, 0xb4, 0xaf, 0xc6, 0xc9, 0xcd,
85         0xec, 0xde, 0xf3, 0xe2, 0xbf, 0xdc, 0xe7, 0xa9, 0xb4, 0xe7, 0xd6, 0xb8,
86         0xc7, 0xcc, 0xae, 0xac, 0xb6, 0xa6, 0x9d, 0xa8, 0x9f, 0x00, 0x00, 0x00,
87         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
88         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
89         0xd9, 0xaf, 0xcf, 0xe1, 0xb4, 0xd2, 0xe2, 0xb0, 0xcb, 0xe4, 0xa9, 0xbb,
90         0xe2, 0xb2, 0xa6, 0xcf, 0xc5, 0xa9, 0x6a, 0x6a, 0x6a, 0x0d, 0x0d, 0x0d,
91         0x0d, 0x0d, 0x0d, 0x6a, 0x6a, 0x6a, 0xed, 0xcd, 0xb6, 0xc7, 0xcc, 0xae,
92         0xa6, 0xb1, 0xa3, 0x98, 0xa2, 0x9c, 0x8f, 0x97, 0x96, 0x7e, 0x84, 0x85,
93         0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
94         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
95         0xe8, 0xc6, 0xe7, 0xe5, 0xc2, 0xe3, 0xe3, 0xbd, 0xdd, 0xe1, 0xb6, 0xd5,
96         0xe2, 0xb0, 0xcb, 0x6a, 0x6a, 0x6a, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
97         0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x6a, 0x6a, 0x6a, 0x9d, 0xa8, 0x9f,
98         0x8f, 0x97, 0x96, 0x8b, 0x90, 0x92, 0x97, 0x9e, 0xa2, 0xa0, 0xa7, 0xae,
99         0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
100         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
101         0xe7, 0xd3, 0xed, 0xe8, 0xd1, 0xed, 0xe8, 0xce, 0xec, 0xe9, 0xcc, 0xeb,
102         0xe8, 0xc6, 0xe7, 0x0d, 0x0d, 0x0d, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
103         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x0d, 0x0d, 0x0d, 0x97, 0x9e, 0xa2,
104         0xa7, 0xae, 0xb7, 0xb2, 0xb6, 0xc5, 0xba, 0xbc, 0xce, 0xbf, 0xbe, 0xd3,
105         0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
106         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
107         0xe9, 0xdf, 0xf0, 0xe9, 0xdf, 0xf0, 0xe9, 0xdf, 0xf0, 0xe9, 0xdf, 0xf0,
108         0xe9, 0xdf, 0xf0, 0x0d, 0x0d, 0x0d, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
109         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x0d, 0x0d, 0x0d, 0xe1, 0xd2, 0xf7,
110         0xe1, 0xd2, 0xf7, 0xe1, 0xd2, 0xf7, 0xe1, 0xd2, 0xf7, 0xe1, 0xd2, 0xf7,
111         0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
112         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
113         0xca, 0xc7, 0xd2, 0xc5, 0xc4, 0xcd, 0xbf, 0xbf, 0xc7, 0xb8, 0xb9, 0xc0,
114         0xae, 0xaf, 0xb6, 0x6a, 0x6a, 0x6a, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
115         0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x6a, 0x6a, 0x6a, 0xd5, 0xa8, 0xe1,
116         0xd8, 0xb2, 0xe9, 0xd9, 0xb8, 0xed, 0xdb, 0xbd, 0xf0, 0xdc, 0xbf, 0xf1,
117         0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
118         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
119         0xa4, 0xa6, 0xac, 0xa8, 0xaa, 0xaf, 0xa0, 0xa6, 0xa8, 0x98, 0x9e, 0x9c,
120         0xa1, 0xa8, 0x9e, 0xb1, 0xb6, 0xa1, 0x6a, 0x6a, 0x6a, 0x0d, 0x0d, 0x0d,
121         0x0d, 0x0d, 0x0d, 0x6a, 0x6a, 0x6a, 0xc0, 0x8c, 0xad, 0xcc, 0x90, 0xb5,
122         0xd3, 0x94, 0xca, 0xd6, 0xa2, 0xdb, 0xd5, 0xa8, 0xe1, 0xcf, 0xa7, 0xdf,
123         0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
124         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
125         0x00, 0x00, 0x00, 0x98, 0x9f, 0x9b, 0xa1, 0xa8, 0x9e, 0xac, 0xb3, 0xa0,
126         0xb9, 0xb9, 0xa4, 0xd0, 0xb8, 0xa8, 0xc5, 0xb5, 0xb8, 0xb6, 0xbb, 0xad,
127         0xe3, 0xd7, 0xb5, 0xdd, 0xb4, 0xa9, 0xcb, 0x89, 0xac, 0xc0, 0x8c, 0xad,
128         0xc8, 0x91, 0xb5, 0xd1, 0x8d, 0xb7, 0xd3, 0x94, 0xca, 0x00, 0x00, 0x00,
129         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
130         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
131         0x00, 0x00, 0x00, 0xa1, 0xa7, 0x98, 0xb1, 0xb6, 0xa1, 0xbd, 0xb9, 0xa5,
132         0xd0, 0xb8, 0xa8, 0xca, 0xb5, 0xb7, 0xb8, 0xb1, 0xb1, 0xc2, 0xc8, 0xb2,
133         0xe3, 0xd7, 0xb5, 0xe1, 0xbf, 0xaf, 0xdb, 0x92, 0x9a, 0xbe, 0x82, 0xa6,
134         0xc0, 0x8c, 0xad, 0xc8, 0x91, 0xb4, 0xc7, 0x8b, 0xb0, 0x00, 0x00, 0x00,
135         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
136         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
137         0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xbc, 0xb6, 0xa1, 0xd0, 0xb8, 0xa8,
138         0xcd, 0xb6, 0xb7, 0xc0, 0xb4, 0xb5, 0xb1, 0xb1, 0xaa, 0xca, 0xd1, 0xb4,
139         0xe3, 0xd7, 0xb5, 0xe2, 0xc1, 0xb0, 0xdb, 0xa8, 0xa3, 0xd2, 0x8a, 0xa9,
140         0xb7, 0x7e, 0xa2, 0xbd, 0x89, 0xa9, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
141         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
142         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
143         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xc9, 0xaf, 0xaf,
144         0xc5, 0xb5, 0xb8, 0xb8, 0xb1, 0xb1, 0xb6, 0xbb, 0xad, 0xd0, 0xd6, 0xb5,
145         0xe3, 0xd7, 0xb5, 0xe2, 0xbf, 0xaf, 0xdd, 0xb4, 0xa9, 0xdb, 0x92, 0x9a,
146         0xc6, 0x84, 0xa7, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
147         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
148         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
149         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
150         0x00, 0x00, 0x00, 0xac, 0xaa, 0xa6, 0xbd, 0xc3, 0xb0, 0xd2, 0xd7, 0xb5,
151         0xe3, 0xd7, 0xb5, 0xe2, 0xbf, 0xae, 0xdb, 0xb6, 0xa8, 0x00, 0x00, 0x00,
152         0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
153         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
154         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
155         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
156         0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
158         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
159         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
160         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
161         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
162         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
163         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
164         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
165         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
166         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
167         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
168         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
169         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
170         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
171         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
172         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
173         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
174         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
175         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
176         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff,
177         0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff
178 };
179
180
181 static const char * book_open_xpm[] = {
182 "16 16 4 1",
183 "       c None s None",
184 ".      c black",
185 "X      c #808080",
186 "o      c white",
187 "                ",
188 "  ..            ",
189 " .Xo.    ...    ",
190 " .Xoo. ..oo.    ",
191 " .Xooo.Xooo...  ",
192 " .Xooo.oooo.X.  ",
193 " .Xooo.Xooo.X.  ",
194 " .Xooo.oooo.X.  ",
195 " .Xooo.Xooo.X.  ",
196 " .Xooo.oooo.X.  ",
197 "  .Xoo.Xoo..X.  ",
198 "   .Xo.o..ooX.  ",
199 "    .X..XXXXX.  ",
200 "    ..X.......  ",
201 "     ..         ",
202 "                "};
203
204 static const char * book_closed_xpm[] = {
205 "16 16 6 1",
206 "       c None s None",
207 ".      c black",
208 "X      c red",
209 "o      c yellow",
210 "O      c #808080",
211 "#      c white",
212 "                ",
213 "       ..       ",
214 "     ..XX.      ",
215 "   ..XXXXX.     ",
216 " ..XXXXXXXX.    ",
217 ".ooXXXXXXXXX.   ",
218 "..ooXXXXXXXXX.  ",
219 ".X.ooXXXXXXXXX. ",
220 ".XX.ooXXXXXX..  ",
221 " .XX.ooXXX..#O  ",
222 "  .XX.oo..##OO. ",
223 "   .XX..##OO..  ",
224 "    .X.#OO..    ",
225 "     ..O..      ",
226 "      ..        ",
227 "                "};
228
229 static const char * mini_page_xpm[] = {
230 "16 16 4 1",
231 "       c None s None",
232 ".      c black",
233 "X      c white",
234 "o      c #808080",
235 "                ",
236 "   .......      ",
237 "   .XXXXX..     ",
238 "   .XoooX.X.    ",
239 "   .XXXXX....   ",
240 "   .XooooXoo.o  ",
241 "   .XXXXXXXX.o  ",
242 "   .XooooooX.o  ",
243 "   .XXXXXXXX.o  ",
244 "   .XooooooX.o  ",
245 "   .XXXXXXXX.o  ",
246 "   .XooooooX.o  ",
247 "   .XXXXXXXX.o  ",
248 "   ..........o  ",
249 "    oooooooooo  ",
250 "                "};
251
252 static const char * gtk_mini_xpm[] = {
253 "15 20 17 1",
254 "       c None",
255 ".      c #14121F",
256 "+      c #278828",
257 "@      c #9B3334",
258 "#      c #284C72",
259 "$      c #24692A",
260 "%      c #69282E",
261 "&      c #37C539",
262 "*      c #1D2F4D",
263 "=      c #6D7076",
264 "-      c #7D8482",
265 ";      c #E24A49",
266 ">      c #515357",
267 ",      c #9B9C9B",
268 "'      c #2FA232",
269 ")      c #3CE23D",
270 "!      c #3B6CCB",
271 "               ",
272 "      ***>     ",
273 "    >.*!!!*    ",
274 "   ***....#*=  ",
275 "  *!*.!!!**!!# ",
276 " .!!#*!#*!!!!# ",
277 " @%#!.##.*!!$& ",
278 " @;%*!*.#!#')) ",
279 " @;;@%!!*$&)'' ",
280 " @%.%@%$'&)$+' ",
281 " @;...@$'*'*)+ ",
282 " @;%..@$+*.')$ ",
283 " @;%%;;$+..$)# ",
284 " @;%%;@$$$'.$# ",
285 " %;@@;;$$+))&* ",
286 "  %;;;@+$&)&*  ",
287 "   %;;@'))+>   ",
288 "    %;@'&#     ",
289 "     >%$$      ",
290 "      >=       "};
291
292 const gchar ** xpms[] = { 
293   book_open_xpm,
294   book_closed_xpm,
295   mini_page_xpm,
296   gtk_mini_xpm,
297   NULL
298 };
299
300 static void
301 quit_func (GtkWidget *widget, gpointer dummy)
302 {
303         gtk_main_quit ();
304 }
305
306 static void
307 expose_func (GtkWidget *drawing_area, GdkEventExpose *event, gpointer data)
308 {
309         GdkPixbuf *pixbuf;
310
311         pixbuf = (GdkPixbuf *)gtk_object_get_data(GTK_OBJECT(drawing_area), "pixbuf");
312
313         if (pixbuf->art_pixbuf->has_alpha) {
314                 gdk_draw_rgb_32_image (drawing_area->window,
315                                        drawing_area->style->black_gc,
316                                        event->area.x, event->area.y, 
317                                        event->area.width, 
318                                        event->area.height,
319                                        GDK_RGB_DITHER_MAX, 
320                                        pixbuf->art_pixbuf->pixels 
321                                        + (event->area.y * pixbuf->art_pixbuf->rowstride) 
322                                        + (event->area.x * pixbuf->art_pixbuf->n_channels),
323                                        pixbuf->art_pixbuf->rowstride);
324         } else {
325                 gdk_draw_rgb_image (drawing_area->window,
326                                     drawing_area->style->white_gc,
327                                     event->area.x, event->area.y, 
328                                     event->area.width, 
329                                     event->area.height,
330                                     GDK_RGB_DITHER_NORMAL,
331                                     pixbuf->art_pixbuf->pixels 
332                                     + (event->area.y * pixbuf->art_pixbuf->rowstride) 
333                                     + (event->area.x * pixbuf->art_pixbuf->n_channels),
334                                     pixbuf->art_pixbuf->rowstride);
335         }
336 }  
337
338 static void
339 config_func (GtkWidget *drawing_area, GdkEventConfigure *event, gpointer data)
340 {
341         GdkPixbuf *pixbuf;
342     
343         pixbuf = (GdkPixbuf *)gtk_object_get_data(GTK_OBJECT(drawing_area), "pixbuf");
344
345         g_print("X:%d Y:%d\n", event->width, event->height);
346
347 #if 0
348         if (((event->width) != (pixbuf->art_pixbuf->width)) ||
349             ((event->height) != (pixbuf->art_pixbuf->height))) 
350                 gdk_pixbuf_scale(pixbuf, event->width, event->height);
351 #endif
352 }
353
354 static void
355 new_testrgb_window (GdkPixbuf *pixbuf)
356 {
357         GtkWidget *window;
358         GtkWidget *vbox;
359         GtkWidget *button;
360         GtkWidget *drawing_area;
361         gint w, h;
362  
363         w = pixbuf->art_pixbuf->width;
364         h = pixbuf->art_pixbuf->height;
365
366         window = gtk_widget_new (gtk_window_get_type (),
367                                  "GtkObject::user_data", NULL,
368                                  "GtkWindow::type", GTK_WINDOW_TOPLEVEL,
369                                  "GtkWindow::title", "testrgb",
370                                  "GtkWindow::allow_shrink", TRUE,
371                                  NULL);
372         gtk_signal_connect (GTK_OBJECT (window), "destroy",
373                             (GtkSignalFunc) quit_func, NULL);
374
375         vbox = gtk_vbox_new (FALSE, 0);
376
377         drawing_area = gtk_drawing_area_new ();
378
379         gtk_drawing_area_size (GTK_DRAWING_AREA(drawing_area), w, h);
380         gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);
381
382         gtk_signal_connect (GTK_OBJECT(drawing_area), "expose_event",
383                             GTK_SIGNAL_FUNC(expose_func), NULL);
384         gtk_signal_connect (GTK_OBJECT(drawing_area), "configure_event",
385                             GTK_SIGNAL_FUNC (config_func), NULL);
386
387         gtk_object_set_data (GTK_OBJECT(drawing_area), "pixbuf", pixbuf);
388
389         gtk_widget_show (drawing_area);
390
391         button = gtk_button_new_with_label ("Quit");
392         gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
393         gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
394                                    (GtkSignalFunc) gtk_widget_destroy,
395                                    GTK_OBJECT (window));
396
397         gtk_widget_show (button);
398
399         gtk_container_add (GTK_CONTAINER (window), vbox);
400         gtk_widget_show (vbox);
401
402         gtk_widget_show (window);
403 }
404
405 int
406 main (int argc, char **argv)
407 {
408         int i;
409         int found_valid = FALSE; 
410
411         GdkPixbuf *pixbuf;
412         GtkObject *pixbuf_loader;
413         FILE *file;
414         gint val;
415         guchar buf;
416
417         gtk_init (&argc, &argv);
418
419         gdk_rgb_set_verbose (TRUE);
420
421         gdk_rgb_init ();
422
423         gtk_widget_set_default_colormap (gdk_rgb_get_cmap ());
424         gtk_widget_set_default_visual (gdk_rgb_get_visual ());
425
426         i = 1;
427         if (argc == 1) {
428                 const gchar*** xpmp;
429                 
430                 pixbuf = gdk_pixbuf_new_from_data ((guchar *) default_image, ART_PIX_RGB, FALSE,
431                                                    DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_WIDTH * 3,
432                                                    NULL, NULL);
433                 new_testrgb_window (pixbuf);
434
435                 xpmp = xpms;
436                 while (*xpmp) {
437                         pixbuf = gdk_pixbuf_new_from_xpm_data (*xpmp);
438                         new_testrgb_window (pixbuf);
439                         ++xpmp;
440                 }
441                 
442                 found_valid = TRUE;
443         } else {
444                 for (i = 1; i < argc; i++) {
445                         pixbuf = gdk_pixbuf_new_from_file (argv[i]);
446 #if 0
447                         pixbuf = gdk_pixbuf_rotate(pixbuf, 10.0);
448 #endif
449
450                         if (pixbuf) {
451                                 new_testrgb_window (pixbuf);
452                                 found_valid = TRUE;
453                         }
454                 }
455
456                 pixbuf_loader = gdk_pixbuf_loader_new ();
457                 file = fopen (argv[1], "r");
458                 g_assert (file != NULL);
459                 
460                 while (TRUE) {
461                         val = fgetc (file);
462                         if (val == EOF)
463                                 break;
464                         buf = (guint) val;
465                         if (gdk_pixbuf_loader_write (GDK_PIXBUF_LOADER (pixbuf_loader), &buf, 1) == FALSE)
466                                 break;
467                 }
468                 gdk_pixbuf_loader_close (GDK_PIXBUF_LOADER (pixbuf_loader));
469                 gtk_object_destroy (pixbuf_loader);
470                 fclose (file);
471                 
472         }
473
474         if (found_valid)
475                 gtk_main ();
476
477         return 0;
478 }