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
March 2009
----- 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
2 participants
834 discussions
Start a n
N
ew thread
Alexandre Julliard : avifil32: Make avifile. dll into a stand-alone 16-bit module.
by Alexandre Julliard
25 Mar '09
25 Mar '09
Module: wine Branch: master Commit: b91cf321eaf53634bcee959ee6823d487e544e97 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b91cf321eaf53634bcee959ee…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Mar 24 16:56:58 2009 +0100 avifil32: Make avifile.dll into a stand-alone 16-bit module. --- .gitignore | 1 - configure | 9 +++++ configure.ac | 1 + dlls/Makefile.in | 4 -- dlls/avifil32/Makefile.in | 2 - dlls/avifil32/api.c | 32 -------------------- dlls/avifile.dll16/Makefile.in | 13 ++++++++ .../avifile.dll16.spec} | 0 8 files changed, 23 insertions(+), 39 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=b91cf321eaf53634bcee9…
1
0
0
0
Alexandre Julliard : wineps.drv: Set the line join and cap styles based on the selected pen.
by Alexandre Julliard
25 Mar '09
25 Mar '09
Module: wine Branch: master Commit: 36a41abb9fa0c8544d0ba4662b4938c19f7e8dbb URL:
http://source.winehq.org/git/wine.git/?a=commit;h=36a41abb9fa0c8544d0ba4662…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Mar 24 15:24:06 2009 +0100 wineps.drv: Set the line join and cap styles based on the selected pen. --- dlls/wineps.drv/pen.c | 16 ++++++++++++++++ dlls/wineps.drv/ps.c | 6 +++--- dlls/wineps.drv/psdrv.h | 4 +++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/dlls/wineps.drv/pen.c b/dlls/wineps.drv/pen.c index ab7bc5b..529c738 100644 --- a/dlls/wineps.drv/pen.c +++ b/dlls/wineps.drv/pen.c @@ -70,6 +70,22 @@ HPEN CDECL PSDRV_SelectPen( PSDRV_PDEVICE *physDev, HPEN hpen ) if(physDev->pen.width < 0) physDev->pen.width = -physDev->pen.width; } + switch (logpen.lopnStyle & PS_JOIN_MASK) + { + default: + case PS_JOIN_ROUND: physDev->pen.join = 1; break; + case PS_JOIN_BEVEL: physDev->pen.join = 2; break; + case PS_JOIN_MITER: physDev->pen.join = 0; break; + } + + switch (logpen.lopnStyle & PS_ENDCAP_MASK) + { + default: + case PS_ENDCAP_ROUND: physDev->pen.endcap = 1; break; + case PS_ENDCAP_SQUARE: physDev->pen.endcap = 2; break; + case PS_ENDCAP_FLAT: physDev->pen.endcap = 0; break; + } + PSDRV_CreateColor(physDev, &physDev->pen.color, logpen.lopnColor); physDev->pen.style = logpen.lopnStyle & PS_STYLE_MASK; diff --git a/dlls/wineps.drv/ps.c b/dlls/wineps.drv/ps.c index fdebf46..1fa4f44 100644 --- a/dlls/wineps.drv/ps.c +++ b/dlls/wineps.drv/ps.c @@ -129,8 +129,8 @@ static const char pssetfont[] = /* fontname, xscale, yscale, ascent, escapement "matrix concatmatrix\n" "makefont setfont\n"; -static const char pssetlinewidth[] = /* width */ -"%d setlinewidth\n"; +static const char pssetline[] = /* width, join, endcap */ +"%d setlinewidth %u setlinejoin %u setlinecap\n"; static const char pssetdash[] = /* dash, offset */ "[%s] %d setdash\n"; @@ -581,7 +581,7 @@ BOOL PSDRV_WriteSetPen(PSDRV_PDEVICE *physDev) { char buf[256]; - sprintf(buf, pssetlinewidth, physDev->pen.width); + sprintf(buf, pssetline, physDev->pen.width, physDev->pen.join, physDev->pen.endcap); PSDRV_WriteSpool(physDev, buf, strlen(buf)); if(physDev->pen.dash) { diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index 0661fdf..efc8460 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -326,7 +326,9 @@ typedef struct { typedef struct { INT style; - INT width; + INT width; + BYTE join; + BYTE endcap; const char* dash; PSCOLOR color; BOOL set;
1
0
0
0
Alexandre Julliard : configure: Always set LDPATH, rpath support is broken on many platforms.
by Alexandre Julliard
25 Mar '09
25 Mar '09
Module: wine Branch: master Commit: 6e89fd183242feb7b5b9979aeb8d5cde78328c78 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=6e89fd183242feb7b5b9979ae…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Mar 24 15:23:33 2009 +0100 configure: Always set LDPATH, rpath support is broken on many platforms. --- configure | 5 ----- configure.ac | 6 ------ 2 files changed, 0 insertions(+), 11 deletions(-) diff --git a/configure b/configure index a4808b5..ec14172 100755 --- a/configure +++ b/configure @@ -18069,11 +18069,6 @@ case $build_os in ;; darwin*|macosx*) ;; - linux*|solaris*) if test -z "$LDRPATH_LOCAL" - then - LDPATH="LD_LIBRARY_PATH=\"\$(TOOLSDIR)/libs/wine:\$\$LD_LIBRARY_PATH\"" - fi - ;; *) LDPATH="LD_LIBRARY_PATH=\"\$(TOOLSDIR)/libs/wine:\$\$LD_LIBRARY_PATH\"" ;; diff --git a/configure.ac b/configure.ac index 78ea5db..d4064e5 100644 --- a/configure.ac +++ b/configure.ac @@ -1403,12 +1403,6 @@ case $build_os in ;; darwin*|macosx*) ;; - linux*|solaris*) dnl FIXME: What other platforms support $ORIGIN? - if test -z "$LDRPATH_LOCAL" - then - LDPATH="LD_LIBRARY_PATH=\"\$(TOOLSDIR)/libs/wine:\$\$LD_LIBRARY_PATH\"" - fi - ;; *) LDPATH="LD_LIBRARY_PATH=\"\$(TOOLSDIR)/libs/wine:\$\$LD_LIBRARY_PATH\"" ;;
1
0
0
0
Lei Zhang : oleaut32: Fix some corner cases in VarBstrCmp.
by Alexandre Julliard
24 Mar '09
24 Mar '09
Module: wine Branch: master Commit: 25c2e283d87b2a8112f14fc7add0dbd37d2cee66 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=25c2e283d87b2a8112f14fc7a…
Author: Lei Zhang <thestig(a)google.com> Date: Fri Mar 20 15:37:07 2009 -0700 oleaut32: Fix some corner cases in VarBstrCmp. --- dlls/oleaut32/tests/vartype.c | 20 ++++++++++++++++++++ dlls/oleaut32/vartype.c | 18 +++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c index eba0bc1..0b4f301 100644 --- a/dlls/oleaut32/tests/vartype.c +++ b/dlls/oleaut32/tests/vartype.c @@ -4983,6 +4983,8 @@ static void test_VarBstrCmp(void) static const WCHAR s2[] = { 'a',0,'b' }; static const char sb1[] = {1,0,1}; static const char sb2[] = {1,0,2}; + static const char sbchr0[] = {0,0}; + static const char sbchr00[] = {0,0,0}; BSTR bstr, bstrempty, bstr2; CHECKPTR(VarBstrCmp); @@ -5021,6 +5023,15 @@ static void test_VarBstrCmp(void) SysFreeString(bstr); + bstr = SysAllocStringByteLen(sbchr0, sizeof(sbchr0)); + bstr2 = SysAllocStringByteLen(sbchr0, sizeof(sbchr00)); + VARBSTRCMP(bstr,bstrempty,0,VARCMP_GT); + VARBSTRCMP(bstrempty,bstr,0,VARCMP_LT); + VARBSTRCMP(bstr2,bstrempty,0,VARCMP_GT); + VARBSTRCMP(bstr2,bstr,0,VARCMP_EQ); + SysFreeString(bstr2); + SysFreeString(bstr); + /* When (LCID == 0) it should be a binary comparison * so these two strings could not match. */ @@ -5030,6 +5041,15 @@ static void test_VarBstrCmp(void) VARBSTRCMP(bstr,bstr2,0,VARCMP_LT); SysFreeString(bstr2); SysFreeString(bstr); + + bstr = SysAllocStringByteLen(sbchr0, sizeof(sbchr0)); + bstr2 = SysAllocStringByteLen(sbchr0, sizeof(sbchr00)); + VARBSTRCMP(bstr,bstrempty,0,VARCMP_GT); + VARBSTRCMP(bstrempty,bstr,0,VARCMP_LT); + VARBSTRCMP(bstr2,bstrempty,0,VARCMP_GT); + VARBSTRCMP(bstr2,bstr,0,VARCMP_GT); + SysFreeString(bstr2); + SysFreeString(bstr); } /* Get the internal representation of a BSTR */ diff --git a/dlls/oleaut32/vartype.c b/dlls/oleaut32/vartype.c index 6d972a2..7843a7b 100644 --- a/dlls/oleaut32/vartype.c +++ b/dlls/oleaut32/vartype.c @@ -6957,9 +6957,8 @@ HRESULT WINAPI VarBstrCmp(BSTR pbstrLeft, BSTR pbstrRight, LCID lcid, DWORD dwFl if (!pbstrLeft || !*pbstrLeft) { - if (!pbstrRight || !*pbstrRight) - return VARCMP_EQ; - return VARCMP_LT; + if (pbstrRight && *pbstrRight) + return VARCMP_LT; } else if (!pbstrRight || !*pbstrRight) return VARCMP_GT; @@ -6981,8 +6980,17 @@ HRESULT WINAPI VarBstrCmp(BSTR pbstrLeft, BSTR pbstrRight, LCID lcid, DWORD dwFl } else { - hres = CompareStringW(lcid, dwFlags, pbstrLeft, SysStringLen(pbstrLeft), - pbstrRight, SysStringLen(pbstrRight)) - 1; + unsigned int lenLeft = SysStringLen(pbstrLeft); + unsigned int lenRight = SysStringLen(pbstrRight); + + if (lenLeft == 0 || lenRight == 0) + { + if (lenLeft == 0 && lenRight == 0) return VARCMP_EQ; + return lenLeft < lenRight ? VARCMP_LT : VARCMP_GT; + } + + hres = CompareStringW(lcid, dwFlags, pbstrLeft, lenLeft, + pbstrRight, lenRight) - 1; TRACE("%d\n", hres); return hres; }
1
0
0
0
Vincent Povirk : gdiplus: Support line gradient brushes in GdipFillPath.
by Alexandre Julliard
24 Mar '09
24 Mar '09
Module: wine Branch: master Commit: 68dba4eff3cd3e696d964142637b0c03c496aa66 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=68dba4eff3cd3e696d9641426…
Author: Vincent Povirk <vincent(a)codeweavers.com> Date: Mon Mar 16 12:51:04 2009 -0500 gdiplus: Support line gradient brushes in GdipFillPath. --- dlls/gdiplus/graphics.c | 161 ++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 159 insertions(+), 2 deletions(-) diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c index 9df9e21..5d1cbd6 100644 --- a/dlls/gdiplus/graphics.c +++ b/dlls/gdiplus/graphics.c @@ -172,6 +172,164 @@ static void transform_and_round_points(GpGraphics *graphics, POINT *pti, } } +static ARGB blend_colors(ARGB start, ARGB end, int current, int total) +{ + ARGB result=0; + ARGB i; + for (i=0xff; i<=0xff0000; i = i << 8) + result |= (((start&i)*(total - current)+(end&i)*(current))/total)&i; + return result; +} + +static void brush_fill_path(GpGraphics *graphics, GpBrush* brush) +{ + switch (brush->bt) + { + case BrushTypeLinearGradient: + { + GpLineGradient *line = (GpLineGradient*)brush; + RECT rc; + int num_steps = 255; + + SelectClipPath(graphics->hdc, RGN_AND); + if (GetClipBox(graphics->hdc, &rc) != NULLREGION) + { + GpPointF endpointsf[2]; + POINT endpointsi[2]; + POINT poly[4]; + + SelectObject(graphics->hdc, GetStockObject(NULL_PEN)); + + /* fill with starting color */ + FillRect(graphics->hdc, &rc, brush->gdibrush); + + endpointsf[0] = line->startpoint; + endpointsf[1] = line->endpoint; + transform_and_round_points(graphics, endpointsi, endpointsf, 2); + + if (abs(endpointsi[0].x-endpointsi[1].x) > abs(endpointsi[0].y-endpointsi[1].y)) + { + /* vertical-ish gradient */ + int endborderx; /* vertical rectangle boundary near endpoint */ + int startx, endx; /* x co-ordinates of endpoints shifted to intersect the top of the visible rectangle */ + int startbottomx, endbottomx; /* x co-ordinate of endpoints shifted to intersect the bottom of the visible rectangle */ + int width; + COLORREF col; + HBRUSH hbrush, hprevbrush; + int i; + + if (endpointsi[1].x > endpointsi[0].x) + endborderx = rc.right; + else + endborderx = rc.left; + + startx = roundr((rc.top - endpointsf[0].Y) * (endpointsf[1].Y - endpointsf[0].Y) / (endpointsf[0].X - endpointsf[1].X) + endpointsf[0].X); + endx = roundr((rc.top - endpointsf[1].Y) * (endpointsf[1].Y - endpointsf[0].Y) / (endpointsf[0].X - endpointsf[1].X) + endpointsf[1].X); + width = endx - startx; + startbottomx = roundr((rc.bottom - endpointsf[0].Y) * (endpointsf[1].Y - endpointsf[0].Y) / (endpointsf[0].X - endpointsf[1].X) + endpointsf[0].X); + endbottomx = startbottomx+width; + + if (num_steps > abs(width)) num_steps = abs(width); + + poly[0].x = endborderx; + poly[0].y = rc.bottom; + poly[1].x = endborderx; + poly[1].y = rc.top; + poly[2].y = rc.top; + poly[3].y = rc.bottom; + + for (i=1; i<num_steps; i++) + { + ARGB argb = blend_colors(line->startcolor, line->endcolor, i, num_steps); + int ofs = width * i / num_steps; + col = ARGB2COLORREF(argb); + hbrush = CreateSolidBrush(col); + hprevbrush = SelectObject(graphics->hdc, hbrush); + poly[2].x = startx + ofs; + poly[3].x = startbottomx + ofs; + Polygon(graphics->hdc, poly, 4); + SelectObject(graphics->hdc, hprevbrush); + DeleteObject(hbrush); + } + + poly[2].x = endx; + poly[3].x = endbottomx; + + /* draw the ending color */ + col = ARGB2COLORREF(line->endcolor); + hbrush = CreateSolidBrush(col); + hprevbrush = SelectObject(graphics->hdc, hbrush); + Polygon(graphics->hdc, poly, 4); + SelectObject(graphics->hdc, hprevbrush); + DeleteObject(hbrush); + } + else if (endpointsi[0].y != endpointsi[1].y) + { + /* horizontal-ish gradient */ + int endbordery; /* horizontal rectangle boundary near endpoint */ + int starty, endy; /* y co-ordinates of endpoints shifted to intersect the left of the visible rectangle */ + int startrighty, endrighty; /* y co-ordinate of endpoints shifted to intersect the right of the visible rectangle */ + int height; + COLORREF col; + HBRUSH hbrush, hprevbrush; + int i; + + if (endpointsi[1].y > endpointsi[0].y) + endbordery = rc.bottom; + else + endbordery = rc.top; + + starty = roundr((rc.left - endpointsf[0].X) * (endpointsf[0].X - endpointsf[1].X) / (endpointsf[1].Y - endpointsf[0].Y) + endpointsf[0].Y); + endy = roundr((rc.left - endpointsf[1].X) * (endpointsf[0].X - endpointsf[1].X) / (endpointsf[1].Y - endpointsf[0].Y) + endpointsf[1].Y); + height = endy - starty; + startrighty = roundr((rc.right - endpointsf[0].X) * (endpointsf[0].X - endpointsf[1].X) / (endpointsf[1].Y - endpointsf[0].Y) + endpointsf[0].Y); + endrighty = startrighty+height; + + if (num_steps > abs(height)) num_steps = abs(height); + + poly[0].x = rc.right; + poly[0].y = endbordery; + poly[1].x = rc.left; + poly[1].y = endbordery; + poly[2].x = rc.left; + poly[3].x = rc.right; + + for (i=1; i<num_steps; i++) + { + ARGB argb = blend_colors(line->startcolor, line->endcolor, i, num_steps); + int ofs = height * i / num_steps; + col = ARGB2COLORREF(argb); + hbrush = CreateSolidBrush(col); + hprevbrush = SelectObject(graphics->hdc, hbrush); + poly[2].y = starty + ofs; + poly[3].y = startrighty + ofs; + Polygon(graphics->hdc, poly, 4); + SelectObject(graphics->hdc, hprevbrush); + DeleteObject(hbrush); + } + + poly[2].y = endy; + poly[3].y = endrighty; + + /* draw the ending color */ + col = ARGB2COLORREF(line->endcolor); + hbrush = CreateSolidBrush(col); + hprevbrush = SelectObject(graphics->hdc, hbrush); + Polygon(graphics->hdc, poly, 4); + SelectObject(graphics->hdc, hprevbrush); + DeleteObject(hbrush); + } + /* else startpoint == endpoint */ + } + break; + } + default: + SelectObject(graphics->hdc, brush->gdibrush); + FillPath(graphics->hdc); + break; + } +} + /* GdipDrawPie/GdipFillPie helper function */ static void draw_pie(GpGraphics *graphics, REAL x, REAL y, REAL width, REAL height, REAL startAngle, REAL sweepAngle) @@ -2086,7 +2244,6 @@ GpStatus WINGDIPAPI GdipFillPath(GpGraphics *graphics, GpBrush *brush, GpPath *p save_state = SaveDC(graphics->hdc); EndPath(graphics->hdc); - SelectObject(graphics->hdc, brush->gdibrush); SetPolyFillMode(graphics->hdc, (path->fill == FillModeAlternate ? ALTERNATE : WINDING)); @@ -2098,7 +2255,7 @@ GpStatus WINGDIPAPI GdipFillPath(GpGraphics *graphics, GpBrush *brush, GpPath *p goto end; EndPath(graphics->hdc); - FillPath(graphics->hdc); + brush_fill_path(graphics, brush); retval = Ok;
1
0
0
0
Kirill K. Smirnov : mciavi32: Fix typo.
by Alexandre Julliard
24 Mar '09
24 Mar '09
Module: wine Branch: master Commit: e66e4894178d0926f4b3f2b2cd82d3781f6a9694 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=e66e4894178d0926f4b3f2b2c…
Author: Kirill K. Smirnov <lich(a)math.spbu.ru> Date: Sat Mar 14 02:18:10 2009 +0300 mciavi32: Fix typo. --- dlls/mciavi32/mmoutput.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/mciavi32/mmoutput.c b/dlls/mciavi32/mmoutput.c index f7118ff..f9d1ddd 100644 --- a/dlls/mciavi32/mmoutput.c +++ b/dlls/mciavi32/mmoutput.c @@ -328,7 +328,7 @@ BOOL MCIAVI_GetInfo(WINE_MCIAVI* wma) WARN("ignoring another video stream\n"); else { - wma->ash_audio = strh; + wma->ash_video = strh; if (!MCIAVI_GetInfoVideo(wma, &mmckList, &mmckStream)) return FALSE; @@ -342,7 +342,7 @@ BOOL MCIAVI_GetInfo(WINE_MCIAVI* wma) WARN("ignoring another audio stream\n"); else { - wma->ash_video = strh; + wma->ash_audio = strh; if (!MCIAVI_GetInfoAudio(wma, &mmckList, &mmckStream)) return FALSE;
1
0
0
0
Austin English : winegcc: Fix a compiler warning on PC-BSD.
by Alexandre Julliard
24 Mar '09
24 Mar '09
Module: wine Branch: master Commit: 0aebd4f300496ec98195aee7418d78522a67074f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0aebd4f300496ec98195aee74…
Author: Austin English <austinenglish(a)gmail.com> Date: Fri Mar 13 16:13:13 2009 -0400 winegcc: Fix a compiler warning on PC-BSD. --- tools/winegcc/winegcc.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/tools/winegcc/winegcc.c b/tools/winegcc/winegcc.c index 327366c..9588bbf 100644 --- a/tools/winegcc/winegcc.c +++ b/tools/winegcc/winegcc.c @@ -284,7 +284,7 @@ static char* get_temp_file(const char* prefix, const char* suffix) static const strarray* get_translator(struct options *opts) { - const char *str; + const char *str = NULL; strarray *ret; switch(opts->processor)
1
0
0
0
Hans Leidekker : winspool: Support special environment value "all" in EnumPrinterDrivers.
by Alexandre Julliard
24 Mar '09
24 Mar '09
Module: wine Branch: master Commit: a01ba785467c8f8218b1cfd5afcbb1b10870efcc URL:
http://source.winehq.org/git/wine.git/?a=commit;h=a01ba785467c8f8218b1cfd5a…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Tue Mar 24 10:27:01 2009 +0100 winspool: Support special environment value "all" in EnumPrinterDrivers. A custom action in the sp1 installer passes this value. --- dlls/winspool.drv/info.c | 68 +++++++++++++++++++++++++++++++-------- dlls/winspool.drv/tests/info.c | 19 +++++++++++ 2 files changed, 73 insertions(+), 14 deletions(-) diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index c96bac0..8160957 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -267,6 +267,12 @@ static const DWORD pi_sizeof[] = {0, sizeof(PRINTER_INFO_1W), sizeof(PRINTER_INF sizeof(PRINTER_INFO_7W), sizeof(PRINTER_INFO_8W), sizeof(PRINTER_INFO_9W)}; +static const printenv_t env_x64 = {envname_x64W, subdir_x64W, 3, Version3_RegPathW, Version3_SubdirW}; +static const printenv_t env_x86 = {envname_x86W, subdir_x86W, 3, Version3_RegPathW, Version3_SubdirW}; +static const printenv_t env_win40 = {envname_win40W, subdir_win40W, 0, Version0_RegPathW, Version0_SubdirW}; + +static const printenv_t * const all_printenv[] = {&env_x86, &env_x64, &env_win40}; + /****************************************************************** * validate the user-supplied printing-environment [internal] * @@ -285,15 +291,6 @@ static const DWORD pi_sizeof[] = {0, sizeof(PRINTER_INFO_1W), sizeof(PRINTER_INF static const printenv_t * validate_envW(LPCWSTR env) { - static const printenv_t env_x64 = {envname_x64W, subdir_x64W, - 3, Version3_RegPathW, Version3_SubdirW}; - static const printenv_t env_x86 = {envname_x86W, subdir_x86W, - 3, Version3_RegPathW, Version3_SubdirW}; - static const printenv_t env_win40 = {envname_win40W, subdir_win40W, - 0, Version0_RegPathW, Version0_SubdirW}; - - static const printenv_t * const all_printenv[]={&env_x86, &env_x64, &env_win40}; - const printenv_t *result = NULL; unsigned int i; @@ -5169,7 +5166,7 @@ static BOOL WINSPOOL_EnumPrinterDrivers(LPWSTR pName, LPCWSTR pEnvironment, RegCloseKey(hkeyDrivers); return FALSE; } - (*pcbNeeded) += needed; + *pcbNeeded += needed; } RegCloseKey(hkeyDrivers); @@ -5192,6 +5189,29 @@ BOOL WINAPI EnumPrinterDriversW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) { + static const WCHAR allW[] = {'a','l','l',0}; + + if (pEnvironment && !strcmpW(pEnvironment, allW)) + { + BOOL ret; + DWORD i, needed, returned, bufsize = cbBuf; + + for (i = 0; i < sizeof(all_printenv)/sizeof(all_printenv[0]); i++) + { + needed = returned = 0; + ret = WINSPOOL_EnumPrinterDrivers(pName, all_printenv[i]->envname, Level, + pDriverInfo, bufsize, &needed, &returned, TRUE); + if (!ret && GetLastError() != ERROR_INSUFFICIENT_BUFFER) return FALSE; + else if (ret) + { + bufsize -= needed; + if (pDriverInfo) pDriverInfo += needed; + if (pcReturned) *pcReturned += returned; + } + if (pcbNeeded) *pcbNeeded += needed; + } + return ret; + } return WINSPOOL_EnumPrinterDrivers(pName, pEnvironment, Level, pDriverInfo, cbBuf, pcbNeeded, pcReturned, TRUE); } @@ -5204,16 +5224,36 @@ BOOL WINAPI EnumPrinterDriversW(LPWSTR pName, LPWSTR pEnvironment, DWORD Level, BOOL WINAPI EnumPrinterDriversA(LPSTR pName, LPSTR pEnvironment, DWORD Level, LPBYTE pDriverInfo, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned) -{ BOOL ret; +{ + BOOL ret; UNICODE_STRING pNameW, pEnvironmentW; PWSTR pwstrNameW, pwstrEnvironmentW; pwstrNameW = asciitounicode(&pNameW, pName); pwstrEnvironmentW = asciitounicode(&pEnvironmentW, pEnvironment); - ret = WINSPOOL_EnumPrinterDrivers(pwstrNameW, pwstrEnvironmentW, - Level, pDriverInfo, cbBuf, pcbNeeded, - pcReturned, FALSE); + if (pEnvironment && !strcmp(pEnvironment, "all")) + { + DWORD i, needed, returned, bufsize = cbBuf; + + for (i = 0; i < sizeof(all_printenv)/sizeof(all_printenv[0]); i++) + { + needed = returned = 0; + ret = WINSPOOL_EnumPrinterDrivers(pwstrNameW, all_printenv[i]->envname, Level, + pDriverInfo, bufsize, &needed, &returned, FALSE); + if (!ret && GetLastError() != ERROR_INSUFFICIENT_BUFFER) break; + else if (ret) + { + bufsize -= needed; + if (pDriverInfo) pDriverInfo += needed; + if (pcReturned) *pcReturned += returned; + } + if (pcbNeeded) *pcbNeeded += needed; + } + } + else ret = WINSPOOL_EnumPrinterDrivers(pwstrNameW, pwstrEnvironmentW, + Level, pDriverInfo, cbBuf, pcbNeeded, + pcReturned, FALSE); RtlFreeUnicodeString(&pNameW); RtlFreeUnicodeString(&pEnvironmentW); diff --git a/dlls/winspool.drv/tests/info.c b/dlls/winspool.drv/tests/info.c index 9ac82e1..897a622 100644 --- a/dlls/winspool.drv/tests/info.c +++ b/dlls/winspool.drv/tests/info.c @@ -1107,6 +1107,8 @@ static void test_EnumPorts(void) static void test_EnumPrinterDrivers(void) { + static char env_all[] = "all"; + DWORD res; LPBYTE buffer; DWORD cbBuf; @@ -1210,6 +1212,23 @@ static void test_EnumPrinterDrivers(void) HeapFree(GetProcessHeap(), 0, buffer); } /* for(level ... */ + + pcbNeeded = 0; + pcReturned = 0; + SetLastError(0xdeadbeef); + res = EnumPrinterDriversA(NULL, env_all, 1, NULL, 0, &pcbNeeded, &pcReturned); + if (res) + { + skip("no printer drivers found\n"); + return; + } + ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "unexpected error %u\n", GetLastError()); + + buffer = HeapAlloc(GetProcessHeap(), 0, pcbNeeded); + res = EnumPrinterDriversA(NULL, env_all, 1, buffer, pcbNeeded, &pcbNeeded, &pcReturned); + ok(res, "EnumPrinterDriversA failed %u\n", GetLastError()); + + HeapFree(GetProcessHeap(), 0, buffer); } /* ########################### */
1
0
0
0
Hans Leidekker : msi: Only apply a transform when its language id matches the system language id .
by Alexandre Julliard
24 Mar '09
24 Mar '09
Module: wine Branch: master Commit: 86af876987a714cbd88b36858178d6ef1a36943e URL:
http://source.winehq.org/git/wine.git/?a=commit;h=86af876987a714cbd88b36858…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Tue Mar 24 10:26:42 2009 +0100 msi: Only apply a transform when its language id matches the system language id. Fix for office 2007 sp1 installer. --- dlls/msi/action.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++----- dlls/msi/package.c | 8 ++++++- 2 files changed, 62 insertions(+), 7 deletions(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index eb07f22..ce038a1 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -401,9 +401,13 @@ static LPWSTR* msi_split_string( LPCWSTR str, WCHAR sep ) static UINT msi_check_transform_applicable( MSIPACKAGE *package, IStorage *patch ) { - WCHAR szProductCode[] = { 'P','r','o','d','u','c','t','C','o','d','e',0 }; - LPWSTR prod_code, patch_product; - UINT ret; + static const WCHAR szProductCode[] = + { 'P','r','o','d','u','c','t','C','o','d','e',0 }; + static const WCHAR szSystemLanguageID[] = + { 'S','y','s','t','e','m','L','a','n','g','u','a','g','e','I','D',0 }; + + LPWSTR prod_code, patch_product, langid = NULL, template = NULL; + UINT ret = ERROR_FUNCTION_FAILED; prod_code = msi_dup_property( package, szProductCode ); patch_product = msi_get_suminfo_product( patch ); @@ -411,12 +415,57 @@ static UINT msi_check_transform_applicable( MSIPACKAGE *package, IStorage *patch TRACE("db = %s patch = %s\n", debugstr_w(prod_code), debugstr_w(patch_product)); if ( strstrW( patch_product, prod_code ) ) - ret = ERROR_SUCCESS; - else - ret = ERROR_FUNCTION_FAILED; + { + static const WCHAR zero[] = {'0',0}; + MSISUMMARYINFO *si; + const WCHAR *p; + + si = MSI_GetSummaryInformationW( patch, 0 ); + if (!si) + { + ERR("no summary information!\n"); + goto end; + } + template = msi_suminfo_dup_string( si, PID_TEMPLATE ); + if (!template) + { + ERR("no template property!\n"); + msiobj_release( &si->hdr ); + goto end; + } + + if (!template[0]) + { + ret = ERROR_SUCCESS; + msiobj_release( &si->hdr ); + goto end; + } + + langid = msi_dup_property( package, szSystemLanguageID ); + if (!langid) + { + msiobj_release( &si->hdr ); + goto end; + } + + p = strchrW( template, ';' ); + if (p && (!strcmpW( p + 1, langid ) || !strcmpW( p + 1, zero ))) + { + TRACE("applicable transform\n"); + ret = ERROR_SUCCESS; + } + + /* FIXME: check platform */ + + msiobj_release( &si->hdr ); + } + +end: msi_free( patch_product ); msi_free( prod_code ); + msi_free( template ); + msi_free( langid ); return ret; } diff --git a/dlls/msi/package.c b/dlls/msi/package.c index 378ad76..b2c46a2 100644 --- a/dlls/msi/package.c +++ b/dlls/msi/package.c @@ -440,11 +440,12 @@ static VOID set_installer_properties(MSIPACKAGE *package) static const WCHAR szDate[] = {'D','a','t','e',0}; static const WCHAR szTime[] = {'T','i','m','e',0}; static const WCHAR szUserLangID[] = {'U','s','e','r','L','a','n','g','u','a','g','e','I','D',0}; + static const WCHAR szSystemLangID[] = {'S','y','s','t','e','m','L','a','n','g','u','a','g','e','I','D',0}; /* * Other things that probably should be set: * - * SystemLanguageID ComputerName UserLanguageID LogonUser VirtualMemory + * ComputerName LogonUser VirtualMemory * ShellAdvSupport DefaultUIFont PackagecodeChanging * ProductState CaptionHeight BorderTop BorderSide TextHeight * RedirectedDllSupport @@ -640,6 +641,11 @@ static VOID set_installer_properties(MSIPACKAGE *package) sprintfW(bufstr, szIntFormat, langid); MSI_SetPropertyW( package, szUserLangID, bufstr ); + + langid = GetSystemDefaultLangID(); + sprintfW(bufstr, szIntFormat, langid); + + MSI_SetPropertyW( package, szSystemLangID, bufstr ); } static UINT msi_load_summary_properties( MSIPACKAGE *package )
1
0
0
0
Hans Leidekker : msi: Don't initialize COM for custom action threads.
by Alexandre Julliard
24 Mar '09
24 Mar '09
Module: wine Branch: master Commit: b8965ee7c90a687af4c84ad0ede73b1df901e16c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b8965ee7c90a687af4c84ad0e…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Tue Mar 24 10:26:24 2009 +0100 msi: Don't initialize COM for custom action threads. --- dlls/msi/custom.c | 4 ---- 1 files changed, 0 insertions(+), 4 deletions(-) diff --git a/dlls/msi/custom.c b/dlls/msi/custom.c index ffac63f..fa8f951 100644 --- a/dlls/msi/custom.c +++ b/dlls/msi/custom.c @@ -695,8 +695,6 @@ static DWORD ACTION_CallDllFunction( const GUID *guid ) TRACE("calling %s\n", debugstr_w( function ) ); handle_msi_break( function ); - CoInitializeEx(NULL, COINIT_MULTITHREADED); - __TRY { r = fn( hPackage ); @@ -709,8 +707,6 @@ static DWORD ACTION_CallDllFunction( const GUID *guid ) } __ENDTRY; - CoUninitialize(); - MsiCloseHandle( hPackage ); } else
1
0
0
0
← Newer
1
...
19
20
21
22
23
24
25
...
84
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
Results per page:
10
25
50
100
200