Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
8bd130b9
Commit
8bd130b9
authored
Jul 11, 2011
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Pass the source/dest visible rectangles to the StretchBlt driver entry point.
parent
1805f123
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
70 additions
and
112 deletions
+70
-112
bitblt.c
dlls/gdi32/bitblt.c
+13
-23
bitblt.c
dlls/gdi32/enhmfdrv/bitblt.c
+15
-15
enhmetafiledrv.h
dlls/gdi32/enhmfdrv/enhmetafiledrv.h
+2
-4
gdi_private.h
dlls/gdi32/gdi_private.h
+3
-3
bitblt.c
dlls/gdi32/mfdrv/bitblt.c
+10
-11
metafiledrv.h
dlls/gdi32/mfdrv/metafiledrv.h
+2
-3
bitblt.c
dlls/winex11.drv/bitblt.c
+24
-52
winex11.drv.spec
dlls/winex11.drv/winex11.drv.spec
+1
-1
No files found.
dlls/gdi32/bitblt.c
View file @
8bd130b9
...
...
@@ -165,9 +165,8 @@ static void get_vis_rectangles( DC *dc_dst, struct bitblt_coords *dst,
}
/* nulldrv fallback implementation using StretchDIBits */
BOOL
CDECL
nulldrv_StretchBlt
(
PHYSDEV
dst_dev
,
INT
xDst
,
INT
yDst
,
INT
widthDst
,
INT
heightDst
,
PHYSDEV
src_dev
,
INT
xSrc
,
INT
ySrc
,
INT
widthSrc
,
INT
heightSrc
,
DWORD
rop
)
BOOL
CDECL
nulldrv_StretchBlt
(
PHYSDEV
dst_dev
,
struct
bitblt_coords
*
dst
,
PHYSDEV
src_dev
,
struct
bitblt_coords
*
src
,
DWORD
rop
)
{
DC
*
dc
=
get_nulldrv_dc
(
dst_dev
);
BITMAP
bm
;
...
...
@@ -175,21 +174,10 @@ BOOL CDECL nulldrv_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst
HBITMAP
hbm
;
LPVOID
bits
;
INT
lines
;
POINT
pts
[
2
];
/* make sure we have a real implementation for StretchDIBits */
if
(
GET_DC_PHYSDEV
(
dc
,
pStretchDIBits
)
==
dst_dev
)
return
0
;
pts
[
0
].
x
=
xSrc
;
pts
[
0
].
y
=
ySrc
;
pts
[
1
].
x
=
xSrc
+
widthSrc
;
pts
[
1
].
y
=
ySrc
+
heightSrc
;
LPtoDP
(
src_dev
->
hdc
,
pts
,
2
);
xSrc
=
pts
[
0
].
x
;
ySrc
=
pts
[
0
].
y
;
widthSrc
=
pts
[
1
].
x
-
pts
[
0
].
x
;
heightSrc
=
pts
[
1
].
y
-
pts
[
0
].
y
;
if
(
GetObjectType
(
src_dev
->
hdc
)
!=
OBJ_MEMDC
)
return
FALSE
;
if
(
!
GetObjectW
(
GetCurrentObject
(
src_dev
->
hdc
,
OBJ_BITMAP
),
sizeof
(
bm
),
&
bm
))
return
FALSE
;
...
...
@@ -213,11 +201,11 @@ BOOL CDECL nulldrv_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst
lines
=
GetDIBits
(
src_dev
->
hdc
,
hbm
,
0
,
bm
.
bmHeight
,
bits
,
(
BITMAPINFO
*
)
&
info_hdr
,
DIB_RGB_COLORS
);
SelectObject
(
src_dev
->
hdc
,
hbm
);
if
(
lines
)
lines
=
StretchDIBits
(
dst_dev
->
hdc
,
xDst
,
yDst
,
widthDst
,
heightDs
t
,
xSrc
,
bm
.
bmHeight
-
heightSrc
-
ySrc
,
widthSrc
,
heightSrc
,
if
(
lines
)
lines
=
StretchDIBits
(
dst_dev
->
hdc
,
dst
->
log_x
,
dst
->
log_y
,
dst
->
log_width
,
dst
->
log_heigh
t
,
src
->
x
,
bm
.
bmHeight
-
src
->
height
-
src
->
y
,
src
->
width
,
src
->
height
,
bits
,
(
BITMAPINFO
*
)
&
info_hdr
,
DIB_RGB_COLORS
,
rop
);
HeapFree
(
GetProcessHeap
(),
0
,
bits
);
return
(
lines
==
heightSrc
);
return
(
lines
==
src
->
height
);
}
/***********************************************************************
...
...
@@ -265,10 +253,6 @@ BOOL WINAPI StretchBlt( HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT height
if
(
!
rop_uses_src
(
rop
))
return
PatBlt
(
hdcDst
,
xDst
,
yDst
,
widthDst
,
heightDst
,
rop
);
TRACE
(
"%p %d,%d %dx%d -> %p %d,%d %dx%d rop=%06x
\n
"
,
hdcSrc
,
xSrc
,
ySrc
,
widthSrc
,
heightSrc
,
hdcDst
,
xDst
,
yDst
,
widthDst
,
heightDst
,
rop
);
if
(
!
(
dcDst
=
get_dc_ptr
(
hdcDst
)))
return
FALSE
;
if
((
dcSrc
=
get_dc_ptr
(
hdcSrc
)))
...
...
@@ -297,8 +281,14 @@ BOOL WINAPI StretchBlt( HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT height
rop
&=
~
NOMIRRORBITMAP
;
}
get_vis_rectangles
(
dcDst
,
&
dst
,
dcSrc
,
&
src
);
ret
=
dst_dev
->
funcs
->
pStretchBlt
(
dst_dev
,
xDst
,
yDst
,
widthDst
,
heightDst
,
src_dev
,
xSrc
,
ySrc
,
widthSrc
,
heightSrc
,
rop
);
TRACE
(
"src %p log=%d,%d %dx%d phys=%d,%d %dx%d vis=%s dst %p log=%d,%d %dx%d phys=%d,%d %dx%d vis=%s rop=%06x
\n
"
,
hdcSrc
,
src
.
log_x
,
src
.
log_y
,
src
.
log_width
,
src
.
log_height
,
src
.
x
,
src
.
y
,
src
.
width
,
src
.
height
,
wine_dbgstr_rect
(
&
src
.
visrect
),
hdcDst
,
dst
.
log_x
,
dst
.
log_y
,
dst
.
log_width
,
dst
.
log_height
,
dst
.
x
,
dst
.
y
,
dst
.
width
,
dst
.
height
,
wine_dbgstr_rect
(
&
dst
.
visrect
),
rop
);
ret
=
dst_dev
->
funcs
->
pStretchBlt
(
dst_dev
,
&
dst
,
src_dev
,
&
src
,
rop
);
release_dc_ptr
(
dcSrc
);
}
release_dc_ptr
(
dcDst
);
...
...
dlls/gdi32/enhmfdrv/bitblt.c
View file @
8bd130b9
...
...
@@ -65,8 +65,8 @@ BOOL CDECL EMFDRV_PatBlt( PHYSDEV dev, INT left, INT top,
return
ret
;
}
BOOL
CDECL
EMFDRV_StretchBlt
(
PHYSDEV
devDst
,
INT
xDst
,
INT
yDst
,
INT
widthDst
,
INT
heightD
st
,
PHYSDEV
devSrc
,
INT
xSrc
,
INT
ySrc
,
INT
widthSrc
,
INT
heightS
rc
,
DWORD
rop
)
BOOL
CDECL
EMFDRV_StretchBlt
(
PHYSDEV
devDst
,
struct
bitblt_coords
*
d
st
,
PHYSDEV
devSrc
,
struct
bitblt_coords
*
s
rc
,
DWORD
rop
)
{
BOOL
ret
;
PEMRBITBLT
pEMR
;
...
...
@@ -82,7 +82,7 @@ BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
if
(
devSrc
->
funcs
==
devDst
->
funcs
)
return
FALSE
;
/* can't use a metafile DC as source */
if
(
widthSrc
==
widthDst
&&
heightSrc
==
heightDs
t
)
if
(
src
->
log_width
==
dst
->
log_width
&&
src
->
log_height
==
dst
->
log_heigh
t
)
{
emrType
=
EMR_BITBLT
;
emrSize
=
sizeof
(
EMRBITBLT
);
...
...
@@ -112,17 +112,17 @@ BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
/* Initialize EMR */
pEMR
->
emr
.
iType
=
emrType
;
pEMR
->
emr
.
nSize
=
size
;
pEMR
->
rclBounds
.
left
=
xDst
;
pEMR
->
rclBounds
.
top
=
yDst
;
pEMR
->
rclBounds
.
right
=
xDst
+
widthDst
-
1
;
pEMR
->
rclBounds
.
bottom
=
yDst
+
heightDs
t
-
1
;
pEMR
->
xDest
=
xDst
;
pEMR
->
yDest
=
yDst
;
pEMR
->
cxDest
=
widthDst
;
pEMR
->
cyDest
=
heightDs
t
;
pEMR
->
rclBounds
.
left
=
dst
->
log_x
;
pEMR
->
rclBounds
.
top
=
dst
->
log_y
;
pEMR
->
rclBounds
.
right
=
dst
->
log_x
+
dst
->
log_width
-
1
;
pEMR
->
rclBounds
.
bottom
=
dst
->
log_y
+
dst
->
log_heigh
t
-
1
;
pEMR
->
xDest
=
dst
->
log_x
;
pEMR
->
yDest
=
dst
->
log_y
;
pEMR
->
cxDest
=
dst
->
log_width
;
pEMR
->
cyDest
=
dst
->
log_heigh
t
;
pEMR
->
dwRop
=
rop
;
pEMR
->
xSrc
=
xSrc
;
pEMR
->
ySrc
=
ySrc
;
pEMR
->
xSrc
=
src
->
log_x
;
pEMR
->
ySrc
=
src
->
log_y
;
GetWorldTransform
(
devSrc
->
hdc
,
&
pEMR
->
xformSrc
);
pEMR
->
crBkColorSrc
=
GetBkColor
(
devSrc
->
hdc
);
pEMR
->
iUsageSrc
=
DIB_RGB_COLORS
;
...
...
@@ -133,8 +133,8 @@ BOOL CDECL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
if
(
emrType
==
EMR_STRETCHBLT
)
{
PEMRSTRETCHBLT
pEMRStretch
=
(
PEMRSTRETCHBLT
)
pEMR
;
pEMRStretch
->
cxSrc
=
widthSrc
;
pEMRStretch
->
cySrc
=
heightSrc
;
pEMRStretch
->
cxSrc
=
src
->
log_width
;
pEMRStretch
->
cySrc
=
src
->
log_height
;
}
/* Initialize BITMAPINFO structure */
...
...
dlls/gdi32/enhmfdrv/enhmetafiledrv.h
View file @
8bd130b9
...
...
@@ -152,10 +152,8 @@ extern BOOL CDECL EMFDRV_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT
extern
BOOL
CDECL
EMFDRV_SetWindowExtEx
(
PHYSDEV
dev
,
INT
x
,
INT
y
,
SIZE
*
size
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
EMFDRV_SetWindowOrgEx
(
PHYSDEV
dev
,
INT
x
,
INT
y
,
POINT
*
pt
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
EMFDRV_SetWorldTransform
(
PHYSDEV
dev
,
const
XFORM
*
xform
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
EMFDRV_StretchBlt
(
PHYSDEV
devDst
,
INT
xDst
,
INT
yDst
,
INT
widthDst
,
INT
heightDst
,
PHYSDEV
devSrc
,
INT
xSrc
,
INT
ySrc
,
INT
widthSrc
,
INT
heightSrc
,
DWORD
rop
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
EMFDRV_StretchBlt
(
PHYSDEV
devDst
,
struct
bitblt_coords
*
dst
,
PHYSDEV
devSrc
,
struct
bitblt_coords
*
src
,
DWORD
rop
)
DECLSPEC_HIDDEN
;
extern
INT
CDECL
EMFDRV_StretchDIBits
(
PHYSDEV
dev
,
INT
xDst
,
INT
yDst
,
INT
widthDst
,
INT
heightDst
,
INT
xSrc
,
INT
ySrc
,
INT
widthSrc
,
INT
heightSrc
,
...
...
dlls/gdi32/gdi_private.h
View file @
8bd130b9
...
...
@@ -263,7 +263,7 @@ typedef struct gdi_dc_funcs
BOOL
(
CDECL
*
pSetWorldTransform
)(
PHYSDEV
,
const
XFORM
*
);
INT
(
CDECL
*
pStartDoc
)(
PHYSDEV
,
const
DOCINFOW
*
);
INT
(
CDECL
*
pStartPage
)(
PHYSDEV
);
BOOL
(
CDECL
*
pStretchBlt
)(
PHYSDEV
,
INT
,
INT
,
INT
,
INT
,
PHYSDEV
,
INT
,
INT
,
INT
,
INT
,
DWORD
);
BOOL
(
CDECL
*
pStretchBlt
)(
PHYSDEV
,
struct
bitblt_coords
*
,
PHYSDEV
,
struct
bitblt_coords
*
,
DWORD
);
INT
(
CDECL
*
pStretchDIBits
)(
PHYSDEV
,
INT
,
INT
,
INT
,
INT
,
INT
,
INT
,
INT
,
INT
,
const
void
*
,
const
BITMAPINFO
*
,
UINT
,
DWORD
);
BOOL
(
CDECL
*
pStrokeAndFillPath
)(
PHYSDEV
);
...
...
@@ -640,8 +640,8 @@ extern BOOL CDECL nulldrv_SetViewportOrgEx( PHYSDEV dev, INT x, INT y, POINT *pt
extern
BOOL
CDECL
nulldrv_SetWindowExtEx
(
PHYSDEV
dev
,
INT
cx
,
INT
cy
,
SIZE
*
size
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
nulldrv_SetWindowOrgEx
(
PHYSDEV
dev
,
INT
x
,
INT
y
,
POINT
*
pt
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
nulldrv_SetWorldTransform
(
PHYSDEV
dev
,
const
XFORM
*
xform
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
nulldrv_StretchBlt
(
PHYSDEV
dst_dev
,
INT
xDst
,
INT
yDst
,
INT
widthDst
,
INT
heightD
st
,
PHYSDEV
src_dev
,
INT
xSrc
,
INT
ySrc
,
INT
widthSrc
,
INT
heightS
rc
,
DWORD
rop
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
nulldrv_StretchBlt
(
PHYSDEV
dst_dev
,
struct
bitblt_coords
*
d
st
,
PHYSDEV
src_dev
,
struct
bitblt_coords
*
s
rc
,
DWORD
rop
)
DECLSPEC_HIDDEN
;
extern
INT
CDECL
nulldrv_StretchDIBits
(
PHYSDEV
dev
,
INT
xDst
,
INT
yDst
,
INT
widthDst
,
INT
heightDst
,
INT
xSrc
,
INT
ySrc
,
INT
widthSrc
,
INT
heightSrc
,
const
void
*
bits
,
const
BITMAPINFO
*
info
,
UINT
coloruse
,
DWORD
rop
)
DECLSPEC_HIDDEN
;
...
...
dlls/gdi32/mfdrv/bitblt.c
View file @
8bd130b9
...
...
@@ -43,9 +43,8 @@ BOOL CDECL MFDRV_PatBlt( PHYSDEV dev, INT left, INT top, INT width, INT height,
*/
#define STRETCH_VIA_DIB
BOOL
CDECL
MFDRV_StretchBlt
(
PHYSDEV
devDst
,
INT
xDst
,
INT
yDst
,
INT
widthDst
,
INT
heightDst
,
PHYSDEV
devSrc
,
INT
xSrc
,
INT
ySrc
,
INT
widthSrc
,
INT
heightSrc
,
DWORD
rop
)
BOOL
CDECL
MFDRV_StretchBlt
(
PHYSDEV
devDst
,
struct
bitblt_coords
*
dst
,
PHYSDEV
devSrc
,
struct
bitblt_coords
*
src
,
DWORD
rop
)
{
BOOL
ret
;
DWORD
len
;
...
...
@@ -110,14 +109,14 @@ BOOL CDECL MFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
mr
->
rdSize
=
len
/
sizeof
(
INT16
);
*
(
mr
->
rdParm
)
=
LOWORD
(
rop
);
*
(
mr
->
rdParm
+
1
)
=
HIWORD
(
rop
);
*
(
mr
->
rdParm
+
2
)
=
heightSrc
;
*
(
mr
->
rdParm
+
3
)
=
widthSrc
;
*
(
mr
->
rdParm
+
4
)
=
ySrc
;
*
(
mr
->
rdParm
+
5
)
=
xSrc
;
*
(
mr
->
rdParm
+
6
)
=
heightDs
t
;
*
(
mr
->
rdParm
+
7
)
=
widthDst
;
*
(
mr
->
rdParm
+
8
)
=
yDst
;
*
(
mr
->
rdParm
+
9
)
=
xDst
;
*
(
mr
->
rdParm
+
2
)
=
src
->
log_height
;
*
(
mr
->
rdParm
+
3
)
=
src
->
log_width
;
*
(
mr
->
rdParm
+
4
)
=
src
->
log_y
;
*
(
mr
->
rdParm
+
5
)
=
src
->
log_x
;
*
(
mr
->
rdParm
+
6
)
=
dst
->
log_heigh
t
;
*
(
mr
->
rdParm
+
7
)
=
dst
->
log_width
;
*
(
mr
->
rdParm
+
8
)
=
dst
->
log_y
;
*
(
mr
->
rdParm
+
9
)
=
dst
->
log_x
;
ret
=
MFDRV_WriteRecord
(
devDst
,
mr
,
mr
->
rdSize
*
2
);
}
else
...
...
dlls/gdi32/mfdrv/metafiledrv.h
View file @
8bd130b9
...
...
@@ -139,9 +139,8 @@ extern BOOL CDECL MFDRV_SetViewportExtEx( PHYSDEV dev, INT x, INT y, SIZE *size
extern
BOOL
CDECL
MFDRV_SetViewportOrgEx
(
PHYSDEV
dev
,
INT
x
,
INT
y
,
POINT
*
pt
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
MFDRV_SetWindowExtEx
(
PHYSDEV
dev
,
INT
x
,
INT
y
,
SIZE
*
size
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
MFDRV_SetWindowOrgEx
(
PHYSDEV
dev
,
INT
x
,
INT
y
,
POINT
*
pt
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
MFDRV_StretchBlt
(
PHYSDEV
devDst
,
INT
xDst
,
INT
yDst
,
INT
widthDst
,
INT
heightDst
,
PHYSDEV
devSrc
,
INT
xSrc
,
INT
ySrc
,
INT
widthSrc
,
INT
heightSrc
,
DWORD
rop
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
MFDRV_StretchBlt
(
PHYSDEV
devDst
,
struct
bitblt_coords
*
dst
,
PHYSDEV
devSrc
,
struct
bitblt_coords
*
src
,
DWORD
rop
)
DECLSPEC_HIDDEN
;
extern
BOOL
CDECL
MFDRV_PaintRgn
(
PHYSDEV
dev
,
HRGN
hrgn
)
DECLSPEC_HIDDEN
;
extern
INT
CDECL
MFDRV_SetDIBitsToDevice
(
PHYSDEV
dev
,
INT
xDest
,
INT
yDest
,
DWORD
cx
,
DWORD
cy
,
INT
xSrc
,
INT
ySrc
,
...
...
dlls/winex11.drv/bitblt.c
View file @
8bd130b9
...
...
@@ -1486,57 +1486,29 @@ BOOL CDECL X11DRV_PatBlt( PHYSDEV dev, INT x, INT y, INT width, INT height, DWOR
/***********************************************************************
* X11DRV_StretchBlt
*/
BOOL
CDECL
X11DRV_StretchBlt
(
PHYSDEV
dst_dev
,
INT
xDst
,
INT
yDst
,
INT
widthDst
,
INT
heightDst
,
PHYSDEV
src_dev
,
INT
xSrc
,
INT
ySrc
,
INT
widthSrc
,
INT
heightSrc
,
DWORD
rop
)
BOOL
CDECL
X11DRV_StretchBlt
(
PHYSDEV
dst_dev
,
struct
bitblt_coords
*
dst
,
PHYSDEV
src_dev
,
struct
bitblt_coords
*
src
,
DWORD
rop
)
{
X11DRV_PDEVICE
*
physDevDst
=
get_x11drv_dev
(
dst_dev
);
X11DRV_PDEVICE
*
physDevSrc
=
get_x11drv_dev
(
src_dev
);
/* FIXME: check that it's really an x11 dev */
BOOL
usePat
,
useDst
,
destUsed
,
fStretch
,
fNullBrush
;
struct
bitblt_coords
src
,
dst
;
INT
width
,
height
;
INT
sDst
,
sSrc
=
DIB_Status_None
;
const
BYTE
*
opcode
;
Pixmap
pixmaps
[
3
]
=
{
0
,
0
,
0
};
/* pixmaps for DST, SRC, TMP */
GC
tmpGC
=
0
;
if
(
IsRectEmpty
(
&
dst
->
visrect
))
return
TRUE
;
usePat
=
(((
rop
>>
4
)
&
0x0f0000
)
!=
(
rop
&
0x0f0000
));
useDst
=
(((
rop
>>
1
)
&
0x550000
)
!=
(
rop
&
0x550000
));
src
.
x
=
xSrc
;
src
.
y
=
ySrc
;
src
.
width
=
widthSrc
;
src
.
height
=
heightSrc
;
src
.
layout
=
GetLayout
(
src_dev
->
hdc
);
dst
.
x
=
xDst
;
dst
.
y
=
yDst
;
dst
.
width
=
widthDst
;
dst
.
height
=
heightDst
;
dst
.
layout
=
GetLayout
(
dst_dev
->
hdc
);
if
(
rop
&
NOMIRRORBITMAP
)
{
src
.
layout
|=
LAYOUT_BITMAPORIENTATIONPRESERVED
;
dst
.
layout
|=
LAYOUT_BITMAPORIENTATIONPRESERVED
;
rop
&=
~
NOMIRRORBITMAP
;
}
if
(
!
BITBLT_GetVisRectangles
(
physDevDst
,
physDevSrc
,
&
dst
,
&
src
))
return
TRUE
;
fStretch
=
(
src
.
width
!=
dst
.
width
)
||
(
src
.
height
!=
dst
.
height
);
fStretch
=
(
src
->
width
!=
dst
->
width
)
||
(
src
->
height
!=
dst
->
height
);
if
(
physDevDst
!=
physDevSrc
)
sSrc
=
X11DRV_LockDIBSection
(
physDevSrc
,
DIB_Status_None
);
TRACE
(
" rectdst=%d,%d %dx%d orgdst=%d,%d visdst=%s
\n
"
,
dst
.
x
,
dst
.
y
,
dst
.
width
,
dst
.
height
,
physDevDst
->
dc_rect
.
left
,
physDevDst
->
dc_rect
.
top
,
wine_dbgstr_rect
(
&
dst
.
visrect
)
);
TRACE
(
" rectsrc=%d,%d %dx%d orgsrc=%d,%d vissrc=%s
\n
"
,
src
.
x
,
src
.
y
,
src
.
width
,
src
.
height
,
physDevSrc
->
dc_rect
.
left
,
physDevSrc
->
dc_rect
.
top
,
wine_dbgstr_rect
(
&
src
.
visrect
)
);
width
=
dst
.
visrect
.
right
-
dst
.
visrect
.
left
;
height
=
dst
.
visrect
.
bottom
-
dst
.
visrect
.
top
;
width
=
dst
->
visrect
.
right
-
dst
->
visrect
.
left
;
height
=
dst
->
visrect
.
bottom
-
dst
->
visrect
.
top
;
sDst
=
X11DRV_LockDIBSection
(
physDevDst
,
DIB_Status_None
);
if
(
physDevDst
==
physDevSrc
)
sSrc
=
sDst
;
...
...
@@ -1546,8 +1518,8 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
sSrc
==
DIB_Status_AppMod
&&
sDst
==
DIB_Status_AppMod
&&
same_format
(
physDevSrc
,
physDevDst
))
{
if
(
client_side_dib_copy
(
physDevSrc
,
src
.
visrect
.
left
,
src
.
visrect
.
top
,
physDevDst
,
dst
.
visrect
.
left
,
dst
.
visrect
.
top
,
width
,
height
))
if
(
client_side_dib_copy
(
physDevSrc
,
src
->
visrect
.
left
,
src
->
visrect
.
top
,
physDevDst
,
dst
->
visrect
.
left
,
dst
->
visrect
.
top
,
width
,
height
))
goto
done
;
}
...
...
@@ -1568,8 +1540,8 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
{
if
(
sSrc
==
DIB_Status_AppMod
)
{
X11DRV_DIB_CopyDIBSection
(
physDevSrc
,
physDevDst
,
src
.
visrect
.
left
,
src
.
visrect
.
top
,
dst
.
visrect
.
left
,
dst
.
visrect
.
top
,
width
,
height
);
X11DRV_DIB_CopyDIBSection
(
physDevSrc
,
physDevDst
,
src
->
visrect
.
left
,
src
->
visrect
.
top
,
dst
->
visrect
.
left
,
dst
->
visrect
.
top
,
width
,
height
);
goto
done
;
}
X11DRV_CoerceDIBSection
(
physDevSrc
,
DIB_Status_GdiMod
);
...
...
@@ -1577,11 +1549,11 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
wine_tsx11_lock
();
XCopyArea
(
gdi_display
,
physDevSrc
->
drawable
,
physDevDst
->
drawable
,
physDevDst
->
gc
,
physDevSrc
->
dc_rect
.
left
+
src
.
visrect
.
left
,
physDevSrc
->
dc_rect
.
top
+
src
.
visrect
.
top
,
physDevSrc
->
dc_rect
.
left
+
src
->
visrect
.
left
,
physDevSrc
->
dc_rect
.
top
+
src
->
visrect
.
top
,
width
,
height
,
physDevDst
->
dc_rect
.
left
+
dst
.
visrect
.
left
,
physDevDst
->
dc_rect
.
top
+
dst
.
visrect
.
top
);
physDevDst
->
dc_rect
.
left
+
dst
->
visrect
.
left
,
physDevDst
->
dc_rect
.
top
+
dst
->
visrect
.
top
);
physDevDst
->
exposures
++
;
wine_tsx11_unlock
();
goto
done
;
...
...
@@ -1598,11 +1570,11 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
XSetFunction
(
gdi_display
,
physDevDst
->
gc
,
OP_ROP
(
*
opcode
)
);
XCopyPlane
(
gdi_display
,
physDevSrc
->
drawable
,
physDevDst
->
drawable
,
physDevDst
->
gc
,
physDevSrc
->
dc_rect
.
left
+
src
.
visrect
.
left
,
physDevSrc
->
dc_rect
.
top
+
src
.
visrect
.
top
,
physDevSrc
->
dc_rect
.
left
+
src
->
visrect
.
left
,
physDevSrc
->
dc_rect
.
top
+
src
->
visrect
.
top
,
width
,
height
,
physDevDst
->
dc_rect
.
left
+
dst
.
visrect
.
left
,
physDevDst
->
dc_rect
.
top
+
dst
.
visrect
.
top
,
1
);
physDevDst
->
dc_rect
.
left
+
dst
->
visrect
.
left
,
physDevDst
->
dc_rect
.
top
+
dst
->
visrect
.
top
,
1
);
physDevDst
->
exposures
++
;
wine_tsx11_unlock
();
goto
done
;
...
...
@@ -1621,15 +1593,15 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
if
(
physDevDst
!=
physDevSrc
)
X11DRV_CoerceDIBSection
(
physDevSrc
,
DIB_Status_GdiMod
);
if
(
!
X11DRV_XRender_GetSrcAreaStretch
(
physDevSrc
,
physDevDst
,
pixmaps
[
SRC
],
tmpGC
,
&
src
,
&
dst
))
if
(
!
X11DRV_XRender_GetSrcAreaStretch
(
physDevSrc
,
physDevDst
,
pixmaps
[
SRC
],
tmpGC
,
src
,
dst
))
{
if
(
fStretch
)
BITBLT_GetSrcAreaStretch
(
physDevSrc
,
physDevDst
,
pixmaps
[
SRC
],
tmpGC
,
&
src
,
&
dst
);
BITBLT_GetSrcAreaStretch
(
physDevSrc
,
physDevDst
,
pixmaps
[
SRC
],
tmpGC
,
src
,
dst
);
else
BITBLT_GetSrcArea
(
physDevSrc
,
physDevDst
,
pixmaps
[
SRC
],
tmpGC
,
&
src
.
visrect
);
BITBLT_GetSrcArea
(
physDevSrc
,
physDevDst
,
pixmaps
[
SRC
],
tmpGC
,
&
src
->
visrect
);
}
if
(
useDst
)
BITBLT_GetDstArea
(
physDevDst
,
pixmaps
[
DST
],
tmpGC
,
&
dst
.
visrect
);
if
(
useDst
)
BITBLT_GetDstArea
(
physDevDst
,
pixmaps
[
DST
],
tmpGC
,
&
dst
->
visrect
);
if
(
usePat
)
fNullBrush
=
!
X11DRV_SetupGCForPatBlt
(
physDevDst
,
tmpGC
,
TRUE
);
else
fNullBrush
=
FALSE
;
destUsed
=
FALSE
;
...
...
@@ -1670,7 +1642,7 @@ BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, INT xDst, INT yDst, INT widthDst,
}
}
XSetFunction
(
gdi_display
,
physDevDst
->
gc
,
GXcopy
);
physDevDst
->
exposures
+=
BITBLT_PutDstArea
(
physDevDst
,
pixmaps
[
destUsed
?
DST
:
SRC
],
&
dst
.
visrect
);
physDevDst
->
exposures
+=
BITBLT_PutDstArea
(
physDevDst
,
pixmaps
[
destUsed
?
DST
:
SRC
],
&
dst
->
visrect
);
XFreePixmap
(
gdi_display
,
pixmaps
[
DST
]
);
if
(
pixmaps
[
SRC
])
XFreePixmap
(
gdi_display
,
pixmaps
[
SRC
]
);
if
(
pixmaps
[
TMP
])
XFreePixmap
(
gdi_display
,
pixmaps
[
TMP
]
);
...
...
dlls/winex11.drv/winex11.drv.spec
View file @
8bd130b9
...
...
@@ -56,7 +56,7 @@
@ cdecl SetPixel(ptr long long long) X11DRV_SetPixel
@ cdecl SetPixelFormat(ptr long ptr) X11DRV_SetPixelFormat
@ cdecl SetTextColor(ptr long) X11DRV_SetTextColor
@ cdecl StretchBlt(ptr
long long long long ptr long long long long
long) X11DRV_StretchBlt
@ cdecl StretchBlt(ptr
ptr ptr ptr
long) X11DRV_StretchBlt
@ cdecl SwapBuffers(ptr) X11DRV_SwapBuffers
@ cdecl UnrealizePalette(long) X11DRV_UnrealizePalette
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment