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
d8e353f9
Commit
d8e353f9
authored
Jul 28, 2016
by
Huw Davies
Committed by
Alexandre Julliard
Jul 28, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Pass a DC pointer to get_pixel_color().
Signed-off-by:
Huw Davies
<
huw@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
cf386b8b
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
59 additions
and
51 deletions
+59
-51
dibdrv.h
dlls/gdi32/dibdrv/dibdrv.h
+1
-1
graphics.c
dlls/gdi32/dibdrv/graphics.c
+28
-24
objects.c
dlls/gdi32/dibdrv/objects.c
+28
-24
font.c
dlls/gdi32/font.c
+1
-1
gdi_private.h
dlls/gdi32/gdi_private.h
+1
-1
No files found.
dlls/gdi32/dibdrv/dibdrv.h
View file @
d8e353f9
...
...
@@ -250,7 +250,7 @@ extern void free_dib_info(dib_info *dib) DECLSPEC_HIDDEN;
extern
void
free_pattern_brush
(
dib_brush
*
brush
)
DECLSPEC_HIDDEN
;
extern
void
copy_dib_color_info
(
dib_info
*
dst
,
const
dib_info
*
src
)
DECLSPEC_HIDDEN
;
extern
BOOL
convert_dib
(
dib_info
*
dst
,
const
dib_info
*
src
)
DECLSPEC_HIDDEN
;
extern
DWORD
get_pixel_color
(
HDC
h
dc
,
const
dib_info
*
dib
,
COLORREF
color
,
BOOL
mono_fixup
)
DECLSPEC_HIDDEN
;
extern
DWORD
get_pixel_color
(
DC
*
dc
,
const
dib_info
*
dib
,
COLORREF
color
,
BOOL
mono_fixup
)
DECLSPEC_HIDDEN
;
extern
int
clip_rect_to_dib
(
const
dib_info
*
dib
,
RECT
*
rc
)
DECLSPEC_HIDDEN
;
extern
int
get_clipped_rects
(
const
dib_info
*
dib
,
const
RECT
*
rc
,
HRGN
clip
,
struct
clipped_rects
*
clip_rects
)
DECLSPEC_HIDDEN
;
extern
void
add_clipped_bounds
(
dibdrv_physdev
*
dev
,
const
RECT
*
rect
,
HRGN
clip
)
DECLSPEC_HIDDEN
;
...
...
dlls/gdi32/dibdrv/graphics.c
View file @
d8e353f9
...
...
@@ -550,15 +550,15 @@ static int font_cache_cmp( const struct cached_font *p1, const struct cached_fon
return
ret
;
}
static
struct
cached_font
*
add_cached_font
(
HDC
h
dc
,
HFONT
hfont
,
UINT
aa_flags
)
static
struct
cached_font
*
add_cached_font
(
DC
*
dc
,
HFONT
hfont
,
UINT
aa_flags
)
{
struct
cached_font
font
,
*
ptr
,
*
last_unused
=
NULL
;
UINT
i
=
0
,
j
,
k
;
GetObjectW
(
hfont
,
sizeof
(
font
.
lf
),
&
font
.
lf
);
GetTransform
(
hdc
,
0x204
,
&
font
.
xform
)
;
font
.
xform
=
dc
->
xformWorld2Vport
;
font
.
xform
.
eDx
=
font
.
xform
.
eDy
=
0
;
/* unused, would break hashing */
if
(
GetGraphicsMode
(
hdc
)
==
GM_COMPATIBLE
)
if
(
dc
->
GraphicsMode
==
GM_COMPATIBLE
)
{
font
.
lf
.
lfOrientation
=
font
.
lf
.
lfEscapement
;
if
(
font
.
xform
.
eM11
*
font
.
xform
.
eM22
<
0
)
...
...
@@ -661,18 +661,18 @@ static struct cached_glyph *get_cached_glyph( struct cached_font *font, UINT ind
*
* See the comment above get_pen_bkgnd_masks
*/
static
inline
void
get_text_bkgnd_masks
(
HDC
h
dc
,
const
dib_info
*
dib
,
rop_mask
*
mask
)
static
inline
void
get_text_bkgnd_masks
(
DC
*
dc
,
const
dib_info
*
dib
,
rop_mask
*
mask
)
{
COLORREF
bg
=
GetBkColor
(
hdc
)
;
COLORREF
bg
=
dc
->
backgroundColor
;
mask
->
and
=
0
;
if
(
dib
->
bit_count
!=
1
)
mask
->
xor
=
get_pixel_color
(
h
dc
,
dib
,
bg
,
FALSE
);
mask
->
xor
=
get_pixel_color
(
dc
,
dib
,
bg
,
FALSE
);
else
{
COLORREF
fg
=
GetTextColor
(
hdc
)
;
mask
->
xor
=
get_pixel_color
(
h
dc
,
dib
,
fg
,
TRUE
);
COLORREF
fg
=
dc
->
textColor
;
mask
->
xor
=
get_pixel_color
(
dc
,
dib
,
fg
,
TRUE
);
if
(
fg
!=
bg
)
mask
->
xor
=
~
mask
->
xor
;
}
}
...
...
@@ -741,7 +741,7 @@ static const int padding[4] = {0, 3, 2, 1};
* For non-antialiased bitmaps convert them to the 17-level format
* using only values 0 or 16.
*/
static
struct
cached_glyph
*
cache_glyph_bitmap
(
HDC
h
dc
,
struct
cached_font
*
font
,
UINT
index
,
UINT
flags
)
static
struct
cached_glyph
*
cache_glyph_bitmap
(
DC
*
dc
,
struct
cached_font
*
font
,
UINT
index
,
UINT
flags
)
{
UINT
ggo_flags
=
font
->
aa_flags
;
static
const
MAT2
identity
=
{
{
0
,
1
},
{
0
,
0
},
{
0
,
0
},
{
0
,
1
}
};
...
...
@@ -758,7 +758,7 @@ static struct cached_glyph *cache_glyph_bitmap( HDC hdc, struct cached_font *fon
for
(
i
=
0
;
i
<
sizeof
(
indices
)
/
sizeof
(
indices
[
0
]);
i
++
)
{
index
=
indices
[
i
];
ret
=
GetGlyphOutlineW
(
hdc
,
index
,
ggo_flags
,
&
metrics
,
0
,
NULL
,
&
identity
);
ret
=
GetGlyphOutlineW
(
dc
->
hSelf
,
index
,
ggo_flags
,
&
metrics
,
0
,
NULL
,
&
identity
);
if
(
ret
!=
GDI_ERROR
)
break
;
}
if
(
ret
==
GDI_ERROR
)
return
NULL
;
...
...
@@ -773,7 +773,7 @@ static struct cached_glyph *cache_glyph_bitmap( HDC hdc, struct cached_font *fon
if
(
bit_count
==
8
)
pad
=
padding
[
metrics
.
gmBlackBoxX
%
4
];
ret
=
GetGlyphOutlineW
(
hdc
,
index
,
ggo_flags
,
&
metrics
,
size
,
glyph
->
bits
,
&
identity
);
ret
=
GetGlyphOutlineW
(
dc
->
hSelf
,
index
,
ggo_flags
,
&
metrics
,
size
,
glyph
->
bits
,
&
identity
);
if
(
ret
==
GDI_ERROR
)
{
HeapFree
(
GetProcessHeap
(),
0
,
glyph
);
...
...
@@ -804,7 +804,7 @@ done:
return
add_cached_glyph
(
font
,
index
,
flags
,
glyph
);
}
static
void
render_string
(
HDC
h
dc
,
dib_info
*
dib
,
struct
cached_font
*
font
,
INT
x
,
INT
y
,
static
void
render_string
(
DC
*
dc
,
dib_info
*
dib
,
struct
cached_font
*
font
,
INT
x
,
INT
y
,
UINT
flags
,
const
WCHAR
*
str
,
UINT
count
,
const
INT
*
dx
,
const
struct
clipped_rects
*
clipped_rects
,
RECT
*
bounds
)
{
...
...
@@ -820,7 +820,7 @@ static void render_string( HDC hdc, dib_info *dib, struct cached_font *font, INT
glyph_dib
.
bits
.
is_copy
=
FALSE
;
glyph_dib
.
bits
.
free
=
NULL
;
text_color
=
get_pixel_color
(
hdc
,
dib
,
GetTextColor
(
hdc
)
,
TRUE
);
text_color
=
get_pixel_color
(
dc
,
dib
,
dc
->
textColor
,
TRUE
);
if
(
glyph_dib
.
bit_count
==
8
)
get_aa_ranges
(
dib
->
funcs
->
pixel_to_colorref
(
dib
,
text_color
),
ranges
);
...
...
@@ -828,7 +828,7 @@ static void render_string( HDC hdc, dib_info *dib, struct cached_font *font, INT
for
(
i
=
0
;
i
<
count
;
i
++
)
{
if
(
!
(
glyph
=
get_cached_glyph
(
font
,
str
[
i
],
flags
))
&&
!
(
glyph
=
cache_glyph_bitmap
(
h
dc
,
font
,
str
[
i
],
flags
)))
continue
;
!
(
glyph
=
cache_glyph_bitmap
(
dc
,
font
,
str
[
i
],
flags
)))
continue
;
glyph_dib
.
width
=
glyph
->
metrics
.
gmBlackBoxX
;
glyph_dib
.
height
=
glyph
->
metrics
.
gmBlackBoxY
;
...
...
@@ -857,7 +857,7 @@ static void render_string( HDC hdc, dib_info *dib, struct cached_font *font, INT
}
}
BOOL
render_aa_text_bitmapinfo
(
HDC
h
dc
,
BITMAPINFO
*
info
,
struct
gdi_image_bits
*
bits
,
BOOL
render_aa_text_bitmapinfo
(
DC
*
dc
,
BITMAPINFO
*
info
,
struct
gdi_image_bits
*
bits
,
struct
bitblt_coords
*
src
,
INT
x
,
INT
y
,
UINT
flags
,
UINT
aa_flags
,
LPCWSTR
str
,
UINT
count
,
const
INT
*
dx
)
{
...
...
@@ -875,13 +875,13 @@ BOOL render_aa_text_bitmapinfo( HDC hdc, BITMAPINFO *info, struct gdi_image_bits
if
(
flags
&
ETO_OPAQUE
)
{
rop_mask
bkgnd_color
;
get_text_bkgnd_masks
(
h
dc
,
&
dib
,
&
bkgnd_color
);
get_text_bkgnd_masks
(
dc
,
&
dib
,
&
bkgnd_color
);
dib
.
funcs
->
solid_rects
(
&
dib
,
1
,
&
src
->
visrect
,
bkgnd_color
.
and
,
bkgnd_color
.
xor
);
}
if
(
!
(
font
=
add_cached_font
(
hdc
,
GetCurrentObject
(
hdc
,
OBJ_FONT
)
,
aa_flags
)))
return
FALSE
;
if
(
!
(
font
=
add_cached_font
(
dc
,
dc
->
hFont
,
aa_flags
)))
return
FALSE
;
render_string
(
h
dc
,
&
dib
,
font
,
x
,
y
,
flags
,
str
,
count
,
dx
,
&
visrect
,
NULL
);
render_string
(
dc
,
&
dib
,
font
,
x
,
y
,
flags
,
str
,
count
,
dx
,
&
visrect
,
NULL
);
release_cached_font
(
font
);
return
TRUE
;
}
...
...
@@ -893,6 +893,7 @@ BOOL dibdrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags,
const
RECT
*
rect
,
LPCWSTR
str
,
UINT
count
,
const
INT
*
dx
)
{
dibdrv_physdev
*
pdev
=
get_dibdrv_pdev
(
dev
);
DC
*
dc
=
get_physdev_dc
(
dev
);
struct
clipped_rects
clipped_rects
;
RECT
bounds
;
...
...
@@ -904,7 +905,7 @@ BOOL dibdrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags,
if
(
flags
&
ETO_OPAQUE
)
{
rop_mask
bkgnd_color
;
get_text_bkgnd_masks
(
d
ev
->
hd
c
,
&
pdev
->
dib
,
&
bkgnd_color
);
get_text_bkgnd_masks
(
dc
,
&
pdev
->
dib
,
&
bkgnd_color
);
add_bounds_rect
(
&
bounds
,
rect
);
get_clipped_rects
(
&
pdev
->
dib
,
rect
,
pdev
->
clip
,
&
clipped_rects
);
pdev
->
dib
.
funcs
->
solid_rects
(
&
pdev
->
dib
,
clipped_rects
.
count
,
clipped_rects
.
rects
,
...
...
@@ -925,7 +926,7 @@ BOOL dibdrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags,
}
if
(
!
clipped_rects
.
count
)
goto
done
;
render_string
(
d
ev
->
hd
c
,
&
pdev
->
dib
,
pdev
->
font
,
x
,
y
,
flags
,
str
,
count
,
dx
,
render_string
(
dc
,
&
pdev
->
dib
,
pdev
->
font
,
x
,
y
,
flags
,
str
,
count
,
dx
,
&
clipped_rects
,
&
bounds
);
done:
...
...
@@ -940,6 +941,7 @@ done:
HFONT
dibdrv_SelectFont
(
PHYSDEV
dev
,
HFONT
font
,
UINT
*
aa_flags
)
{
dibdrv_physdev
*
pdev
=
get_dibdrv_pdev
(
dev
);
DC
*
dc
=
get_physdev_dc
(
dev
);
HFONT
ret
;
if
(
pdev
->
dib
.
bit_count
<=
8
)
*
aa_flags
=
GGO_BITMAP
;
/* no anti-aliasing on <= 8bpp */
...
...
@@ -949,7 +951,7 @@ HFONT dibdrv_SelectFont( PHYSDEV dev, HFONT font, UINT *aa_flags )
if
(
ret
)
{
struct
cached_font
*
prev
=
pdev
->
font
;
pdev
->
font
=
add_cached_font
(
d
ev
->
hd
c
,
font
,
*
aa_flags
?
*
aa_flags
:
GGO_BITMAP
);
pdev
->
font
=
add_cached_font
(
dc
,
font
,
*
aa_flags
?
*
aa_flags
:
GGO_BITMAP
);
release_cached_font
(
prev
);
}
return
ret
;
...
...
@@ -1044,7 +1046,8 @@ static void fill_row( dib_info *dib, HRGN clip, RECT *row, DWORD pixel, UINT typ
BOOL
dibdrv_ExtFloodFill
(
PHYSDEV
dev
,
INT
x
,
INT
y
,
COLORREF
color
,
UINT
type
)
{
dibdrv_physdev
*
pdev
=
get_dibdrv_pdev
(
dev
);
DWORD
pixel
=
get_pixel_color
(
dev
->
hdc
,
&
pdev
->
dib
,
color
,
FALSE
);
DC
*
dc
=
get_physdev_dc
(
dev
);
DWORD
pixel
=
get_pixel_color
(
dc
,
&
pdev
->
dib
,
color
,
FALSE
);
RECT
row
;
HRGN
rgn
;
...
...
@@ -1083,11 +1086,12 @@ BOOL dibdrv_FillPath( PHYSDEV dev )
COLORREF
dibdrv_GetNearestColor
(
PHYSDEV
dev
,
COLORREF
color
)
{
dibdrv_physdev
*
pdev
=
get_dibdrv_pdev
(
dev
);
DC
*
dc
=
get_physdev_dc
(
dev
);
DWORD
pixel
;
TRACE
(
"(%p, %08x)
\n
"
,
dev
,
color
);
pixel
=
get_pixel_color
(
d
ev
->
hd
c
,
&
pdev
->
dib
,
color
,
FALSE
);
pixel
=
get_pixel_color
(
dc
,
&
pdev
->
dib
,
color
,
FALSE
);
return
pdev
->
dib
.
funcs
->
pixel_to_colorref
(
&
pdev
->
dib
,
pixel
);
}
...
...
@@ -1577,7 +1581,7 @@ COLORREF dibdrv_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color )
add_clipped_bounds
(
pdev
,
&
rect
,
pdev
->
clip
);
/* SetPixel doesn't do the 1bpp massaging like other fg colors */
pixel
=
get_pixel_color
(
d
ev
->
hd
c
,
&
pdev
->
dib
,
color
,
FALSE
);
pixel
=
get_pixel_color
(
dc
,
&
pdev
->
dib
,
color
,
FALSE
);
color
=
pdev
->
dib
.
funcs
->
pixel_to_colorref
(
&
pdev
->
dib
,
pixel
);
if
(
!
get_clipped_rects
(
&
pdev
->
dib
,
&
rect
,
pdev
->
clip
,
&
clipped_rects
))
return
color
;
...
...
dlls/gdi32/dibdrv/objects.c
View file @
d8e353f9
...
...
@@ -135,18 +135,18 @@ static inline BOOL rgbquad_equal(const RGBQUAD *a, const RGBQUAD *b)
return
FALSE
;
}
static
COLORREF
make_rgb_colorref
(
HDC
hdc
,
const
dib_info
*
dib
,
COLORREF
color
,
BOOL
*
got_pixel
,
DWORD
*
pixel
)
static
COLORREF
make_rgb_colorref
(
DC
*
dc
,
const
dib_info
*
dib
,
COLORREF
color
,
BOOL
*
got_pixel
,
DWORD
*
pixel
)
{
*
pixel
=
0
;
*
got_pixel
=
FALSE
;
if
(
color
&
(
1
<<
24
))
/* PALETTEINDEX */
{
HPALETTE
pal
=
GetCurrentObject
(
hdc
,
OBJ_PAL
);
PALETTEENTRY
pal_ent
;
if
(
!
GetPaletteEntries
(
pal
,
LOWORD
(
color
),
1
,
&
pal_ent
))
GetPaletteEntries
(
pal
,
0
,
1
,
&
pal_ent
);
if
(
!
GetPaletteEntries
(
dc
->
hPalette
,
LOWORD
(
color
),
1
,
&
pal_ent
))
GetPaletteEntries
(
dc
->
hPalette
,
0
,
1
,
&
pal_ent
);
return
RGB
(
pal_ent
.
peRed
,
pal_ent
.
peGreen
,
pal_ent
.
peBlue
);
}
...
...
@@ -172,7 +172,7 @@ static COLORREF make_rgb_colorref( HDC hdc, const dib_info *dib, COLORREF color,
* Otherwise the bg color is mapped to the closest entry in the table and
* the fg takes the other one.
*/
DWORD
get_pixel_color
(
HDC
h
dc
,
const
dib_info
*
dib
,
COLORREF
color
,
BOOL
mono_fixup
)
DWORD
get_pixel_color
(
DC
*
dc
,
const
dib_info
*
dib
,
COLORREF
color
,
BOOL
mono_fixup
)
{
RGBQUAD
fg_quad
;
BOOL
got_pixel
;
...
...
@@ -180,7 +180,7 @@ DWORD get_pixel_color( HDC hdc, const dib_info *dib, COLORREF color, BOOL mono_f
COLORREF
rgb_ref
;
const
RGBQUAD
*
color_table
;
rgb_ref
=
make_rgb_colorref
(
h
dc
,
dib
,
color
,
&
got_pixel
,
&
pixel
);
rgb_ref
=
make_rgb_colorref
(
dc
,
dib
,
color
,
&
got_pixel
,
&
pixel
);
if
(
got_pixel
)
return
pixel
;
if
(
dib
->
bit_count
!=
1
||
!
mono_fixup
)
...
...
@@ -193,8 +193,8 @@ DWORD get_pixel_color( HDC hdc, const dib_info *dib, COLORREF color, BOOL mono_f
if
(
rgbquad_equal
(
&
fg_quad
,
color_table
+
1
))
return
1
;
pixel
=
get_pixel_color
(
hdc
,
dib
,
GetBkColor
(
hdc
)
,
FALSE
);
if
(
color
==
GetBkColor
(
hdc
)
)
return
pixel
;
pixel
=
get_pixel_color
(
dc
,
dib
,
dc
->
backgroundColor
,
FALSE
);
if
(
color
==
dc
->
backgroundColor
)
return
pixel
;
else
return
!
pixel
;
}
...
...
@@ -205,10 +205,10 @@ DWORD get_pixel_color( HDC hdc, const dib_info *dib, COLORREF color, BOOL mono_f
* there are several fg sources (pen, brush, text) we take as bg the inverse
* of the relevant fg color (which is always set up correctly).
*/
static
inline
void
get_color_masks
(
HDC
h
dc
,
const
dib_info
*
dib
,
UINT
rop
,
COLORREF
colorref
,
static
inline
void
get_color_masks
(
DC
*
dc
,
const
dib_info
*
dib
,
UINT
rop
,
COLORREF
colorref
,
INT
bkgnd_mode
,
rop_mask
*
fg_mask
,
rop_mask
*
bg_mask
)
{
DWORD
color
=
get_pixel_color
(
h
dc
,
dib
,
colorref
,
TRUE
);
DWORD
color
=
get_pixel_color
(
dc
,
dib
,
colorref
,
TRUE
);
calc_rop_masks
(
rop
,
color
,
fg_mask
);
...
...
@@ -219,8 +219,8 @@ static inline void get_color_masks( HDC hdc, const dib_info *dib, UINT rop, COLO
return
;
}
if
(
dib
->
bit_count
!=
1
)
color
=
get_pixel_color
(
hdc
,
dib
,
GetBkColor
(
hdc
)
,
FALSE
);
else
if
(
colorref
!=
GetBkColor
(
hdc
)
)
color
=
!
color
;
if
(
dib
->
bit_count
!=
1
)
color
=
get_pixel_color
(
dc
,
dib
,
dc
->
backgroundColor
,
FALSE
);
else
if
(
colorref
!=
dc
->
backgroundColor
)
color
=
!
color
;
calc_rop_masks
(
rop
,
color
,
bg_mask
);
}
...
...
@@ -802,6 +802,7 @@ static BOOL solid_pen_line_region( dibdrv_physdev *pdev, POINT *start, POINT *en
static
BOOL
solid_pen_lines
(
dibdrv_physdev
*
pdev
,
int
num
,
POINT
*
pts
,
BOOL
close
,
HRGN
region
)
{
DC
*
dc
=
get_physdev_dc
(
&
pdev
->
dev
);
int
i
;
assert
(
num
>=
2
);
...
...
@@ -817,8 +818,8 @@ static BOOL solid_pen_lines(dibdrv_physdev *pdev, int num, POINT *pts, BOOL clos
{
DWORD
color
,
and
,
xor
;
color
=
get_pixel_color
(
pdev
->
dev
.
h
dc
,
&
pdev
->
dib
,
pdev
->
pen_brush
.
colorref
,
TRUE
);
calc_and_xor_masks
(
GetROP2
(
pdev
->
dev
.
hdc
)
,
color
,
&
and
,
&
xor
);
color
=
get_pixel_color
(
dc
,
&
pdev
->
dib
,
pdev
->
pen_brush
.
colorref
,
TRUE
);
calc_and_xor_masks
(
dc
->
ROPmode
,
color
,
&
and
,
&
xor
);
for
(
i
=
0
;
i
<
num
-
1
;
i
++
)
if
(
!
solid_pen_line
(
pdev
,
pts
+
i
,
pts
+
i
+
1
,
and
,
xor
))
...
...
@@ -1214,6 +1215,7 @@ static BOOL dashed_pen_line_region(dibdrv_physdev *pdev, POINT *start, POINT *en
static
BOOL
dashed_pen_lines
(
dibdrv_physdev
*
pdev
,
int
num
,
POINT
*
pts
,
BOOL
close
,
HRGN
region
)
{
DC
*
dc
=
get_physdev_dc
(
&
pdev
->
dev
);
int
i
;
assert
(
num
>=
2
);
...
...
@@ -1227,8 +1229,8 @@ static BOOL dashed_pen_lines(dibdrv_physdev *pdev, int num, POINT *pts, BOOL clo
}
else
{
get_color_masks
(
pdev
->
dev
.
hdc
,
&
pdev
->
dib
,
GetROP2
(
pdev
->
dev
.
hdc
)
,
pdev
->
pen_brush
.
colorref
,
pdev
->
pen_is_ext
?
TRANSPARENT
:
GetBkMode
(
pdev
->
dev
.
hdc
)
,
get_color_masks
(
dc
,
&
pdev
->
dib
,
dc
->
ROPmode
,
pdev
->
pen_brush
.
colorref
,
pdev
->
pen_is_ext
?
TRANSPARENT
:
dc
->
backgroundMode
,
&
pdev
->
dash_masks
[
1
],
&
pdev
->
dash_masks
[
0
]
);
for
(
i
=
0
;
i
<
num
-
1
;
i
++
)
...
...
@@ -1759,8 +1761,9 @@ COLORREF dibdrv_SetDCPenColor( PHYSDEV dev, COLORREF color )
static
BOOL
solid_brush
(
dibdrv_physdev
*
pdev
,
dib_brush
*
brush
,
dib_info
*
dib
,
int
num
,
const
RECT
*
rects
,
INT
rop
)
{
DC
*
dc
=
get_physdev_dc
(
&
pdev
->
dev
);
rop_mask
brush_color
;
DWORD
color
=
get_pixel_color
(
pdev
->
dev
.
h
dc
,
&
pdev
->
dib
,
brush
->
colorref
,
TRUE
);
DWORD
color
=
get_pixel_color
(
dc
,
&
pdev
->
dib
,
brush
->
colorref
,
TRUE
);
calc_rop_masks
(
rop
,
color
,
&
brush_color
);
dib
->
funcs
->
solid_rects
(
dib
,
num
,
rects
,
brush_color
.
and
,
brush_color
.
xor
);
...
...
@@ -1849,16 +1852,17 @@ static BOOL init_hatch_brush( dibdrv_physdev *pdev, dib_brush *brush )
static
BOOL
create_hatch_brush_bits
(
dibdrv_physdev
*
pdev
,
dib_brush
*
brush
,
BOOL
*
needs_reselect
)
{
DC
*
dc
=
get_physdev_dc
(
&
pdev
->
dev
);
rop_mask
fg_mask
,
bg_mask
;
if
(
!
init_hatch_brush
(
pdev
,
brush
))
return
FALSE
;
get_color_masks
(
pdev
->
dev
.
hdc
,
&
pdev
->
dib
,
brush
->
rop
,
brush
->
colorref
,
GetBkMode
(
pdev
->
dev
.
hdc
)
,
get_color_masks
(
dc
,
&
pdev
->
dib
,
brush
->
rop
,
brush
->
colorref
,
dc
->
backgroundMode
,
&
fg_mask
,
&
bg_mask
);
if
(
brush
->
colorref
&
(
1
<<
24
))
/* PALETTEINDEX */
*
needs_reselect
=
TRUE
;
if
(
GetBkMode
(
pdev
->
dev
.
hdc
)
!=
TRANSPARENT
&&
(
GetBkColor
(
pdev
->
dev
.
hdc
)
&
(
1
<<
24
)))
if
(
dc
->
backgroundMode
!=
TRANSPARENT
&&
(
dc
->
backgroundColor
&
(
1
<<
24
)))
*
needs_reselect
=
TRUE
;
brush
->
dib
.
funcs
->
create_rop_masks
(
&
brush
->
dib
,
hatches
[
brush
->
hatch
],
...
...
@@ -1871,6 +1875,7 @@ static BOOL create_hatch_brush_bits(dibdrv_physdev *pdev, dib_brush *brush, BOOL
static
BOOL
create_dither_brush_bits
(
dibdrv_physdev
*
pdev
,
dib_brush
*
brush
,
BOOL
*
needs_reselect
)
{
DC
*
dc
=
get_physdev_dc
(
&
pdev
->
dev
);
COLORREF
rgb
;
DWORD
pixel
;
BOOL
got_pixel
;
...
...
@@ -1880,7 +1885,7 @@ static BOOL create_dither_brush_bits(dibdrv_physdev *pdev, dib_brush *brush, BOO
if
(
brush
->
colorref
&
(
1
<<
24
))
/* PALETTEINDEX */
*
needs_reselect
=
TRUE
;
rgb
=
make_rgb_colorref
(
pdev
->
dev
.
h
dc
,
&
pdev
->
dib
,
brush
->
colorref
,
&
got_pixel
,
&
pixel
);
rgb
=
make_rgb_colorref
(
dc
,
&
pdev
->
dib
,
brush
->
colorref
,
&
got_pixel
,
&
pixel
);
brush
->
dib
.
funcs
->
create_dither_masks
(
&
brush
->
dib
,
brush
->
rop
,
rgb
,
&
brush
->
masks
);
...
...
@@ -1912,6 +1917,7 @@ static BOOL matching_pattern_format( dib_info *dib, dib_info *pattern )
static
BOOL
select_pattern_brush
(
dibdrv_physdev
*
pdev
,
dib_brush
*
brush
,
BOOL
*
needs_reselect
)
{
DC
*
dc
=
get_physdev_dc
(
&
pdev
->
dev
);
char
buffer
[
FIELD_OFFSET
(
BITMAPINFO
,
bmiColors
[
256
]
)];
BITMAPINFO
*
info
=
(
BITMAPINFO
*
)
buffer
;
RGBQUAD
color_table
[
2
];
...
...
@@ -1941,15 +1947,13 @@ static BOOL select_pattern_brush( dibdrv_physdev *pdev, dib_brush *brush, BOOL *
BOOL
got_pixel
;
COLORREF
color
;
color
=
make_rgb_colorref
(
pdev
->
dev
.
hdc
,
&
pdev
->
dib
,
GetTextColor
(
pdev
->
dev
.
hdc
),
&
got_pixel
,
&
pixel
);
color
=
make_rgb_colorref
(
dc
,
&
pdev
->
dib
,
dc
->
textColor
,
&
got_pixel
,
&
pixel
);
color_table
[
0
].
rgbRed
=
GetRValue
(
color
);
color_table
[
0
].
rgbGreen
=
GetGValue
(
color
);
color_table
[
0
].
rgbBlue
=
GetBValue
(
color
);
color_table
[
0
].
rgbReserved
=
0
;
color
=
make_rgb_colorref
(
pdev
->
dev
.
hdc
,
&
pdev
->
dib
,
GetBkColor
(
pdev
->
dev
.
hdc
),
&
got_pixel
,
&
pixel
);
color
=
make_rgb_colorref
(
dc
,
&
pdev
->
dib
,
dc
->
backgroundColor
,
&
got_pixel
,
&
pixel
);
color_table
[
1
].
rgbRed
=
GetRValue
(
color
);
color_table
[
1
].
rgbGreen
=
GetGValue
(
color
);
color_table
[
1
].
rgbBlue
=
GetBValue
(
color
);
...
...
dlls/gdi32/font.c
View file @
d8e353f9
...
...
@@ -2008,7 +2008,7 @@ BOOL nulldrv_ExtTextOut( PHYSDEV dev, INT x, INT y, UINT flags, const RECT *rect
/* make x,y relative to the image bits */
x
+=
src
.
visrect
.
left
-
dst
.
visrect
.
left
;
y
+=
src
.
visrect
.
top
-
dst
.
visrect
.
top
;
render_aa_text_bitmapinfo
(
d
ev
->
hd
c
,
info
,
&
bits
,
&
src
,
x
,
y
,
flags
,
render_aa_text_bitmapinfo
(
dc
,
info
,
&
bits
,
&
src
,
x
,
y
,
flags
,
aa_flags
,
str
,
count
,
dx
);
err
=
dst_dev
->
funcs
->
pPutImage
(
dst_dev
,
0
,
info
,
&
bits
,
&
src
,
&
dst
,
SRCCOPY
);
if
(
bits
.
free
)
bits
.
free
(
&
bits
);
...
...
dlls/gdi32/gdi_private.h
View file @
d8e353f9
...
...
@@ -248,7 +248,7 @@ extern DWORD blend_bitmapinfo( const BITMAPINFO *src_info, void *src_bits, struc
extern
DWORD
gradient_bitmapinfo
(
const
BITMAPINFO
*
info
,
void
*
bits
,
TRIVERTEX
*
vert_array
,
ULONG
nvert
,
void
*
grad_array
,
ULONG
ngrad
,
ULONG
mode
,
const
POINT
*
dev_pts
,
HRGN
rgn
)
DECLSPEC_HIDDEN
;
extern
COLORREF
get_pixel_bitmapinfo
(
const
BITMAPINFO
*
info
,
void
*
bits
,
struct
bitblt_coords
*
src
)
DECLSPEC_HIDDEN
;
extern
BOOL
render_aa_text_bitmapinfo
(
HDC
h
dc
,
BITMAPINFO
*
info
,
struct
gdi_image_bits
*
bits
,
extern
BOOL
render_aa_text_bitmapinfo
(
DC
*
dc
,
BITMAPINFO
*
info
,
struct
gdi_image_bits
*
bits
,
struct
bitblt_coords
*
src
,
INT
x
,
INT
y
,
UINT
flags
,
UINT
aa_flags
,
LPCWSTR
str
,
UINT
count
,
const
INT
*
dx
)
DECLSPEC_HIDDEN
;
extern
DWORD
get_image_from_bitmap
(
BITMAPOBJ
*
bmp
,
BITMAPINFO
*
info
,
...
...
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