moved to minirgb
[my-code/ivac.git] / webcam.c
1 /*
2  * webcam.c - fetch data from webcam 
3  *
4  * author: hackbard
5  *
6  */
7
8 /* includes */
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include <unistd.h>
13 #include <X11/Xlib.h>
14 #include <X11/Xutil.h>
15 #include <X11/xpm.h>
16 #include <X11/extensions/shape.h>
17 #include "minirgb.h"
18 #include "ivac-logo.xpm"
19
20 /* defines */
21 #define XBM_WIDTH 256
22 #define XBM_REAL_WIDTH 512
23 #define XBM_HEIGHT 256
24
25 /* global variables */
26 Display *display;
27 Window ivac_win,icon_win;
28 GC my_gc;
29 MiniRGB rgb1,rgb2;
30
31
32 void open_window(char *name,char *ivac_mask) {
33
34  /* local variables */
35  int screen,width,height;
36  Window root_win;
37  XSizeHints my_size_hints;
38  XClassHint my_class_hints;
39  Pixel black,white;
40  XGCValues my_gc_val;
41  Pixmap pixmap_mask;
42  XWMHints my_wm_hints;
43  
44
45  screen=DefaultScreen(display);
46  root_win=DefaultRootWindow(display);
47  
48  width=XBM_WIDTH; /* DisplayWidth(display,screen)/5; */
49  height=XBM_HEIGHT; /* DisplayHeight(diplay,screen)/5; */
50  my_size_hints.flags=USSize;
51  my_size_hints.width=width;
52  my_size_hints.height=height;
53
54  my_class_hints.res_name=name;
55  my_class_hints.res_class=name;
56
57  black=BlackPixel(display,screen);
58  white=WhitePixel(display,screen);
59
60  /* create window */
61  ivac_win=XCreateSimpleWindow(display,root_win,0,0,
62                                 my_size_hints.width,
63                                 my_size_hints.height,
64                                 1,black,white);
65  icon_win=XCreateSimpleWindow(display,ivac_win,0,0,
66                                 my_size_hints.width,
67                                 my_size_hints.height,
68                                 1,black,white);
69
70  /* set wm and class hints */
71  XSetWMNormalHints(display,ivac_win,&my_size_hints);
72  XSetClassHint(display,ivac_win,&my_class_hints);
73
74  /* select event input - what are we listening to? */
75  XSelectInput(display,ivac_win,
76                 ExposureMask | ButtonPressMask | ButtonReleaseMask |
77                 StructureNotifyMask);
78  XSelectInput(display,icon_win,
79                 ExposureMask | ButtonPressMask | ButtonReleaseMask |
80                 StructureNotifyMask);
81
82  /* set names for windows */
83  XStoreName(display,ivac_win,name);
84  XSetIconName(display,ivac_win,name);
85
86  /* graphics context values */
87  my_gc_val.foreground=black;
88  my_gc_val.background=white;
89  my_gc_val.graphics_exposures=False;
90  
91  /* set graphics context */
92  my_gc=XCreateGC(display,ivac_win,
93                 GCForeground | GCBackground | GCGraphicsExposures,
94                 &my_gc_val);
95
96  /* create pixmap mask and shape windows */
97  pixmap_mask=XCreateBitmapFromData(display,ivac_win,ivac_mask,
98                                         XBM_WIDTH,XBM_HEIGHT);
99  XShapeCombineMask(display,ivac_win,ShapeBounding,0,0,pixmap_mask,ShapeSet);
100  XShapeCombineMask(display,icon_win,ShapeBounding,0,0,pixmap_mask,ShapeSet);
101
102  /* define and set wmhints */
103  my_wm_hints.initial_state=WithdrawnState;
104  my_wm_hints.flags=StateHint;
105  my_wm_hints.icon_window=icon_win;
106  my_wm_hints.icon_x=my_size_hints.x;
107  my_wm_hints.icon_y=my_size_hints.y;
108  my_wm_hints.window_group=ivac_win;
109  my_wm_hints.flags =
110         StateHint | IconWindowHint | IconPositionHint | WindowGroupHint;
111  XSetWMHints(display,ivac_win,&my_wm_hints);
112  
113  /* finaly ... map that stuff ;) */
114  XMapWindow(display,ivac_win);
115
116 }
117
118
119 /* main routine */
120 int main(int argc,char **argv) {
121
122  /* local variables */
123  XEvent xevent;
124
125
126  /* opening display */
127  display=XOpenDisplay(NULL); /* connect on local display :0 */
128  if(display==NULL) {
129   printf("cannot connect to xserver!\n");
130   exit(EXIT_FAILURE);
131  }
132  
133  /* minirgb initialization */
134  if (minirgb_init(display)) {
135   printf("minirgb initialization failed!\n");
136   exit(1);
137  }
138
139  open_window(argv[0],ivac_logo);
140  
141
142  /* to be continued ... here is a test! */
143  XFlush(display);
144  sleep(5);
145  printf("blaaaa, schmaeee\n");
146
147 }