Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
draw.c
Log Message:
Fix segv in ScaleLine, simplify some code a bit.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/draw.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -3 -r1.44 -r1.45
--- draw.c 9 Apr 2004 12:59:55 -0000 1.44
+++ draw.c 1 May 2004 09:53:14 -0000 1.45
@@ -307,6 +307,7 @@
bpp = 3;
else
bpp = 4;
+
#if !USE_IMLIB2
if ((pImlib_Context->max_shm) && ((bpp * w * h) > pImlib_Context->max_shm))
return NULL;
@@ -317,69 +318,49 @@
pi = Emalloc(sizeof(PixImg));
if (!pi)
return NULL;
+
pi->shminfo = Emalloc(sizeof(XShmSegmentInfo));
- if (!pi->shminfo)
- {
- Efree(pi);
- return NULL;
- }
- pi->xim =
- XShmCreateImage(disp, root.vis, root.depth, ZPixmap, NULL, pi->shminfo,
- w, h);
- if (!pi->xim)
- {
- Efree(pi->shminfo);
- Efree(pi);
- return NULL;
- }
- pi->shminfo->shmid =
- shmget(IPC_PRIVATE, pi->xim->bytes_per_line * pi->xim->height,
- IPC_CREAT | 0666);
- if (pi->shminfo->shmid < 0)
- {
- XDestroyImage(pi->xim);
- Efree(pi->shminfo);
- Efree(pi);
- return NULL;
- }
- pi->shminfo->shmaddr = pi->xim->data = shmat(pi->shminfo->shmid, 0, 0);
- if (!pi->shminfo->shmaddr)
+ if (pi->shminfo)
{
- shmctl(pi->shminfo->shmid, IPC_RMID, 0);
- XDestroyImage(pi->xim);
- Efree(pi->shminfo);
- Efree(pi);
- return NULL;
- }
- pi->shminfo->readOnly = False;
- XShmAttach(disp, pi->shminfo);
- pi->pmap =
- XShmCreatePixmap(disp, win, pi->shminfo->shmaddr, pi->shminfo, w, h,
- root.depth);
- if (!pi->pmap)
- {
- XShmDetach(disp, pi->shminfo);
- shmdt(pi->shminfo->shmaddr);
- shmctl(pi->shminfo->shmid, IPC_RMID, 0);
- XDestroyImage(pi->xim);
- Efree(pi->shminfo);
- Efree(pi);
- return NULL;
- }
- gcv.subwindow_mode = IncludeInferiors;
- pi->gc = XCreateGC(disp, win, GCSubwindowMode, &gcv);
- if (!pi->gc)
- {
- XShmDetach(disp, pi->shminfo);
- shmdt(pi->shminfo->shmaddr);
- shmctl(pi->shminfo->shmid, IPC_RMID, 0);
- XDestroyImage(pi->xim);
+ pi->xim = XShmCreateImage(disp, root.vis, root.depth, ZPixmap, NULL,
+ pi->shminfo, w, h);
+ if (pi->xim)
+ {
+ pi->shminfo->shmid =
+ shmget(IPC_PRIVATE, pi->xim->bytes_per_line * pi->xim->height,
+ IPC_CREAT | 0666);
+ if (pi->shminfo->shmid >= 0)
+ {
+ pi->shminfo->shmaddr = pi->xim->data =
+ shmat(pi->shminfo->shmid, 0, 0);
+ if (pi->shminfo->shmaddr)
+ {
+ pi->shminfo->readOnly = False;
+ XShmAttach(disp, pi->shminfo);
+ pi->pmap =
+ XShmCreatePixmap(disp, win, pi->shminfo->shmaddr,
+ pi->shminfo, w, h, root.depth);
+ if (pi->pmap)
+ {
+ gcv.subwindow_mode = IncludeInferiors;
+ pi->gc =
+ XCreateGC(disp, win, GCSubwindowMode, &gcv);
+ if (pi->gc)
+ return pi;
+
+ XFreePixmap(disp, pi->pmap);
+ }
+ XShmDetach(disp, pi->shminfo);
+ shmdt(pi->shminfo->shmaddr);
+ }
+ shmctl(pi->shminfo->shmid, IPC_RMID, 0);
+ }
+ XDestroyImage(pi->xim);
+ }
Efree(pi->shminfo);
- XFreePixmap(disp, pi->pmap);
- Efree(pi);
- return NULL;
}
- return pi;
+ Efree(pi);
+ return NULL;
}
void
@@ -899,73 +880,58 @@
p_grab = ECreatePixImg(dest, sw, 1);
if (p_grab)
{
- if (HIQ)
+ p_buf = ECreatePixImg(dest, pw, 1);
+ if (p_buf)
{
- p_grab2 = ECreatePixImg(dest, sw, 1);
- if (!p_grab2)
+ XCopyArea(disp, src, p_grab->pmap, gc, 0, sy, sw, 1, 0, 0);
+ if (HIQ)
{
- EDestroyPixImg(p_grab);
- p_grab = NULL;
- }
- }
+ p_grab2 = ECreatePixImg(dest, sw, 1);
+ if (!p_grab2)
+ goto boo1;
- if (p_grab)
- {
- p_buf = ECreatePixImg(dest, pw, 1);
- if (p_buf)
- {
- XCopyArea(disp, src, p_grab->pmap, gc, 0, sy, sw, 1, 0, 0);
- if (HIQ)
- XCopyArea(disp, src, p_grab2->pmap, gc, 0, sy + (sh / 2),
- sw, 1, 0, 0);
- XSync(disp, False);
+ XCopyArea(disp, src, p_grab2->pmap, gc, 0,
+ sy + (sh / 2), sw, 1, 0, 0);
}
+ XSync(disp, False);
+ goto wheee;
+
+ boo1:
+ EDestroyPixImg(p_buf);
+ p_buf = NULL;
}
- else
- {
- EDestroyPixImg(p_grab);
- if (p_grab2)
- EDestroyPixImg(p_grab2);
- p_grab = NULL;
- }
+ EDestroyPixImg(p_grab);
+ p_grab = NULL;
}
- if (!p_grab)
+ px_grab = XGetImage(disp, src, 0, sy, sw, 1, 0xffffffff, ZPixmap);
+ if (px_grab)
{
- px_grab = XGetImage(disp, src, 0, sy, sw, 1, 0xffffffff, ZPixmap);
- if (!px_grab)
- return;
-
- if (HIQ)
- px_grab2 =
- XGetImage(disp, src, 0, sy + (sh / 2), sw, 1, 0xffffffff,
- ZPixmap);
- if (!px_grab2)
+ px_buf = XCreateImage(disp, root.vis, root.depth, ZPixmap, 0,
+ NULL, pw, 1, 32, 0);
+ if (px_buf)
{
- XDestroyImage(px_grab);
- return;
- }
+ px_buf->data = malloc(px_buf->bytes_per_line * px_buf->height);
+ if (!px_buf->data)
+ goto boo2;
- px_buf =
- XCreateImage(disp, root.vis, root.depth, ZPixmap, 0, NULL, pw, 1,
- 32, 0);
- if (!px_buf)
- {
- XDestroyImage(px_grab);
- XDestroyImage(px_grab2);
- return;
- }
+ if (HIQ)
+ {
+ px_grab2 = XGetImage(disp, src, 0, sy + (sh / 2), sw, 1,
+ 0xffffffff, ZPixmap);
+ if (!px_grab2)
+ goto boo2;
+ }
+ goto wheee;
- px_buf->data = malloc(px_buf->bytes_per_line * px_buf->height);
- if (!px_buf->data)
- {
- XDestroyImage(px_grab);
- XDestroyImage(px_grab2);
+ boo2:
XDestroyImage(px_buf);
- return;
}
+ XDestroyImage(px_grab);
+ return;
}
+ wheee:
if (HIQ)
{
int v1, v2, v3, v4, difx;
-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g.
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs