/ minilibx-linux / test / main.c
main.c
  1  
  2  #include	"mlx.h"
  3  #include	"mlx_int.h"
  4  
  5  #define	WIN1_SX		242
  6  #define	WIN1_SY		242
  7  #define	IM1_SX		42
  8  #define	IM1_SY		42
  9  #define	IM3_SX		242
 10  #define	IM3_SY		242
 11  
 12  void	*mlx;
 13  void	*win1;
 14  void    *win2;
 15  void    *win3;
 16  void    *im1;
 17  void	*im2;
 18  void	*im3;
 19  void	*im4;
 20  int	bpp1;
 21  int	bpp2;
 22  int	bpp3;
 23  int	bpp4;
 24  int	sl1;
 25  int	sl2;
 26  int	sl3;
 27  int	sl4;
 28  int	endian1;
 29  int	endian2;
 30  int	endian3;
 31  int	endian4;
 32  char	*data1;
 33  char	*data2;
 34  char	*data3;
 35  char	*data4;
 36  int	xpm1_x;
 37  int	xpm1_y;
 38  
 39  int	local_endian;
 40  
 41  int	color_map_1(void *win,int w,int h);
 42  int	color_map_2(unsigned char *data,int bpp,int sl,int w,int h,int endian, int type);
 43  
 44  int	expose_win1(void *p)
 45  {
 46    mlx_put_image_to_window(mlx,win1,im3,0,0);
 47  }
 48  
 49  int	expose_win2(void *p)
 50  {
 51    mlx_put_image_to_window(mlx,win2,im4,0,0);
 52    mlx_put_image_to_window(mlx,win2,im2,0,0);
 53  }
 54  
 55  int	key_win1(int key,void *p)
 56  {
 57    printf("Key in Win1 : %d\n",key);
 58    if (key==0xFF1B)
 59      exit(0);
 60  }
 61  
 62  int	key_win2(int key,void *p)
 63  {
 64    printf("Key in Win2 : %d\n",key);
 65    if (key==0xFF1B)
 66      exit(0);
 67  }
 68  
 69  int	key_win3(int key,void *p)
 70  {
 71    printf("Key in Win3 : %d\n",key);
 72    if (key==0xFF1B)
 73      mlx_destroy_window(mlx,win3);
 74  }
 75  
 76  int	mouse_win1(int button,int x,int y, void *p)
 77  {
 78    printf("Mouse in Win1, button %d at %dx%d.\n",button,x,y);
 79  }
 80  
 81  int	mouse_win2(int button,int x,int y, void *p)
 82  {
 83    printf("Mouse in Win2, button %d at %dx%d.\n",button,x,y);
 84  }
 85  
 86  int	mouse_win3(int x,int y, void *p)
 87  {
 88    printf("Mouse moving in Win3, at %dx%d.\n",x,y);
 89  }
 90  
 91  
 92  int	main()
 93  {
 94    int	a;
 95  
 96    printf("MinilibX Test Program\n");
 97    a = 0x11223344;
 98    if (((unsigned char *)&a)[0] == 0x11)
 99      local_endian = 1;
100    else
101      local_endian = 0;
102    printf(" => Local Endian : %d\n",local_endian);
103  
104    printf(" => Connection ...");
105    if (!(mlx = mlx_init()))
106      {
107        printf(" !! KO !!\n");
108        exit(1);
109      }
110    printf("OK (use_xshm %d pshm_format %d)\n",((t_xvar *)mlx)->use_xshm,((t_xvar *)mlx)->pshm_format);
111  
112    printf(" => Window1 %dx%d \"Title 1\" ...",WIN1_SX,WIN1_SY);
113    if (!(win1 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title1")))
114      {
115        printf(" !! KO !!\n");
116        exit(1);
117      }
118    printf("OK\n");
119  
120    printf(" => Colormap sans event ...");
121    color_map_1(win1,WIN1_SX,WIN1_SY);
122    printf("OK\n");
123    sleep(2);
124  
125    printf(" => Clear Window ...");
126    mlx_clear_window(mlx,win1);
127    printf("OK\n");
128    sleep(2);
129  
130    printf(" => Image1 ZPixmap %dx%d ...",IM1_SX,IM1_SY);
131    if (!(im1 = mlx_new_image(mlx,IM1_SX,IM1_SY)))
132      {
133        printf(" !! KO !!\n");
134        exit(1);
135      }
136    data1 = mlx_get_data_addr(im1,&bpp1,&sl1,&endian1);
137    printf("OK (bpp1: %d, sizeline1: %d endian: %d type: %d)\n",bpp1,sl1,endian1,
138  	 ((t_img *)im1)->type);
139  
140    printf(" => Fill Image1 ...");
141    color_map_2(data1,bpp1,sl1,IM1_SX,IM1_SY,endian1, 1);
142    printf("OK (pixmap : %d)\n",(int)((t_img *)im1)->pix);
143  
144    printf(" => Put Image1 ...");
145    mlx_put_image_to_window(mlx,win1,im1,20,20);
146    printf("OK\n");
147    sleep(2);
148  
149    printf(" => Destroy Image1 ... ");
150    mlx_destroy_image(mlx, im1);
151    printf("OK\n");
152    sleep(2);
153  
154    printf(" => Image3 ZPixmap %dx%d ...",IM3_SX,IM3_SY);
155    if (!(im3 = mlx_new_image(mlx,IM3_SX,IM3_SY)))
156      {
157        printf(" !! KO !!\n");
158        exit(1);
159      }
160    data3 = mlx_get_data_addr(im3,&bpp3,&sl3,&endian3);
161    printf("OK (bpp3 %d, sizeline3 %d endian3 %d type %d)\n",bpp3,sl3,endian3,
162  	 ((t_img *)im3)->type);
163  
164    printf(" => Fill Image3 ...");
165    color_map_2(data3,bpp3,sl3,IM3_SX,IM3_SY,endian3, 1);
166    printf("OK (pixmap : %d)\n",(int)((t_img *)im3)->pix);
167  
168    printf(" => Put Image3 ...");
169    mlx_put_image_to_window(mlx,win1,im3,20,20);
170    printf("OK\n");
171    sleep(2);
172  
173    printf(" => String ...");
174    mlx_string_put(mlx,win1,5,WIN1_SY/2,0xFF99FF,"String output");
175    mlx_string_put(mlx,win1,15,WIN1_SY/2+20,0x00FFFF,"MinilibX test");
176    printf("OK\n");
177    sleep(2);
178  
179    printf(" => Xpm from file ...");
180    if (!(im2 = mlx_xpm_file_to_image(mlx,"open.xpm",&xpm1_x,&xpm1_y)))
181      {
182        printf(" !! KO !!\n");
183        exit(1);
184      }
185    data2 = mlx_get_data_addr(im2,&bpp2,&sl2,&endian2);
186    printf("OK (xpm %dx%d)(img bpp2: %d, sizeline2: %d endian: %d type: %d)\n",
187  	 xpm1_x,xpm1_y,bpp2,sl2,endian2,((t_img *)im2)->type);
188    sleep(2);
189  
190    printf(" => Put xpm ...");
191    mlx_put_image_to_window(mlx,win1,im2,0,0);
192    mlx_put_image_to_window(mlx,win1,im2,100,100);
193    printf("OK\n");
194    sleep(2);
195  
196    printf(" => 2nd window,");
197    win2 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title2");
198    if (!(im4 = mlx_new_image(mlx,IM3_SX, IM3_SY)))
199      {
200        printf(" !! KO !!\n");
201        exit(1);
202      }
203    data4 = mlx_get_data_addr(im4,&bpp4,&sl4,&endian4);
204    color_map_2(data4,bpp4,sl4,IM3_SX,IM3_SY,endian4, 2);
205  
206    printf(" 3rd window, Installing hooks ...");
207    win3 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title3");
208    mlx_expose_hook(win1,expose_win1,0);
209    mlx_mouse_hook(win1,mouse_win1,0);
210    mlx_key_hook(win1,key_win1,0);
211    mlx_expose_hook(win2,expose_win2,0);
212    mlx_mouse_hook(win2,mouse_win2,0);
213    mlx_key_hook(win2,key_win2,0);
214    mlx_key_hook(win3,key_win3,0);
215  
216    mlx_hook(win3, MotionNotify, PointerMotionMask, mouse_win3, 0);
217  
218    printf("OK\nNow in Loop. Just play. Esc in 3 to destroy, 1&2 to quit.\n");
219    
220    mlx_loop(mlx);
221  }
222  
223  
224  int	color_map_1(void *win,int w,int h)
225  {
226    int	x;
227    int	y;
228    int	color;
229  
230    x = w;
231    while (x--)
232      {
233        y = h;
234        while (y--)
235          {
236            color = (x*255)/w+((((w-x)*255)/w)<<16)+(((y*255)/h)<<8);
237  	  mlx_pixel_put(mlx,win,x,y,color);
238          }
239      }
240  }
241  
242  
243  int	color_map_2(unsigned char *data,int bpp,int sl,int w,int h,int endian, int type)
244  {
245    int	x;
246    int	y;
247    int	opp;
248    int	dec;
249    int	color;
250    int	color2;
251    unsigned char *ptr;
252  
253    opp = bpp/8;
254    printf("(opp : %d) ",opp);
255    y = h;
256    while (y--)
257      {
258        ptr = data+y*sl;
259        x = w;
260        while (x--)
261          {
262  	  if (type==2)
263  	    color = (y*255)/w+((((w-x)*255)/w)<<16)
264  	      +(((y*255)/h)<<8);
265  	  else
266  	    color = (x*255)/w+((((w-x)*255)/w)<<16)+(((y*255)/h)<<8);
267            color2 = mlx_get_color_value(mlx,color);
268  	  dec = opp;
269  	  while (dec--)
270  	    if (endian==local_endian)
271  	      {
272  		if (endian)
273  		  *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[4-opp+dec];
274  		else
275  		  *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[dec];
276  	      }
277  	    else
278  	      {
279  		if (endian)
280  		  *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[opp-1-dec];
281  		else
282  		  *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[3-dec];
283  	      }
284          }
285      }
286  
287  }