X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Fivac.git;a=blobdiff_plain;f=webcam.c;h=e63c835fd8d69e1f999837df8236b639ba9b0304;hp=7b4be7e7e50bfcb1a7ab9f132103b9d24972b568;hb=89bf5956c2eda1ee06092e892a36a8507fe6edce;hpb=041c97e2ca46c5cb594123faf5b124b34993d83b diff --git a/webcam.c b/webcam.c index 7b4be7e..e63c835 100644 --- a/webcam.c +++ b/webcam.c @@ -11,18 +11,117 @@ #include #include #include +#include +#include +#include #include "minirgb.h" +#include "ivac-logo.xpm" -/* variables */ +/* defines */ +#define XBM_WIDTH 256 +#define XBM_REAL_WIDTH 512 +#define XBM_HEIGHT 256 + +/* global variables */ Display *display; +Window ivac_win,icon_win; +GC my_gc; +MiniRGB rgb1,rgb2; + + +void open_window(char *name,char *ivac_mask) { + + /* local variables */ + int screen,width,height; + Window root_win; + XSizeHints my_size_hints; + XClassHint my_class_hints; + Pixel black,white; + XGCValues my_gc_val; + Pixmap pixmap_mask; + XWMHints my_wm_hints; + + + screen=DefaultScreen(display); + root_win=DefaultRootWindow(display); + + width=XBM_WIDTH; /* DisplayWidth(display,screen)/5; */ + height=XBM_HEIGHT; /* DisplayHeight(diplay,screen)/5; */ + my_size_hints.flags=USSize; + my_size_hints.width=width; + my_size_hints.height=height; + + my_class_hints.res_name=name; + my_class_hints.res_class=name; + + black=BlackPixel(display,screen); + white=WhitePixel(display,screen); + + /* create window */ + ivac_win=XCreateSimpleWindow(display,root_win,0,0, + my_size_hints.width, + my_size_hints.height, + 1,black,white); + icon_win=XCreateSimpleWindow(display,ivac_win,0,0, + my_size_hints.width, + my_size_hints.height, + 1,black,white); + + /* set wm and class hints */ + XSetWMNormalHints(display,ivac_win,&my_size_hints); + XSetClassHint(display,ivac_win,&my_class_hints); + + /* select event input - what are we listening to? */ + XSelectInput(display,ivac_win, + ExposureMask | ButtonPressMask | ButtonReleaseMask | + StructureNotifyMask); + XSelectInput(display,icon_win, + ExposureMask | ButtonPressMask | ButtonReleaseMask | + StructureNotifyMask); + + /* set names for windows */ + XStoreName(display,ivac_win,name); + XSetIconName(display,ivac_win,name); + + /* graphics context values */ + my_gc_val.foreground=black; + my_gc_val.background=white; + my_gc_val.graphics_exposures=False; + + /* set graphics context */ + my_gc=XCreateGC(display,ivac_win, + GCForeground | GCBackground | GCGraphicsExposures, + &my_gc_val); + + /* create pixmap mask and shape windows */ + pixmap_mask=XCreateBitmapFromData(display,ivac_win,ivac_mask, + XBM_WIDTH,XBM_HEIGHT); + XShapeCombineMask(display,ivac_win,ShapeBounding,0,0,pixmap_mask,ShapeSet); + XShapeCombineMask(display,icon_win,ShapeBounding,0,0,pixmap_mask,ShapeSet); + + /* define and set wmhints */ + my_wm_hints.initial_state=WithdrawnState; + my_wm_hints.flags=StateHint; + my_wm_hints.icon_window=icon_win; + my_wm_hints.icon_x=my_size_hints.x; + my_wm_hints.icon_y=my_size_hints.y; + my_wm_hints.window_group=ivac_win; + my_wm_hints.flags = + StateHint | IconWindowHint | IconPositionHint | WindowGroupHint; + XSetWMHints(display,ivac_win,&my_wm_hints); + + /* finaly ... map that stuff ;) */ + XMapWindow(display,ivac_win); + +} + /* main routine */ int main(int argc,char **argv) { /* local variables */ - int screen_id,screen_width,screen_height; - Window root_window,win; - unsigned long white_pixel,black_pixel; + XEvent xevent; + /* opening display */ display=XOpenDisplay(NULL); /* connect on local display :0 */ @@ -30,43 +129,19 @@ int main(int argc,char **argv) { printf("cannot connect to xserver!\n"); exit(EXIT_FAILURE); } + + /* minirgb initialization */ + if (minirgb_init(display)) { + printf("minirgb initialization failed!\n"); + exit(1); + } - /* getting basic xserver information */ - // our screen id - screen_id=DefaultScreen(display); - // dimensions of screen - screen_width=DisplayWidth(display,screen_id); - screen_height=DisplayHeight(display,screen_id); - // how to draw white/black pixels */ - white_pixel=WhitePixel(display,screen_id); - black_pixel=BlackPixel(display,screen_id); - // the screen's root window id - root_window=RootWindow(display,screen_id); - - /* print basic xserver settings */ - printf("screen ID: %d\n",screen_id); - printf("dimensions: %d x %d\n",screen_width,screen_height); - printf("white color -> %d\n",white_pixel); - printf("black color -> %d\n",black_pixel); - - /* open a window */ - win=XCreateSimpleWindow(display, - root_window, - 0,0, // coordinates - screen_width/3,screen_height/3, - 500,black_pixel,white_pixel); + open_window(argv[0],ivac_logo); - /* map the window */ - XMapWindow(display,win); - /* flush */ + /* to be continued ... here is a test! */ XFlush(display); - - /* wait a bit */ sleep(5); - printf("blabla ....\n"); - - /* close display */ - XCloseDisplay(display); + printf("blaaaa, schmaeee\n"); }