xorg: work on offscreen bitmaps
This commit is contained in:
parent
2e7d413693
commit
bdc2c51fee
@ -8,7 +8,8 @@ XSRCBASE = ../build_dir/xorg-server-1.9.3
|
||||
|
||||
OBJS = rdpmain.o rdpdraw.o rdpinput.o rdpmisc.o rdpup.o rdprandr.o \
|
||||
rdpCopyArea.o rdpPolyFillRect.o rdpPutImage.o rdpPolyRectangle.o \
|
||||
rdpPolylines.o rdpPolySegment.o \
|
||||
rdpPolylines.o rdpPolySegment.o rdpFillSpans.o rdpSetSpans.o \
|
||||
rdpCopyPlane.o \
|
||||
miinitext.o \
|
||||
fbcmap_mi.o
|
||||
|
||||
|
@ -33,12 +33,6 @@ static void
|
||||
rdpDestroyClip(GCPtr pGC);
|
||||
static void
|
||||
rdpCopyClip(GCPtr dst, GCPtr src);
|
||||
static void
|
||||
rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
||||
DDXPointPtr pptInit, int * pwidthInit, int fSorted);
|
||||
static void
|
||||
rdpSetSpans(DrawablePtr pDrawable, GCPtr pGC, char * psrc,
|
||||
DDXPointPtr ppt, int * pwidth, int nspans, int fSorted);
|
||||
static RegionPtr
|
||||
rdpCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
|
||||
GCPtr pGC, int srcx, int srcy, int width, int height,
|
||||
|
157
xorg/X11R7.6/rdp/rdpCopyPlane.c
Normal file
157
xorg/X11R7.6/rdp/rdpCopyPlane.c
Normal file
@ -0,0 +1,157 @@
|
||||
/*
|
||||
Copyright 2005-2012 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpdraw.h"
|
||||
|
||||
#define LDEBUG 0
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOG(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; } } while (0)
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
extern rdpScreenInfoRec g_rdpScreen; /* from rdpmain.c */
|
||||
extern DevPrivateKeyRec g_rdpGCIndex; /* from rdpmain.c */
|
||||
extern DevPrivateKeyRec g_rdpWindowIndex; /* from rdpmain.c */
|
||||
extern DevPrivateKeyRec g_rdpPixmapIndex; /* from rdpmain.c */
|
||||
extern int g_Bpp; /* from rdpmain.c */
|
||||
extern ScreenPtr g_pScreen; /* from rdpmain.c */
|
||||
extern Bool g_wrapPixmap; /* from rdpmain.c */
|
||||
|
||||
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||
|
||||
extern int g_con_number; /* in rdpup.c */
|
||||
|
||||
/******************************************************************************/
|
||||
RegionPtr
|
||||
rdpCopyPlaneOrg(DrawablePtr pSrc, DrawablePtr pDst,
|
||||
GCPtr pGC, int srcx, int srcy, int w, int h,
|
||||
int dstx, int dsty, unsigned long bitPlane)
|
||||
{
|
||||
RegionPtr rv;
|
||||
rdpGCPtr priv;
|
||||
GCFuncs* oldFuncs;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
rv = pGC->ops->CopyPlane(pSrc, pDst, pGC, srcx, srcy,
|
||||
w, h, dstx, dsty, bitPlane);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
RegionPtr
|
||||
rdpCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
|
||||
GCPtr pGC, int srcx, int srcy, int w, int h,
|
||||
int dstx, int dsty, unsigned long bitPlane)
|
||||
{
|
||||
RegionPtr rv;
|
||||
RegionRec clip_reg;
|
||||
RegionRec box_reg;
|
||||
int cd;
|
||||
int num_clips;
|
||||
int j;
|
||||
int got_id;
|
||||
BoxRec box;
|
||||
BoxPtr pbox;
|
||||
struct image_data id;
|
||||
WindowPtr pDstWnd;
|
||||
PixmapPtr pDstPixmap;
|
||||
rdpPixmapRec* pDstPriv;
|
||||
|
||||
LLOGLN(10, ("rdpCopyPlane:"));
|
||||
|
||||
/* do original call */
|
||||
rv = rdpCopyPlaneOrg(pSrc, pDst, pGC, srcx, srcy, w, h,
|
||||
dstx, dsty, bitPlane);
|
||||
got_id = 0;
|
||||
if (pDst->type == DRAWABLE_PIXMAP)
|
||||
{
|
||||
pDstPixmap = (PixmapPtr)pDst;
|
||||
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||
if (XRDP_IS_OS(pDstPriv))
|
||||
{
|
||||
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||
got_id = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pDst->type == DRAWABLE_WINDOW)
|
||||
{
|
||||
pDstWnd = (WindowPtr)pDst;
|
||||
if (pDstWnd->viewable)
|
||||
{
|
||||
rdpup_get_screen_image_rect(&id);
|
||||
got_id = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!got_id)
|
||||
{
|
||||
return rv;
|
||||
}
|
||||
|
||||
RegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdp_get_clip(&clip_reg, pDst, pGC);
|
||||
if (cd == 1)
|
||||
{
|
||||
rdpup_begin_update();
|
||||
rdpup_send_area(&id, pDst->x + dstx, pDst->y + dsty, w, h);
|
||||
rdpup_end_update();
|
||||
}
|
||||
else if (cd == 2)
|
||||
{
|
||||
num_clips = REGION_NUM_RECTS(&clip_reg);
|
||||
if (num_clips > 0)
|
||||
{
|
||||
rdpup_begin_update();
|
||||
box.x1 = pDst->x + dstx;
|
||||
box.y1 = pDst->y + dsty;
|
||||
box.x2 = box.x1 + w;
|
||||
box.y2 = box.y1 + h;
|
||||
RegionInit(&box_reg, &box, 0);
|
||||
RegionIntersect(&clip_reg, &clip_reg, &box_reg);
|
||||
num_clips = REGION_NUM_RECTS(&clip_reg);
|
||||
if (num_clips < 10)
|
||||
{
|
||||
for (j = num_clips - 1; j >= 0; j--)
|
||||
{
|
||||
box = REGION_RECTS(&clip_reg)[j];
|
||||
rdpup_send_area(&id, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pbox = RegionExtents(&clip_reg);
|
||||
rdpup_send_area(&id, pbox->x1, pbox->y1, pbox->x2 - pbox->x1,
|
||||
pbox->y2 - pbox->y1);
|
||||
}
|
||||
RegionUninit(&box_reg);
|
||||
rdpup_end_update();
|
||||
}
|
||||
}
|
||||
RegionUninit(&clip_reg);
|
||||
return rv;
|
||||
}
|
30
xorg/X11R7.6/rdp/rdpCopyPlane.h
Normal file
30
xorg/X11R7.6/rdp/rdpCopyPlane.h
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
Copyright 2005-2012 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPCOPYPLANE_H
|
||||
#define __RDPCOPYPLANE_H
|
||||
|
||||
RegionPtr
|
||||
rdpCopyPlane(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
|
||||
GCPtr pGC, int srcx, int srcy, int width, int height,
|
||||
int dstx, int dsty, unsigned long bitPlane);
|
||||
|
||||
#endif
|
116
xorg/X11R7.6/rdp/rdpFillSpans.c
Normal file
116
xorg/X11R7.6/rdp/rdpFillSpans.c
Normal file
@ -0,0 +1,116 @@
|
||||
/*
|
||||
Copyright 2005-2012 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpdraw.h"
|
||||
|
||||
#define LDEBUG 0
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOG(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; } } while (0)
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
extern rdpScreenInfoRec g_rdpScreen; /* from rdpmain.c */
|
||||
extern DevPrivateKeyRec g_rdpGCIndex; /* from rdpmain.c */
|
||||
extern DevPrivateKeyRec g_rdpWindowIndex; /* from rdpmain.c */
|
||||
extern DevPrivateKeyRec g_rdpPixmapIndex; /* from rdpmain.c */
|
||||
extern int g_Bpp; /* from rdpmain.c */
|
||||
extern ScreenPtr g_pScreen; /* from rdpmain.c */
|
||||
extern Bool g_wrapPixmap; /* from rdpmain.c */
|
||||
|
||||
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||
|
||||
extern int g_con_number; /* in rdpup.c */
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpFillSpansOrg(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
||||
DDXPointPtr pptInit, int* pwidthInit, int fSorted)
|
||||
{
|
||||
rdpGCPtr priv;
|
||||
GCFuncs* oldFuncs;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->FillSpans(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
||||
DDXPointPtr pptInit, int* pwidthInit, int fSorted)
|
||||
{
|
||||
RegionRec clip_reg;
|
||||
int cd;
|
||||
int j;
|
||||
int got_id;
|
||||
BoxRec box;
|
||||
struct image_data id;
|
||||
WindowPtr pDstWnd;
|
||||
PixmapPtr pDstPixmap;
|
||||
rdpPixmapRec* pDstPriv;
|
||||
|
||||
LLOGLN(0, ("rdpFillSpans: todo"));
|
||||
|
||||
/* do original call */
|
||||
rdpFillSpansOrg(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted);
|
||||
|
||||
got_id = 0;
|
||||
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||
{
|
||||
pDstPixmap = (PixmapPtr)pDrawable;
|
||||
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||
if (XRDP_IS_OS(pDstPriv))
|
||||
{
|
||||
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||
got_id = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||
{
|
||||
pDstWnd = (WindowPtr)pDrawable;
|
||||
if (pDstWnd->viewable)
|
||||
{
|
||||
rdpup_get_screen_image_rect(&id);
|
||||
got_id = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!got_id)
|
||||
{
|
||||
return;
|
||||
}
|
||||
RegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
||||
if (cd == 1)
|
||||
{
|
||||
}
|
||||
else if (cd == 2)
|
||||
{
|
||||
}
|
||||
RegionUninit(&clip_reg);
|
||||
rdpup_switch_os_surface(-1);
|
||||
}
|
29
xorg/X11R7.6/rdp/rdpFillSpans.h
Normal file
29
xorg/X11R7.6/rdp/rdpFillSpans.h
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
Copyright 2005-2012 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPFILLSPANS_H
|
||||
#define __RDPFILLSPANS_H
|
||||
|
||||
void
|
||||
rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
||||
DDXPointPtr pptInit, int* pwidthInit, int fSorted);
|
||||
|
||||
#endif
|
115
xorg/X11R7.6/rdp/rdpSetSpans.c
Normal file
115
xorg/X11R7.6/rdp/rdpSetSpans.c
Normal file
@ -0,0 +1,115 @@
|
||||
/*
|
||||
Copyright 2005-2012 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#include "rdp.h"
|
||||
#include "rdpdraw.h"
|
||||
|
||||
#define LDEBUG 0
|
||||
|
||||
#define LOG_LEVEL 1
|
||||
#define LLOG(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; } } while (0)
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LOG_LEVEL) { ErrorF _args ; ErrorF("\n"); } } while (0)
|
||||
|
||||
extern rdpScreenInfoRec g_rdpScreen; /* from rdpmain.c */
|
||||
extern DevPrivateKeyRec g_rdpGCIndex; /* from rdpmain.c */
|
||||
extern DevPrivateKeyRec g_rdpWindowIndex; /* from rdpmain.c */
|
||||
extern DevPrivateKeyRec g_rdpPixmapIndex; /* from rdpmain.c */
|
||||
extern int g_Bpp; /* from rdpmain.c */
|
||||
extern ScreenPtr g_pScreen; /* from rdpmain.c */
|
||||
extern Bool g_wrapPixmap; /* from rdpmain.c */
|
||||
|
||||
extern GCOps g_rdpGCOps; /* from rdpdraw.c */
|
||||
|
||||
extern int g_con_number; /* in rdpup.c */
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpSetSpansOrg(DrawablePtr pDrawable, GCPtr pGC, char* psrc,
|
||||
DDXPointPtr ppt, int* pwidth, int nspans, int fSorted)
|
||||
{
|
||||
rdpGCPtr priv;
|
||||
GCFuncs* oldFuncs;
|
||||
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->SetSpans(pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void
|
||||
rdpSetSpans(DrawablePtr pDrawable, GCPtr pGC, char* psrc,
|
||||
DDXPointPtr ppt, int* pwidth, int nspans, int fSorted)
|
||||
{
|
||||
RegionRec clip_reg;
|
||||
int cd;
|
||||
int got_id;
|
||||
struct image_data id;
|
||||
WindowPtr pDstWnd;
|
||||
PixmapPtr pDstPixmap;
|
||||
rdpPixmapRec* pDstPriv;
|
||||
|
||||
|
||||
LLOGLN(0, ("rdpSetSpans: todo"));
|
||||
|
||||
/* do original call */
|
||||
rdpSetSpansOrg(pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted);
|
||||
|
||||
got_id = 0;
|
||||
if (pDrawable->type == DRAWABLE_PIXMAP)
|
||||
{
|
||||
pDstPixmap = (PixmapPtr)pDrawable;
|
||||
pDstPriv = GETPIXPRIV(pDstPixmap);
|
||||
if (XRDP_IS_OS(pDstPriv))
|
||||
{
|
||||
rdpup_switch_os_surface(pDstPriv->rdpid);
|
||||
rdpup_get_pixmap_image_rect(pDstPixmap, &id);
|
||||
got_id = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pDrawable->type == DRAWABLE_WINDOW)
|
||||
{
|
||||
pDstWnd = (WindowPtr)pDrawable;
|
||||
if (pDstWnd->viewable)
|
||||
{
|
||||
rdpup_get_screen_image_rect(&id);
|
||||
got_id = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!got_id)
|
||||
{
|
||||
return;
|
||||
}
|
||||
RegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
||||
if (cd == 1)
|
||||
{
|
||||
}
|
||||
else if (cd == 2)
|
||||
{
|
||||
}
|
||||
RegionUninit(&clip_reg);
|
||||
rdpup_switch_os_surface(-1);
|
||||
}
|
29
xorg/X11R7.6/rdp/rdpSetSpans.h
Normal file
29
xorg/X11R7.6/rdp/rdpSetSpans.h
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
Copyright 2005-2012 Jay Sorg
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided that
|
||||
the above copyright notice appear in all copies and that both that
|
||||
copyright notice and this permission notice appear in supporting
|
||||
documentation.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __RDPSETSPANS_H
|
||||
#define __RDPSETSPANS_H
|
||||
|
||||
void
|
||||
rdpSetSpans(DrawablePtr pDrawable, GCPtr pGC, char* psrc,
|
||||
DDXPointPtr ppt, int* pwidth, int nspans, int fSorted);
|
||||
|
||||
#endif
|
@ -31,6 +31,9 @@ Xserver drawing ops and funcs
|
||||
#include "rdpPolyRectangle.h"
|
||||
#include "rdpPolylines.h"
|
||||
#include "rdpPolySegment.h"
|
||||
#include "rdpFillSpans.h"
|
||||
#include "rdpSetSpans.h"
|
||||
#include "rdpCopyPlane.h"
|
||||
|
||||
#if 1
|
||||
#define DEBUG_OUT_FUNCS(arg)
|
||||
@ -315,159 +318,6 @@ rdpCopyClip(GCPtr dst, GCPtr src)
|
||||
(_pGC)->ops = &g_rdpGCOps; \
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpFillSpans(DrawablePtr pDrawable, GCPtr pGC, int nInit,
|
||||
DDXPointPtr pptInit, int* pwidthInit, int fSorted)
|
||||
{
|
||||
rdpGCPtr priv;
|
||||
RegionRec clip_reg;
|
||||
int cd;
|
||||
int j;
|
||||
GCFuncs* oldFuncs;
|
||||
BoxRec box;
|
||||
|
||||
DEBUG_OUT_OPS(("in rdpFillSpans\n"));
|
||||
GC_OP_PROLOGUE(pGC)
|
||||
pGC->ops->FillSpans(pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted);
|
||||
RegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
||||
if (cd == 1)
|
||||
{
|
||||
rdpup_begin_update();
|
||||
RegionCopy(&clip_reg, &(((WindowPtr)pDrawable)->borderClip));
|
||||
for (j = REGION_NUM_RECTS(&clip_reg) - 1; j >= 0; j--)
|
||||
{
|
||||
box = REGION_RECTS(&clip_reg)[j];
|
||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||
}
|
||||
rdpup_end_update();
|
||||
}
|
||||
else if (cd == 2)
|
||||
{
|
||||
rdpup_begin_update();
|
||||
RegionIntersect(&clip_reg, &clip_reg,
|
||||
&(((WindowPtr)pDrawable)->borderClip));
|
||||
for (j = REGION_NUM_RECTS(&clip_reg) - 1; j >= 0; j--)
|
||||
{
|
||||
box = REGION_RECTS(&clip_reg)[j];
|
||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||
}
|
||||
rdpup_end_update();
|
||||
}
|
||||
RegionUninit(&clip_reg);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpSetSpans(DrawablePtr pDrawable, GCPtr pGC, char* psrc,
|
||||
DDXPointPtr ppt, int* pwidth, int nspans, int fSorted)
|
||||
{
|
||||
rdpGCPtr priv;
|
||||
RegionRec clip_reg;
|
||||
int cd;
|
||||
int j;
|
||||
GCFuncs* oldFuncs;
|
||||
BoxRec box;
|
||||
|
||||
DEBUG_OUT_OPS(("in rdpSetSpans\n"));
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
pGC->ops->SetSpans(pDrawable, pGC, psrc, ppt, pwidth, nspans, fSorted);
|
||||
RegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdp_get_clip(&clip_reg, pDrawable, pGC);
|
||||
if (cd == 1)
|
||||
{
|
||||
rdpup_begin_update();
|
||||
RegionCopy(&clip_reg, &(((WindowPtr)pDrawable)->borderClip));
|
||||
for (j = REGION_NUM_RECTS(&clip_reg) - 1; j >= 0; j--)
|
||||
{
|
||||
box = REGION_RECTS(&clip_reg)[j];
|
||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||
}
|
||||
rdpup_end_update();
|
||||
}
|
||||
else if (cd == 2)
|
||||
{
|
||||
rdpup_begin_update();
|
||||
RegionIntersect(&clip_reg, &clip_reg,
|
||||
&((WindowPtr)pDrawable)->borderClip);
|
||||
for (j = REGION_NUM_RECTS(&clip_reg) - 1; j >= 0; j--)
|
||||
{
|
||||
box = REGION_RECTS(&clip_reg)[j];
|
||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||
}
|
||||
rdpup_end_update();
|
||||
}
|
||||
RegionUninit(&clip_reg);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static RegionPtr
|
||||
rdpCopyPlane(DrawablePtr pSrc, DrawablePtr pDst,
|
||||
GCPtr pGC, int srcx, int srcy, int w, int h,
|
||||
int dstx, int dsty, unsigned long bitPlane)
|
||||
{
|
||||
rdpGCPtr priv;
|
||||
RegionPtr rv;
|
||||
RegionRec clip_reg;
|
||||
RegionRec box_reg;
|
||||
int cd;
|
||||
int num_clips;
|
||||
int j;
|
||||
GCFuncs* oldFuncs;
|
||||
BoxRec box;
|
||||
BoxPtr pbox;
|
||||
|
||||
DEBUG_OUT_OPS(("in rdpCopyPlane\n"));
|
||||
GC_OP_PROLOGUE(pGC);
|
||||
rv = pGC->ops->CopyPlane(pSrc, pDst, pGC, srcx, srcy,
|
||||
w, h, dstx, dsty, bitPlane);
|
||||
RegionInit(&clip_reg, NullBox, 0);
|
||||
cd = rdp_get_clip(&clip_reg, pDst, pGC);
|
||||
if (cd == 1)
|
||||
{
|
||||
rdpup_begin_update();
|
||||
rdpup_send_area(0, pDst->x + dstx, pDst->y + dsty, w, h);
|
||||
rdpup_end_update();
|
||||
}
|
||||
else if (cd == 2)
|
||||
{
|
||||
num_clips = REGION_NUM_RECTS(&clip_reg);
|
||||
if (num_clips > 0)
|
||||
{
|
||||
rdpup_begin_update();
|
||||
box.x1 = pDst->x + dstx;
|
||||
box.y1 = pDst->y + dsty;
|
||||
box.x2 = box.x1 + w;
|
||||
box.y2 = box.y1 + h;
|
||||
RegionInit(&box_reg, &box, 0);
|
||||
RegionIntersect(&clip_reg, &clip_reg, &box_reg);
|
||||
num_clips = REGION_NUM_RECTS(&clip_reg);
|
||||
if (num_clips < 10)
|
||||
{
|
||||
for (j = num_clips - 1; j >= 0; j--)
|
||||
{
|
||||
box = REGION_RECTS(&clip_reg)[j];
|
||||
rdpup_send_area(0, box.x1, box.y1, box.x2 - box.x1, box.y2 - box.y1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pbox = RegionExtents(&clip_reg);
|
||||
rdpup_send_area(0, pbox->x1, pbox->y1, pbox->x2 - pbox->x1,
|
||||
pbox->y2 - pbox->y1);
|
||||
}
|
||||
RegionUninit(&box_reg);
|
||||
rdpup_end_update();
|
||||
}
|
||||
}
|
||||
RegionUninit(&clip_reg);
|
||||
GC_OP_EPILOGUE(pGC);
|
||||
return rv;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
static void
|
||||
rdpPolyPoint(DrawablePtr pDrawable, GCPtr pGC, int mode,
|
||||
|
Loading…
Reference in New Issue
Block a user