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
439223d4
Commit
439223d4
authored
Apr 14, 2010
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winex11: Move logical to physical mapping into the BITBLT_GetVisRectangles helper function.
parent
39493b06
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
26 additions
and
40 deletions
+26
-40
bitblt.c
dlls/winex11.drv/bitblt.c
+26
-40
No files found.
dlls/winex11.drv/bitblt.c
View file @
439223d4
...
...
@@ -1165,20 +1165,33 @@ static BOOL BITBLT_GetVisRectangles( X11DRV_PDEVICE *physDevDst, X11DRV_PDEVICE
rect
.
top
=
dst
->
y
;
rect
.
right
=
dst
->
x
+
dst
->
width
;
rect
.
bottom
=
dst
->
y
+
dst
->
height
;
LPtoDP
(
physDevDst
->
hdc
,
(
POINT
*
)
&
rect
,
2
);
dst
->
x
=
rect
.
left
;
dst
->
y
=
rect
.
top
;
dst
->
width
=
rect
.
right
-
rect
.
left
;
dst
->
height
=
rect
.
bottom
-
rect
.
top
;
if
(
dst
->
width
<
0
)
SWAP_INT32
(
&
rect
.
left
,
&
rect
.
right
);
if
(
dst
->
height
<
0
)
SWAP_INT32
(
&
rect
.
top
,
&
rect
.
bottom
);
GetRgnBox
(
physDevDst
->
region
,
&
clipRect
);
if
(
!
IntersectRect
(
&
dst
->
visrect
,
&
rect
,
&
clipRect
))
return
FALSE
;
/* Get the source visible rectangle */
if
(
!
physDevSrc
)
return
TRUE
;
rect
.
left
=
src
->
x
;
rect
.
top
=
src
->
y
;
rect
.
right
=
src
->
x
+
src
->
width
;
rect
.
bottom
=
src
->
y
+
src
->
height
;
LPtoDP
(
physDevSrc
->
hdc
,
(
POINT
*
)
&
rect
,
2
);
src
->
x
=
rect
.
left
;
src
->
y
=
rect
.
top
;
src
->
width
=
rect
.
right
-
rect
.
left
;
src
->
height
=
rect
.
bottom
-
rect
.
top
;
if
(
src
->
width
<
0
)
SWAP_INT32
(
&
rect
.
left
,
&
rect
.
right
);
if
(
src
->
height
<
0
)
SWAP_INT32
(
&
rect
.
top
,
&
rect
.
bottom
);
/* Apparently the clipping and visible regions are only for output,
so just check against dc extent here to avoid BadMatch errors */
clipRect
=
physDevSrc
->
drawable_rect
;
...
...
@@ -1376,7 +1389,6 @@ BOOL CDECL X11DRV_StretchBlt( X11DRV_PDEVICE *physDevDst, INT xDst, INT yDst, IN
const
BYTE
*
opcode
;
Pixmap
pixmaps
[
3
]
=
{
0
,
0
,
0
};
/* pixmaps for DST, SRC, TMP */
GC
tmpGC
=
0
;
POINT
pts
[
2
];
/* compensate for off-by-one shifting for negative widths and heights */
if
(
widthDst
<
0
)
...
...
@@ -1393,38 +1405,6 @@ BOOL CDECL X11DRV_StretchBlt( X11DRV_PDEVICE *physDevDst, INT xDst, INT yDst, IN
useDst
=
(((
rop
>>
1
)
&
0x550000
)
!=
(
rop
&
0x550000
));
if
(
!
physDevSrc
&&
useSrc
)
return
FALSE
;
/* Map the coordinates to device coords */
pts
[
0
].
x
=
xDst
;
pts
[
0
].
y
=
yDst
;
pts
[
1
].
x
=
xDst
+
widthDst
;
pts
[
1
].
y
=
yDst
+
heightDst
;
LPtoDP
(
physDevDst
->
hdc
,
pts
,
2
);
xDst
=
pts
[
0
].
x
;
yDst
=
pts
[
0
].
y
;
widthDst
=
pts
[
1
].
x
-
pts
[
0
].
x
;
heightDst
=
pts
[
1
].
y
-
pts
[
0
].
y
;
TRACE
(
" rectdst=%d,%d-%d,%d orgdst=%d,%d
\n
"
,
xDst
,
yDst
,
widthDst
,
heightDst
,
physDevDst
->
dc_rect
.
left
,
physDevDst
->
dc_rect
.
top
);
if
(
useSrc
)
{
pts
[
0
].
x
=
xSrc
;
pts
[
0
].
y
=
ySrc
;
pts
[
1
].
x
=
xSrc
+
widthSrc
;
pts
[
1
].
y
=
ySrc
+
heightSrc
;
LPtoDP
(
physDevSrc
->
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
;
fStretch
=
(
widthSrc
!=
widthDst
)
||
(
heightSrc
!=
heightDst
);
TRACE
(
" rectsrc=%d,%d-%d,%d orgsrc=%d,%d
\n
"
,
xSrc
,
ySrc
,
widthSrc
,
heightSrc
,
physDevSrc
->
dc_rect
.
left
,
physDevSrc
->
dc_rect
.
top
);
src
.
x
=
xSrc
;
src
.
y
=
ySrc
;
src
.
width
=
widthSrc
;
...
...
@@ -1433,25 +1413,31 @@ BOOL CDECL X11DRV_StretchBlt( X11DRV_PDEVICE *physDevDst, INT xDst, INT yDst, IN
dst
.
y
=
yDst
;
dst
.
width
=
widthDst
;
dst
.
height
=
heightDst
;
if
(
useSrc
)
{
if
(
!
BITBLT_GetVisRectangles
(
physDevDst
,
physDevSrc
,
&
dst
,
&
src
))
return
TRUE
;
TRACE
(
" vissrc=%s visdst=%s
\n
"
,
wine_dbgstr_rect
(
&
src
.
visrect
),
wine_dbgstr_rect
(
&
dst
.
visrect
)
);
fStretch
=
(
src
.
width
!=
dst
.
width
)
||
(
src
.
height
!=
dst
.
height
);
if
(
physDevDst
!=
physDevSrc
)
sSrc
=
X11DRV_LockDIBSection
(
physDevSrc
,
DIB_Status_None
);
}
else
{
fStretch
=
FALSE
;
dst
.
x
=
xDst
;
dst
.
y
=
yDst
;
dst
.
width
=
widthDst
;
dst
.
height
=
heightDst
;
if
(
!
BITBLT_GetVisRectangles
(
physDevDst
,
NULL
,
&
dst
,
NULL
))
return
TRUE
;
TRACE
(
" vissrc=none visdst=%s
\n
"
,
wine_dbgstr_rect
(
&
dst
.
visrect
)
);
}
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
)
);
if
(
useSrc
)
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
;
...
...
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