winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
April 2011
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
3 participants
937 discussions
Start a n
N
ew thread
Henri Verbeet : wined3d: Don' t bother setting a depth render buffer for WINED3DFMT_NULL render targets.
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: 0ce17ea27ec2d89750d352bc83d89859a9846d58 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0ce17ea27ec2d89750d352bc8…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Mon Apr 4 17:46:01 2011 +0200 wined3d: Don't bother setting a depth render buffer for WINED3DFMT_NULL render targets. --- dlls/wined3d/context.c | 5 +---- dlls/wined3d/surface.c | 14 +++++++++++++- dlls/wined3d/wined3d_private.h | 3 +-- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index 7d029db..8ffb30c 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -455,10 +455,7 @@ static void context_apply_fbo_entry(struct wined3d_context *context, GLenum targ /* Apply depth targets */ if (entry->depth_stencil) - { - surface_set_compatible_renderbuffer(entry->depth_stencil, - entry->render_targets[0]->pow2Width, entry->render_targets[0]->pow2Height); - } + surface_set_compatible_renderbuffer(entry->depth_stencil, entry->render_targets[0]); context_attach_depth_stencil_fbo(context, target, entry->depth_stencil, TRUE); entry->attached = TRUE; diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 5d4dfa7..59f5aa7 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -1104,12 +1104,24 @@ static void surface_allocate_surface(IWineD3DSurfaceImpl *This, const struct win * render target dimensions. With FBOs, the dimensions have to be an exact match. */ /* TODO: We should synchronize the renderbuffer's content with the texture's content. */ /* GL locking is done by the caller */ -void surface_set_compatible_renderbuffer(IWineD3DSurfaceImpl *surface, unsigned int width, unsigned int height) +void surface_set_compatible_renderbuffer(IWineD3DSurfaceImpl *surface, IWineD3DSurfaceImpl *rt) { const struct wined3d_gl_info *gl_info = &surface->resource.device->adapter->gl_info; renderbuffer_entry_t *entry; GLuint renderbuffer = 0; unsigned int src_width, src_height; + unsigned int width, height; + + if (rt->resource.format->id != WINED3DFMT_NULL) + { + width = rt->pow2Width; + height = rt->pow2Height; + } + else + { + width = surface->pow2Width; + height = surface->pow2Height; + } src_width = surface->pow2Width; src_height = surface->pow2Height; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index c985378..117909a 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2121,8 +2121,7 @@ void surface_modify_ds_location(IWineD3DSurfaceImpl *surface, DWORD location, UI void surface_modify_location(IWineD3DSurfaceImpl *surface, DWORD flag, BOOL persistent) DECLSPEC_HIDDEN; void surface_prepare_texture(IWineD3DSurfaceImpl *surface, const struct wined3d_gl_info *gl_info, BOOL srgb) DECLSPEC_HIDDEN; -void surface_set_compatible_renderbuffer(IWineD3DSurfaceImpl *surface, - unsigned int width, unsigned int height) DECLSPEC_HIDDEN; +void surface_set_compatible_renderbuffer(IWineD3DSurfaceImpl *surface, IWineD3DSurfaceImpl *rt) DECLSPEC_HIDDEN; void surface_set_container(IWineD3DSurfaceImpl *surface, enum wined3d_container_type type, void *container) DECLSPEC_HIDDEN; void surface_set_texture_name(IWineD3DSurfaceImpl *surface, GLuint name, BOOL srgb_name) DECLSPEC_HIDDEN;
1
0
0
0
Akihiro Sagawa : libwine: MB_ERR_INVALID_CHARS makes an error when the undefined byte character is used .
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: 16d57370090a63560e01e64699517ae27ce94c7f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=16d57370090a63560e01e6469…
Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Mon Apr 4 19:01:01 2011 +0900 libwine: MB_ERR_INVALID_CHARS makes an error when the undefined byte character is used. --- dlls/kernel32/tests/codepage.c | 1 - libs/wine/mbtowc.c | 13 +++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/dlls/kernel32/tests/codepage.c b/dlls/kernel32/tests/codepage.c index 96dd45d..13f9b75 100644 --- a/dlls/kernel32/tests/codepage.c +++ b/dlls/kernel32/tests/codepage.c @@ -385,7 +385,6 @@ static void test_undefined_byte_char(void) ret = MultiByteToWideChar(testset[i].codepage, MB_ERR_INVALID_CHARS, testset[i].str, -1, NULL, 0); if (testset[i].is_error) { - todo_wine ok(ret == 0 && GetLastError() == ERROR_NO_UNICODE_TRANSLATION, "ret is %d, GetLastError is %u (cp %d)\n", ret, GetLastError(), testset[i].codepage); diff --git a/libs/wine/mbtowc.c b/libs/wine/mbtowc.c index 8b06a89..1995b31 100644 --- a/libs/wine/mbtowc.c +++ b/libs/wine/mbtowc.c @@ -39,6 +39,13 @@ static int get_decomposition( WCHAR src, WCHAR *dst, unsigned int dstlen ) return res; } +/* check the code whether it is in Unicode Private Use Area (PUA). */ +/* MB_ERR_INVALID_CHARS raises an error converting from 1-byte character to PUA. */ +static inline int is_private_use_area_char(WCHAR code) +{ + return (code >= 0xe000 && code <= 0xf8ff); +} + /* check src string for invalid chars; return non-zero if invalid char found */ static inline int check_invalid_chars_sbcs( const struct sbcs_table *table, int flags, const unsigned char *src, unsigned int srclen ) @@ -49,7 +56,8 @@ static inline int check_invalid_chars_sbcs( const struct sbcs_table *table, int + (def_unicode_char & 0xff)]; while (srclen) { - if (cp2uni[*src] == def_unicode_char && *src != def_char) break; + if ((cp2uni[*src] == def_unicode_char && *src != def_char) || + is_private_use_area_char(cp2uni[*src])) break; src++; srclen--; } @@ -167,7 +175,8 @@ static inline int check_invalid_chars_dbcs( const struct dbcs_table *table, src++; srclen--; } - else if (cp2uni[*src] == def_unicode_char && *src != def_char) break; + else if ((cp2uni[*src] == def_unicode_char && *src != def_char) || + is_private_use_area_char(cp2uni[*src])) break; src++; srclen--; }
1
0
0
0
Akihiro Sagawa : kernel32/tests: Add a test for undefined byte character conversion.
by Alexandre Julliard
05 Apr '11
05 Apr '11
Module: wine Branch: master Commit: 79d7cd76f9bcfb8885d0dd4a3760afa767380ffa URL:
http://source.winehq.org/git/wine.git/?a=commit;h=79d7cd76f9bcfb8885d0dd4a3…
Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Mon Apr 4 19:00:58 2011 +0900 kernel32/tests: Add a test for undefined byte character conversion. --- dlls/kernel32/tests/codepage.c | 53 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-) diff --git a/dlls/kernel32/tests/codepage.c b/dlls/kernel32/tests/codepage.c index 402e4bf..96dd45d 100644 --- a/dlls/kernel32/tests/codepage.c +++ b/dlls/kernel32/tests/codepage.c @@ -354,6 +354,57 @@ static void test_string_conversion(LPBOOL bUsedDefaultChar) ok(GetLastError() == 0xdeadbeef, "GetLastError() is %u\n", GetLastError()); } +static void test_undefined_byte_char(void) +{ + struct tag_testset { + INT codepage; + LPCSTR str; + BOOL is_error; + } testset[] = { + { 874, "\xdd", TRUE }, + { 932, "\xfe", TRUE }, + { 932, "\x80", FALSE }, + { 936, "\xff", TRUE }, + { 949, "\xff", TRUE }, + { 950, "\xff", TRUE }, + { 1252, "\x90", FALSE }, + { 1253, "\xaa", TRUE }, + { 1255, "\xff", TRUE }, + { 1257, "\xa5", TRUE }, + }; + INT i, ret; + + for (i = 0; i < (sizeof(testset) / sizeof(testset[0])); i++) { + if (! IsValidCodePage(testset[i].codepage)) + { + skip("Codepage %d not available\n", testset[i].codepage); + continue; + } + + SetLastError(0xdeadbeef); + ret = MultiByteToWideChar(testset[i].codepage, MB_ERR_INVALID_CHARS, + testset[i].str, -1, NULL, 0); + if (testset[i].is_error) { + todo_wine + ok(ret == 0 && GetLastError() == ERROR_NO_UNICODE_TRANSLATION, + "ret is %d, GetLastError is %u (cp %d)\n", + ret, GetLastError(), testset[i].codepage); + } + else { + ok(ret == strlen(testset[i].str)+1 && GetLastError() == 0xdeadbeef, + "ret is %d, GetLastError is %u (cp %d)\n", + ret, GetLastError(), testset[i].codepage); + } + + SetLastError(0xdeadbeef); + ret = MultiByteToWideChar(testset[i].codepage, 0, + testset[i].str, -1, NULL, 0); + ok(ret == strlen(testset[i].str)+1 && GetLastError() == 0xdeadbeef, + "ret is %d, GetLastError is %u (cp %d)\n", + ret, GetLastError(), testset[i].codepage); + } +} + START_TEST(codepage) { BOOL bUsedDefaultChar; @@ -367,4 +418,6 @@ START_TEST(codepage) /* WideCharToMultiByte has two code paths, test both here */ test_string_conversion(NULL); test_string_conversion(&bUsedDefaultChar); + + test_undefined_byte_char(); }
1
0
0
0
Andrew Nguyen : msvcrt: Ensure that old buffer contents are copied when allocating a growable pf_output buffer for the first time .
by Alexandre Julliard
04 Apr '11
04 Apr '11
Module: wine Branch: master Commit: 5c57185060ce9863119d310ed380772866cb21bb URL:
http://source.winehq.org/git/wine.git/?a=commit;h=5c57185060ce9863119d310ed…
Author: Andrew Nguyen <anguyen(a)codeweavers.com> Date: Sun Apr 3 23:05:20 2011 -0500 msvcrt: Ensure that old buffer contents are copied when allocating a growable pf_output buffer for the first time. --- dlls/msvcrt/wcs.c | 32 ++++++++++++++++++++++++++------ 1 files changed, 26 insertions(+), 6 deletions(-) diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index a7c7a77..fc77656 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -429,19 +429,39 @@ static inline int pf_check_auto_grow(pf_output *out, unsigned delta) out->len = max(out->len * 2, out->used + delta); if (out->unicode) { + WCHAR *ptr; + if (out->buf.W != out->grow.W) - out->buf.W = MSVCRT_realloc(out->buf.W, out->len * sizeof(WCHAR)); + { + if (!(ptr = MSVCRT_realloc(out->buf.W, out->len * sizeof(WCHAR)))) + return -1; + } else - out->buf.W = MSVCRT_malloc(out->len * sizeof(WCHAR)); - if (!out->buf.W) return -1; + { + if (!(ptr = MSVCRT_malloc(out->len * sizeof(WCHAR)))) + return -1; + memcpy(ptr, out->buf.W, out->used * sizeof(WCHAR)); + } + + out->buf.W = ptr; } else { + char *ptr; + if (out->buf.A != out->grow.A) - out->buf.A = MSVCRT_realloc(out->buf.A, out->len * sizeof(char)); + { + if (!(ptr = MSVCRT_realloc(out->buf.A, out->len * sizeof(char)))) + return -1; + } else - out->buf.A = MSVCRT_malloc(out->len * sizeof(char)); - if (!out->buf.A) return -1; + { + if (!(ptr = MSVCRT_malloc(out->len * sizeof(char)))) + return -1; + memcpy(ptr, out->buf.A, out->used * sizeof(char)); + } + + out->buf.A = ptr; } } return 0;
1
0
0
0
Gerald Pfeifer : gdiplus: Initialize a variable in SOFTWARE_GdipFillRegion to avoid a compiler warning .
by Alexandre Julliard
04 Apr '11
04 Apr '11
Module: wine Branch: master Commit: 25764d79c01a0f01e2ece5f48e0ae09590eca1a8 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=25764d79c01a0f01e2ece5f48…
Author: Gerald Pfeifer <gerald(a)pfeifer.com> Date: Sat Apr 2 22:35:17 2011 +0200 gdiplus: Initialize a variable in SOFTWARE_GdipFillRegion to avoid a compiler warning. --- dlls/gdiplus/graphics.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 4fdfa9c..cecc880 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -3673,7 +3673,7 @@ static GpStatus SOFTWARE_GdipFillRegion(GpGraphics *graphics, GpBrush *brush, GpRectF graphics_bounds; UINT scans_count, i; INT dummy; - GpRect *scans; + GpRect *scans = NULL; DWORD *pixel_data; if (!brush_can_fill_pixels(brush))
1
0
0
0
Gerald Pfeifer : winex11.drv: Initialize a variable in create_xcursor_frame to silence a warning.
by Alexandre Julliard
04 Apr '11
04 Apr '11
Module: wine Branch: master Commit: 4d936753321fb40a3eedd527f1b548e556e51af4 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=4d936753321fb40a3eedd527f…
Author: Gerald Pfeifer <gerald(a)pfeifer.com> Date: Sun Apr 3 21:23:38 2011 +0200 winex11.drv: Initialize a variable in create_xcursor_frame to silence a warning. --- dlls/winex11.drv/mouse.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c index ab500ef..1a2d618 100644 --- a/dlls/winex11.drv/mouse.c +++ b/dlls/winex11.drv/mouse.c @@ -295,7 +295,7 @@ static XcursorImage *create_xcursor_frame( HDC hdc, const ICONINFOEXW *iinfo, HA { XcursorImage *image, *ret = NULL; DWORD delay_jiffies, num_steps; - int x, y, i, has_alpha; + int x, y, i, has_alpha = FALSE; XcursorPixel *ptr; wine_tsx11_lock();
1
0
0
0
Jörg Höhle : winmm: Check callback flags prior to opening a driver.
by Alexandre Julliard
04 Apr '11
04 Apr '11
Module: wine Branch: master Commit: c3774b664ad3cfd3b53eae19999489bc16904ff8 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=c3774b664ad3cfd3b53eae199…
Author: Jörg Höhle <hoehle(a)users.sourceforge.net> Date: Tue Mar 15 23:00:04 2011 +0100 winmm: Check callback flags prior to opening a driver. --- dlls/winmm/tests/mixer.c | 35 ++++++++++++++++- dlls/winmm/winmm.c | 98 ++++++++++++++++++++++++++++------------------ 2 files changed, 94 insertions(+), 39 deletions(-) diff --git a/dlls/winmm/tests/mixer.c b/dlls/winmm/tests/mixer.c index 59627a7..da27b16 100644 --- a/dlls/winmm/tests/mixer.c +++ b/dlls/winmm/tests/mixer.c @@ -1004,6 +1004,7 @@ static void mixer_testsW(void) static void test_mixerOpen(void) { HMIXER mix; + HANDLE event; MMRESULT rc; UINT ndev, d; @@ -1031,7 +1032,7 @@ static void test_mixerOpen(void) rc = mixerOpen(&mix, d, 0xdeadbeef, 0, CALLBACK_WINDOW); ok(rc == MMSYSERR_INVALPARAM || - rc == MMSYSERR_NOERROR, /* 98 */ + broken(rc == MMSYSERR_NOERROR /* 98 */), "mixerOpen: MMSYSERR_INVALPARAM expected, got %s\n", mmsys_error(rc)); if (rc == MMSYSERR_NOERROR) @@ -1042,7 +1043,35 @@ static void test_mixerOpen(void) ok(rc == MMSYSERR_NOERROR, "mixerOpen: MMSYSERR_NOERROR expected, got %s\n", mmsys_error(rc)); + if (rc == MMSYSERR_NOERROR) + test_mixerClose(mix); + + rc = mixerOpen(&mix, d, 0, 0, CALLBACK_THREAD); + ok(rc == MMSYSERR_NOERROR /* since w2k */ || + rc == MMSYSERR_NOTSUPPORTED, /* 98 */ + "mixerOpen: MMSYSERR_NOERROR expected, got %s\n", + mmsys_error(rc)); + if (rc == MMSYSERR_NOERROR) + test_mixerClose(mix); + + rc = mixerOpen(&mix, d, 0, 0, CALLBACK_EVENT); + ok(rc == MMSYSERR_NOERROR /* since w2k */ || + rc == MMSYSERR_NOTSUPPORTED, /* 98 */ + "mixerOpen: MMSYSERR_NOERROR expected, got %s\n", + mmsys_error(rc)); + if (rc == MMSYSERR_NOERROR) + test_mixerClose(mix); + event = CreateEvent(NULL, FALSE, FALSE, NULL); + ok(event != NULL, "CreateEvent(): error=%d\n", GetLastError()); + + /* NOTSUPPORTED is not broken, but it enables the todo_wine marker. */ + rc = mixerOpen(&mix, d, (DWORD_PTR)event, 0, CALLBACK_EVENT); + todo_wine + ok(rc == MMSYSERR_NOERROR /* since w2k */ || + broken(rc == MMSYSERR_NOTSUPPORTED), /* 98 */ + "mixerOpen: MMSYSERR_NOERROR expected, got %s\n", + mmsys_error(rc)); if (rc == MMSYSERR_NOERROR) test_mixerClose(mix); @@ -1054,6 +1083,10 @@ static void test_mixerOpen(void) if (rc == MMSYSERR_NOERROR) test_mixerClose(mix); + + rc = WaitForSingleObject(event, 0); + ok(rc == WAIT_TIMEOUT, "WaitEvent %d\n", rc); + CloseHandle(event); } } diff --git a/dlls/winmm/winmm.c b/dlls/winmm/winmm.c index 6d5950b..29f068b 100644 --- a/dlls/winmm/winmm.c +++ b/dlls/winmm/winmm.c @@ -173,6 +173,35 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad) } /************************************************************************** + * WINMM_CheckCallback [internal] + */ +static MMRESULT WINMM_CheckCallback(DWORD_PTR dwCallback, DWORD fdwOpen, BOOL mixer) +{ + switch (fdwOpen & CALLBACK_TYPEMASK) { + case CALLBACK_NULL: /* dwCallback need not be NULL */ + break; + case CALLBACK_WINDOW: + if (dwCallback && !IsWindow((HWND)dwCallback)) + return MMSYSERR_INVALPARAM; + break; + + case CALLBACK_FUNCTION: + /* a NULL cb is acceptable since w2k, MMSYSERR_INVALPARAM earlier */ + if (mixer) + return MMSYSERR_INVALFLAG; /* since w2k, MMSYSERR_NOTSUPPORTED earlier */ + break; + case CALLBACK_THREAD: + case CALLBACK_EVENT: + if (mixer) /* FIXME: mixer supports THREAD+EVENT since w2k */ + return MMSYSERR_NOTSUPPORTED; /* w9X */ + break; + default: + WARN("Unknown callback type %d\n", HIWORD(fdwOpen)); + } + return MMSYSERR_NOERROR; +} + +/************************************************************************** * Mixer devices. New to Win95 */ @@ -297,35 +326,27 @@ UINT WINAPI mixerOpen(LPHMIXER lphMix, UINT uDeviceID, DWORD_PTR dwCallback, { HANDLE hMix; LPWINE_MLD wmld; - DWORD dwRet = 0; + DWORD dwRet; MIXEROPENDESC mod; TRACE("(%p, %d, %08lx, %08lx, %08x)\n", lphMix, uDeviceID, dwCallback, dwInstance, fdwOpen); - mod.dwCallback = (DWORD_PTR)MIXER_WCallback; - mod.dwInstance = 0; + dwRet = WINMM_CheckCallback(dwCallback, fdwOpen, TRUE); + if (dwRet != MMSYSERR_NOERROR) + return dwRet; -/* If callback is a function, - * dwCallback contains function pointer - * dwInstance private data - * - * if callback is a window - * dwCallback contains a window handle - */ - switch (fdwOpen & CALLBACK_TYPEMASK) { - default: - return MMSYSERR_INVALFLAG; - - case CALLBACK_NULL: - break; - - case CALLBACK_WINDOW: + mod.dwCallback = (DWORD_PTR)MIXER_WCallback; + if ((fdwOpen & CALLBACK_TYPEMASK) == CALLBACK_WINDOW) mod.dwInstance = dwCallback; - if (dwCallback && !IsWindow((HWND)dwCallback)) - return MMSYSERR_INVALPARAM; - break; - } + else + mod.dwInstance = 0; + + /* We're remapping to CALLBACK_FUNCTION because that's what old winmm is + * documented to do when opening the mixer driver. + * FIXME: Native supports CALLBACK_EVENT + CALLBACK_THREAD flags since w2k. + * FIXME: The non ALSA drivers ignore callback requests - bug. + */ wmld = MMDRV_Alloc(sizeof(WINE_MIXER), MMDRV_MIXER, &hMix, &fdwOpen, &dwCallback, &dwInstance); @@ -901,19 +922,16 @@ UINT WINAPI midiOutOpen(LPHMIDIOUT lphMidiOut, UINT uDeviceID, { HMIDIOUT hMidiOut; LPWINE_MIDI lpwm; - UINT dwRet = 0; + UINT dwRet; TRACE("(%p, %d, %08lX, %08lX, %08X);\n", lphMidiOut, uDeviceID, dwCallback, dwInstance, dwFlags); if (lphMidiOut != NULL) *lphMidiOut = 0; - switch (dwFlags & CALLBACK_TYPEMASK) { - case CALLBACK_WINDOW: - if (dwCallback && !IsWindow((HWND)dwCallback)) - return MMSYSERR_INVALPARAM; - break; - } + dwRet = WINMM_CheckCallback(dwCallback, dwFlags, FALSE); + if (dwRet != MMSYSERR_NOERROR) + return dwRet; lpwm = MIDI_OutAlloc(&hMidiOut, &dwCallback, &dwInstance, &dwFlags, 0, NULL); @@ -1200,13 +1218,17 @@ UINT WINAPI midiInOpen(HMIDIIN* lphMidiIn, UINT uDeviceID, { HANDLE hMidiIn; LPWINE_MIDI lpwm; - DWORD dwRet = 0; + DWORD dwRet; TRACE("(%p, %d, %08lX, %08lX, %08X);\n", lphMidiIn, uDeviceID, dwCallback, dwInstance, dwFlags); if (lphMidiIn != NULL) *lphMidiIn = 0; + dwRet = WINMM_CheckCallback(dwCallback, dwFlags, FALSE); + if (dwRet != MMSYSERR_NOERROR) + return dwRet; + lpwm = (LPWINE_MIDI)MMDRV_Alloc(sizeof(WINE_MIDI), MMDRV_MIDIIN, &hMidiIn, &dwFlags, &dwCallback, &dwInstance); @@ -1758,12 +1780,9 @@ MMRESULT WINAPI midiStreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID, if (cMidi != 1 || lphMidiStrm == NULL || lpuDeviceID == NULL) return MMSYSERR_INVALPARAM; - switch (fdwOpen & CALLBACK_TYPEMASK) { - case CALLBACK_WINDOW: - if (dwCallback && !IsWindow((HWND)dwCallback)) - return MMSYSERR_INVALPARAM; - break; - } + ret = WINMM_CheckCallback(dwCallback, fdwOpen, FALSE); + if (ret != MMSYSERR_NOERROR) + return ret; lpMidiStrm = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_MIDIStream)); if (!lpMidiStrm) @@ -2012,7 +2031,7 @@ static UINT WAVE_Open(HANDLE* lphndl, UINT uDeviceID, UINT uType, { HANDLE handle; LPWINE_MLD wmld; - DWORD dwRet = MMSYSERR_NOERROR; + DWORD dwRet; WAVEOPENDESC wod; TRACE("(%p, %d, %s, %p, %08lX, %08lX, %08X);\n", @@ -2022,6 +2041,10 @@ static UINT WAVE_Open(HANDLE* lphndl, UINT uDeviceID, UINT uType, if (dwFlags & WAVE_FORMAT_QUERY) TRACE("WAVE_FORMAT_QUERY requested !\n"); + dwRet = WINMM_CheckCallback(dwCallback, dwFlags, FALSE); + if (dwRet != MMSYSERR_NOERROR) + return dwRet; + if (lpFormat == NULL) { WARN("bad format\n"); return WAVERR_BADFORMAT; @@ -2039,7 +2062,6 @@ static UINT WAVE_Open(HANDLE* lphndl, UINT uDeviceID, UINT uType, if ((wmld = MMDRV_Alloc(sizeof(WINE_WAVE), uType, &handle, &dwFlags, &dwCallback, &dwInstance)) == NULL) { - WARN("no memory\n"); return MMSYSERR_NOMEM; }
1
0
0
0
Akihiro Sagawa : gdi32: Create charset enumeration order list for EnumFontFamiliesEx.
by Alexandre Julliard
04 Apr '11
04 Apr '11
Module: wine Branch: master Commit: cb77f9a2395b31079ab72f99706be7f6b107dd69 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=cb77f9a2395b31079ab72f997…
Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Fri Apr 1 21:20:00 2011 +0900 gdi32: Create charset enumeration order list for EnumFontFamiliesEx. --- dlls/gdi32/freetype.c | 96 ++++++++++++++++++++++++++++++++++++++-------- dlls/gdi32/tests/font.c | 14 +----- 2 files changed, 82 insertions(+), 28 deletions(-) diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 0b50330..aefb0e8 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -354,6 +354,17 @@ typedef struct { struct list links; } SYSTEM_LINKS; +struct enum_charset_element { + DWORD mask; + DWORD charset; + LPCWSTR name; +}; + +struct enum_charset_list { + DWORD total; + struct enum_charset_element element[32]; +}; + #define GM_BLOCK_SIZE 128 #define FONT_GM(font,idx) (&(font)->gm[(idx) / GM_BLOCK_SIZE][(idx) % GM_BLOCK_SIZE]) @@ -3951,6 +3962,59 @@ BOOL WineEngDestroyFontInstance(HFONT handle) return ret; } +/*************************************************** + * create_enum_charset_list + * + * This function creates charset enumeration list because in DEFAULT_CHARSET + * case, the ANSI codepage's charset takes precedence over other charsets. + * This function works as a filter other than DEFAULT_CHARSET case. + */ +static DWORD create_enum_charset_list(DWORD charset, struct enum_charset_list *list) +{ + CHARSETINFO csi; + DWORD n = 0; + + if (TranslateCharsetInfo((DWORD*)charset, &csi, TCI_SRCCHARSET) && + csi.fs.fsCsb[0] != 0) { + list->element[n].mask = csi.fs.fsCsb[0]; + list->element[n].charset = csi.ciCharset; + list->element[n].name = ElfScriptsW[ffs(csi.fs.fsCsb[0]) - 1]; + n++; + } + else { /* charset is DEFAULT_CHARSET or invalid. */ + INT acp, i; + + /* Set the current codepage's charset as the first element. */ + acp = GetACP(); + if (TranslateCharsetInfo((DWORD*)(INT_PTR)acp, &csi, TCI_SRCCODEPAGE) && + csi.fs.fsCsb[0] != 0) { + list->element[n].mask = csi.fs.fsCsb[0]; + list->element[n].charset = csi.ciCharset; + list->element[n].name = ElfScriptsW[ffs(csi.fs.fsCsb[0]) - 1]; + n++; + } + + /* Fill out left elements. */ + for (i = 0; i < 32; i++) { + FONTSIGNATURE fs; + fs.fsCsb[0] = 1L << i; + fs.fsCsb[1] = 0; + if (n > 0 && fs.fsCsb[0] == list->element[0].mask) + continue; /* skip, already added. */ + if (!TranslateCharsetInfo(fs.fsCsb, &csi, TCI_SRCFONTSIG)) + continue; /* skip, this is an invalid fsCsb bit. */ + + list->element[n].mask = fs.fsCsb[0]; + list->element[n].charset = csi.ciCharset; + list->element[n].name = ElfScriptsW[i]; + n++; + } + } + list->total = n; + + return n; +} + static void GetEnumStructs(Face *face, LPENUMLOGFONTEXW pelf, NEWTEXTMETRICEXW *pntm, LPDWORD ptype) { @@ -4101,38 +4165,33 @@ static BOOL face_matches(Face *face, const LOGFONTW *lf) return !strcmpiW(lf->lfFaceName, full_family_name); } -static BOOL enum_face_charsets(Face *face, FONTENUMPROCW proc, LPARAM lparam) +static BOOL enum_face_charsets(Face *face, struct enum_charset_list *list, + FONTENUMPROCW proc, LPARAM lparam) { ENUMLOGFONTEXW elf; NEWTEXTMETRICEXW ntm; DWORD type = 0; - FONTSIGNATURE fs; - CHARSETINFO csi; int i; GetEnumStructs(face, &elf, &ntm, &type); - for(i = 0; i < 32; i++) { + for(i = 0; i < list->total; i++) { if(!face->scalable && face->fs.fsCsb[0] == 0) { /* OEM bitmap */ elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET; strcpyW(elf.elfScript, OEM_DOSW); i = 32; /* break out of loop */ - } else if(!(face->fs.fsCsb[0] & (1L << i))) + } else if(!(face->fs.fsCsb[0] & list->element[i].mask)) continue; else { - fs.fsCsb[0] = 1L << i; - fs.fsCsb[1] = 0; - if(TranslateCharsetInfo(fs.fsCsb, &csi, TCI_SRCFONTSIG)) - elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = csi.ciCharset; - if(ElfScriptsW[i]) - strcpyW(elf.elfScript, ElfScriptsW[i]); - else - FIXME("Unknown elfscript for bit %d\n", i); - } + elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = list->element[i].charset; + if(list->element[i].name) + strcpyW(elf.elfScript, list->element[i].name); + else + FIXME("Unknown elfscript for bit %d\n", ffs(list->element[i].mask) - 1); } TRACE("enuming face %s full %s style %s charset = %d type %d script %s it %d weight %d ntmflags %08x\n", debugstr_w(elf.elfLogFont.lfFaceName), debugstr_w(elf.elfFullName), debugstr_w(elf.elfStyle), - csi.ciCharset, type, debugstr_w(elf.elfScript), + list->element[i].charset, type, debugstr_w(elf.elfScript), elf.elfLogFont.lfItalic, elf.elfLogFont.lfWeight, ntm.ntmTm.ntmFlags); /* release section before callback (FIXME) */ @@ -4153,6 +4212,7 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam) Face *face; struct list *family_elem_ptr, *face_elem_ptr; LOGFONTW lf; + struct enum_charset_list enum_charsets; if (!plf) { @@ -4164,6 +4224,8 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam) TRACE("facename = %s charset %d\n", debugstr_w(plf->lfFaceName), plf->lfCharSet); + create_enum_charset_list(plf->lfCharSet, &enum_charsets); + GDI_CheckNotLock(); EnterCriticalSection( &freetype_cs ); if(plf->lfFaceName[0]) { @@ -4184,7 +4246,7 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam) LIST_FOR_EACH(face_elem_ptr, &family->faces) { face = LIST_ENTRY(face_elem_ptr, Face, entry); if (!face_matches(face, plf)) continue; - if (!enum_face_charsets(face, proc, lparam)) return 0; + if (!enum_face_charsets(face, &enum_charsets, proc, lparam)) return 0; } } } @@ -4193,7 +4255,7 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam) family = LIST_ENTRY(family_elem_ptr, Family, entry); face_elem_ptr = list_head(&family->faces); face = LIST_ENTRY(face_elem_ptr, Face, entry); - if (!enum_face_charsets(face, proc, lparam)) return 0; + if (!enum_face_charsets(face, &enum_charsets, proc, lparam)) return 0; } } LeaveCriticalSection( &freetype_cs ); diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c index b0f2e9f..2d4efff 100644 --- a/dlls/gdi32/tests/font.c +++ b/dlls/gdi32/tests/font.c @@ -2210,17 +2210,9 @@ static void test_EnumFontFamiliesEx_default_charset(void) } trace("'%s' has %d charsets.\n", gui_font.lfFaceName, efd.total); - if (gui_font.lfCharSet != ANSI_CHARSET) { - todo_wine - ok(efd.lf[0].lfCharSet == gui_font.lfCharSet, - "(%s) got charset %d expected %d\n", - efd.lf[0].lfFaceName, efd.lf[0].lfCharSet, gui_font.lfCharSet); - } - else { - ok(efd.lf[0].lfCharSet == gui_font.lfCharSet, - "(%s) got charset %d expected %d\n", - efd.lf[0].lfFaceName, efd.lf[0].lfCharSet, gui_font.lfCharSet); - } + ok(efd.lf[0].lfCharSet == gui_font.lfCharSet, + "(%s) got charset %d expected %d\n", + efd.lf[0].lfFaceName, efd.lf[0].lfCharSet, gui_font.lfCharSet); return; }
1
0
0
0
Akihiro Sagawa : gdi32: Remove redundant charset assignments.
by Alexandre Julliard
04 Apr '11
04 Apr '11
Module: wine Branch: master Commit: f0881854712e55b9b1e85b939c65f3737d197fd3 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f0881854712e55b9b1e85b939…
Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Fri Apr 1 21:19:57 2011 +0900 gdi32: Remove redundant charset assignments. --- dlls/gdi32/freetype.c | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-) diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 31fe4f2..0b50330 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -4121,10 +4121,7 @@ static BOOL enum_face_charsets(Face *face, FONTENUMPROCW proc, LPARAM lparam) else { fs.fsCsb[0] = 1L << i; fs.fsCsb[1] = 0; - if(!TranslateCharsetInfo(fs.fsCsb, &csi, TCI_SRCFONTSIG)) - csi.ciCharset = DEFAULT_CHARSET; - if(i == 31) csi.ciCharset = SYMBOL_CHARSET; - if(csi.ciCharset != DEFAULT_CHARSET) { + if(TranslateCharsetInfo(fs.fsCsb, &csi, TCI_SRCFONTSIG)) elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = csi.ciCharset; if(ElfScriptsW[i]) strcpyW(elf.elfScript, ElfScriptsW[i]);
1
0
0
0
Akihiro Sagawa : gdi32: Move charset enumeration to helper function.
by Alexandre Julliard
04 Apr '11
04 Apr '11
Module: wine Branch: master Commit: 6a404a3b5881f0e14cb7022d247fe89f1196a6fc URL:
http://source.winehq.org/git/wine.git/?a=commit;h=6a404a3b5881f0e14cb7022d2…
Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Fri Apr 1 21:19:54 2011 +0900 gdi32: Move charset enumeration to helper function. --- dlls/gdi32/freetype.c | 125 ++++++++++++++++++------------------------------ 1 files changed, 47 insertions(+), 78 deletions(-) diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 4582216..31fe4f2 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -4101,6 +4101,51 @@ static BOOL face_matches(Face *face, const LOGFONTW *lf) return !strcmpiW(lf->lfFaceName, full_family_name); } +static BOOL enum_face_charsets(Face *face, FONTENUMPROCW proc, LPARAM lparam) +{ + ENUMLOGFONTEXW elf; + NEWTEXTMETRICEXW ntm; + DWORD type = 0; + FONTSIGNATURE fs; + CHARSETINFO csi; + int i; + + GetEnumStructs(face, &elf, &ntm, &type); + for(i = 0; i < 32; i++) { + if(!face->scalable && face->fs.fsCsb[0] == 0) { /* OEM bitmap */ + elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET; + strcpyW(elf.elfScript, OEM_DOSW); + i = 32; /* break out of loop */ + } else if(!(face->fs.fsCsb[0] & (1L << i))) + continue; + else { + fs.fsCsb[0] = 1L << i; + fs.fsCsb[1] = 0; + if(!TranslateCharsetInfo(fs.fsCsb, &csi, TCI_SRCFONTSIG)) + csi.ciCharset = DEFAULT_CHARSET; + if(i == 31) csi.ciCharset = SYMBOL_CHARSET; + if(csi.ciCharset != DEFAULT_CHARSET) { + elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = csi.ciCharset; + if(ElfScriptsW[i]) + strcpyW(elf.elfScript, ElfScriptsW[i]); + else + FIXME("Unknown elfscript for bit %d\n", i); + } + } + TRACE("enuming face %s full %s style %s charset = %d type %d script %s it %d weight %d ntmflags %08x\n", + debugstr_w(elf.elfLogFont.lfFaceName), + debugstr_w(elf.elfFullName), debugstr_w(elf.elfStyle), + csi.ciCharset, type, debugstr_w(elf.elfScript), + elf.elfLogFont.lfItalic, elf.elfLogFont.lfWeight, + ntm.ntmTm.ntmFlags); + /* release section before callback (FIXME) */ + LeaveCriticalSection( &freetype_cs ); + if (!proc(&elf.elfLogFont, (TEXTMETRICW *)&ntm, type, lparam)) return FALSE; + EnterCriticalSection( &freetype_cs ); + } + return TRUE; +} + /************************************************************* * WineEngEnumFonts * @@ -4110,13 +4155,7 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam) Family *family; Face *face; struct list *family_elem_ptr, *face_elem_ptr; - ENUMLOGFONTEXW elf; - NEWTEXTMETRICEXW ntm; - DWORD type; - FONTSIGNATURE fs; - CHARSETINFO csi; LOGFONTW lf; - int i; if (!plf) { @@ -4147,44 +4186,8 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam) if(family_matches(family, plf)) { LIST_FOR_EACH(face_elem_ptr, &family->faces) { face = LIST_ENTRY(face_elem_ptr, Face, entry); - if (!face_matches(face, plf)) continue; - - GetEnumStructs(face, &elf, &ntm, &type); - for(i = 0; i < 32; i++) { - if(!face->scalable && face->fs.fsCsb[0] == 0) { /* OEM bitmap */ - elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET; - strcpyW(elf.elfScript, OEM_DOSW); - i = 32; /* break out of loop */ - } else if(!(face->fs.fsCsb[0] & (1L << i))) - continue; - else { - fs.fsCsb[0] = 1L << i; - fs.fsCsb[1] = 0; - if(!TranslateCharsetInfo(fs.fsCsb, &csi, - TCI_SRCFONTSIG)) - csi.ciCharset = DEFAULT_CHARSET; - if(i == 31) csi.ciCharset = SYMBOL_CHARSET; - if(csi.ciCharset != DEFAULT_CHARSET) { - elf.elfLogFont.lfCharSet = - ntm.ntmTm.tmCharSet = csi.ciCharset; - if(ElfScriptsW[i]) - strcpyW(elf.elfScript, ElfScriptsW[i]); - else - FIXME("Unknown elfscript for bit %d\n", i); - } - } - TRACE("enuming face %s full %s style %s charset %d type %d script %s it %d weight %d ntmflags %08x\n", - debugstr_w(elf.elfLogFont.lfFaceName), - debugstr_w(elf.elfFullName), debugstr_w(elf.elfStyle), - csi.ciCharset, type, debugstr_w(elf.elfScript), - elf.elfLogFont.lfItalic, elf.elfLogFont.lfWeight, - ntm.ntmTm.ntmFlags); - /* release section before callback (FIXME) */ - LeaveCriticalSection( &freetype_cs ); - if (!proc(&elf.elfLogFont, (TEXTMETRICW *)&ntm, type, lparam)) return 0; - EnterCriticalSection( &freetype_cs ); - } + if (!enum_face_charsets(face, proc, lparam)) return 0; } } } @@ -4193,41 +4196,7 @@ DWORD WineEngEnumFonts(LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lparam) family = LIST_ENTRY(family_elem_ptr, Family, entry); face_elem_ptr = list_head(&family->faces); face = LIST_ENTRY(face_elem_ptr, Face, entry); - GetEnumStructs(face, &elf, &ntm, &type); - for(i = 0; i < 32; i++) { - if(!face->scalable && face->fs.fsCsb[0] == 0) { /* OEM bitmap */ - elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = OEM_CHARSET; - strcpyW(elf.elfScript, OEM_DOSW); - i = 32; /* break out of loop */ - } else if(!(face->fs.fsCsb[0] & (1L << i))) - continue; - else { - fs.fsCsb[0] = 1L << i; - fs.fsCsb[1] = 0; - if(!TranslateCharsetInfo(fs.fsCsb, &csi, - TCI_SRCFONTSIG)) - csi.ciCharset = DEFAULT_CHARSET; - if(i == 31) csi.ciCharset = SYMBOL_CHARSET; - if(csi.ciCharset != DEFAULT_CHARSET) { - elf.elfLogFont.lfCharSet = ntm.ntmTm.tmCharSet = - csi.ciCharset; - if(ElfScriptsW[i]) - strcpyW(elf.elfScript, ElfScriptsW[i]); - else - FIXME("Unknown elfscript for bit %d\n", i); - } - } - TRACE("enuming face %s full %s style %s charset = %d type %d script %s it %d weight %d ntmflags %08x\n", - debugstr_w(elf.elfLogFont.lfFaceName), - debugstr_w(elf.elfFullName), debugstr_w(elf.elfStyle), - csi.ciCharset, type, debugstr_w(elf.elfScript), - elf.elfLogFont.lfItalic, elf.elfLogFont.lfWeight, - ntm.ntmTm.ntmFlags); - /* release section before callback (FIXME) */ - LeaveCriticalSection( &freetype_cs ); - if (!proc(&elf.elfLogFont, (TEXTMETRICW *)&ntm, type, lparam)) return 0; - EnterCriticalSection( &freetype_cs ); - } + if (!enum_face_charsets(face, proc, lparam)) return 0; } } LeaveCriticalSection( &freetype_cs );
1
0
0
0
← Newer
1
...
82
83
84
85
86
87
88
...
94
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Results per page:
10
25
50
100
200