diff options
author | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
commit | 76bcc36ed305418a3ddc5752d287ede894243e1b (patch) | |
tree | bacb320c825768471ce56f058f17ce863d592376 /xorg-server/fb/fbarc.c | |
parent | 7d894e32566b710952c44cbc71939ad1d9e2fa8d (diff) | |
parent | 0f834b91a4768673833ab4917e87d86c237bb1a6 (diff) | |
download | vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.gz vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.bz2 vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
pixman/pixman/pixman-mmx.c
xorg-server/Xext/shm.c
xorg-server/Xext/syncsrv.h
xorg-server/Xext/xvmain.c
xorg-server/Xi/exevents.c
xorg-server/Xi/opendev.c
xorg-server/composite/compalloc.c
xorg-server/composite/compoverlay.c
xorg-server/dix/colormap.c
xorg-server/dix/devices.c
xorg-server/dix/dispatch.c
xorg-server/dix/dixfonts.c
xorg-server/dix/eventconvert.c
xorg-server/dix/events.c
xorg-server/dix/gc.c
xorg-server/dix/getevents.c
xorg-server/dix/main.c
xorg-server/dix/privates.c
xorg-server/dix/registry.c
xorg-server/dix/resource.c
xorg-server/exa/exa_accel.c
xorg-server/exa/exa_migration_classic.c
xorg-server/exa/exa_unaccel.c
xorg-server/fb/fb.h
xorg-server/fb/fbcopy.c
xorg-server/fb/fbpixmap.c
xorg-server/glx/dispatch.h
xorg-server/glx/glapi.h
xorg-server/glx/glapi_gentable.c
xorg-server/glx/glapitable.h
xorg-server/glx/glprocs.h
xorg-server/glx/glxcmds.c
xorg-server/glx/glxcmdsswap.c
xorg-server/glx/glxdricommon.c
xorg-server/glx/glxdriswrast.c
xorg-server/glx/glxext.c
xorg-server/glx/indirect_dispatch.c
xorg-server/glx/indirect_dispatch.h
xorg-server/glx/indirect_dispatch_swap.c
xorg-server/glx/indirect_size.h
xorg-server/glx/indirect_size_get.h
xorg-server/glx/indirect_table.c
xorg-server/glx/indirect_util.c
xorg-server/glx/rensize.c
xorg-server/glx/single2swap.c
xorg-server/glx/singlepix.c
xorg-server/glx/singlepixswap.c
xorg-server/glx/singlesize.c
xorg-server/hw/dmx/dmxinit.c
xorg-server/hw/kdrive/ephyr/ephyr.c
xorg-server/hw/kdrive/ephyr/hostx.c
xorg-server/hw/kdrive/ephyr/hostx.h
xorg-server/hw/kdrive/src/kinput.c
xorg-server/hw/xfree86/common/compiler.h
xorg-server/hw/xwin/InitInput.c
xorg-server/hw/xwin/InitOutput.c
xorg-server/hw/xwin/ddraw.h
xorg-server/hw/xwin/glx/glwrap.c
xorg-server/hw/xwin/glx/indirect.c
xorg-server/hw/xwin/glx/wgl_ext_api.h
xorg-server/hw/xwin/glx/winpriv.c
xorg-server/hw/xwin/win.h
xorg-server/hw/xwin/winallpriv.c
xorg-server/hw/xwin/winauth.c
xorg-server/hw/xwin/winclipboard.h
xorg-server/hw/xwin/winclipboardinit.c
xorg-server/hw/xwin/winclipboardthread.c
xorg-server/hw/xwin/winclipboardunicode.c
xorg-server/hw/xwin/winclipboardwndproc.c
xorg-server/hw/xwin/winclipboardwrappers.c
xorg-server/hw/xwin/winclipboardxevents.c
xorg-server/hw/xwin/wincmap.c
xorg-server/hw/xwin/winconfig.c
xorg-server/hw/xwin/wincreatewnd.c
xorg-server/hw/xwin/wincursor.c
xorg-server/hw/xwin/windialogs.c
xorg-server/hw/xwin/winengine.c
xorg-server/hw/xwin/winerror.c
xorg-server/hw/xwin/wingc.c
xorg-server/hw/xwin/wingetsp.c
xorg-server/hw/xwin/winkeybd.c
xorg-server/hw/xwin/winkeybd.h
xorg-server/hw/xwin/winlayouts.h
xorg-server/hw/xwin/winmisc.c
xorg-server/hw/xwin/winmonitors.c
xorg-server/hw/xwin/winmouse.c
xorg-server/hw/xwin/winmsg.c
xorg-server/hw/xwin/winmsg.h
xorg-server/hw/xwin/winmultiwindowclass.c
xorg-server/hw/xwin/winmultiwindowicons.c
xorg-server/hw/xwin/winmultiwindowshape.c
xorg-server/hw/xwin/winmultiwindowwindow.c
xorg-server/hw/xwin/winmultiwindowwm.c
xorg-server/hw/xwin/winmultiwindowwndproc.c
xorg-server/hw/xwin/winnativegdi.c
xorg-server/hw/xwin/winpfbdd.c
xorg-server/hw/xwin/winpixmap.c
xorg-server/hw/xwin/winpolyline.c
xorg-server/hw/xwin/winprefs.c
xorg-server/hw/xwin/winprocarg.c
xorg-server/hw/xwin/winregistry.c
xorg-server/hw/xwin/winscrinit.c
xorg-server/hw/xwin/winsetsp.c
xorg-server/hw/xwin/winshaddd.c
xorg-server/hw/xwin/winshadddnl.c
xorg-server/hw/xwin/winshadgdi.c
xorg-server/hw/xwin/wintrayicon.c
xorg-server/hw/xwin/winwin32rootless.c
xorg-server/hw/xwin/winwin32rootlesswindow.c
xorg-server/hw/xwin/winwin32rootlesswndproc.c
xorg-server/hw/xwin/winwindow.c
xorg-server/hw/xwin/winwindow.h
xorg-server/hw/xwin/winwindowswm.c
xorg-server/hw/xwin/winwndproc.c
xorg-server/include/callback.h
xorg-server/include/dixstruct.h
xorg-server/include/misc.h
xorg-server/include/os.h
xorg-server/include/scrnintstr.h
xorg-server/mi/micmap.c
xorg-server/mi/miinitext.c
xorg-server/mi/mioverlay.c
xorg-server/mi/misprite.c
xorg-server/mi/mivaltree.c
xorg-server/mi/miwindow.c
xorg-server/miext/damage/damage.c
xorg-server/miext/rootless/rootlessGC.c
xorg-server/miext/rootless/rootlessWindow.c
xorg-server/os/WaitFor.c
xorg-server/os/access.c
xorg-server/os/connection.c
xorg-server/os/io.c
xorg-server/os/log.c
xorg-server/os/osinit.c
xorg-server/os/utils.c
xorg-server/os/xdmcp.c
xorg-server/os/xprintf.c
xorg-server/os/xstrans.c
xorg-server/render/mipict.c
xorg-server/xkb/xkbActions.c
xorg-server/xkb/xkbInit.c
xorg-server/xkeyboard-config/compat/default.in
Diffstat (limited to 'xorg-server/fb/fbarc.c')
-rw-r--r-- | xorg-server/fb/fbarc.c | 189 |
1 files changed, 93 insertions, 96 deletions
diff --git a/xorg-server/fb/fbarc.c b/xorg-server/fb/fbarc.c index e54c80491..c1b7f7785 100644 --- a/xorg-server/fb/fbarc.c +++ b/xorg-server/fb/fbarc.c @@ -28,115 +28,112 @@ #include "mizerarc.h" #include <limits.h> -typedef void (*FbArc) (FbBits *dst, - FbStride dstStride, - int dstBpp, - xArc *arc, - int dx, - int dy, - FbBits and, - FbBits xor); +typedef void (*FbArc) (FbBits * dst, + FbStride dstStride, + int dstBpp, + xArc * arc, int dx, int dy, FbBits and, FbBits xor); void -fbPolyArc (DrawablePtr pDrawable, - GCPtr pGC, - int narcs, - xArc *parcs) +fbPolyArc(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc * parcs) { - FbArc arc; - - if (pGC->lineWidth == 0) - { - arc = 0; - if (pGC->lineStyle == LineSolid && pGC->fillStyle == FillSolid) - { - switch (pDrawable->bitsPerPixel) - { - case 8: arc = fbArc8; break; - case 16: arc = fbArc16; break; - case 24: arc = fbArc24; break; - case 32: arc = fbArc32; break; - } - } - if (arc) - { - FbGCPrivPtr pPriv = fbGetGCPrivate (pGC); - FbBits *dst; - FbStride dstStride; - int dstBpp; - int dstXoff, dstYoff; - BoxRec box; - int x2, y2; - RegionPtr cclip; + FbArc arc; + + if (pGC->lineWidth == 0) { + arc = 0; + if (pGC->lineStyle == LineSolid && pGC->fillStyle == FillSolid) { + switch (pDrawable->bitsPerPixel) { + case 8: + arc = fbArc8; + break; + case 16: + arc = fbArc16; + break; + case 24: + arc = fbArc24; + break; + case 32: + arc = fbArc32; + break; + } + } + if (arc) { + FbGCPrivPtr pPriv = fbGetGCPrivate(pGC); + FbBits *dst; + FbStride dstStride; + int dstBpp; + int dstXoff, dstYoff; + BoxRec box; + int x2, y2; + RegionPtr cclip; + #ifdef FB_ACCESS_WRAPPER - int wrapped = 1; + int wrapped = 1; #endif - - cclip = fbGetCompositeClip (pGC); - fbGetDrawable (pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff); - while (narcs--) - { - if (miCanZeroArc (parcs)) - { - box.x1 = parcs->x + pDrawable->x; - box.y1 = parcs->y + pDrawable->y; - /* - * Because box.x2 and box.y2 get truncated to 16 bits, and the - * RECT_IN_REGION test treats the resulting number as a signed - * integer, the RECT_IN_REGION test alone can go the wrong way. - * This can result in a server crash because the rendering - * routines in this file deal directly with cpu addresses - * of pixels to be stored, and do not clip or otherwise check - * that all such addresses are within their respective pixmaps. - * So we only allow the RECT_IN_REGION test to be used for - * values that can be expressed correctly in a signed short. - */ - x2 = box.x1 + (int)parcs->width + 1; - box.x2 = x2; - y2 = box.y1 + (int)parcs->height + 1; - box.y2 = y2; - if ( (x2 <= SHRT_MAX) && (y2 <= SHRT_MAX) && - (RegionContainsRect(cclip, &box) == rgnIN) ) { + + cclip = fbGetCompositeClip(pGC); + fbGetDrawable(pDrawable, dst, dstStride, dstBpp, dstXoff, dstYoff); + while (narcs--) { + if (miCanZeroArc(parcs)) { + box.x1 = parcs->x + pDrawable->x; + box.y1 = parcs->y + pDrawable->y; + /* + * Because box.x2 and box.y2 get truncated to 16 bits, and the + * RECT_IN_REGION test treats the resulting number as a signed + * integer, the RECT_IN_REGION test alone can go the wrong way. + * This can result in a server crash because the rendering + * routines in this file deal directly with cpu addresses + * of pixels to be stored, and do not clip or otherwise check + * that all such addresses are within their respective pixmaps. + * So we only allow the RECT_IN_REGION test to be used for + * values that can be expressed correctly in a signed short. + */ + x2 = box.x1 + (int) parcs->width + 1; + box.x2 = x2; + y2 = box.y1 + (int) parcs->height + 1; + box.y2 = y2; + if ((x2 <= SHRT_MAX) && (y2 <= SHRT_MAX) && + (RegionContainsRect(cclip, &box) == rgnIN)) { #ifdef FB_ACCESS_WRAPPER - if (!wrapped) { - fbPrepareAccess (pDrawable); - wrapped = 1; - } + if (!wrapped) { + fbPrepareAccess(pDrawable); + wrapped = 1; + } #endif - (*arc) (dst, dstStride, dstBpp, - parcs, pDrawable->x + dstXoff, pDrawable->y + dstYoff, - pPriv->and, pPriv->xor); - } else { + (*arc) (dst, dstStride, dstBpp, + parcs, pDrawable->x + dstXoff, + pDrawable->y + dstYoff, pPriv->and, pPriv->xor); + } + else { #ifdef FB_ACCESS_WRAPPER - if (wrapped) { - fbFinishAccess (pDrawable); - wrapped = 0; - } + if (wrapped) { + fbFinishAccess(pDrawable); + wrapped = 0; + } #endif - miZeroPolyArc(pDrawable, pGC, 1, parcs); - } - } - else { + miZeroPolyArc(pDrawable, pGC, 1, parcs); + } + } + else { #ifdef FB_ACCESS_WRAPPER - if (wrapped) { - fbFinishAccess (pDrawable); - wrapped = 0; - } + if (wrapped) { + fbFinishAccess(pDrawable); + wrapped = 0; + } #endif - miPolyArc(pDrawable, pGC, 1, parcs); - } - parcs++; - } + miPolyArc(pDrawable, pGC, 1, parcs); + } + parcs++; + } #ifdef FB_ACCESS_WRAPPER - if (wrapped) { - fbFinishAccess (pDrawable); - wrapped = 0; - } + if (wrapped) { + fbFinishAccess(pDrawable); + wrapped = 0; + } #endif - } - else - miZeroPolyArc (pDrawable, pGC, narcs, parcs); + } + else + miZeroPolyArc(pDrawable, pGC, narcs, parcs); } else - miPolyArc (pDrawable, pGC, narcs, parcs); + miPolyArc(pDrawable, pGC, narcs, parcs); } |