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 }