[Xcb] Xlib Code --- Why not Drawing Rectangle??????
pihu
m.richa at gmail.com
Mon Jul 18 21:24:28 EST 2005
Hi,
I have pasted my code below....
I want to draw rectangle in any selected window including
desktop(whichever is selected) in the motion event of my pointer but
its not drawing . Can anybody tell me what can be the problem???its
showing me the pointer motion but no drawing.....
Please tell me what could be the reason????
regards,
Pihu......
main(int argc, char **argv)
{
register int i;
int tree = 0, stats = 0, bits = 0, events = 0, wm = 0, size =
0, shape = 0;
int frame = 0, children = 0;
Window window;
window = 0;
char *displayname = NULL;
dpy = XOpenDisplay(0);
screen = DefaultScreen(dpy);
/* If no window selected on command line, let user pick one
the hard way */
if (!window)
{
printf("\n");
printf("xwininfo: Please select the window about which you\n");
printf(" would like information by clicking the\n");
printf(" mouse in that window.\n");
window = Select_Window(dpy);
printf("The target Window address is 0x%x \n",window);
}
/*
* Routine to let user select a window using the mouse
*/
Window Select_Window(dpy)
Display *dpy;
{
int status;
Cursor cursor;
XEvent event;
Window target_win = None, root = RootWindow(dpy,screen),child;
GC gc; // handle of newly created GC
XGCValues values; // initial values for the GC
unsigned long valuemask = 0; // which values in 'values' to /
// check when creating the GC. /
int buttons = 0;
XPoint p1,p2;
int index = 1;
int pos_x, pos_y;
int prev_x, prev_y;
int flag1 = 0;
int flag = 0;
int x = 0,y = 0;
int root_x, root_y;
unsigned int keys_buttons;
/* Make the target cursor */
cursor = XCreateFontCursor(dpy, XC_crosshair);
/* Grab the pointer using target cursor, letting it room all over */
status = XGrabPointer(dpy, root,
False,ButtonPressMask|ButtonReleaseMask|PointerMotionMask|ButtonMotionMask,
GrabModeSync,
GrabModeAsync, root, cursor, CurrentTime);
if (status != GrabSuccess) Fatal_Error("Can't grab the mouse.");
gc = XCreateGC(dpy, root, valuemask , &values);
if (gc < 0)
{
fprintf(stderr, "XCreateGC: \n");
}
/* Let the user select a window... */
while ((target_win == None) || (buttons != 0))
{
/* allow one more event */
XAllowEvents(dpy, SyncPointer, CurrentTime);
XWindowEvent(dpy, root,
ButtonPressMask|ButtonReleaseMask|ButtonMotionMask|PointerMotionMask,
&event);
switch (event.type)
{
case ButtonPress:
if (target_win == None)
{
target_win = event.xbutton.subwindow;
/* window selected */
p1.x = event.xbutton.x;
p1.y = event.xbutton.y;
printf("BUTTON PRESSED \n");
if (target_win == None) target_win = root;
if (target_win )
{
int dummyi;
unsigned int dummy;
if (XGetGeometry (dpy,
target_win, &root, &dummyi, &dummyi,
&dummy, &dummy,
&dummy, &dummy) &&
target_win != root)
target_win = XmuClientWindow
(dpy, target_win);
}
printf("The target Window address is
0x%x with in BUTTON PRESS after getting
XmuClientWindow\n",target_win);
}
buttons++;
break;
case ButtonRelease:
index++;
p2.x = event.xbutton.x;
p2.y = event.xbutton.y;
flag1 = 1;
printf("BUTTON RELEASED\n");
printf("top left coordinates are X : %d
Y : %d\n",p1.x,p1.y);
printf("top right coordinates are X : %d
Y : %d \n",p2.x,p1.y);
printf("bottom left coordinates are X : %d
Y : %d \n",p1.x,p2.y);
printf("bottom right coordinates are X : %d
Y : %d \n",p2.x,p2.y);
if (buttons > 0) /* there may have been some
down before we started */
buttons--;
break;
case MotionNotify:
printf("Mouse POINTER Motion\n");
while (XCheckMaskEvent(dpy,
PointerMotionHintMask | ButtonMotionMask, &event));
if (!XQueryPointer(dpy, event.xmotion.window,
&root, &child, &root_x, &root_y,
&pos_x, &pos_y, &keys_buttons))
{
//printf("After motion notify \n");
// printf("motion %d %d \n",pos_x,pos_y);
}
if (flag)
{
XClearWindow(dpy, target_win);
if(pos_y < p1.y && pos_x > p1.x) // fourth quadrant
{
XDrawRectangle(dpy, target_win, gc, p1.x-1 ,pos_y+1 ,p1.x
+1 > pos_x ? p1.x - pos_x+1: pos_x -(p1.x+1),p1.y +1 > pos_y ? (p1.y +
1) - pos_y: pos_y -(p1.y +1) );
}
else if(pos_y < p1.y && pos_x < p1.x)//Third quadrant
{
XDrawRectangle(dpy, target_win, gc, pos_x-1 ,pos_y-1
,p1.x +1 > pos_x ? p1.x - pos_x+1: pos_x -(p1.x+1),p1.y +1
> pos_y ? (p1.y + 1) - pos_y: pos_y -(p1.y +1) );
}
else if(pos_y > p1.y && pos_x < p1.x) //Second quadrant
{
XDrawRectangle(dpy, target_win, gc, pos_x-1 ,p1.y+1 ,p1.x
+1 > pos_x ? p1.x - pos_x+1: pos_x -(p1.x+1),p1.y +1 > pos_y ? (p1.y +
1) - pos_y: pod
u}9ħ@=*_7OkSOUƭ6j}p$m4sI9\S/0 İ(L/ =_m[MkxF&Ax1&llL1, 0, >|XF9[abevbl18ٍٍ6cf6`ppC iL6Vb1bرecf6&Xٍٍ 9A֠SpM.bMٍؙcf6cf5A Ahp{obevbl18ٍٍ6cf6ceD@A.tK+I]lX1,llƶAA @AF)M+H2f$ٍٍ6cf6cJ@A" 7}sǷ]v߾YtMىf6cf6&Xٍٍ@h, 6vk+w4:m,&Mٍؙcf6cf5A@@Asm:
fi&llL1==
D@Ad9Uvbqݳ1,ll^ C ZtJi]lX1;kM6( r :=vte I1,lly8 =+eىvllL1$,( bز&Ŏ-12l P@8AvWۊ]vaaaaaaaaaalW]e I1,llpC zҝ`mi216]wll1/a0dJP)˙ZY[MX؋lF:ll11hA@@Aª7Ue1f6cf6&Xٍٍ*A(K,,ofl3wieىvllL1@A" 0="-kܮkcllL1Վ( r 3ei6!cyf$ٍٍ6cf6cDD@AMm-6&Wf&˳ٍ鵦֛ZmcUD@Az]lX1,llƭP q .I62f$ٍٍ6cf6