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
95ac10e5
Commit
95ac10e5
authored
Dec 30, 2009
by
Joel Holdsworth
Committed by
Alexandre Julliard
Dec 31, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
user32: Fixed icons to select correct image in high colour depth.
parent
39772f97
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
31 additions
and
37 deletions
+31
-37
cursoricon.c
dlls/user32/cursoricon.c
+31
-37
No files found.
dlls/user32/cursoricon.c
View file @
95ac10e5
...
...
@@ -468,10 +468,10 @@ typedef BOOL (*fnGetCIEntry)( LPVOID dir, int n,
/**********************************************************************
* CURSORICON_FindBestIcon
*
* Find the icon closest to the requested size and
number of colors
.
* Find the icon closest to the requested size and
bit depth
.
*/
static
int
CURSORICON_FindBestIcon
(
LPVOID
dir
,
fnGetCIEntry
get_entry
,
int
width
,
int
height
,
int
colors
)
int
width
,
int
height
,
int
depth
)
{
int
i
,
cx
,
cy
,
bits
,
bestEntry
=
-
1
;
UINT
iTotalDiff
,
iXDiff
=
0
,
iYDiff
=
0
,
iColorDiff
;
...
...
@@ -498,7 +498,7 @@ static int CURSORICON_FindBestIcon( LPVOID dir, fnGetCIEntry get_entry,
{
if
(
abs
(
width
-
cx
)
==
iXDiff
&&
abs
(
height
-
cy
)
==
iYDiff
)
{
iTempColorDiff
=
abs
(
colors
-
(
1
<<
bits
)
);
iTempColorDiff
=
abs
(
depth
-
bits
);
if
(
iColorDiff
>
iTempColorDiff
)
{
bestEntry
=
i
;
...
...
@@ -533,7 +533,7 @@ static BOOL CURSORICON_GetResIconEntry( LPVOID dir, int n,
* FIXME: parameter 'color' ignored.
*/
static
int
CURSORICON_FindBestCursor
(
LPVOID
dir
,
fnGetCIEntry
get_entry
,
int
width
,
int
height
,
int
color
)
int
width
,
int
height
,
int
depth
)
{
int
i
,
maxwidth
,
maxheight
,
cx
,
cy
,
bits
,
bestEntry
=
-
1
;
...
...
@@ -588,22 +588,22 @@ static BOOL CURSORICON_GetResCursorEntry( LPVOID dir, int n,
}
static
CURSORICONDIRENTRY
*
CURSORICON_FindBestIconRes
(
CURSORICONDIR
*
dir
,
int
width
,
int
height
,
int
colors
)
int
width
,
int
height
,
int
depth
)
{
int
n
;
n
=
CURSORICON_FindBestIcon
(
dir
,
CURSORICON_GetResIconEntry
,
width
,
height
,
colors
);
width
,
height
,
depth
);
if
(
n
<
0
)
return
NULL
;
return
&
dir
->
idEntries
[
n
];
}
static
CURSORICONDIRENTRY
*
CURSORICON_FindBestCursorRes
(
CURSORICONDIR
*
dir
,
int
width
,
int
height
,
int
color
)
int
width
,
int
height
,
int
depth
)
{
int
n
=
CURSORICON_FindBestCursor
(
dir
,
CURSORICON_GetResCursorEntry
,
width
,
height
,
color
);
width
,
height
,
depth
);
if
(
n
<
0
)
return
NULL
;
return
&
dir
->
idEntries
[
n
];
...
...
@@ -625,20 +625,20 @@ static BOOL CURSORICON_GetFileEntry( LPVOID dir, int n,
}
static
CURSORICONFILEDIRENTRY
*
CURSORICON_FindBestCursorFile
(
CURSORICONFILEDIR
*
dir
,
int
width
,
int
height
,
int
color
)
int
width
,
int
height
,
int
depth
)
{
int
n
=
CURSORICON_FindBestCursor
(
dir
,
CURSORICON_GetFileEntry
,
width
,
height
,
color
);
width
,
height
,
depth
);
if
(
n
<
0
)
return
NULL
;
return
&
dir
->
idEntries
[
n
];
}
static
CURSORICONFILEDIRENTRY
*
CURSORICON_FindBestIconFile
(
CURSORICONFILEDIR
*
dir
,
int
width
,
int
height
,
int
color
)
int
width
,
int
height
,
int
depth
)
{
int
n
=
CURSORICON_FindBestIcon
(
dir
,
CURSORICON_GetFileEntry
,
width
,
height
,
color
);
width
,
height
,
depth
);
if
(
n
<
0
)
return
NULL
;
return
&
dir
->
idEntries
[
n
];
...
...
@@ -964,7 +964,7 @@ static void riff_find_chunk( DWORD chunk_id, DWORD chunk_type, const riff_chunk_
* \- CHUNK:icon
*/
static
HCURSOR
CURSORICON_CreateIconFromANI
(
const
LPBYTE
bits
,
DWORD
bits_size
,
INT
width
,
INT
height
,
INT
colors
)
INT
width
,
INT
height
,
INT
depth
)
{
HCURSOR
cursor
;
ani_header
header
=
{
0
};
...
...
@@ -1017,7 +1017,7 @@ static HCURSOR CURSORICON_CreateIconFromANI( const LPBYTE bits, DWORD bits_size,
icon_data
=
fram_chunk
.
data
+
(
2
*
sizeof
(
DWORD
));
entry
=
CURSORICON_FindBestIconFile
(
(
CURSORICONFILEDIR
*
)
icon_data
,
width
,
height
,
colors
);
width
,
height
,
depth
);
frame_bits
=
HeapAlloc
(
GetProcessHeap
(),
0
,
entry
->
dwDIBSize
);
memcpy
(
frame_bits
,
icon_data
+
entry
->
dwDIBOffset
,
entry
->
dwDIBSize
);
...
...
@@ -1086,7 +1086,7 @@ HICON WINAPI CreateIconFromResource( LPBYTE bits, UINT cbSize,
static
HICON
CURSORICON_LoadFromFile
(
LPCWSTR
filename
,
INT
width
,
INT
height
,
INT
colors
,
INT
width
,
INT
height
,
INT
depth
,
BOOL
fCursor
,
UINT
loadflags
)
{
CURSORICONFILEDIRENTRY
*
entry
;
...
...
@@ -1106,7 +1106,7 @@ static HICON CURSORICON_LoadFromFile( LPCWSTR filename,
if
(
memcmp
(
bits
,
"RIFF"
,
4
)
==
0
)
{
hIcon
=
CURSORICON_CreateIconFromANI
(
bits
,
filesize
,
width
,
height
,
colors
);
depth
);
goto
end
;
}
...
...
@@ -1118,9 +1118,9 @@ static HICON CURSORICON_LoadFromFile( LPCWSTR filename,
goto
end
;
if
(
fCursor
)
entry
=
CURSORICON_FindBestCursorFile
(
dir
,
width
,
height
,
colors
);
entry
=
CURSORICON_FindBestCursorFile
(
dir
,
width
,
height
,
depth
);
else
entry
=
CURSORICON_FindBestIconFile
(
dir
,
width
,
height
,
colors
);
entry
=
CURSORICON_FindBestIconFile
(
dir
,
width
,
height
,
depth
);
if
(
!
entry
)
goto
end
;
...
...
@@ -1157,7 +1157,7 @@ end:
* Load a cursor or icon from resource or file.
*/
static
HICON
CURSORICON_Load
(
HINSTANCE
hInstance
,
LPCWSTR
name
,
INT
width
,
INT
height
,
INT
colors
,
INT
width
,
INT
height
,
INT
depth
,
BOOL
fCursor
,
UINT
loadflags
)
{
HANDLE
handle
=
0
;
...
...
@@ -1169,11 +1169,11 @@ static HICON CURSORICON_Load(HINSTANCE hInstance, LPCWSTR name,
WORD
wResId
;
DWORD
dwBytesInRes
;
TRACE
(
"%p, %s, %dx%d,
colors
%d, fCursor %d, flags 0x%04x
\n
"
,
hInstance
,
debugstr_w
(
name
),
width
,
height
,
colors
,
fCursor
,
loadflags
);
TRACE
(
"%p, %s, %dx%d,
depth
%d, fCursor %d, flags 0x%04x
\n
"
,
hInstance
,
debugstr_w
(
name
),
width
,
height
,
depth
,
fCursor
,
loadflags
);
if
(
loadflags
&
LR_LOADFROMFILE
)
/* Load from file */
return
CURSORICON_LoadFromFile
(
name
,
width
,
height
,
colors
,
fCursor
,
loadflags
);
return
CURSORICON_LoadFromFile
(
name
,
width
,
height
,
depth
,
fCursor
,
loadflags
);
if
(
!
hInstance
)
hInstance
=
user32_module
;
/* Load OEM cursor/icon */
...
...
@@ -1192,9 +1192,9 @@ static HICON CURSORICON_Load(HINSTANCE hInstance, LPCWSTR name,
if
(
!
(
handle
=
LoadResource
(
hInstance
,
hRsrc
)))
return
0
;
if
(
!
(
dir
=
LockResource
(
handle
)))
return
0
;
if
(
fCursor
)
dirEntry
=
CURSORICON_FindBestCursorRes
(
dir
,
width
,
height
,
colors
);
dirEntry
=
CURSORICON_FindBestCursorRes
(
dir
,
width
,
height
,
depth
);
else
dirEntry
=
CURSORICON_FindBestIconRes
(
dir
,
width
,
height
,
colors
);
dirEntry
=
CURSORICON_FindBestIconRes
(
dir
,
width
,
height
,
depth
);
if
(
!
dirEntry
)
return
0
;
wResId
=
dirEntry
->
wResId
;
dwBytesInRes
=
dirEntry
->
dwBytesInRes
;
...
...
@@ -1767,21 +1767,16 @@ INT WINAPI LookupIconIdFromDirectoryEx( LPBYTE xdir, BOOL bIcon,
if
(
dir
&&
!
dir
->
idReserved
&&
(
dir
->
idType
&
3
)
)
{
CURSORICONDIRENTRY
*
entry
;
HDC
hdc
;
UINT
palEnts
;
int
colors
;
hdc
=
GetDC
(
0
);
palEnts
=
GetSystemPaletteEntries
(
hdc
,
0
,
0
,
NULL
);
if
(
palEnts
==
0
)
palEnts
=
256
;
colors
=
(
cFlag
&
LR_MONOCHROME
)
?
2
:
palEnts
;
const
HDC
hdc
=
GetDC
(
0
);
const
int
depth
=
(
cFlag
&
LR_MONOCHROME
)
?
1
:
GetDeviceCaps
(
hdc
,
BITSPIXEL
);
ReleaseDC
(
0
,
hdc
);
if
(
bIcon
)
entry
=
CURSORICON_FindBestIconRes
(
dir
,
width
,
height
,
colors
);
entry
=
CURSORICON_FindBestIconRes
(
dir
,
width
,
height
,
depth
);
else
entry
=
CURSORICON_FindBestCursorRes
(
dir
,
width
,
height
,
colors
);
entry
=
CURSORICON_FindBestCursorRes
(
dir
,
width
,
height
,
depth
);
if
(
entry
)
retVal
=
entry
->
wResId
;
}
...
...
@@ -2532,10 +2527,9 @@ HANDLE WINAPI LoadImageW( HINSTANCE hinst, LPCWSTR name, UINT type,
if
(
!
screen_dc
)
screen_dc
=
CreateDCW
(
DISPLAYW
,
NULL
,
NULL
,
NULL
);
if
(
screen_dc
)
{
UINT
palEnts
=
GetSystemPaletteEntries
(
screen_dc
,
0
,
0
,
NULL
);
if
(
palEnts
==
0
)
palEnts
=
256
;
return
CURSORICON_Load
(
hinst
,
name
,
desiredx
,
desiredy
,
palEnts
,
FALSE
,
loadflags
);
GetDeviceCaps
(
screen_dc
,
BITSPIXEL
),
FALSE
,
loadflags
);
}
break
;
...
...
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