ReactOS.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
2024
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
List overview
Download
Ros-diffs
September 2013
----- 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
ros-diffs@reactos.org
16 participants
554 discussions
Start a n
N
ew thread
[akhaldi] 60206: [HHCTRL.OCX] * Move resource files to the appropriate folders.
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Sep 19 15:24:21 2013 New Revision: 60206 URL:
http://svn.reactos.org/svn/reactos?rev=60206&view=rev
Log: [HHCTRL.OCX] * Move resource files to the appropriate folders. Added: trunk/reactos/dll/win32/hhctrl.ocx/lang/ (with props) trunk/reactos/dll/win32/hhctrl.ocx/lang/Cs.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Cs.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Da.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Da.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/De.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/De.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/El.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/El.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/En.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/En.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Es.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Es.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Fi.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Fi.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Fr.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Fr.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/He.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/He.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Hu.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Hu.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/It.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/It.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Ja.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Ja.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Ko.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Ko.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Lt.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Lt.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Nl.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Nl.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/No.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/No.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Pl.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Pl.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Pt.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Pt.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Ro.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Ro.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Ru.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Ru.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Si.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Si.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Sv.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Sv.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Tr.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Tr.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Uk.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Uk.rc trunk/reactos/dll/win32/hhctrl.ocx/lang/Zh.rc - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/Zh.rc trunk/reactos/dll/win32/hhctrl.ocx/res/ (with props) trunk/reactos/dll/win32/hhctrl.ocx/res/hhtoolbar.bmp - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/hhtoolbar.bmp trunk/reactos/dll/win32/hhctrl.ocx/res/hhtreeview.bmp - copied unchanged from r60205, trunk/reactos/dll/win32/hhctrl.ocx/hhtreeview.bmp Removed: trunk/reactos/dll/win32/hhctrl.ocx/Cs.rc trunk/reactos/dll/win32/hhctrl.ocx/Da.rc trunk/reactos/dll/win32/hhctrl.ocx/De.rc trunk/reactos/dll/win32/hhctrl.ocx/El.rc trunk/reactos/dll/win32/hhctrl.ocx/En.rc trunk/reactos/dll/win32/hhctrl.ocx/Es.rc trunk/reactos/dll/win32/hhctrl.ocx/Fi.rc trunk/reactos/dll/win32/hhctrl.ocx/Fr.rc trunk/reactos/dll/win32/hhctrl.ocx/He.rc trunk/reactos/dll/win32/hhctrl.ocx/Hu.rc trunk/reactos/dll/win32/hhctrl.ocx/It.rc trunk/reactos/dll/win32/hhctrl.ocx/Ja.rc trunk/reactos/dll/win32/hhctrl.ocx/Ko.rc trunk/reactos/dll/win32/hhctrl.ocx/Lt.rc trunk/reactos/dll/win32/hhctrl.ocx/Nl.rc trunk/reactos/dll/win32/hhctrl.ocx/No.rc trunk/reactos/dll/win32/hhctrl.ocx/Pl.rc trunk/reactos/dll/win32/hhctrl.ocx/Pt.rc trunk/reactos/dll/win32/hhctrl.ocx/Ro.rc trunk/reactos/dll/win32/hhctrl.ocx/Ru.rc trunk/reactos/dll/win32/hhctrl.ocx/Si.rc trunk/reactos/dll/win32/hhctrl.ocx/Sv.rc trunk/reactos/dll/win32/hhctrl.ocx/Tr.rc trunk/reactos/dll/win32/hhctrl.ocx/Uk.rc trunk/reactos/dll/win32/hhctrl.ocx/Zh.rc trunk/reactos/dll/win32/hhctrl.ocx/hhtoolbar.bmp trunk/reactos/dll/win32/hhctrl.ocx/hhtreeview.bmp Modified: trunk/reactos/dll/win32/hhctrl.ocx/hhctrl.rc Removed: trunk/reactos/dll/win32/hhctrl.ocx/Cs.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Cs.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Cs.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Cs.rc (removed) @@ -1,64 +0,0 @@ -/* Hey, Emacs, open this file with -*- coding: cp1250 -*- - * - * HTML Help resources - * Czech Language Support - * - * Copyright 2005 James Hawkins - * Copyright 2005 David Kredba - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_CZECH, SUBLANG_DEFAULT - -/* Czech strings in CP1250 */ - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Obsah" - IDS_INDEX "I&ndex" - IDS_SEARCH "&Hledat" - IDS_FAVORITES "Oblí&bené" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Rozbalit" - IDTB_CONTRACT "Skrýt" - IDTB_STOP "Zastavit" - IDTB_REFRESH "Obnovit" - IDTB_BACK "Zpìt" - IDTB_HOME "Domù" - IDTB_SYNC "Synchronizovat" - IDTB_PRINT "Tisk" - IDTB_OPTIONS "Volby" - IDTB_FORWARD "Vpøed" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Skok1" - IDTB_JUMP2 "Skok2" - IDTB_CUSTOMIZE "Pøizpùsobit" - IDTB_ZOOM "Lupa" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Da.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Da.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Da.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Da.rc (removed) @@ -1,60 +0,0 @@ -/* - * HTML Help resources - * Danish Language Support - * - * Copyright 2008 Jens Albretsen <jens(a)albretsen.dk> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_DANISH, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Indhold" - IDS_INDEX "I&ndeks" - IDS_SEARCH "&Søg" - IDS_FAVORITES "Favor&itter" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Vis" - IDTB_CONTRACT "Skjul" - IDTB_STOP "Stop" - IDTB_REFRESH "Opdatér" - IDTB_BACK "Tilbage" - IDTB_HOME "Hjem" - IDTB_SYNC "Synkroniser" - IDTB_PRINT "Udskriv" - IDTB_OPTIONS "Indstillinger" - IDTB_FORWARD "Frem" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Tilpas" - IDTB_ZOOM "Forstør" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/De.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/De.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/De.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/De.rc (removed) @@ -1,62 +0,0 @@ -/* - * HTML Help resources - * German Language Support - * - * Copyright 2005 Henning Gerhardt - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -#pragma code_page(65001) - -LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Inhalt" - IDS_INDEX "I&ndex" - IDS_SEARCH "&Suche" - IDS_FAVORITES "&Favoriten" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Anzeigen" - IDTB_CONTRACT "Verstecken" - IDTB_STOP "Stopp" - IDTB_REFRESH "Aktualisieren" - IDTB_BACK "Zurück" - IDTB_HOME "Startseite" - IDTB_SYNC "Synchronisieren" - IDTB_PRINT "Drucken" - IDTB_OPTIONS "Einstellungen" - IDTB_FORWARD "Vorwärts" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Sprung1" - IDTB_JUMP2 "Sprung2" - IDTB_CUSTOMIZE "Anpassen" - IDTB_ZOOM "VergröÃern" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/El.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/El.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/El.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/El.rc (removed) @@ -1,60 +0,0 @@ -/* - * HTML Help resources - * Greek Language Support - * - * Copyright 2008 Apostolos Alexiadis - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_GREEK, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Ðåñéå÷üìåíá" - IDS_INDEX "I&ndex" - IDS_SEARCH "&ÁíáæÞôçóç" - IDS_FAVORITES "Á&ãáðçìÝíá" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "ÅìöÜíéóç" - IDTB_CONTRACT "Áðüêñõøç" - IDTB_STOP "Ôåñìáôéóìüò" - IDTB_REFRESH "ÁíáíÝùóç" - IDTB_BACK "Ðßóù" - IDTB_HOME "Home" - IDTB_SYNC "Sync" - IDTB_PRINT "Åêôýðùóç" - IDTB_OPTIONS "ÅðéëïãÝò" - IDTB_FORWARD "Forward" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Customize" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/En.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/En.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/En.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/En.rc (removed) @@ -1,70 +0,0 @@ -/* - * HTML Help resources - * English Language Support - * - * Copyright 2005 James Hawkins - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Contents" - IDS_INDEX "I&ndex" - IDS_SEARCH "&Search" - IDS_FAVORITES "Favor&ites" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Show" - IDTB_CONTRACT "Hide" - IDTB_STOP "Stop" - IDTB_REFRESH "Refresh" - IDTB_BACK "Back" - IDTB_HOME "Home" - IDTB_SYNC "Sync" - IDTB_PRINT "Print" - IDTB_OPTIONS "Options" - IDTB_FORWARD "Forward" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Customize" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END - -LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Contents" - IDS_INDEX "I&ndex" - IDS_SEARCH "&Search" - IDS_FAVORITES "Favour&ites" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Es.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Es.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Es.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Es.rc (removed) @@ -1,63 +0,0 @@ -/* - * HTML Help resources - * Spanish Language Support - * - * Copyright 2010 José Manuel Ferrer Ortiz - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -/* UTF-8 */ -#pragma code_page(65001) - -LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Contenido" - IDS_INDEX "Ã&ndice" - IDS_SEARCH "&Buscar" - IDS_FAVORITES "Favor&itos" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Mostrar" - IDTB_CONTRACT "Ocultar" - IDTB_STOP "Parar" - IDTB_REFRESH "Recargar" - IDTB_BACK "Atrás" - IDTB_HOME "Inicio" - IDTB_SYNC "Sincronizar" - IDTB_PRINT "Imprimir" - IDTB_OPTIONS "Opciones" - IDTB_FORWARD "Adelante" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Personalizar" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Fi.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Fi.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Fi.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Fi.rc (removed) @@ -1,60 +0,0 @@ -/* - * HTML Help resources - * Finnish Language Support - * - * Copyright 2005 Kimmo Myllyvirta - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Sisällys" - IDS_INDEX "&Hakemisto" - IDS_SEARCH "&Etsi" - IDS_FAVORITES "S&uosikit" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Näytä" - IDTB_CONTRACT "Piilota" - IDTB_STOP "Pysäytä" - IDTB_REFRESH "Päivitä" - IDTB_BACK "Takaisin" - IDTB_HOME "Alkuun" - IDTB_SYNC "Synkronoi" - IDTB_PRINT "Tulosta" - IDTB_OPTIONS "Valinnat" - IDTB_FORWARD "Seuraava" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Hyppää1" - IDTB_JUMP2 "Hyppää2" - IDTB_CUSTOMIZE "Räätälöi" - IDTB_ZOOM "Suurenna" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Fr.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Fr.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Fr.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Fr.rc (removed) @@ -1,63 +0,0 @@ -/* - * HTML Help resources - * French Language Support - * - * Copyright 2006 Jonathan Ernst - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -/* UTF-8 */ -#pragma code_page(65001) - -LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "Somm&aire" - IDS_INDEX "I&ndex" - IDS_SEARCH "&Recherche" - IDS_FAVORITES "&Signets" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Afficher" - IDTB_CONTRACT "Cacher" - IDTB_STOP "Arrêter" - IDTB_REFRESH "A&ctualiser" - IDTB_BACK "Précédent" - IDTB_HOME "Sommaire" - IDTB_SYNC "Synchroniser" - IDTB_PRINT "Imprimer" - IDTB_OPTIONS "Options" - IDTB_FORWARD "Suivant" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Saut1" - IDTB_JUMP2 "Saut2" - IDTB_CUSTOMIZE "Personnaliser" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/He.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/He.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/He.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/He.rc (removed) @@ -1,72 +0,0 @@ -/* - * HTML Help resources - * Hebrew Language Support - * - * Copyright 2005 James Hawkins - * - * Translated by Baruch Rutman - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "ת××&×" - IDS_INDEX "&××× ×§×¡" - IDS_SEARCH "&×פש" - IDS_FAVORITES "×××¢×פ××" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "×ר××" - IDTB_CONTRACT "××××" - IDTB_STOP "עצ×ר" - IDTB_REFRESH "×¨×¢× ×" - IDTB_BACK "×××ר×" - IDTB_HOME "××ת" - IDTB_SYNC "×¡× ×ר××" - IDTB_PRINT "××פס" - IDTB_OPTIONS "×פשר×××ת" - IDTB_FORWARD "ק××××" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Customize" - IDTB_ZOOM "××××" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END - -LANGUAGE LANG_HEBREW, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "ת××&×" - IDS_INDEX "&××× ×קס" - IDS_SEARCH "&×פש" - IDS_FAVORITES "×××¢×פ××" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Hu.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Hu.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Hu.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Hu.rc (removed) @@ -1,60 +0,0 @@ -/* - * HTML Help resources - * Hungarian Language Support - * - * Copyright 2006 Andras Kovacs - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Tartalom" - IDS_INDEX "I&ndex" - IDS_SEARCH "&Keresés" - IDS_FAVORITES "Kedven&cek" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Megjelenítés" - IDTB_CONTRACT "Elrejtés" - IDTB_STOP "Megállítás" - IDTB_REFRESH "Frissítés" - IDTB_BACK "Vissza" - IDTB_HOME "Kezdõlap" - IDTB_SYNC "Szink." - IDTB_PRINT "Nyomtatás" - IDTB_OPTIONS "Opciók" - IDTB_FORWARD "Elõre" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Testreszabás" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/It.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/It.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/It.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/It.rc (removed) @@ -1,64 +0,0 @@ -/* - * HTML Help resources - * Italian Language Support - * - * Copyright 2005 James Hawkins - * Copyright 2010 Luca Bennati - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -/* UTF-8 */ -#pragma code_page(65001) - -LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Contenuti" - IDS_INDEX "&Indice" - IDS_SEARCH "&Ricerca" - IDS_FAVORITES "&Preferiti" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Mostra" - IDTB_CONTRACT "Nascondi" - IDTB_STOP "Ferma" - IDTB_REFRESH "Aggiorna" - IDTB_BACK "Indietro" - IDTB_HOME "Home" - IDTB_SYNC "Sincronizza" - IDTB_PRINT "Stampa" - IDTB_OPTIONS "Opzioni" - IDTB_FORWARD "Avanti" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Personalizza" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Ja.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Ja.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Ja.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Ja.rc (removed) @@ -1,64 +0,0 @@ -/* - * HTML Help resources - * Japanese Language Support - * - * Copyright 2005 James Hawkins - * Copyright 2010 Akihiro Sagawa - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -/* UTF-8 */ -#pragma code_page(65001) - -LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "ç®æ¬¡(&C)" - IDS_INDEX "ç´¢å¼(&N)" - IDS_SEARCH "æ¤ç´¢(&S)" - IDS_FAVORITES "ãæ°ã«å ¥ã(&I)" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "表示" - IDTB_CONTRACT "é表示" - IDTB_STOP "ä¸æ¢" - IDTB_REFRESH "æ´æ°" - IDTB_BACK "æ»ã" - IDTB_HOME "ãã¼ã " - IDTB_SYNC "åæ" - IDTB_PRINT "å°å·" - IDTB_OPTIONS "ãªãã·ã§ã³" - IDTB_FORWARD "é²ã" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "ã¸ã£ã³ã1" - IDTB_JUMP2 "ã¸ã£ã³ã2" - IDTB_CUSTOMIZE "ã«ã¹ã¿ãã¤ãº" - IDTB_ZOOM "ãã©ã³ã" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Ko.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Ko.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Ko.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Ko.rc (removed) @@ -1,61 +0,0 @@ -/* - * HTML Help resources - * Korean Language Support - * - * Copyright 2005 James Hawkins - * Copyright 2005 YunSong Hwang - - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "¸ñ·Ï(&C)" - IDS_INDEX "À妽º(&N)" - IDS_SEARCH "ã±â(&S)" - IDS_FAVORITES "Áñ°Üã±â(&I)" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "º¸¿©ÁÖ±â" - IDTB_CONTRACT "¼û±â±â" - IDTB_STOP "Á¤Áö" - IDTB_REFRESH "»õ·Î °íħ" - IDTB_BACK "µÚ·Î" - IDTB_HOME "Ȩ" - IDTB_SYNC "µ¿±âÈ" - IDTB_PRINT "Àμâ" - IDTB_OPTIONS "¿É¼Ç" - IDTB_FORWARD "¾ÕÀ¸·Î" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "»ç¿ëÀÚÁ¤ÀÇ" - IDTB_ZOOM "È®´ë" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Lt.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Lt.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Lt.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Lt.rc (removed) @@ -1,63 +0,0 @@ -/* - * HTML Help resources - * Lithuanian Language Support - * - * Copyright 2009 Aurimas FiÅ¡eras <aurimas(a)gmail.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -/* UTF-8 */ -#pragma code_page(65001) - -LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Turinys" - IDS_INDEX "&RodyklÄ" - IDS_SEARCH "&PaieÅ¡ka" - IDS_FAVORITES "&Adresynas" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Rodyti" - IDTB_CONTRACT "SlÄpti" - IDTB_STOP "Stabdyti" - IDTB_REFRESH "Atnaujinti" - IDTB_BACK "Atgal" - IDTB_HOME "Ä® pradžiÄ " - IDTB_SYNC "Sinchronizuoti" - IDTB_PRINT "Spausdinti" - IDTB_OPTIONS "Parinktys" - IDTB_FORWARD "Pirmyn" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Nukreipimas1" - IDTB_JUMP2 "Nukreipimas2" - IDTB_CUSTOMIZE "Adaptuoti" - IDTB_ZOOM "Keisti mastelį" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Nl.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Nl.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Nl.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Nl.rc (removed) @@ -1,60 +0,0 @@ -/* - * HTML Help resources - * Dutch Language Support - * - * Copyright 2005 Hans Leidekker - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Inhoud" - IDS_INDEX "I&ndex" - IDS_SEARCH "&Zoeken" - IDS_FAVORITES "&Favorieten" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Weergeven" - IDTB_CONTRACT "Verbergen" - IDTB_STOP "Stop" - IDTB_REFRESH "Actualiseren" - IDTB_BACK "Terug" - IDTB_HOME "Startpagina" - IDTB_SYNC "Synchroniseren" - IDTB_PRINT "Afdrukken" - IDTB_OPTIONS "Instellingen" - IDTB_FORWARD "Vooruit" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Sprong1" - IDTB_JUMP2 "Sprong2" - IDTB_CUSTOMIZE "Aanpassen" - IDTB_ZOOM "Vergroten" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/No.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/No.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/No.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/No.rc (removed) @@ -1,60 +0,0 @@ -/* - * HTML Help resources - * Norwegian Bokmål Language Support - * - * Copyright 2005 Alexander N. Sørnes <alex(a)thehandofagony.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Innhold" - IDS_INDEX "I&ndeks" - IDS_SEARCH "&Søk" - IDS_FAVORITES "Favor&itter" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Vis" - IDTB_CONTRACT "Skjul" - IDTB_STOP "Stopp" - IDTB_REFRESH "Oppdater" - IDTB_BACK "Tilbake" - IDTB_HOME "Hjem" - IDTB_SYNC "Synkroniser" - IDTB_PRINT "Skriv ut" - IDTB_OPTIONS "Innstillinger" - IDTB_FORWARD "Fram" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Tilpass" - IDTB_ZOOM "Forstørr" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Pl.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Pl.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Pl.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Pl.rc (removed) @@ -1,61 +0,0 @@ -/* - * HTML Help resources - * Polish Language Support - * - * Copyright 2005 James Hawkins - * Copyright 2006 Mikolaj Zalewski - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_POLISH, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Spis treci" - IDS_INDEX "&Indeks" - IDS_SEARCH "&Wyszukaj" - IDS_FAVORITES "&Ulubione" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Poka¿" - IDTB_CONTRACT "Ukryj" - IDTB_STOP "Zatrzymaj" - IDTB_REFRESH "Odwie¿" - IDTB_BACK "Wstecz" - IDTB_HOME "Start" - IDTB_SYNC "Synchronizuj" - IDTB_PRINT "Drukuj" - IDTB_OPTIONS "Opcje" - IDTB_FORWARD "Dalej" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Skok1" - IDTB_JUMP2 "Skok2" - IDTB_CUSTOMIZE "Dostosuj" - IDTB_ZOOM "Powiêksz" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Pt.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Pt.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Pt.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Pt.rc (removed) @@ -1,96 +0,0 @@ -/* - * HTML Help resources - * Portuguese Language Support - * - * Copyright 2008 Ricardo Filipe - * Copyright 2010 Gustavo Henrique Milaré - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -#pragma code_page(65001) - -LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Conteúdos" - IDS_INDEX "&Ãndice" - IDS_SEARCH "&Pesquisar" - IDS_FAVORITES "&Favoritos" -END - - -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN - -STRINGTABLE -BEGIN - IDTB_EXPAND "Mostrar" - IDTB_CONTRACT "Ocultar" - IDTB_STOP "Parar" - IDTB_REFRESH "Recarregar" - IDTB_BACK "Voltar" - IDTB_HOME "InÃcio" - IDTB_SYNC "Sincronizar" - IDTB_PRINT "Imprimir" - IDTB_OPTIONS "Opções" - IDTB_FORWARD "Avançar" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Personalizar" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END - -LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE - -STRINGTABLE -BEGIN - IDTB_EXPAND "Mostrar" - IDTB_CONTRACT "Esconder" - IDTB_STOP "Parar" - IDTB_REFRESH "Actualizar" - IDTB_BACK "Retroceder" - IDTB_HOME "InÃcio" - IDTB_SYNC "Sincronizar" - IDTB_PRINT "Imprimir" - IDTB_OPTIONS "Opções" - IDTB_FORWARD "Avançar" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Personalizar" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Ro.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Ro.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Ro.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Ro.rc (removed) @@ -1,63 +0,0 @@ -/* - * HTML Help resources - * - * Copyright 2005 James Hawkins - * Copyright 2010 Claudia CotunÄ - * Michael Stefaniuc - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL - -#pragma code_page(65001) - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Cuprins" - IDS_INDEX "I&ndex" - IDS_SEARCH "C&autÄ" - IDS_FAVORITES "Favor&ite" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "AfiÈeazÄ" - IDTB_CONTRACT "Ascunde" - IDTB_STOP "OpreÈte" - IDTB_REFRESH "ActualizeazÄ" - IDTB_BACK "Ãnapoi" - IDTB_HOME "AcasÄ" - IDTB_SYNC "SincronizeazÄ" - IDTB_PRINT "ImprimÄ" - IDTB_OPTIONS "OpÈiuni" - IDTB_FORWARD "Ãnainte" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Salt1" - IDTB_JUMP2 "Salt2" - IDTB_CUSTOMIZE "Personalizare" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Ru.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Ru.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Ru.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Ru.rc (removed) @@ -1,63 +0,0 @@ -/* - * HTML Help resources - * Russia Language Support - * - * Copyright 2008 Vitaliy Margolen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -/* UTF-8 */ -#pragma code_page(65001) - -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&СодеÑжание" - IDS_INDEX "&Ðглавление" - IDS_SEARCH "&ÐоиÑк" - IDS_FAVORITES "&ÐзбÑанное" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "ÐоказаÑÑ" - IDTB_CONTRACT "СпÑÑÑаÑÑ" - IDTB_STOP "ÐÑÑановиÑÑ" - IDTB_REFRESH "ÐбновиÑÑ" - IDTB_BACK "Ðазад" - IDTB_HOME "РнаÑало" - IDTB_SYNC "Ð¡Ð¸Ð½Ñ ÑонизиÑоваÑÑ" - IDTB_PRINT "ÐеÑаÑÑ" - IDTB_OPTIONS "ÐаÑÑÑойки" - IDTB_FORWARD "ÐпеÑÑд" - IDTB_NOTES "ÐапиÑки" - IDTB_BROWSE_FWD "ÐÑоÑмоÑÑ Ð²Ð¿ÐµÑÑд" - IDTB_BROWSE_BACK "ÐÑоÑмоÑÑ Ð½Ð°Ð·Ð°Ð´" - IDTB_CONTENTS "СодеÑжание" - IDTB_INDEX "Ðглавление" - IDTB_SEARCH "ÐоиÑк" - IDTB_HISTORY "ÐÑÑоÑиÑ" - IDTB_FAVORITES "ÐзбÑанное" - IDTB_JUMP1 "ÐеÑÐµÑ Ð¾Ð´ 1" - IDTB_JUMP2 "ÐеÑÐµÑ Ð¾Ð´ 2" - IDTB_CUSTOMIZE "ÐеÑÑонализоваÑÑ" - IDTB_ZOOM "ÐаÑÑÑаб" - IDTB_TOC_NEXT "СледÑÑÑÐ°Ñ Ð³Ð»Ð°Ð²Ð°" - IDTB_TOC_PREV "ÐÑедÑдÑÑÐ°Ñ Ð³Ð»Ð°Ð²Ð°" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Si.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Si.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Si.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Si.rc (removed) @@ -1,62 +0,0 @@ -/* - * HTML Help resources - * Slovenian Language Support - * - * Copyright 2008 Rok Mandeljc - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -#pragma code_page(65001) - -LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Vsebina" - IDS_INDEX "I&ndeks" - IDS_SEARCH "&Iskanje" - IDS_FAVORITES "&Priljubljene" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Pokaži" - IDTB_CONTRACT "Skrij" - IDTB_STOP "Ustavi" - IDTB_REFRESH "Osveži" - IDTB_BACK "Nazaj" - IDTB_HOME "Domov" - IDTB_SYNC "Sinhroniziraj" - IDTB_PRINT "Natisni" - IDTB_OPTIONS "Možnosti" - IDTB_FORWARD "Naprej" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Skok1" - IDTB_JUMP2 "Skok2" - IDTB_CUSTOMIZE "Prilagodi" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Sv.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Sv.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Sv.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Sv.rc (removed) @@ -1,60 +0,0 @@ -/* - * HTML Help resources - * Swedish Language Support - * - * Copyright 2007 Daniel Nylander - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Innehåll" - IDS_INDEX "I&ndex" - IDS_SEARCH "&Sök" - IDS_FAVORITES "Favor&iter" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Visa" - IDTB_CONTRACT "Dölj" - IDTB_STOP "Stoppa" - IDTB_REFRESH "Uppdatera" - IDTB_BACK "Bakåt" - IDTB_HOME "Hem" - IDTB_SYNC "Synkronisera" - IDTB_PRINT "Skriv ut" - IDTB_OPTIONS "Alternativ" - IDTB_FORWARD "Framåt" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Anpassa" - IDTB_ZOOM "Zoom" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Tr.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Tr.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Tr.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Tr.rc (removed) @@ -1,60 +0,0 @@ -/* - * HTML Help resources - * Turkish Language Support - * - * Copyright 2006 Fatih Aþýcý - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&Ýçerik" - IDS_INDEX "Di&zin" - IDS_SEARCH "&Ara" - IDS_FAVORITES "&Sýk Kullanýlanlar" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "Göster" - IDTB_CONTRACT "Gizle" - IDTB_STOP "Dur" - IDTB_REFRESH "Yenile" - IDTB_BACK "Geri" - IDTB_HOME "Ev" - IDTB_SYNC "Eþitle" - IDTB_PRINT "Yazdýr" - IDTB_OPTIONS "Seçenekler" - IDTB_FORWARD "Ýleri" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "Özelleþtir" - IDTB_ZOOM "Yaklaþtýr" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Uk.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Uk.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Uk.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Uk.rc (removed) @@ -1,75 +0,0 @@ -/* - * HTML Help resources - * Ukrainian Language Support - * - * Copyright 2005 James Hawkins - * Copyright 2007 Artem Reznikov - * Copyright 2010 Igor Paliychuk - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -/* UTF-8 */ -#pragma code_page(65001) - -LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT - -STRINGTABLE -BEGIN - IDS_CONTENTS "&ÐмÑÑÑ" - IDS_INDEX "&ÐказÑвник" - IDS_SEARCH "&ÐоÑÑк" - IDS_FAVORITES "&ÐбÑане" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "ÐоказÑваÑи" - IDTB_CONTRACT "ÐÑÐ¸Ñ Ð¾Ð²Ð°Ñи" - IDTB_STOP "ÐÑпиниÑи" - IDTB_REFRESH "ÐновиÑи" - IDTB_BACK "Ðазад" - IDTB_HOME "ÐодомÑ" - IDTB_SYNC "Ð¡Ð¸Ð½Ñ ÑонÑзÑваÑи" - IDTB_PRINT "ÐÑÑк" - IDTB_OPTIONS "ÐаÑамеÑÑи" - IDTB_FORWARD "ÐпеÑед" - IDTB_NOTES "IDTB_NOTES" - IDTB_BROWSE_FWD "IDTB_BROWSE_FWD" - IDTB_BROWSE_BACK "IDT_BROWSE_BACK" - IDTB_CONTENTS "IDTB_CONTENTS" - IDTB_INDEX "IDTB_INDEX" - IDTB_SEARCH "IDTB_SEARCH" - IDTB_HISTORY "IDTB_HISTORY" - IDTB_FAVORITES "IDTB_FAVORITES" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "ÐалаÑÑÑваннÑ" - IDTB_ZOOM "ÐбÑлÑÑеннÑ" - IDTB_TOC_NEXT "IDTB_TOC_NEXT" - IDTB_TOC_PREV "IDTB_TOC_PREV" -END - -LANGUAGE LANG_UKRAINIAN, SUBLANG_NEUTRAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "&ÐмÑÑÑ" - IDS_INDEX "&ÐказÑвник" - IDS_SEARCH "&ÐоÑÑк" - IDS_FAVORITES "&ÐбÑане" -END Removed: trunk/reactos/dll/win32/hhctrl.ocx/Zh.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/Zh.rc…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/Zh.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/Zh.rc (removed) @@ -1,100 +0,0 @@ -/* - * HTML Help (Simplified and Traditional Chinese Resources) - * - * Copyright 2008 Hongbo Ni <
hongbo.at.njstar.com
> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "resource.h" - -/* Chinese text is encoded in UTF-8 */ -#pragma code_page(65001) - -LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED - -STRINGTABLE -BEGIN - IDS_CONTENTS "å 容(&C)" - IDS_INDEX "ç®å½(&N)" - IDS_SEARCH "æ寻(&S)" - IDS_FAVORITES "æç±(&I)" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "æ¾ç¤º" - IDTB_CONTRACT "éè" - IDTB_STOP "åæ¢" - IDTB_REFRESH "å·æ°" - IDTB_BACK "åå" - IDTB_HOME "é¦é¡µ" - IDTB_SYNC "åæ¥" - IDTB_PRINT "æå°" - IDTB_OPTIONS "é项" - IDTB_FORWARD "åå" - IDTB_NOTES "说æ" - IDTB_BROWSE_FWD "åå" - IDTB_BROWSE_BACK "åå" - IDTB_CONTENTS "å 容" - IDTB_INDEX "ç®å½" - IDTB_SEARCH "æ寻" - IDTB_HISTORY "åå²" - IDTB_FAVORITES "æç±" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "个æ§å" - IDTB_ZOOM "æ¾å¤§" - IDTB_TOC_NEXT "åä¸é¡¹" - IDTB_TOC_PREV "åä¸é¡¹" -END - -LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL - -STRINGTABLE -BEGIN - IDS_CONTENTS "å §å®¹(&C)" - IDS_INDEX "ç®é(&N)" - IDS_SEARCH "æå°(&S)" - IDS_FAVORITES "ææ(&I)" -END - -STRINGTABLE -BEGIN - IDTB_EXPAND "顯示" - IDTB_CONTRACT "é±è" - IDTB_STOP "åæ¢" - IDTB_REFRESH "å·æ°" - IDTB_BACK "åå¾" - IDTB_HOME "é¦é " - IDTB_SYNC "åæ¥" - IDTB_PRINT "åå°" - IDTB_OPTIONS "é¸é " - IDTB_FORWARD "åå" - IDTB_NOTES "說æ" - IDTB_BROWSE_FWD "åå" - IDTB_BROWSE_BACK "åå¾" - IDTB_CONTENTS "å §å®¹" - IDTB_INDEX "ç®é" - IDTB_SEARCH "æå°" - IDTB_HISTORY "æ·å²" - IDTB_FAVORITES "ææ" - IDTB_JUMP1 "Jump1" - IDTB_JUMP2 "Jump2" - IDTB_CUSTOMIZE "åæ§å" - IDTB_ZOOM "æ¾å¤§" - IDTB_TOC_NEXT "å¾ä¸é " - IDTB_TOC_PREV "åä¸é " -END Modified: trunk/reactos/dll/win32/hhctrl.ocx/hhctrl.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/hhctr…
============================================================================== --- trunk/reactos/dll/win32/hhctrl.ocx/hhctrl.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/hhctrl.ocx/hhctrl.rc [iso-8859-1] Thu Sep 19 15:24:21 2013 @@ -28,94 +28,84 @@ //#include "resource.h" #ifdef LANGUAGE_CS_CZ - #include "Cs.rc" + #include "lang/Cs.rc" #endif #ifdef LANGUAGE_DA_DK - #include "Da.rc" + #include "lang/Da.rc" #endif #ifdef LANGUAGE_EL_GR - #include "El.rc" + #include "lang/El.rc" #endif #ifdef LANGUAGE_EN_US - #include "En.rc" + #include "lang/En.rc" #endif #ifdef LANGUAGE_FI_FI - #include "Fi.rc" + #include "lang/Fi.rc" #endif #ifdef LANGUAGE_HU_HU - #include "Hu.rc" + #include "lang/Hu.rc" #endif #ifdef LANGUAGE_KO_KR - #include "Ko.rc" + #include "lang/Ko.rc" #endif #ifdef LANGUAGE_NL_NL - #include "Nl.rc" + #include "lang/Nl.rc" #endif #ifdef LANGUAGE_NO_NO - #include "No.rc" + #include "lang/No.rc" #endif #ifdef LANGUAGE_PL_PL - #include "Pl.rc" + #include "lang/Pl.rc" #endif #ifdef LANGUAGE_SV_SE - #include "Sv.rc" + #include "lang/Sv.rc" #endif #ifdef LANGUAGE_TR_TR - #include "Tr.rc" + #include "lang/Tr.rc" #endif /* UTF-8 */ #ifdef LANGUAGE_DE_DE - #include "De.rc" + #include "lang/De.rc" #endif #ifdef LANGUAGE_ES_ES - #include "Es.rc" + #include "lang/Es.rc" #endif #ifdef LANGUAGE_FR_FR - #include "Fr.rc" + #include "lang/Fr.rc" #endif #ifdef LANGUAGE_HE_IL - #include "He.rc" + #include "lang/He.rc" #endif #ifdef LANGUAGE_IT_IT - #include "It.rc" + #include "lang/It.rc" #endif #ifdef LANGUAGE_JA_JP - #include "Ja.rc" + #include "lang/Ja.rc" #endif #ifdef LANGUAGE_LT_LT - #include "Lt.rc" + #include "lang/Lt.rc" #endif #ifdef LANGUAGE_PT_PT - #include "Pt.rc" + #include "lang/Pt.rc" #endif #ifdef LANGUAGE_RO_RO - #include "Ro.rc" + #include "lang/Ro.rc" #endif #ifdef LANGUAGE_RU_RU - #include "Ru.rc" + #include "lang/Ru.rc" #endif #ifdef LANGUAGE_SL_SI - #include "Si.rc" + #include "lang/Si.rc" #endif #ifdef LANGUAGE_UK_UA - #include "Uk.rc" + #include "lang/Uk.rc" #endif #ifdef LANGUAGE_ZH_CN - #include "Zh.rc" + #include "lang/Zh.rc" #endif LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL - -/* @makedep: hhtoolbar.bmp */ -IDB_HHTOOLBAR BITMAP hhtoolbar.bmp - -/* @makedep: hhtreeview.bmp */ -IDB_HHTREEVIEW BITMAP hhtreeview.bmp - -1 TYPELIB hhctrl_tlb.tlb - -1 WINE_REGISTRY hhctrl_tlb.rgs #define WINE_FILEDESCRIPTION_STR "Wine htmlhelp OCX" #define WINE_FILENAME_STR "hhctrl.ocx" @@ -125,3 +115,12 @@ #define WINE_PRODUCTVERSION_STR "5.2.3790.2744" #include <wine/wine_common_ver.rc> + +/* @makedep: hhtoolbar.bmp */ +IDB_HHTOOLBAR BITMAP "res/hhtoolbar.bmp" + +/* @makedep: hhtreeview.bmp */ +IDB_HHTREEVIEW BITMAP "res/hhtreeview.bmp" + +1 TYPELIB hhctrl_tlb.tlb +1 WINE_REGISTRY hhctrl_tlb.rgs Removed: trunk/reactos/dll/win32/hhctrl.ocx/hhtoolbar.bmp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/hhtoo…
============================================================================== Binary file - no diff available. Removed: trunk/reactos/dll/win32/hhctrl.ocx/hhtreeview.bmp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/hhctrl.ocx/hhtre…
============================================================================== Binary file - no diff available. Propchange: trunk/reactos/dll/win32/hhctrl.ocx/lang/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Thu Sep 19 15:24:21 2013 @@ -0,0 +1,2 @@ +([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))? +(\d+) Propchange: trunk/reactos/dll/win32/hhctrl.ocx/lang/ ------------------------------------------------------------------------------ bugtraq:message = See issue #%BUGID% for more details. Propchange: trunk/reactos/dll/win32/hhctrl.ocx/lang/ ------------------------------------------------------------------------------ bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/dll/win32/hhctrl.ocx/lang/ ------------------------------------------------------------------------------ tsvn:logminsize = 10 Propchange: trunk/reactos/dll/win32/hhctrl.ocx/res/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Thu Sep 19 15:24:21 2013 @@ -0,0 +1,2 @@ +([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))? +(\d+) Propchange: trunk/reactos/dll/win32/hhctrl.ocx/res/ ------------------------------------------------------------------------------ bugtraq:message = See issue #%BUGID% for more details. Propchange: trunk/reactos/dll/win32/hhctrl.ocx/res/ ------------------------------------------------------------------------------ bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/dll/win32/hhctrl.ocx/res/ ------------------------------------------------------------------------------ tsvn:logminsize = 10
11 years, 1 month
1
0
0
0
[akhaldi] 60205: [GDIPLUS_WINETEST] * Sync with Wine 1.7.1.
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Sep 19 15:10:36 2013 New Revision: 60205 URL:
http://svn.reactos.org/svn/reactos?rev=60205&view=rev
Log: [GDIPLUS_WINETEST] * Sync with Wine 1.7.1. Modified: trunk/rostests/winetests/gdiplus/CMakeLists.txt trunk/rostests/winetests/gdiplus/customlinecap.c trunk/rostests/winetests/gdiplus/font.c trunk/rostests/winetests/gdiplus/graphics.c trunk/rostests/winetests/gdiplus/image.c trunk/rostests/winetests/gdiplus/testlist.c Modified: trunk/rostests/winetests/gdiplus/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdiplus/CMakeLi…
============================================================================== --- trunk/rostests/winetests/gdiplus/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/winetests/gdiplus/CMakeLists.txt [iso-8859-1] Thu Sep 19 15:10:36 2013 @@ -17,7 +17,6 @@ testlist.c) add_executable(gdiplus_winetest ${SOURCE}) -target_link_libraries(gdiplus_winetest wine) set_module_type(gdiplus_winetest win32cui) -add_importlibs(gdiplus_winetest gdiplus user32 gdi32 ole32 msvcrt kernel32 ntdll) +add_importlibs(gdiplus_winetest gdiplus user32 gdi32 ole32 msvcrt kernel32) add_cd_file(TARGET gdiplus_winetest DESTINATION reactos/bin FOR all) Modified: trunk/rostests/winetests/gdiplus/customlinecap.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdiplus/customl…
============================================================================== --- trunk/rostests/winetests/gdiplus/customlinecap.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdiplus/customlinecap.c [iso-8859-1] Thu Sep 19 15:10:36 2013 @@ -180,11 +180,44 @@ expect(InvalidParameter, stat); stat = GdipGetCustomLineCapWidthScale(custom, NULL); expect(InvalidParameter, stat); - /* valid args */ + + stat = GdipSetCustomLineCapWidthScale(NULL, 2.0); + expect(InvalidParameter, stat); + + /* valid args: read default */ scale = (REAL)0xdeadbeef; stat = GdipGetCustomLineCapWidthScale(custom, &scale); expect(Ok, stat); expectf(1.0, scale); + + /* set and read back some scale values: there is no limit for the scale */ + stat = GdipSetCustomLineCapWidthScale(custom, 2.5); + expect(Ok, stat); + scale = (REAL)0xdeadbeef; + stat = GdipGetCustomLineCapWidthScale(custom, &scale); + expect(Ok, stat); + expectf(2.5, scale); + + stat = GdipSetCustomLineCapWidthScale(custom, 42.0); + expect(Ok, stat); + scale = (REAL)0xdeadbeef; + stat = GdipGetCustomLineCapWidthScale(custom, &scale); + expect(Ok, stat); + expectf(42.0, scale); + + stat = GdipSetCustomLineCapWidthScale(custom, 3000.0); + expect(Ok, stat); + scale = (REAL)0xdeadbeef; + stat = GdipGetCustomLineCapWidthScale(custom, &scale); + expect(Ok, stat); + expectf(3000.0, scale); + + stat = GdipSetCustomLineCapWidthScale(custom, 0.0); + expect(Ok, stat); + scale = (REAL)0xdeadbeef; + stat = GdipGetCustomLineCapWidthScale(custom, &scale); + expect(Ok, stat); + expectf(0.0, scale); GdipDeleteCustomLineCap(custom); GdipDeletePath(path); Modified: trunk/rostests/winetests/gdiplus/font.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdiplus/font.c?…
============================================================================== --- trunk/rostests/winetests/gdiplus/font.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdiplus/font.c [iso-8859-1] Thu Sep 19 15:10:36 2013 @@ -888,26 +888,21 @@ expect(Ok, status); expectf(0.0, bounds.X); expectf(0.0, bounds.Y); -todo_wine - expectf(height, bounds.Height); + expectf_(height, bounds.Height, 1.0); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, NULL, &bounds); expect(Ok, status); expectf(0.0, bounds.X); -todo_wine expectf_(-100.0, bounds.Y, 0.05); -todo_wine - expectf(height, bounds.Height); + expectf_(height, bounds.Height, 0.5); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, matrix, &bounds); expect(Ok, status); expectf(0.0, bounds.X); -todo_wine expectf_(-100.0, bounds.Y, 0.05); -todo_wine - expectf(height, bounds.Height); + expectf_(height, bounds.Height, 0.5); /* scale matrix */ status = GdipScaleMatrix(matrix, 2.0, 3.0, MatrixOrderAppend); @@ -937,17 +932,14 @@ expect(Ok, status); expectf(0.0, bounds.X); expectf(0.0, bounds.Y); -todo_wine - expectf(height, bounds.Height); + expectf_(height, bounds.Height, 0.05); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, NULL, &bounds); expect(Ok, status); expectf(0.0, bounds.X); -todo_wine expectf_(-100.0, bounds.Y, 0.05); -todo_wine - expectf(height, bounds.Height); + expectf_(height, bounds.Height, 0.2); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, matrix, &bounds); @@ -986,17 +978,14 @@ expect(Ok, status); expectf(0.0, bounds.X); expectf(0.0, bounds.Y); -todo_wine - expectf(height, bounds.Height); + expectf_(height, bounds.Height, 0.05); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, NULL, &bounds); expect(Ok, status); expectf(0.0, bounds.X); -todo_wine expectf_(-100.0, bounds.Y, 0.05); -todo_wine - expectf(height, bounds.Height); + expectf_(height, bounds.Height, 0.2); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, matrix, &bounds); @@ -1037,17 +1026,14 @@ expect(Ok, status); expectf(0.0, bounds.X); expectf(0.0, bounds.Y); -todo_wine - expectf(height, bounds.Height); + expectf_(height, bounds.Height, 0.2); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, NULL, &bounds); expect(Ok, status); expectf(0.0, bounds.X); -todo_wine - expectf_(-100.0, bounds.Y, 0.05); -todo_wine - expectf(height, bounds.Height); + expectf_(-100.0, bounds.Y, 0.2); + expectf_(height, bounds.Height, 0.2); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, matrix, &bounds); @@ -1088,17 +1074,14 @@ expect(Ok, status); expectf(0.0, bounds.X); expectf(0.0, bounds.Y); -todo_wine - expectf(height, bounds.Height); + expectf_(height, bounds.Height, 0.1); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, NULL, &bounds); expect(Ok, status); expectf(0.0, bounds.X); -todo_wine - expectf_(-100.0, bounds.Y, 0.05); -todo_wine - expectf(height, bounds.Height); + expectf_(-100.0, bounds.Y, 0.2); + expectf_(height, bounds.Height, 0.2); set_rect_empty(&bounds); status = GdipMeasureDriverString(graphics, (const UINT16 *)string, -1, font, pos, DriverStringOptionsCmapLookup, matrix, &bounds); Modified: trunk/rostests/winetests/gdiplus/graphics.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdiplus/graphic…
============================================================================== --- trunk/rostests/winetests/gdiplus/graphics.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdiplus/graphics.c [iso-8859-1] Thu Sep 19 15:10:36 2013 @@ -712,7 +712,9 @@ status = GdipEndContainer(graphics, cont2); expect(Ok, status); - GdipGetClipBounds(graphics, &clip); + status = GdipGetClipBounds(graphics, &clip); + expect(Ok, status); + ok(fabs(defClip[0] - clip.X) < 0.0001 && fabs(defClip[1] - clip.Y) < 0.0001 && fabs(defClip[2] - clip.Width) < 0.0001 && @@ -3047,6 +3049,23 @@ expect(6, codepointsfitted); expect(2, linesfilled); char_height = bounds.Height - char_bounds.Height; + + /* Measure the first line. */ + status = GdipMeasureString(graphics, teststring, 4, font, &rc, NULL, &bounds, &codepointsfitted, &linesfilled); + expect(Ok, status); + expectf(0.0, bounds.X); + expectf(0.0, bounds.Y); + expect(4, codepointsfitted); + expect(1, linesfilled); + + /* Give just enough space to fit the first line. */ + rc.Width = bounds.Width; + status = GdipMeasureString(graphics, teststring, 5, font, &rc, NULL, &bounds, &codepointsfitted, &linesfilled); + expect(Ok, status); + expectf(0.0, bounds.X); + expectf(0.0, bounds.Y); + todo_wine expect(5, codepointsfitted); + todo_wine expect(1, linesfilled); /* Cut off everything after the first space. */ rc.Width = char_bounds.Width + char_width * 2.1; @@ -3891,7 +3910,6 @@ match = fabs(1.0 - margin / rect.X) <= 0.05; ok(match, "Expected %f, got %f\n", margin, rect.X); match = fabs(1.0 - font_height / rect.Height) <= 0.1; -todo_wine ok(match, "Expected %f, got %f\n", font_height, rect.Height); match = fabs(1.0 - bounds.Width / (rect.Width + margin * 2.0)) <= 0.05; ok(match, "Expected %f, got %f\n", bounds.Width, rect.Width + margin * 2.0); @@ -4512,6 +4530,978 @@ GdipDisposeImage((GpImage*)bitmap); } +static void test_clipping(void) +{ + HDC hdc; + GpStatus status; + GpGraphics *graphics; + GpRegion *region, *region100x100; + GpMatrix *matrix; + GpRectF rect; + GpPointF ptf[4]; + GpUnit unit; + HRGN hrgn; + int ret; + RECT rc; + + hdc = CreateCompatibleDC(0); + status = GdipCreateFromHDC(hdc, &graphics); + expect(Ok, status); + + status = GdipGetPageUnit(graphics, &unit); + expect(Ok, status); + expect(UnitDisplay, unit); + + status = GdipCreateRegion(®ion); + expect(Ok, status); + status = GdipSetEmpty(region); + expect(Ok, status); + + status = GdipCreateRegion(®ion100x100); + expect(Ok, status); + status = GdipSetEmpty(region100x100); + expect(Ok, status); + + rect.X = rect.Y = 100.0; + rect.Width = rect.Height = 100.0; + status = GdipCombineRegionRect(region100x100, &rect, CombineModeUnion); + expect(Ok, status); + status = GdipSetClipRegion(graphics, region100x100, CombineModeReplace); + expect(Ok, status); + + status = GdipGetClipBounds(graphics, &rect); + expect(Ok, status); + ok(rect.X == 100.0 && rect.Y == 100.0 && rect.Width == 100.0 && rect.Height == 100.0, + "expected 100.0,100.0-100.0,100.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipSetEmpty(region); + expect(Ok, status); + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionBounds(region, graphics, &rect); + expect(Ok, status); + ok(rect.X == 100.0 && rect.Y == 100.0 && rect.Width == 100.0 && rect.Height == 100.0, + "expected 100.0,100.0-100.0,100.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 100.0 && ptf[0].Y == 100.0 && ptf[1].X == 200.0 && ptf[1].Y == 200.0, + "expected 100.0,100.0-200.0,200.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + + status = GdipCreateMatrix(&matrix); + expect(Ok, status); + status = GdipScaleMatrix(matrix, 2.0, 4.0, MatrixOrderAppend); + expect(Ok, status); + status = GdipTranslateMatrix(matrix, 10.0, 20.0, MatrixOrderAppend); + expect(Ok, status); + status = GdipSetWorldTransform(graphics, matrix); + expect(Ok, status); + + status = GdipGetClipBounds(graphics, &rect); + expect(Ok, status); + ok(rect.X == 45.0 && rect.Y == 20.0 && rect.Width == 50.0 && rect.Height == 25.0, + "expected 45.0,20.0-50.0,25.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipSetEmpty(region); + expect(Ok, status); + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionBounds(region, graphics, &rect); + expect(Ok, status); + ok(rect.X == 45.0 && rect.Y == 20.0 && rect.Width == 50.0 && rect.Height == 25.0, + "expected 45.0,20.0-50.0,25.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipGetRegionBounds(region100x100, graphics, &rect); + expect(Ok, status); + ok(rect.X == 100.0 && rect.Y == 100.0 && rect.Width == 100.0 && rect.Height == 100.0, + "expected 100.0,100.0-100.0,100.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 45 && rc.top == 20 && rc.right == 95 && rc.bottom == 45, + "expected 45,20-95,45, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 45.0 && ptf[0].Y == 20.0 && ptf[1].X == 95.0 && ptf[1].Y == 45.0, + "expected 45.0,20.0-95.0,45.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + + status = GdipGetRegionHRgn(region100x100, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region100x100, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 210 && rc.top == 420 && rc.right == 410 && rc.bottom == 820, + "expected 210,420-410,820, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 210.0; + ptf[0].Y = 420.0; + ptf[1].X = 410.0; + ptf[1].Y = 820.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 100.0 && ptf[0].Y == 100.0 && ptf[1].X == 200.0 && ptf[1].Y == 200.0, + "expected 100.0,100.0-200.0,200.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + + status = GdipSetPageScale(graphics, 2.0); + expect(Ok, status); + + status = GdipGetClipBounds(graphics, &rect); + expect(Ok, status); + ok(rect.X == 45.0 && rect.Y == 20.0 && rect.Width == 50.0 && rect.Height == 25.0, + "expected 45.0,20.0-50.0,25.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipSetEmpty(region); + expect(Ok, status); + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionBounds(region, graphics, &rect); + expect(Ok, status); + ok(rect.X == 45.0 && rect.Y == 20.0 && rect.Width == 50.0 && rect.Height == 25.0, + "expected 45.0,20.0-50.0,25.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipGetRegionBounds(region100x100, graphics, &rect); + expect(Ok, status); + ok(rect.X == 100.0 && rect.Y == 100.0 && rect.Width == 100.0 && rect.Height == 100.0, + "expected 100.0,100.0-100.0,100.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 45 && rc.top == 20 && rc.right == 95 && rc.bottom == 45, + "expected 45,20-95,45, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 45.0 && ptf[0].Y == 20.0 && ptf[1].X == 95.0 && ptf[1].Y == 45.0, + "expected 45.0,20.0-95.0,45.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + + status = GdipGetRegionHRgn(region100x100, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region100x100, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 210 && rc.top == 420 && rc.right == 410 && rc.bottom == 820, + "expected 210,420-410,820, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 210.0; + ptf[0].Y = 420.0; + ptf[1].X = 410.0; + ptf[1].Y = 820.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 100.0 && ptf[0].Y == 100.0 && ptf[1].X == 200.0 && ptf[1].Y == 200.0, + "expected 100.0,100.0-200.0,200.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + + GdipSetPageUnit(graphics, UnitPoint); + expect(Ok, status); + + status = GdipGetClipBounds(graphics, &rect); + expect(Ok, status); + ok((rect.X == 13.75 && rect.Y == 4.375 && rect.Width == 18.75 && rect.Height == 9.375) || + /* rounding under Wine is slightly different */ + (rect.X == 14.0 && rect.Y == 4.0 && rect.Width == 19.0 && rect.Height == 10.0) /* Wine */ || + broken(rect.X == 45.0 && rect.Y == 20.0 && rect.Width == 50.0 && rect.Height == 25.0) /* before Win7 */, + "expected 13.75,4.375-18.75,9.375, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipSetEmpty(region); + expect(Ok, status); + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionBounds(region, graphics, &rect); + expect(Ok, status); + ok((rect.X == 13.75 && rect.Y == 4.375 && rect.Width == 18.75 && rect.Height == 9.375) || + /* rounding under Wine is slightly different */ + (rect.X == 14.0 && rect.Y == 4.0 && rect.Width == 19.0 && rect.Height == 10.0) /* Wine */ || + broken(rect.X == 45.0 && rect.Y == 20.0 && rect.Width == 50.0 && rect.Height == 25.0) /* before Win7 */, + "expected 13.75,4.375-18.75,9.375, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipGetRegionBounds(region100x100, graphics, &rect); + expect(Ok, status); + ok(rect.X == 100.0 && rect.Y == 100.0 && rect.Width == 100.0 && rect.Height == 100.0, + "expected 100.0,100.0-100.0,100.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 14 && rc.top == 5 && rc.right == 33 && rc.bottom == 14) || + /* rounding under Wine is slightly different */ + (rc.left == 14 && rc.top == 4 && rc.right == 33 && rc.bottom == 14) /* Wine */ || + broken(rc.left == 45 && rc.top == 20 && rc.right == 95 && rc.bottom == 45) /* before Win7 */, + "expected 14,5-33,14, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200) || + broken(rc.left == 267 && rc.top == 267 && rc.right == 534 && rc.bottom == 534) /* before Win7 */, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok((ptf[0].X == 13.75 && ptf[0].Y == 4.375 && ptf[1].X == 32.5 && ptf[1].Y == 13.75) || + broken(ptf[0].X == 45.0 && ptf[0].Y == 20.0 && ptf[1].X == 95.0 && ptf[1].Y == 45.0) /* before Win7 */, + "expected 13.75,4.375-32.5,13.75, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + + status = GdipGetRegionHRgn(region100x100, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region100x100, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 560 && rc.top == 1120 && rc.right == 1094 && rc.bottom == 2187) || + /* rounding under Wine is slightly different */ + (rc.left == 560 && rc.top == 1120 && rc.right == 1093 && rc.bottom == 2187) /* Wine */, + "expected 560,1120-1094,2187, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 560.0; + ptf[0].Y = 1120.0; + ptf[1].X = 1094.0; + ptf[1].Y = 2187.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 100.0) < 0.001) + { + expectf(100.0, ptf[0].X); + expectf(100.0, ptf[0].Y); + expectf(200.125, ptf[1].X); + expectf(200.03125, ptf[1].Y); + } + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 275.0) < 0.001), "expected 275.0, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 275.0) < 0.001), "expected 275.0, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 542.0) < 0.001), "expected 542.0, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 541.75) < 0.001), "expected 541.75, got %f\n", ptf[1].Y); + } + + status = GdipTransformRegion(region100x100, matrix); + expect(Ok, status); + + status = GdipGetRegionBounds(region100x100, graphics, &rect); + expect(Ok, status); + ok(rect.X == 210.0 && rect.Y == 420.0 && rect.Width == 200.0 && rect.Height == 400.0, + "expected 210.0,420.0-200.0,400.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipGetRegionHRgn(region100x100, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 210 && rc.top == 420 && rc.right == 410 && rc.bottom == 820, + "expected 210,420-410,820, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region100x100, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 1147 && rc.top == 4534 && rc.right == 2214 && rc.bottom == 8800) || + /* rounding under Wine is slightly different */ + (rc.left == 1147 && rc.top == 4533 && rc.right == 2213 && rc.bottom == 8800) /* Wine */, + "expected 1147,4534-2214,8800, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 1147.0; + ptf[0].Y = 4534.0; + ptf[1].X = 2214.0; + ptf[1].Y = 8800.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 210.0625) < 0.001) + { + expectf(210.0625, ptf[0].X); + expectf(420.0625, ptf[0].Y); + expectf(410.125, ptf[1].X); + expectf(820.0, ptf[1].Y); + } + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 568.5) < 0.001), "expected 568.5, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 1128.5) < 0.001), "expected 1128.5, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 1102.0) < 0.001), "expected 1102.0, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 2195.0) < 0.001), "expected 2195.0, got %f\n", ptf[1].Y); + } + + status = GdipRotateMatrix(matrix, 30.0, MatrixOrderAppend); + expect(Ok, status); + status = GdipSetWorldTransform(graphics, matrix); + expect(Ok, status); + + status = GdipGetClipBounds(graphics, &rect); + expect(Ok, status); + expectf_(20.612978, rect.X, 1.0); + expectf_(-6.256012, rect.Y, 1.5); + expectf_(25.612978, rect.Width, 1.0); + expectf_(12.806489, rect.Height, 1.0); + + status = GdipSetEmpty(region); + expect(Ok, status); + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionBounds(region, graphics, &rect); + expect(Ok, status); + /* rounding under Wine is slightly different */ + expectf_(20.612978, rect.X, 1.0); + expectf_(-6.256012, rect.Y, 1.5); + expectf_(25.612978, rect.Width, 1.0); + expectf_(12.806489, rect.Height, 1.0); + + status = GdipGetRegionBounds(region100x100, graphics, &rect); + expect(Ok, status); + ok(rect.X == 210.0 && rect.Y == 420.0 && rect.Width == 200.0 && rect.Height == 400.0, + "expected 210.0,420.0-200.0,400.0, got %f,%f-%f,%f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == COMPLEXREGION, "expected COMPLEXREGION, got %d\n", ret); + ok((rc.left == 22 && rc.top == -6 && rc.right == 46 && rc.bottom == 7) || + /* rounding under Wine is slightly different */ + (rc.left == 21 && rc.top == -5 && rc.right == 46 && rc.bottom == 7) /* Wine */, + "expected (22,-6)-(46,7), got (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + ptf[2].X = 200.0; + ptf[2].Y = 100.0; + ptf[3].X = 100.0; + ptf[3].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 4); + expect(Ok, status); + expectf(20.612978, ptf[0].X); + expectf(-1.568512, ptf[0].Y); + expectf(46.225956, ptf[1].X); + expectf(1.862977, ptf[1].Y); + expectf(36.850956, ptf[2].X); + expectf(-6.256012, ptf[2].Y); + expectf(29.987980, ptf[3].X); + expectf(6.550478, ptf[3].Y); + + status = GdipGetRegionHRgn(region100x100, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 210 && rc.top == 420 && rc.right == 410 && rc.bottom == 820, + "expected 210,420-410,820, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region100x100, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == COMPLEXREGION, "expected COMPLEXREGION, got %d\n", ret); + ok((rc.left == -3406 && rc.top == 4500 && rc.right == -350 && rc.bottom == 8728) || + /* rounding under Wine is slightly different */ + (rc.left == -3407 && rc.top == 4500 && rc.right == -350 && rc.bottom == 8728) /* Wine */, + "expected (-3406,4500)-(-350,8728), got (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = -3406.0; + ptf[0].Y = 4500.0; + ptf[1].X = -350.0; + ptf[1].Y = 8728.0; + ptf[2].X = -350.0; + ptf[2].Y = 4500.0; + ptf[3].X = -3406.0; + ptf[3].Y = 8728.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 4); + expect(Ok, status); + expectf(-136.190491, ptf[0].X); + expectf(520.010742, ptf[0].Y); + expectf(756.417175, ptf[1].X); + expectf(720.031616, ptf[1].Y); + expectf(360.042114, ptf[2].X); + expectf(376.760742, ptf[2].Y); + expectf(260.184570, ptf[3].X); + expectf(863.281616, ptf[3].Y); + + status = GdipRotateMatrix(matrix, -90.0, MatrixOrderAppend); + expect(Ok, status); + status = GdipSetWorldTransform(graphics, matrix); + expect(Ok, status); + + status = GdipGetClipBounds(graphics, &rect); + expect(Ok, status); + expectf_(-28.100956, rect.X, 1.0); + expectf_(7.806488, rect.Y, 1.5); + expectf_(25.612978, rect.Width, 1.0); + expectf_(12.806489, rect.Height, 1.0); + + status = GdipSetEmpty(region); + expect(Ok, status); + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionBounds(region, graphics, &rect); + expect(Ok, status); + /* rounding under Wine is slightly different */ + expectf_(-28.100956, rect.X, 1.0); + expectf_(7.806488, rect.Y, 1.5); + expectf_(25.612978, rect.Width, 1.0); + expectf_(12.806489, rect.Height, 1.0); + + status = GdipGetRegionBounds(region100x100, graphics, &rect); + expect(Ok, status); + ok(rect.X == 210.0 && rect.Y == 420.0 && rect.Width == 200.0 && rect.Height == 400.0, + "expected 210.0,420.0-200.0,400.0, got %f,%f-%f,%f\n", rect.X, rect.Y, rect.Width, rect.Height); + + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == COMPLEXREGION, "expected COMPLEXREGION, got %d\n", ret); + ok((rc.left == -27 && rc.top == 8 && rc.right == -2 && rc.bottom == 21) || + /* rounding under Wine is slightly different */ + (rc.left == -28 && rc.top == 9 && rc.right == -2 && rc.bottom == 21) /* Wine */, + "expected (-27,8)-(-2,21), got (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + ptf[2].X = 200.0; + ptf[2].Y = 100.0; + ptf[3].X = 100.0; + ptf[3].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 4); + expect(Ok, status); + expectf(-11.862979, ptf[0].X); + expectf(7.806488, ptf[0].Y); + expectf(-18.725958, ptf[1].X); + expectf(20.612976, ptf[1].Y); + expectf(-2.487981, ptf[2].X); + expectf(15.925477, ptf[2].Y); + expectf(-28.100956, ptf[3].X); + expectf(12.493987, ptf[3].Y); + + status = GdipGetRegionHRgn(region100x100, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 210 && rc.top == 420 && rc.right == 410 && rc.bottom == 820, + "expected 210,420-410,820, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + status = GdipGetRegionHRgn(region100x100, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == COMPLEXREGION, "expected COMPLEXREGION, got %d\n", ret); + ok((rc.left == 4500 && rc.top == 351 && rc.right == 8728 && rc.bottom == 3407) || + /* rounding under Wine is slightly different */ + (rc.left == 4499 && rc.top == 351 && rc.right == 8728 && rc.bottom == 3407) /* Wine */, + "expected (4500,351)-(8728,3407), got (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = -3406.0; + ptf[0].Y = 4500.0; + ptf[1].X = -350.0; + ptf[1].Y = 8728.0; + ptf[2].X = -350.0; + ptf[2].Y = 4500.0; + ptf[3].X = -3406.0; + ptf[3].Y = 8728.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 4); + expect(Ok, status); + expectf(-1055.021484, ptf[0].X); + expectf(-70.595329, ptf[0].Y); + expectf(-1455.063232, ptf[1].X); + expectf(375.708435, ptf[1].Y); + expectf(-768.521484, ptf[2].X); + expectf(177.520981, ptf[2].Y); + expectf(-1741.563110, ptf[3].X); + expectf(127.592125, ptf[3].Y); + + GdipDeleteMatrix(matrix); + GdipDeleteRegion(region); + GdipDeleteRegion(region100x100); + GdipDeleteGraphics(graphics); + DeleteDC(hdc); +} + +static void test_clipping_2(void) +{ + + HDC hdc; + GpStatus status; + GpGraphics *graphics; + GpRegion *region; + GpMatrix *matrix; + GpRectF rect; + GpPointF ptf[4]; + GpUnit unit; + HRGN hrgn; + int ret; + RECT rc; + + hdc = CreateCompatibleDC(0); + status = GdipCreateFromHDC(hdc, &graphics); + expect(Ok, status); + + status = GdipGetPageUnit(graphics, &unit); + expect(Ok, status); + expect(UnitDisplay, unit); + + GdipSetPageUnit(graphics, UnitInch); + + status = GdipCreateRegion(®ion); + expect(Ok, status); + status = GdipSetEmpty(region); + expect(Ok, status); + rect.X = rect.Y = 100.0; + rect.Width = rect.Height = 100.0; + status = GdipCombineRegionRect(region, &rect, CombineModeUnion); + expect(Ok, status); + status = GdipSetClipRegion(graphics, region, CombineModeReplace); + expect(Ok, status); + + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 9600 && rc.top == 9600 && rc.right == 19200 && rc.bottom == 19200, + "expected 9600,9600-19200,19200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 9600.0; + ptf[0].Y = 9600.0; + ptf[1].X = 19200.0; + ptf[1].Y = 19200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + expectf(100.0, ptf[0].X); + expectf(100.0, ptf[0].Y); + expectf(200.0, ptf[1].X); + expectf(200.0, ptf[1].X); + + GdipSetPageUnit(graphics, UnitPoint); + + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 7200 && rc.top == 7200 && rc.right == 14400 && rc.bottom == 14400) || + broken(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200) /* before Win7 */, + "expected 7200,7200-14400,14400, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 9600 && rc.top == 9600 && rc.right == 19200 && rc.bottom == 19200) || + broken(rc.left == 134 && rc.top == 134 && rc.right == 267 && rc.bottom == 267) /* before Win7 */, + "expected 9600,9600-19200,19200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 9600.0; + ptf[0].Y = 9600.0; + ptf[1].X = 19200.0; + ptf[1].Y = 19200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 7200.0) < 0.001) + ok(ptf[0].X == 7200.0 && ptf[0].Y == 7200.0 && ptf[1].X == 14400.0 && ptf[1].Y == 14400.0, + "expected 7200.0,7200.0-14400.0,14400.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 100.0) < 0.001), "expected 100.0, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 100.0) < 0.001), "expected 100.0, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 200.0) < 0.001), "expected 200.0, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 200.0) < 0.001), "expected 200.0, got %f\n", ptf[1].Y); + } + + GdipDeleteRegion(region); + + GdipSetPageUnit(graphics, UnitPixel); + + status = GdipCreateRegion(®ion); + expect(Ok, status); + status = GdipSetEmpty(region); + expect(Ok, status); + rect.X = rect.Y = 100.0; + rect.Width = rect.Height = 100.0; + status = GdipCombineRegionRect(region, &rect, CombineModeUnion); + expect(Ok, status); + status = GdipSetClipRegion(graphics, region, CombineModeReplace); + expect(Ok, status); + + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200) || + broken(rc.left == 2 && rc.top == 2 && rc.right == 3 && rc.bottom == 3) /* before Win7 */, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200) || + broken(rc.left == 2 && rc.top == 2 && rc.right == 3 && rc.bottom == 3) /* before Win7 */, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 100.0) < 0.001) + ok(ptf[0].X == 100.0 && ptf[0].Y == 100.0 && ptf[1].X == 200.0 && ptf[1].Y == 200.0, + "expected 100.0,100.0-200.0,200.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 1.041667) < 0.001), "expected 1.041667, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 1.041667) < 0.001), "expected 1.041667, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 2.083333) < 0.001), "expected 2.083333, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 2.083333) < 0.001), "expected 2.083333, got %f\n", ptf[1].Y); + } + + GdipSetPageUnit(graphics, UnitPoint); + + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 75 && rc.top == 75 && rc.right == 150 && rc.bottom == 150) || + broken(rc.left == 2 && rc.top == 2 && rc.right == 3 && rc.bottom == 3) /* before Win7 */, + "expected 75,75-150,150, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200) || + broken(rc.left == 2 && rc.top == 2 && rc.right == 3 && rc.bottom == 3) /* before Win7 */, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 75.0) < 0.001) + ok(ptf[0].X == 75.0 && ptf[0].Y == 75.0 && ptf[1].X == 150.0 && ptf[1].Y == 150.0, + "expected 75.0,75.0-150.0,150.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 1.041667) < 0.001), "expected 1.041667, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 1.041667) < 0.001), "expected 1.041667, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 2.083333) < 0.001), "expected 2.083333, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 2.083333) < 0.001), "expected 2.083333, got %f\n", ptf[1].Y); + } + + status = GdipCreateMatrix(&matrix); + expect(Ok, status); + status = GdipTranslateMatrix(matrix, 10.0, 10.0, MatrixOrderAppend); + expect(Ok, status); + status = GdipSetWorldTransform(graphics, matrix); + expect(Ok, status); + GdipDeleteMatrix(matrix); + + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 65 && rc.top == 65 && rc.right == 140 && rc.bottom == 140, + "expected 65,65-140,140, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + expectf(65.0, ptf[0].X); + expectf(65.0, ptf[0].Y); + expectf(140.0, ptf[1].X); + expectf(140.0, ptf[1].X); + + status = GdipCreateMatrix(&matrix); + expect(Ok, status); + status = GdipScaleMatrix(matrix, 0.25, 0.5, MatrixOrderAppend); + expect(Ok, status); + status = GdipSetWorldTransform(graphics, matrix); + expect(Ok, status); + GdipDeleteMatrix(matrix); + + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 300 && rc.top == 150 && rc.right == 600 && rc.bottom == 300, + "expected 300,150-600,300, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + expectf(300.0, ptf[0].X); + expectf(150.0, ptf[0].Y); + expectf(600.0, ptf[1].X); + expectf(300.0, ptf[1].Y); + + status = GdipSetPageScale(graphics, 2.0); + expect(Ok, status); + + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 150 && rc.top == 75 && rc.right == 300 && rc.bottom == 150) || + broken(rc.left == 300 && rc.top == 150 && rc.right == 600 && rc.bottom == 300) /* before Win7 */, + "expected 150,75-300,150, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok((rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200) || + broken(rc.left == 200 && rc.top == 200 && rc.right == 400 && rc.bottom == 400) /* before Win7 */, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 150.0) < 0.001) + { + expectf(150.0, ptf[0].X); + expectf(75.0, ptf[0].Y); + expectf(300.0, ptf[1].X); + expectf(150.0, ptf[1].Y); + } + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 300.0) < 0.001), "expected 300.0, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 150.0) < 0.001), "expected 150.0, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 600.0) < 0.001), "expected 600.0, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 300.0) < 0.001), "expected 300.0, got %f\n", ptf[1].Y); + } + + status = GdipCreateMatrix(&matrix); + expect(Ok, status); + status = GdipRotateMatrix(matrix, 45.0, MatrixOrderAppend); + expect(Ok, status); + status = GdipSetWorldTransform(graphics, matrix); + expect(Ok, status); + GdipDeleteMatrix(matrix); + + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == COMPLEXREGION, "expected COMPLEXREGION, got %d\n", ret); + ok((rc.left == 54 && rc.top == -26 && rc.right == 107 && rc.bottom == 27) || + /* rounding under Wine is slightly different */ + (rc.left == 53 && rc.top == -26 && rc.right == 106 && rc.bottom == 27) /* Wine */, + "expected 54,-26-107,27, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + ptf[2].X = 200.0; + ptf[2].Y = 100.0; + ptf[3].X = 100.0; + ptf[3].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 4); + expect(Ok, status); + expectf(53.033016, ptf[0].X); + expectf(0.0, ptf[0].Y); + expectf(106.066032, ptf[1].X); + expectf(0.0, ptf[1].Y); + expectf(79.549522, ptf[2].X); + expectf(-26.516510, ptf[2].Y); + expectf(79.549522, ptf[3].X); + expectf(26.516508, ptf[3].Y); + + status = GdipCreateMatrix(&matrix); + expect(Ok, status); + status = GdipRotateMatrix(matrix, -45.0, MatrixOrderAppend); + expect(Ok, status); + status = GdipSetWorldTransform(graphics, matrix); + expect(Ok, status); + GdipDeleteMatrix(matrix); + + status = GdipGetClip(graphics, region); + expect(Ok, status); + status = GdipGetRegionHRgn(region, NULL, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == COMPLEXREGION, "expected COMPLEXREGION, got %d\n", ret); + ok((rc.left == -26 && rc.top == 54 && rc.right == 27 && rc.bottom == 107) || + /* rounding under Wine is slightly different */ + (rc.left == -27 && rc.top == 54 && rc.right == 27 && rc.bottom == 106) /* Wine */, + "expected -26,54-27,107, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + status = GdipGetRegionHRgn(region, graphics, &hrgn); + expect(Ok, status); + ret = GetRgnBox(hrgn, &rc); + ok(ret == SIMPLEREGION, "expected SIMPLEREGION, got %d\n", ret); + ok(rc.left == 100 && rc.top == 100 && rc.right == 200 && rc.bottom == 200, + "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); + DeleteObject(hrgn); + + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + ptf[2].X = 200.0; + ptf[2].Y = 100.0; + ptf[3].X = 100.0; + ptf[3].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 4); + expect(Ok, status); + expectf(0.0, ptf[0].X); + expectf(53.033005, ptf[0].Y); + expectf(0.0, ptf[1].X); + expectf(106.066010, ptf[1].Y); + expectf(26.516491, ptf[2].X); + expectf(79.549507, ptf[2].Y); + expectf(-26.516520, ptf[3].X); + expectf(79.549500, ptf[3].Y); + + GdipDeleteRegion(region); + GdipDeleteGraphics(graphics); + DeleteDC(hdc); +} + START_TEST(graphics) { struct GdiplusStartupInput gdiplusStartupInput; @@ -4538,6 +5528,8 @@ GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); + test_clipping(); + test_clipping_2(); test_measured_extra_space(); test_measure_string(); test_font_height_scaling(); Modified: trunk/rostests/winetests/gdiplus/image.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdiplus/image.c…
============================================================================== --- trunk/rostests/winetests/gdiplus/image.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdiplus/image.c [iso-8859-1] Thu Sep 19 15:10:36 2013 @@ -2219,6 +2219,17 @@ expect(Ok, stat); ok(color_match(0xeeff40cc, color, 3), "expected 0xeeff40cc, got 0x%08x\n", color); + stat = GdipResetImageAttributes(imageattr, ColorAdjustTypeDefault); + expect(Ok, stat); + + stat = GdipDrawImageRectRectI(graphics, (GpImage*)bitmap1, 0,0,1,1, 0,0,1,1, + UnitPixel, imageattr, NULL, NULL); + expect(Ok, stat); + + stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); + expect(Ok, stat); + ok(color_match(0xff40ccee, color, 1), "Expected ff40ccee, got %.8x\n", color); + GdipDeleteGraphics(graphics); GdipDisposeImage((GpImage*)bitmap1); GdipDisposeImage((GpImage*)bitmap2); @@ -2280,6 +2291,17 @@ stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); expect(Ok, stat); ok(color_match(0xff20ffff, color, 1), "Expected ff20ffff, got %.8x\n", color); + + stat = GdipResetImageAttributes(imageattr, ColorAdjustTypeDefault); + expect(Ok, stat); + + stat = GdipDrawImageRectRectI(graphics, (GpImage*)bitmap1, 0,0,1,1, 0,0,1,1, + UnitPixel, imageattr, NULL, NULL); + expect(Ok, stat); + + stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); + expect(Ok, stat); + ok(color_match(0xff80ffff, color, 1), "Expected ff80ffff, got %.8x\n", color); GdipDeleteGraphics(graphics); GdipDisposeImage((GpImage*)bitmap1); @@ -2612,6 +2634,17 @@ expect(Ok, stat); ok(color_match(0xffff00ff, color, 1), "Expected ffff00ff, got %.8x\n", color); + stat = GdipResetImageAttributes(imageattr, ColorAdjustTypeDefault); + expect(Ok, stat); + + stat = GdipDrawImageRectRectI(graphics, (GpImage*)bitmap1, 0,0,1,1, 0,0,1,1, + UnitPixel, imageattr, NULL, NULL); + expect(Ok, stat); + + stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); + expect(Ok, stat); + ok(color_match(0xff00ff00, color, 1), "Expected ff00ff00, got %.8x\n", color); + GdipDeleteGraphics(graphics); GdipDisposeImage((GpImage*)bitmap1); GdipDisposeImage((GpImage*)bitmap2); @@ -2669,19 +2702,43 @@ stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); expect(Ok, stat); - ok(color_match(0x00000000, color, 1), "Expected ffff00ff, got %.8x\n", color); + ok(color_match(0x00000000, color, 1), "Expected 00000000, got %.8x\n", color); stat = GdipBitmapGetPixel(bitmap2, 0, 1, &color); expect(Ok, stat); - ok(color_match(0x00000000, color, 1), "Expected ffff00ff, got %.8x\n", color); + ok(color_match(0x00000000, color, 1), "Expected 00000000, got %.8x\n", color); stat = GdipBitmapGetPixel(bitmap2, 1, 0, &color); expect(Ok, stat); - ok(color_match(0x00000000, color, 1), "Expected ffff00ff, got %.8x\n", color); + ok(color_match(0x00000000, color, 1), "Expected 00000000, got %.8x\n", color); stat = GdipBitmapGetPixel(bitmap2, 1, 1, &color); expect(Ok, stat); - ok(color_match(0xffffffff, color, 1), "Expected ffff00ff, got %.8x\n", color); + ok(color_match(0xffffffff, color, 1), "Expected ffffffff, got %.8x\n", color); + + stat = GdipResetImageAttributes(imageattr, ColorAdjustTypeDefault); + expect(Ok, stat); + + stat = GdipDrawImageRectRectI(graphics, (GpImage*)bitmap1, 0,0,2,2, 0,0,2,2, + UnitPixel, imageattr, NULL, NULL); + expect(Ok, stat); + + stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); + expect(Ok, stat); + ok(color_match(0x20405060, color, 1), "Expected 20405060, got %.8x\n", color); + + stat = GdipBitmapGetPixel(bitmap2, 0, 1, &color); + expect(Ok, stat); + ok(color_match(0x40506070, color, 1), "Expected 40506070, got %.8x\n", color); + + stat = GdipBitmapGetPixel(bitmap2, 1, 0, &color); + expect(Ok, stat); + ok(color_match(0x60708090, color, 1), "Expected 60708090, got %.8x\n", color); + + stat = GdipBitmapGetPixel(bitmap2, 1, 1, &color); + expect(Ok, stat); + ok(color_match(0xffffffff, color, 1), "Expected ffffffff, got %.8x\n", color); + GdipDeleteGraphics(graphics); GdipDisposeImage((GpImage*)bitmap1); Modified: trunk/rostests/winetests/gdiplus/testlist.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdiplus/testlis…
============================================================================== --- trunk/rostests/winetests/gdiplus/testlist.c [iso-8859-1] (original) +++ trunk/rostests/winetests/gdiplus/testlist.c [iso-8859-1] Thu Sep 19 15:10:36 2013 @@ -1,7 +1,7 @@ /* Automatically generated file; DO NOT EDIT!! */ #define STANDALONE -#include "wine/test.h" +#include <wine/test.h> extern void func_brush(void); extern void func_customlinecap(void);
11 years, 1 month
1
0
0
0
[akhaldi] 60204: [GDIPLUS] * Sync with Wine 1.7.1.
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Sep 19 15:10:19 2013 New Revision: 60204 URL:
http://svn.reactos.org/svn/reactos?rev=60204&view=rev
Log: [GDIPLUS] * Sync with Wine 1.7.1. Modified: trunk/reactos/dll/win32/gdiplus/CMakeLists.txt trunk/reactos/dll/win32/gdiplus/customlinecap.c trunk/reactos/dll/win32/gdiplus/font.c trunk/reactos/dll/win32/gdiplus/gdiplus.c trunk/reactos/dll/win32/gdiplus/gdiplus.spec trunk/reactos/dll/win32/gdiplus/gdiplus_private.h trunk/reactos/dll/win32/gdiplus/graphics.c trunk/reactos/dll/win32/gdiplus/imageattributes.c trunk/reactos/dll/win32/gdiplus/metafile.c trunk/reactos/dll/win32/gdiplus/pen.c trunk/reactos/dll/win32/gdiplus/region.c trunk/reactos/include/psdk/gdiplusenums.h trunk/reactos/include/psdk/gdiplusflat.h trunk/reactos/media/doc/README.WINE Modified: trunk/reactos/dll/win32/gdiplus/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/CMakeLis…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/CMakeLists.txt [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -22,11 +22,10 @@ pen.c region.c stringformat.c - gdiplus.rc ${CMAKE_CURRENT_BINARY_DIR}/gdiplus_stubs.c ${CMAKE_CURRENT_BINARY_DIR}/gdiplus.def) -add_library(gdiplus SHARED ${SOURCE}) +add_library(gdiplus SHARED ${SOURCE} gdiplus.rc) set_module_type(gdiplus win32dll) target_link_libraries(gdiplus uuid wine) add_delay_importlibs(gdiplus windowscodecs) Modified: trunk/reactos/dll/win32/gdiplus/customlinecap.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/customli…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/customlinecap.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/customlinecap.c [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -221,17 +221,16 @@ return Ok; } -GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap* custom, - REAL width) -{ - static int calls; - +GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap* custom, REAL width) +{ TRACE("(%p,%0.2f)\n", custom, width); - if(!(calls++)) - FIXME("not implemented\n"); - - return NotImplemented; + if(!custom) + return InvalidParameter; + + custom->scale = width; + + return Ok; } GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap *customCap, GpLineCap *baseCap) Modified: trunk/reactos/dll/win32/gdiplus/font.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/font.c?r…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/font.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/font.c [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -1138,110 +1138,323 @@ return NotImplemented; } -/* Copied from msi/font.c */ - -typedef struct _tagTT_OFFSET_TABLE { - USHORT uMajorVersion; - USHORT uMinorVersion; - USHORT uNumOfTables; - USHORT uSearchRange; - USHORT uEntrySelector; - USHORT uRangeShift; -} TT_OFFSET_TABLE; - -typedef struct _tagTT_TABLE_DIRECTORY { - char szTag[4]; /* table name */ - ULONG uCheckSum; /* Check sum */ - ULONG uOffset; /* Offset from beginning of file */ - ULONG uLength; /* length of the table in bytes */ -} TT_TABLE_DIRECTORY; - -typedef struct _tagTT_NAME_TABLE_HEADER { - USHORT uFSelector; /* format selector. Always 0 */ - USHORT uNRCount; /* Name Records count */ - USHORT uStorageOffset; /* Offset for strings storage, - * from start of the table */ -} TT_NAME_TABLE_HEADER; +#define TT_PLATFORM_APPLE_UNICODE 0 +#define TT_PLATFORM_MACINTOSH 1 +#define TT_PLATFORM_MICROSOFT 3 + +#define TT_APPLE_ID_DEFAULT 0 +#define TT_APPLE_ID_ISO_10646 2 +#define TT_APPLE_ID_UNICODE_2_0 3 + +#define TT_MS_ID_SYMBOL_CS 0 +#define TT_MS_ID_UNICODE_CS 1 + +#define TT_MAC_ID_SIMPLIFIED_CHINESE 25 #define NAME_ID_FULL_FONT_NAME 4 -#define NAME_ID_VERSION 5 - -typedef struct _tagTT_NAME_RECORD { - USHORT uPlatformID; - USHORT uEncodingID; - USHORT uLanguageID; - USHORT uNameID; - USHORT uStringLength; - USHORT uStringOffset; /* from start of storage area */ -} TT_NAME_RECORD; - -#define SWAPWORD(x) MAKEWORD(HIBYTE(x), LOBYTE(x)) -#define SWAPLONG(x) MAKELONG(SWAPWORD(HIWORD(x)), SWAPWORD(LOWORD(x))) - -/* - * Code based off of code located here - *
http://www.codeproject.com/gdi/fontnamefromfile.asp
- */ -static WCHAR *load_ttf_name_id( const char *mem, DWORD_PTR size, DWORD id, WCHAR *ret, DWORD len ) -{ - const TT_TABLE_DIRECTORY *tblDir; - TT_OFFSET_TABLE ttOffsetTable; - TT_NAME_TABLE_HEADER ttNTHeader; - TT_NAME_RECORD ttRecord; - DWORD ofs, pos; - int i; - - if (sizeof(TT_OFFSET_TABLE) > size) + +typedef struct { + USHORT major_version; + USHORT minor_version; + USHORT tables_no; + USHORT search_range; + USHORT entry_selector; + USHORT range_shift; +} tt_header; + +typedef struct { + char tag[4]; /* table name */ + ULONG check_sum; /* Check sum */ + ULONG offset; /* Offset from beginning of file */ + ULONG length; /* length of the table in bytes */ +} tt_table_directory; + +typedef struct { + USHORT format; /* format selector. Always 0 */ + USHORT count; /* Name Records count */ + USHORT string_offset; /* Offset for strings storage, * from start of the table */ +} tt_name_table; + +typedef struct { + USHORT platform_id; + USHORT encoding_id; + USHORT language_id; + USHORT name_id; + USHORT length; + USHORT offset; /* from start of storage area */ +} tt_name_record; + +/* Copied from gdi32/freetype.c */ + +static const LANGID mac_langid_table[] = +{ + MAKELANGID(LANG_ENGLISH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ENGLISH */ + MAKELANGID(LANG_FRENCH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_FRENCH */ + MAKELANGID(LANG_GERMAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_GERMAN */ + MAKELANGID(LANG_ITALIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ITALIAN */ + MAKELANGID(LANG_DUTCH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_DUTCH */ + MAKELANGID(LANG_SWEDISH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SWEDISH */ + MAKELANGID(LANG_SPANISH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SPANISH */ + MAKELANGID(LANG_DANISH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_DANISH */ + MAKELANGID(LANG_PORTUGUESE,SUBLANG_DEFAULT), /* TT_MAC_LANGID_PORTUGUESE */ + MAKELANGID(LANG_NORWEGIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_NORWEGIAN */ + MAKELANGID(LANG_HEBREW,SUBLANG_DEFAULT), /* TT_MAC_LANGID_HEBREW */ + MAKELANGID(LANG_JAPANESE,SUBLANG_DEFAULT), /* TT_MAC_LANGID_JAPANESE */ + MAKELANGID(LANG_ARABIC,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ARABIC */ + MAKELANGID(LANG_FINNISH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_FINNISH */ + MAKELANGID(LANG_GREEK,SUBLANG_DEFAULT), /* TT_MAC_LANGID_GREEK */ + MAKELANGID(LANG_ICELANDIC,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ICELANDIC */ + MAKELANGID(LANG_MALTESE,SUBLANG_DEFAULT), /* TT_MAC_LANGID_MALTESE */ + MAKELANGID(LANG_TURKISH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_TURKISH */ + MAKELANGID(LANG_CROATIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_CROATIAN */ + MAKELANGID(LANG_CHINESE_TRADITIONAL,SUBLANG_DEFAULT), /* TT_MAC_LANGID_CHINESE_TRADITIONAL */ + MAKELANGID(LANG_URDU,SUBLANG_DEFAULT), /* TT_MAC_LANGID_URDU */ + MAKELANGID(LANG_HINDI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_HINDI */ + MAKELANGID(LANG_THAI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_THAI */ + MAKELANGID(LANG_KOREAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_KOREAN */ + MAKELANGID(LANG_LITHUANIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_LITHUANIAN */ + MAKELANGID(LANG_POLISH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_POLISH */ + MAKELANGID(LANG_HUNGARIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_HUNGARIAN */ + MAKELANGID(LANG_ESTONIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ESTONIAN */ + MAKELANGID(LANG_LATVIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_LETTISH */ + MAKELANGID(LANG_SAMI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SAAMISK */ + MAKELANGID(LANG_FAEROESE,SUBLANG_DEFAULT), /* TT_MAC_LANGID_FAEROESE */ + MAKELANGID(LANG_FARSI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_FARSI */ + MAKELANGID(LANG_RUSSIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_RUSSIAN */ + MAKELANGID(LANG_CHINESE_SIMPLIFIED,SUBLANG_DEFAULT), /* TT_MAC_LANGID_CHINESE_SIMPLIFIED */ + MAKELANGID(LANG_DUTCH,SUBLANG_DUTCH_BELGIAN), /* TT_MAC_LANGID_FLEMISH */ + MAKELANGID(LANG_IRISH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_IRISH */ + MAKELANGID(LANG_ALBANIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ALBANIAN */ + MAKELANGID(LANG_ROMANIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ROMANIAN */ + MAKELANGID(LANG_CZECH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_CZECH */ + MAKELANGID(LANG_SLOVAK,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SLOVAK */ + MAKELANGID(LANG_SLOVENIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SLOVENIAN */ + 0, /* TT_MAC_LANGID_YIDDISH */ + MAKELANGID(LANG_SERBIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SERBIAN */ + MAKELANGID(LANG_MACEDONIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_MACEDONIAN */ + MAKELANGID(LANG_BULGARIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_BULGARIAN */ + MAKELANGID(LANG_UKRAINIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_UKRAINIAN */ + MAKELANGID(LANG_BELARUSIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_BYELORUSSIAN */ + MAKELANGID(LANG_UZBEK,SUBLANG_DEFAULT), /* TT_MAC_LANGID_UZBEK */ + MAKELANGID(LANG_KAZAK,SUBLANG_DEFAULT), /* TT_MAC_LANGID_KAZAKH */ + MAKELANGID(LANG_AZERI,SUBLANG_AZERI_CYRILLIC), /* TT_MAC_LANGID_AZERBAIJANI */ + 0, /* TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT */ + MAKELANGID(LANG_ARMENIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ARMENIAN */ + MAKELANGID(LANG_GEORGIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_GEORGIAN */ + 0, /* TT_MAC_LANGID_MOLDAVIAN */ + MAKELANGID(LANG_KYRGYZ,SUBLANG_DEFAULT), /* TT_MAC_LANGID_KIRGHIZ */ + MAKELANGID(LANG_TAJIK,SUBLANG_DEFAULT), /* TT_MAC_LANGID_TAJIKI */ + MAKELANGID(LANG_TURKMEN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_TURKMEN */ + MAKELANGID(LANG_MONGOLIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_MONGOLIAN */ + MAKELANGID(LANG_MONGOLIAN,SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA), /* TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT */ + MAKELANGID(LANG_PASHTO,SUBLANG_DEFAULT), /* TT_MAC_LANGID_PASHTO */ + 0, /* TT_MAC_LANGID_KURDISH */ + MAKELANGID(LANG_KASHMIRI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_KASHMIRI */ + MAKELANGID(LANG_SINDHI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SINDHI */ + MAKELANGID(LANG_TIBETAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_TIBETAN */ + MAKELANGID(LANG_NEPALI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_NEPALI */ + MAKELANGID(LANG_SANSKRIT,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SANSKRIT */ + MAKELANGID(LANG_MARATHI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_MARATHI */ + MAKELANGID(LANG_BENGALI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_BENGALI */ + MAKELANGID(LANG_ASSAMESE,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ASSAMESE */ + MAKELANGID(LANG_GUJARATI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_GUJARATI */ + MAKELANGID(LANG_PUNJABI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_PUNJABI */ + MAKELANGID(LANG_ORIYA,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ORIYA */ + MAKELANGID(LANG_MALAYALAM,SUBLANG_DEFAULT), /* TT_MAC_LANGID_MALAYALAM */ + MAKELANGID(LANG_KANNADA,SUBLANG_DEFAULT), /* TT_MAC_LANGID_KANNADA */ + MAKELANGID(LANG_TAMIL,SUBLANG_DEFAULT), /* TT_MAC_LANGID_TAMIL */ + MAKELANGID(LANG_TELUGU,SUBLANG_DEFAULT), /* TT_MAC_LANGID_TELUGU */ + MAKELANGID(LANG_SINHALESE,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SINHALESE */ + 0, /* TT_MAC_LANGID_BURMESE */ + MAKELANGID(LANG_KHMER,SUBLANG_DEFAULT), /* TT_MAC_LANGID_KHMER */ + MAKELANGID(LANG_LAO,SUBLANG_DEFAULT), /* TT_MAC_LANGID_LAO */ + MAKELANGID(LANG_VIETNAMESE,SUBLANG_DEFAULT), /* TT_MAC_LANGID_VIETNAMESE */ + MAKELANGID(LANG_INDONESIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_INDONESIAN */ + 0, /* TT_MAC_LANGID_TAGALOG */ + MAKELANGID(LANG_MALAY,SUBLANG_DEFAULT), /* TT_MAC_LANGID_MALAY_ROMAN_SCRIPT */ + 0, /* TT_MAC_LANGID_MALAY_ARABIC_SCRIPT */ + MAKELANGID(LANG_AMHARIC,SUBLANG_DEFAULT), /* TT_MAC_LANGID_AMHARIC */ + MAKELANGID(LANG_TIGRIGNA,SUBLANG_DEFAULT), /* TT_MAC_LANGID_TIGRINYA */ + 0, /* TT_MAC_LANGID_GALLA */ + 0, /* TT_MAC_LANGID_SOMALI */ + MAKELANGID(LANG_SWAHILI,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SWAHILI */ + 0, /* TT_MAC_LANGID_RUANDA */ + 0, /* TT_MAC_LANGID_RUNDI */ + 0, /* TT_MAC_LANGID_CHEWA */ + MAKELANGID(LANG_MALAGASY,SUBLANG_DEFAULT), /* TT_MAC_LANGID_MALAGASY */ + MAKELANGID(LANG_ESPERANTO,SUBLANG_DEFAULT), /* TT_MAC_LANGID_ESPERANTO */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 95-111 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 112-127 */ + MAKELANGID(LANG_WELSH,SUBLANG_DEFAULT), /* TT_MAC_LANGID_WELSH */ + MAKELANGID(LANG_BASQUE,SUBLANG_DEFAULT), /* TT_MAC_LANGID_BASQUE */ + MAKELANGID(LANG_CATALAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_CATALAN */ + 0, /* TT_MAC_LANGID_LATIN */ + MAKELANGID(LANG_QUECHUA,SUBLANG_DEFAULT), /* TT_MAC_LANGID_QUECHUA */ + 0, /* TT_MAC_LANGID_GUARANI */ + 0, /* TT_MAC_LANGID_AYMARA */ + MAKELANGID(LANG_TATAR,SUBLANG_DEFAULT), /* TT_MAC_LANGID_TATAR */ + MAKELANGID(LANG_UIGHUR,SUBLANG_DEFAULT), /* TT_MAC_LANGID_UIGHUR */ + 0, /* TT_MAC_LANGID_DZONGKHA */ + 0, /* TT_MAC_LANGID_JAVANESE */ + 0, /* TT_MAC_LANGID_SUNDANESE */ + MAKELANGID(LANG_GALICIAN,SUBLANG_DEFAULT), /* TT_MAC_LANGID_GALICIAN */ + MAKELANGID(LANG_AFRIKAANS,SUBLANG_DEFAULT), /* TT_MAC_LANGID_AFRIKAANS */ + MAKELANGID(LANG_BRETON,SUBLANG_DEFAULT), /* TT_MAC_LANGID_BRETON */ + MAKELANGID(LANG_INUKTITUT,SUBLANG_DEFAULT), /* TT_MAC_LANGID_INUKTITUT */ + MAKELANGID(LANG_SCOTTISH_GAELIC,SUBLANG_DEFAULT), /* TT_MAC_LANGID_SCOTTISH_GAELIC */ + MAKELANGID(LANG_MANX_GAELIC,SUBLANG_DEFAULT), /* TT_MAC_LANGID_MANX_GAELIC */ + MAKELANGID(LANG_IRISH,SUBLANG_IRISH_IRELAND), /* TT_MAC_LANGID_IRISH_GAELIC */ + 0, /* TT_MAC_LANGID_TONGAN */ + 0, /* TT_MAC_LANGID_GREEK_POLYTONIC */ + MAKELANGID(LANG_GREENLANDIC,SUBLANG_DEFAULT), /* TT_MAC_LANGID_GREELANDIC */ + MAKELANGID(LANG_AZERI,SUBLANG_AZERI_LATIN), /* TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT */ +}; + +static inline WORD get_mac_code_page( const tt_name_record *name ) +{ + WORD encoding_id = GET_BE_WORD(name->encoding_id); + if (encoding_id == TT_MAC_ID_SIMPLIFIED_CHINESE) return 10008; /* special case */ + return 10000 + encoding_id; +} + +static int match_name_table_language( const tt_name_record *name, LANGID lang ) +{ + LANGID name_lang; + + switch (GET_BE_WORD(name->platform_id)) + { + case TT_PLATFORM_MICROSOFT: + switch (GET_BE_WORD(name->encoding_id)) + { + case TT_MS_ID_UNICODE_CS: + case TT_MS_ID_SYMBOL_CS: + name_lang = GET_BE_WORD(name->language_id); + break; + default: + return 0; + } + break; + case TT_PLATFORM_MACINTOSH: + if (!IsValidCodePage( get_mac_code_page( name ))) return 0; + name_lang = GET_BE_WORD(name->language_id); + if (name_lang >= sizeof(mac_langid_table)/sizeof(mac_langid_table[0])) return 0; + name_lang = mac_langid_table[name_lang]; + break; + case TT_PLATFORM_APPLE_UNICODE: + switch (GET_BE_WORD(name->encoding_id)) + { + case TT_APPLE_ID_DEFAULT: + case TT_APPLE_ID_ISO_10646: + case TT_APPLE_ID_UNICODE_2_0: + name_lang = GET_BE_WORD(name->language_id); + if (name_lang >= sizeof(mac_langid_table)/sizeof(mac_langid_table[0])) return 0; + name_lang = mac_langid_table[name_lang]; + break; + default: + return 0; + } + break; + default: + return 0; + } + if (name_lang == lang) return 3; + if (PRIMARYLANGID( name_lang ) == PRIMARYLANGID( lang )) return 2; + if (name_lang == MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT )) return 1; + return 0; +} + +static WCHAR *copy_name_table_string( const tt_name_record *name, const BYTE *data, WCHAR *ret, DWORD len ) +{ + WORD name_len = GET_BE_WORD(name->length); + WORD codepage; + + switch (GET_BE_WORD(name->platform_id)) + { + case TT_PLATFORM_APPLE_UNICODE: + case TT_PLATFORM_MICROSOFT: + if (name_len >= len*sizeof(WCHAR)) + return NULL; + for (len = 0; len < name_len / 2; len++) + ret[len] = (data[len * 2] << 8) | data[len * 2 + 1]; + ret[len] = 0; + return ret; + case TT_PLATFORM_MACINTOSH: + codepage = get_mac_code_page( name ); + len = MultiByteToWideChar( codepage, 0, (char *)data, name_len, ret, len-1 ); + if (!len) + return NULL; + ret[len] = 0; + return ret; + } + return NULL; +} + +static WCHAR *load_ttf_name_id( const BYTE *mem, DWORD_PTR size, DWORD id, WCHAR *ret, DWORD len ) +{ + LANGID lang = GetSystemDefaultLangID(); + const tt_header *header; + const tt_name_table *name_table; + const tt_name_record *name_record; + DWORD pos, ofs, count; + int i, res, best_lang = 0, best_index = -1; + + if (sizeof(tt_header) > size) return NULL; - ttOffsetTable = *(TT_OFFSET_TABLE*)mem; - ttOffsetTable.uNumOfTables = SWAPWORD(ttOffsetTable.uNumOfTables); - ttOffsetTable.uMajorVersion = SWAPWORD(ttOffsetTable.uMajorVersion); - ttOffsetTable.uMinorVersion = SWAPWORD(ttOffsetTable.uMinorVersion); - - if (ttOffsetTable.uMajorVersion != 1 || ttOffsetTable.uMinorVersion != 0) + header = (const tt_header*)mem; + count = GET_BE_WORD(header->tables_no); + + if (GET_BE_WORD(header->major_version) != 1 || GET_BE_WORD(header->minor_version) != 0) return NULL; - pos = sizeof(ttOffsetTable); - for (i = 0; i < ttOffsetTable.uNumOfTables; i++) - { - tblDir = (const TT_TABLE_DIRECTORY*)&mem[pos]; - pos += sizeof(*tblDir); - if (memcmp(tblDir->szTag,"name",4)==0) + pos = sizeof(*header); + for (i = 0; i < count; i++) + { + const tt_table_directory *table_directory = (const tt_table_directory*)&mem[pos]; + pos += sizeof(*table_directory); + if (memcmp(table_directory->tag, "name", 4) == 0) { - ofs = SWAPLONG(tblDir->uOffset); + ofs = GET_BE_DWORD(table_directory->offset); break; } } - if (i >= ttOffsetTable.uNumOfTables) + if (i >= count) return NULL; - pos = ofs + sizeof(ttNTHeader); + if (ofs >= size) + return NULL; + pos = ofs + sizeof(*name_table); if (pos > size) return NULL; - ttNTHeader = *(TT_NAME_TABLE_HEADER*)&mem[ofs]; - ttNTHeader.uNRCount = SWAPWORD(ttNTHeader.uNRCount); - ttNTHeader.uStorageOffset = SWAPWORD(ttNTHeader.uStorageOffset); - for(i=0; i<ttNTHeader.uNRCount; i++) - { - ttRecord = *(TT_NAME_RECORD*)&mem[pos]; - pos += sizeof(ttRecord); + name_table = (const tt_name_table*)&mem[ofs]; + count = GET_BE_WORD(name_table->count); + if (GET_BE_WORD(name_table->string_offset) >= size - ofs) return NULL; + ofs += GET_BE_WORD(name_table->string_offset); + for (i=0; i<count; i++) + { + name_record = (const tt_name_record*)&mem[pos]; + pos += sizeof(*name_record); if (pos > size) return NULL; - ttRecord.uNameID = SWAPWORD(ttRecord.uNameID); - if (ttRecord.uNameID == id) + if (GET_BE_WORD(name_record->name_id) != id) continue; + if (GET_BE_WORD(name_record->offset) >= size - ofs) return NULL; + if (GET_BE_WORD(name_record->length) > size - ofs - GET_BE_WORD(name_record->offset)) return NULL; + + res = match_name_table_language( name_record, lang ); + if (res > best_lang) { - const char *buf; - - ttRecord.uStringLength = SWAPWORD(ttRecord.uStringLength); - ttRecord.uStringOffset = SWAPWORD(ttRecord.uStringOffset); - if (ofs + ttRecord.uStringOffset + ttNTHeader.uStorageOffset + ttRecord.uStringLength > size) - return NULL; - buf = mem + ofs + ttRecord.uStringOffset + ttNTHeader.uStorageOffset; - len = MultiByteToWideChar(CP_ACP, 0, buf, ttRecord.uStringLength, ret, len-1); - ret[len] = 0; - return ret; + best_lang = res; + best_index = i; } + } + + if (best_lang) + { + name_record = (const tt_name_record*)(name_table + 1) + best_index; + ret = copy_name_table_string( name_record, mem+ofs+GET_BE_WORD(name_record->offset), ret, len ); + TRACE( "name %u found platform %u lang %04x %s\n", GET_BE_WORD(name_record->name_id), + GET_BE_WORD(name_record->platform_id), GET_BE_WORD(name_record->language_id), debugstr_w( ret )); + return ret; } return NULL; } Modified: trunk/reactos/dll/win32/gdiplus/gdiplus.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/gdiplus.…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/gdiplus.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/gdiplus.c [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -66,6 +66,7 @@ break; case DLL_PROCESS_DETACH: + if (reserved) break; free_installed_fonts(); break; } Modified: trunk/reactos/dll/win32/gdiplus/gdiplus.spec URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/gdiplus.…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/gdiplus.spec [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/gdiplus.spec [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -190,12 +190,12 @@ 190 stdcall GdipDrawString(ptr wstr long ptr ptr ptr ptr) 191 stdcall GdipEmfToWmfBits(ptr long ptr long long) 192 stdcall GdipEndContainer(ptr ptr) -193 stub GdipEnumerateMetafileDestPoint -194 stub GdipEnumerateMetafileDestPointI +193 stdcall GdipEnumerateMetafileDestPoint(ptr ptr ptr ptr ptr ptr) +194 stdcall GdipEnumerateMetafileDestPointI(ptr ptr ptr ptr ptr ptr) 195 stub GdipEnumerateMetafileDestPoints 196 stub GdipEnumerateMetafileDestPointsI -197 stub GdipEnumerateMetafileDestRect -198 stub GdipEnumerateMetafileDestRectI +197 stdcall GdipEnumerateMetafileDestRect(ptr ptr ptr ptr ptr ptr) +198 stdcall GdipEnumerateMetafileDestRectI(ptr ptr ptr ptr ptr ptr) 199 stub GdipEnumerateMetafileSrcRectDestPoint 200 stub GdipEnumerateMetafileSrcRectDestPointI 201 stdcall GdipEnumerateMetafileSrcRectDestPoints(ptr ptr ptr long ptr long ptr ptr ptr) @@ -455,7 +455,7 @@ 455 stdcall GdipReleaseDC(ptr ptr) 456 stdcall GdipRemovePropertyItem(ptr long) 457 stdcall GdipResetClip(ptr) -458 stub GdipResetImageAttributes +458 stdcall GdipResetImageAttributes(ptr long) 459 stdcall GdipResetLineTransform(ptr) 460 stdcall GdipResetPageTransform(ptr) 461 stdcall GdipResetPath(ptr) Modified: trunk/reactos/dll/win32/gdiplus/gdiplus_private.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/gdiplus_…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/gdiplus_private.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/gdiplus_private.h [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -170,7 +170,7 @@ REAL xres, yres; GpMatrix worldtrans; /* world transform */ BOOL busy; /* hdc handle obtained by GdipGetDC */ - GpRegion *clip; + GpRegion *clip; /* in device coords */ UINT textcontrast; /* not used yet. get/set only */ struct list containers; GraphicsContainer contid; /* last-issued container ID */ Modified: trunk/reactos/dll/win32/gdiplus/graphics.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/graphics…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/graphics.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/graphics.c [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -67,6 +67,9 @@ GDIPCONST GpFont *font, GDIPCONST GpStringFormat *format, GDIPCONST GpBrush *brush, GDIPCONST PointF *positions, INT flags, GDIPCONST GpMatrix *matrix); + +static GpStatus get_graphics_transform(GpGraphics *graphics, GpCoordinateSpace dst_space, + GpCoordinateSpace src_space, GpMatrix *matrix); /* Converts from gdiplus path point type to gdi path point type. */ static BYTE convert_path_point_type(BYTE type) @@ -300,9 +303,6 @@ RestoreDC(graphics->hdc, state); } -static GpStatus get_graphics_transform(GpGraphics *graphics, GpCoordinateSpace dst_space, - GpCoordinateSpace src_space, GpMatrix *matrix); - /* This helper applies all the changes that the points listed in ptf need in * order to be drawn on the device context. In the end, this should include at * least: @@ -366,6 +366,7 @@ static GpStatus get_clip_hrgn(GpGraphics *graphics, HRGN *hrgn) { + /* clipping region is in device coords */ return GdipGetRegionHRgn(graphics->clip, NULL, hrgn); } @@ -2116,7 +2117,7 @@ (pt[2].X-pt[0].X)*(pt[2].X-pt[0].X)); get_log_fontW(font, graphics, &lfw); - lfw.lfHeight = gdip_round(font_height * rel_height); + lfw.lfHeight = -gdip_round(font_height * rel_height); unscaled_font = CreateFontIndirectW(&lfw); SelectObject(hdc, unscaled_font); @@ -4063,6 +4064,9 @@ */ GpStatus WINGDIPAPI GdipGetClipBounds(GpGraphics *graphics, GpRectF *rect) { + GpStatus status; + GpRegion *clip; + TRACE("(%p, %p)\n", graphics, rect); if(!graphics) @@ -4071,7 +4075,15 @@ if(graphics->busy) return ObjectBusy; - return GdipGetRegionBounds(graphics->clip, graphics, rect); + status = GdipCreateRegion(&clip); + if (status != Ok) return status; + + status = GdipGetClip(graphics, clip); + if (status == Ok) + status = GdipGetRegionBounds(clip, graphics, rect); + + GdipDeleteRegion(clip); + return status; } /***************************************************************************** @@ -5005,7 +5017,8 @@ if (scaled_rect.Height >= 1 << 23) scaled_rect.Height = 1 << 23; if (!(format_flags & StringFormatFlagsNoClip) && - scaled_rect.Width != 1 << 23 && scaled_rect.Height != 1 << 23) + scaled_rect.Width != 1 << 23 && scaled_rect.Height != 1 << 23 && + rect->Width > 0.0 && rect->Height > 0.0) { /* FIXME: If only the width or only the height is 0, we should probably still clip */ rgn = CreatePolygonRgn(corners, 4, ALTERNATE); @@ -5414,11 +5427,15 @@ if(!graphics) return InvalidParameter; + if(graphics->busy) + return ObjectBusy; + + /* hrgn is already in device units */ status = GdipCreateRegionHrgn(hrgn, ®ion); if(status != Ok) return status; - status = GdipSetClipRegion(graphics, region, mode); + status = GdipCombineRegionRegion(graphics->clip, region, mode); GdipDeleteRegion(region); return status; @@ -5426,6 +5443,9 @@ GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics *graphics, GpPath *path, CombineMode mode) { + GpStatus status; + GpPath *clip_path; + TRACE("(%p, %p, %d)\n", graphics, path, mode); if(!graphics) @@ -5434,14 +5454,29 @@ if(graphics->busy) return ObjectBusy; - return GdipCombineRegionPath(graphics->clip, path, mode); + status = GdipClonePath(path, &clip_path); + if (status == Ok) + { + GpMatrix world_to_device; + + get_graphics_transform(graphics, CoordinateSpaceDevice, + CoordinateSpaceWorld, &world_to_device); + status = GdipTransformPath(clip_path, &world_to_device); + if (status == Ok) + GdipCombineRegionPath(graphics->clip, clip_path, mode); + + GdipDeletePath(clip_path); + } + return status; } GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics *graphics, REAL x, REAL y, REAL width, REAL height, CombineMode mode) { + GpStatus status; GpRectF rect; + GpRegion *region; TRACE("(%p, %.2f, %.2f, %.2f, %.2f, %d)\n", graphics, x, y, width, height, mode); @@ -5455,8 +5490,19 @@ rect.Y = y; rect.Width = width; rect.Height = height; - - return GdipCombineRegionRect(graphics->clip, &rect, mode); + status = GdipCreateRegionRect(&rect, ®ion); + if (status == Ok) + { + GpMatrix world_to_device; + + get_graphics_transform(graphics, CoordinateSpaceDevice, CoordinateSpaceWorld, &world_to_device); + status = GdipTransformRegion(region, &world_to_device); + if (status == Ok) + status = GdipCombineRegionRegion(graphics->clip, region, mode); + + GdipDeleteRegion(region); + } + return status; } GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics *graphics, INT x, INT y, @@ -5477,6 +5523,9 @@ GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics *graphics, GpRegion *region, CombineMode mode) { + GpStatus status; + GpRegion *clip; + TRACE("(%p, %p, %d)\n", graphics, region, mode); if(!graphics || !region) @@ -5485,7 +5534,19 @@ if(graphics->busy) return ObjectBusy; - return GdipCombineRegionRegion(graphics->clip, region, mode); + status = GdipCloneRegion(region, &clip); + if (status == Ok) + { + GpMatrix world_to_device; + + get_graphics_transform(graphics, CoordinateSpaceDevice, CoordinateSpaceWorld, &world_to_device); + status = GdipTransformRegion(clip, &world_to_device); + if (status == Ok) + status = GdipCombineRegionRegion(graphics->clip, clip, mode); + + GdipDeleteRegion(clip); + } + return status; } GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile *metafile, @@ -5743,6 +5804,7 @@ { GpRegion *clip; GpStatus status; + GpMatrix device_to_world; TRACE("(%p, %p)\n", graphics, region); @@ -5754,6 +5816,14 @@ if((status = GdipCloneRegion(graphics->clip, &clip)) != Ok) return status; + + get_graphics_transform(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, &device_to_world); + status = GdipTransformRegion(clip, &device_to_world); + if (status != Ok) + { + GdipDeleteRegion(clip); + return status; + } /* free everything except root node and header */ delete_element(®ion->node); Modified: trunk/reactos/dll/win32/gdiplus/imageattributes.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/imageatt…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/imageattributes.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/imageattributes.c [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -270,3 +270,20 @@ return NotImplemented; } + +GpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes *imageAttr, + ColorAdjustType type) +{ + TRACE("(%p,%u)\n", imageAttr, type); + + if(!imageAttr || type >= ColorAdjustTypeCount) + return InvalidParameter; + + memset(&imageAttr->colorkeys[type], 0, sizeof(imageAttr->colorkeys[type])); + memset(&imageAttr->colormatrices[type], 0, sizeof(imageAttr->colormatrices[type])); + memset(&imageAttr->colorremaptables[type], 0, sizeof(imageAttr->colorremaptables[type])); + memset(&imageAttr->gamma_enabled[type], 0, sizeof(imageAttr->gamma_enabled[type])); + memset(&imageAttr->gamma[type], 0, sizeof(imageAttr->gamma[type])); + + return Ok; +} Modified: trunk/reactos/dll/win32/gdiplus/metafile.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/metafile…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/metafile.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/metafile.c [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -551,6 +551,69 @@ return stat; } +GpStatus WINGDIPAPI GdipEnumerateMetafileDestRect(GpGraphics *graphics, + GDIPCONST GpMetafile *metafile, GDIPCONST GpRectF *dest, + EnumerateMetafileProc callback, VOID *cb_data, GDIPCONST GpImageAttributes *attrs) +{ + GpPointF points[3]; + + if (!graphics || !metafile || !dest) return InvalidParameter; + + points[0].X = points[2].X = dest->X; + points[0].Y = points[1].Y = dest->Y; + points[1].X = dest->X + dest->Width; + points[2].Y = dest->Y + dest->Height; + + return GdipEnumerateMetafileSrcRectDestPoints(graphics, metafile, points, 3, + &metafile->bounds, metafile->unit, callback, cb_data, attrs); +} + +GpStatus WINGDIPAPI GdipEnumerateMetafileDestRectI(GpGraphics *graphics, + GDIPCONST GpMetafile *metafile, GDIPCONST GpRect *dest, + EnumerateMetafileProc callback, VOID *cb_data, GDIPCONST GpImageAttributes *attrs) +{ + GpRectF destf; + + if (!graphics || !metafile || !dest) return InvalidParameter; + + destf.X = dest->X; + destf.Y = dest->Y; + destf.Width = dest->Width; + destf.Height = dest->Height; + + return GdipEnumerateMetafileDestRect(graphics, metafile, &destf, callback, cb_data, attrs); +} + +GpStatus WINGDIPAPI GdipEnumerateMetafileDestPoint(GpGraphics *graphics, + GDIPCONST GpMetafile *metafile, GDIPCONST GpPointF *dest, + EnumerateMetafileProc callback, VOID *cb_data, GDIPCONST GpImageAttributes *attrs) +{ + GpRectF destf; + + if (!graphics || !metafile || !dest) return InvalidParameter; + + destf.X = dest->X; + destf.Y = dest->Y; + destf.Width = units_to_pixels(metafile->bounds.Width, metafile->unit, metafile->image.xres); + destf.Height = units_to_pixels(metafile->bounds.Height, metafile->unit, metafile->image.yres); + + return GdipEnumerateMetafileDestRect(graphics, metafile, &destf, callback, cb_data, attrs); +} + +GpStatus WINGDIPAPI GdipEnumerateMetafileDestPointI(GpGraphics *graphics, + GDIPCONST GpMetafile *metafile, GDIPCONST GpPoint *dest, + EnumerateMetafileProc callback, VOID *cb_data, GDIPCONST GpImageAttributes *attrs) +{ + GpPointF ptf; + + if (!graphics || !metafile || !dest) return InvalidParameter; + + ptf.X = dest->X; + ptf.Y = dest->Y; + + return GdipEnumerateMetafileDestPoint(graphics, metafile, &ptf, callback, cb_data, attrs); +} + static int CALLBACK get_metafile_type_proc(HDC hDC, HANDLETABLE *lpHTable, const ENHMETARECORD *lpEMFR, int nObj, LPARAM lpData) { Modified: trunk/reactos/dll/win32/gdiplus/pen.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/pen.c?re…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/pen.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/pen.c [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -87,6 +87,8 @@ GpStatus WINGDIPAPI GdipClonePen(GpPen *pen, GpPen **clonepen) { + GpStatus stat; + TRACE("(%p, %p)\n", pen, clonepen); if(!pen || !clonepen) @@ -97,9 +99,34 @@ **clonepen = *pen; - GdipCloneCustomLineCap(pen->customstart, &(*clonepen)->customstart); - GdipCloneCustomLineCap(pen->customend, &(*clonepen)->customend); - GdipCloneBrush(pen->brush, &(*clonepen)->brush); + (*clonepen)->customstart = NULL; + (*clonepen)->customend = NULL; + (*clonepen)->brush = NULL; + (*clonepen)->dashes = NULL; + + stat = GdipCloneBrush(pen->brush, &(*clonepen)->brush); + + if (stat == Ok && pen->customstart) + stat = GdipCloneCustomLineCap(pen->customstart, &(*clonepen)->customstart); + + if (stat == Ok && pen->customend) + stat = GdipCloneCustomLineCap(pen->customend, &(*clonepen)->customend); + + if (stat == Ok && pen->dashes) + { + (*clonepen)->dashes = GdipAlloc(pen->numdashes * sizeof(REAL)); + if ((*clonepen)->dashes) + memcpy((*clonepen)->dashes, pen->dashes, pen->numdashes * sizeof(REAL)); + else + stat = OutOfMemory; + } + + if (stat != Ok) + { + GdipDeletePen(*clonepen); + *clonepen = NULL; + return stat; + } TRACE("<-- %p\n", *clonepen); Modified: trunk/reactos/dll/win32/gdiplus/region.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdiplus/region.c…
============================================================================== --- trunk/reactos/dll/win32/gdiplus/region.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdiplus/region.c [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -716,7 +716,7 @@ status = GdipGetRegionBounds(region, graphics, &rectf); if(status == Ok){ rect->X = gdip_round(rectf.X); - rect->Y = gdip_round(rectf.X); + rect->Y = gdip_round(rectf.Y); rect->Width = gdip_round(rectf.Width); rect->Height = gdip_round(rectf.Height); } Modified: trunk/reactos/include/psdk/gdiplusenums.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/gdiplusenums.…
============================================================================== --- trunk/reactos/include/psdk/gdiplusenums.h [iso-8859-1] (original) +++ trunk/reactos/include/psdk/gdiplusenums.h [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -704,6 +704,8 @@ EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader }; +#define FlatnessDefault 0.25f + #ifndef __cplusplus typedef enum Unit Unit; Modified: trunk/reactos/include/psdk/gdiplusflat.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/gdiplusflat.h…
============================================================================== --- trunk/reactos/include/psdk/gdiplusflat.h [iso-8859-1] (original) +++ trunk/reactos/include/psdk/gdiplusflat.h [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -206,6 +206,14 @@ GpStatus WINGDIPAPI GdipDrawString(GpGraphics*,GDIPCONST WCHAR*,INT, GDIPCONST GpFont*,GDIPCONST RectF*, GDIPCONST GpStringFormat*, GDIPCONST GpBrush*); +GpStatus WINGDIPAPI GdipEnumerateMetafileDestPoint(GpGraphics*,GDIPCONST GpMetafile*, + GDIPCONST GpPointF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); +GpStatus WINGDIPAPI GdipEnumerateMetafileDestPointI(GpGraphics*,GDIPCONST GpMetafile*, + GDIPCONST GpPoint*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); +GpStatus WINGDIPAPI GdipEnumerateMetafileDestRect(GpGraphics*,GDIPCONST GpMetafile*, + GDIPCONST GpRectF*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); +GpStatus WINGDIPAPI GdipEnumerateMetafileDestRectI(GpGraphics*,GDIPCONST GpMetafile*, + GDIPCONST GpRect*,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPoints(GpGraphics*, GDIPCONST GpMetafile*,GDIPCONST GpPointF*,INT,GDIPCONST GpRectF*,Unit, EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*); @@ -450,6 +458,8 @@ ColorAdjustType); GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode, ARGB,BOOL); +GpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes*, + ColorAdjustType); /* LinearGradientBrush */ GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*, Modified: trunk/reactos/media/doc/README.WINE URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Thu Sep 19 15:10:19 2013 @@ -73,7 +73,7 @@ reactos/dll/win32/dwmapi # Synced to Wine-1.7.1 reactos/dll/win32/faultrep # Synced to Wine-1.7.1 reactos/dll/win32/fusion # Synced to Wine-1.7.1 -reactos/dll/win32/gdiplus # Synced to Wine-1.5.26 +reactos/dll/win32/gdiplus # Synced to Wine-1.7.1 reactos/dll/win32/hhctrl.ocx # Synced to Wine-1.5.26 reactos/dll/win32/hlink # Synced to Wine-1.5.4 reactos/dll/win32/hnetcfg # Synced to Wine-1.5.4
11 years, 1 month
1
0
0
0
[akhaldi] 60203: [WINDOWSCODECS_WINETEST] * Sync with Wine 1.7.1.
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Sep 19 14:54:53 2013 New Revision: 60203 URL:
http://svn.reactos.org/svn/reactos?rev=60203&view=rev
Log: [WINDOWSCODECS_WINETEST] * Sync with Wine 1.7.1. Modified: trunk/rostests/winetests/windowscodecs/CMakeLists.txt trunk/rostests/winetests/windowscodecs/bitmap.c trunk/rostests/winetests/windowscodecs/converter.c trunk/rostests/winetests/windowscodecs/gifformat.c Modified: trunk/rostests/winetests/windowscodecs/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/windowscodecs/C…
============================================================================== --- trunk/rostests/winetests/windowscodecs/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/winetests/windowscodecs/CMakeLists.txt [iso-8859-1] Thu Sep 19 14:54:53 2013 @@ -17,7 +17,6 @@ tiffformat.c) add_executable(windowscodecs_winetest ${SOURCE}) -target_link_libraries(windowscodecs_winetest wine) set_module_type(windowscodecs_winetest win32cui) add_importlibs(windowscodecs_winetest windowscodecs oleaut32 ole32 user32 gdi32 msvcrt kernel32 ntdll) add_cd_file(TARGET windowscodecs_winetest DESTINATION reactos/bin FOR all) Modified: trunk/rostests/winetests/windowscodecs/bitmap.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/windowscodecs/b…
============================================================================== --- trunk/rostests/winetests/windowscodecs/bitmap.c [iso-8859-1] (original) +++ trunk/rostests/winetests/windowscodecs/bitmap.c [iso-8859-1] Thu Sep 19 14:54:53 2013 @@ -27,6 +27,7 @@ #define COM_NO_WINDOWS_H #define COBJMACROS +#define CONST_VTABLE #include <windef.h> #include <winbase.h> @@ -48,6 +49,80 @@ guid->Data4[5], guid->Data4[6], guid->Data4[7]); return buf; } + +static HRESULT WINAPI bitmapsource_QueryInterface(IWICBitmapSource *iface, REFIID iid, void **ppv) +{ + if (IsEqualIID(&IID_IUnknown, iid) || + IsEqualIID(&IID_IWICBitmapSource, iid)) + { + *ppv = iface; + } + else + { + *ppv = NULL; + return E_NOINTERFACE; + } + + return S_OK; +} + +static ULONG WINAPI bitmapsource_AddRef(IWICBitmapSource *iface) +{ + return 2; +} + +static ULONG WINAPI bitmapsource_Release(IWICBitmapSource *iface) +{ + return 1; +} + +static HRESULT WINAPI bitmapsource_GetSize(IWICBitmapSource *iface, UINT *width, UINT *height) +{ + *width = *height = 10; + return S_OK; +} + +static HRESULT WINAPI bitmapsource_GetPixelFormat(IWICBitmapSource *iface, + WICPixelFormatGUID *format) +{ + return E_NOTIMPL; +} + +static HRESULT WINAPI bitmapsource_GetResolution(IWICBitmapSource *iface, + double *dpiX, double *dpiY) +{ + return E_NOTIMPL; +} + +static HRESULT WINAPI bitmapsource_CopyPalette(IWICBitmapSource *iface, + IWICPalette *palette) +{ + return E_NOTIMPL; +} + +static WICRect g_rect; +static BOOL called_CopyPixels; + +static HRESULT WINAPI bitmapsource_CopyPixels(IWICBitmapSource *iface, + const WICRect *rc, UINT stride, UINT buffer_size, BYTE *buffer) +{ + if (rc) g_rect = *rc; + called_CopyPixels = TRUE; + return S_OK; +} + +static const IWICBitmapSourceVtbl sourcevtbl = { + bitmapsource_QueryInterface, + bitmapsource_AddRef, + bitmapsource_Release, + bitmapsource_GetSize, + bitmapsource_GetPixelFormat, + bitmapsource_GetResolution, + bitmapsource_CopyPalette, + bitmapsource_CopyPixels +}; + +static IWICBitmapSource bitmapsource = { &sourcevtbl }; static HBITMAP create_dib(int width, int height, int bpp, LOGPALETTE *pal, const void *data) { @@ -657,15 +732,15 @@ hbmp = create_dib(3, 3, 8, NULL, data_8bpp_rgb_dib); ok(hbmp != 0, "failed to create bitmap\n"); - hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, 0, 0, WICBitmapCacheOnLoad, &bitmap); + hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, 0, 0, WICBitmapIgnoreAlpha, &bitmap); todo_wine ok(hr == WINCODEC_ERR_WIN32ERROR || hr == 0x88980003 /*XP*/, "expected WINCODEC_ERR_WIN32ERROR, got %#x\n", hr); - hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, 0, WICBitmapCacheOnLoad, NULL); + hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, 0, WICBitmapIgnoreAlpha, NULL); todo_wine ok(hr == E_INVALIDARG, "expected E_INVALIDARG, got %#x\n", hr); - hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, 0, WICBitmapCacheOnLoad, &bitmap); + hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, 0, WICBitmapIgnoreAlpha, &bitmap); todo_wine ok(hr == S_OK, "CreateBitmapFromHBITMAP error %#x\n", hr); if (hr != S_OK) return; @@ -697,7 +772,7 @@ ok(hpal != 0, "CreatePalette failed\n"); hbmp = create_dib(3, 3, 8, pal, data_8bpp_pal_dib); - hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, hpal, WICBitmapCacheOnLoad, &bitmap); + hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, hpal, WICBitmapIgnoreAlpha, &bitmap); ok(hr == S_OK, "CreateBitmapFromHBITMAP error %#x\n", hr); IWICBitmap_GetPixelFormat(bitmap, &format); @@ -737,7 +812,7 @@ ok(hpal != 0, "CreatePalette failed\n"); hbmp = create_dib(3, 3, 8, pal, data_8bpp_pal_dib); - hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, hpal, WICBitmapCacheOnLoad, &bitmap); + hr = IWICImagingFactory_CreateBitmapFromHBITMAP(factory, hbmp, hpal, WICBitmapIgnoreAlpha, &bitmap); ok(hr == S_OK, "CreateBitmapFromHBITMAP error %#x\n", hr); IWICBitmap_GetPixelFormat(bitmap, &format); @@ -775,6 +850,112 @@ DeleteObject(hpal); } +static void test_clipper(void) +{ + IWICBitmapClipper *clipper; + UINT height, width; + IWICBitmap *bitmap; + BYTE buffer[500]; + WICRect rect; + HRESULT hr; + + hr = IWICImagingFactory_CreateBitmap(factory, 10, 10, &GUID_WICPixelFormat24bppBGR, + WICBitmapCacheOnLoad, &bitmap); + ok(hr == S_OK, "got 0x%08x\n", hr); + + hr = IWICImagingFactory_CreateBitmapClipper(factory, &clipper); + ok(hr == S_OK, "got 0x%08x\n", hr); + + rect.X = rect.Y = 0; + rect.Width = rect.Height = 11; + hr = IWICBitmapClipper_Initialize(clipper, (IWICBitmapSource*)bitmap, &rect); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + + rect.X = rect.Y = 5; + rect.Width = rect.Height = 6; + hr = IWICBitmapClipper_Initialize(clipper, (IWICBitmapSource*)bitmap, &rect); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + + rect.X = rect.Y = 5; + rect.Width = rect.Height = 5; + hr = IWICBitmapClipper_Initialize(clipper, (IWICBitmapSource*)bitmap, &rect); + ok(hr == S_OK, "got 0x%08x\n", hr); + + width = height = 0; + hr = IWICBitmapClipper_GetSize(clipper, &width, &height); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(width == 5, "got %d\n", width); + ok(height == 5, "got %d\n", height); + + IWICBitmapClipper_Release(clipper); + IWICBitmap_Release(bitmap); + + /* CopyPixels */ + hr = IWICImagingFactory_CreateBitmapClipper(factory, &clipper); + ok(hr == S_OK, "got 0x%08x\n", hr); + + rect.X = rect.Y = 5; + rect.Width = rect.Height = 5; + hr = IWICBitmapClipper_Initialize(clipper, &bitmapsource, &rect); + ok(hr == S_OK, "got 0x%08x\n", hr); + + rect.X = rect.Y = 0; + rect.Width = rect.Height = 2; + + /* passed rectangle is relative to clipper rectangle, underlying source gets intersected + rectangle */ + memset(&g_rect, 0, sizeof(g_rect)); + called_CopyPixels = FALSE; + hr = IWICBitmapClipper_CopyPixels(clipper, &rect, 0, sizeof(buffer), buffer); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(called_CopyPixels, "CopyPixels not called\n"); + ok(g_rect.X == 5 && g_rect.Y == 5 && g_rect.Width == 2 && g_rect.Height == 2, + "got wrong rectangle (%d,%d)-(%d,%d)\n", g_rect.X, g_rect.Y, g_rect.Width, g_rect.Height); + + /* whole clipping rectangle */ + memset(&g_rect, 0, sizeof(g_rect)); + called_CopyPixels = FALSE; + + rect.X = rect.Y = 0; + rect.Width = rect.Height = 5; + + hr = IWICBitmapClipper_CopyPixels(clipper, &rect, 0, sizeof(buffer), buffer); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(called_CopyPixels, "CopyPixels not called\n"); + ok(g_rect.X == 5 && g_rect.Y == 5 && g_rect.Width == 5 && g_rect.Height == 5, + "got wrong rectangle (%d,%d)-(%d,%d)\n", g_rect.X, g_rect.Y, g_rect.Width, g_rect.Height); + + /* larger than clipping rectangle */ + memset(&g_rect, 0, sizeof(g_rect)); + called_CopyPixels = FALSE; + + rect.X = rect.Y = 0; + rect.Width = rect.Height = 20; + + hr = IWICBitmapClipper_CopyPixels(clipper, &rect, 0, sizeof(buffer), buffer); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + ok(!called_CopyPixels, "CopyPixels called\n"); + + rect.X = rect.Y = 5; + rect.Width = rect.Height = 5; + + hr = IWICBitmapClipper_CopyPixels(clipper, &rect, 0, sizeof(buffer), buffer); + ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); + ok(!called_CopyPixels, "CopyPixels called\n"); + + /* null rectangle */ + memset(&g_rect, 0, sizeof(g_rect)); + called_CopyPixels = FALSE; + + hr = IWICBitmapClipper_CopyPixels(clipper, NULL, 0, sizeof(buffer), buffer); + ok(hr == S_OK, "got 0x%08x\n", hr); + ok(called_CopyPixels, "CopyPixels not called\n"); + ok(g_rect.X == 5 && g_rect.Y == 5 && g_rect.Width == 5 && g_rect.Height == 5, + "got wrong rectangle (%d,%d)-(%d,%d)\n", g_rect.X, g_rect.Y, g_rect.Width, g_rect.Height); + + IWICBitmapClipper_Release(clipper); +} + START_TEST(bitmap) { HRESULT hr; @@ -790,6 +971,7 @@ test_CreateBitmapFromMemory(); test_CreateBitmapFromHICON(); test_CreateBitmapFromHBITMAP(); + test_clipper(); IWICImagingFactory_Release(factory); Modified: trunk/rostests/winetests/windowscodecs/converter.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/windowscodecs/c…
============================================================================== --- trunk/rostests/winetests/windowscodecs/converter.c [iso-8859-1] (original) +++ trunk/rostests/winetests/windowscodecs/converter.c [iso-8859-1] Thu Sep 19 14:54:53 2013 @@ -372,6 +372,147 @@ DeleteTestBitmap(src_obj); } +typedef struct property_opt_test_data +{ + LPCOLESTR name; + VARTYPE var_type; + VARTYPE initial_var_type; + int i_init_val; + float f_init_val; +} property_opt_test_data; + +static const WCHAR wszTiffCompressionMethod[] = {'T','i','f','f','C','o','m','p','r','e','s','s','i','o','n','M','e','t','h','o','d',0}; +static const WCHAR wszCompressionQuality[] = {'C','o','m','p','r','e','s','s','i','o','n','Q','u','a','l','i','t','y',0}; + +static const struct property_opt_test_data testdata_tiff_props[] = { + { wszTiffCompressionMethod, VT_UI1, VT_UI1, WICTiffCompressionDontCare }, + { wszCompressionQuality, VT_R4, VT_EMPTY }, + { NULL } +}; + +static int find_property_index(const WCHAR* name, PROPBAG2* all_props, int all_prop_cnt) +{ + int i; + for (i=0; i < all_prop_cnt; i++) + { + if (lstrcmpW(name, all_props[i].pstrName) == 0) + return i; + } + return -1; +} + +static void test_specific_encoder_properties(IPropertyBag2 *options, const property_opt_test_data* data, PROPBAG2* all_props, int all_prop_cnt) +{ + HRESULT hr; + int i = 0; + VARIANT pvarValue; + HRESULT phrError = S_OK; + + while (data[i].name) + { + int idx = find_property_index(data[i].name, all_props, all_prop_cnt); + PROPBAG2 pb = {0}; + pb.pstrName = (LPOLESTR)data[i].name; + + hr = IPropertyBag2_Read(options, 1, &pb, NULL, &pvarValue, &phrError); + + ok(idx >= 0, "Property %s not in output of GetPropertyInfo\n", + wine_dbgstr_w(data[i].name)); + if (idx >= 0) + { + ok(all_props[idx].vt == data[i].var_type, "Property %s has unexpected vt type, vt=%i\n", + wine_dbgstr_w(data[i].name), all_props[idx].vt); + ok(all_props[idx].dwType == PROPBAG2_TYPE_DATA, "Property %s has unexpected dw type, vt=%i\n", + wine_dbgstr_w(data[i].name), all_props[idx].dwType); + ok(all_props[idx].cfType == 0, "Property %s has unexpected cf type, vt=%i\n", + wine_dbgstr_w(data[i].name), all_props[idx].cfType); + } + + ok(SUCCEEDED(hr), "Reading property %s from bag failed, hr=%x\n", + wine_dbgstr_w(data[i].name), hr); + + if (SUCCEEDED(hr)) + { + /* On XP the initial type is always VT_EMPTY */ + ok(V_VT(&pvarValue) == data[i].initial_var_type || V_VT(&pvarValue) == VT_EMPTY, + "Property %s has unexpected initial type, V_VT=%i\n", + wine_dbgstr_w(data[i].name), V_VT(&pvarValue)); + + if(V_VT(&pvarValue) == data[i].initial_var_type) + { + switch (data[i].initial_var_type) + { + case VT_BOOL: + case VT_UI1: + ok(V_UNION(&pvarValue, bVal) == data[i].i_init_val, "Property %s has an unexpected initial value, pvarValue=%i\n", + wine_dbgstr_w(data[i].name), V_UNION(&pvarValue, bVal)); + break; + case VT_R4: + ok(V_UNION(&pvarValue, fltVal) == data[i].f_init_val, "Property %s has an unexpected initial value, pvarValue=%f\n", + wine_dbgstr_w(data[i].name), V_UNION(&pvarValue, fltVal)); + break; + default: + break; + } + } + + VariantClear(&pvarValue); + } + + i++; + } +} + +static void test_encoder_properties(const CLSID* clsid_encoder, IPropertyBag2 *options) +{ + HRESULT hr; + ULONG cProperties = 0; + ULONG cProperties2 = 0; + PROPBAG2 all_props[64] = {{0}}; /* Should be enough for every encoder out there */ + int i; + + /* CountProperties */ + { + hr = IPropertyBag2_CountProperties(options, &cProperties); + ok(SUCCEEDED(hr), "Reading property count, hr=%x\n", hr); + } + + /* GetPropertyInfo */ + { + hr = IPropertyBag2_GetPropertyInfo(options, cProperties, 1, all_props, &cProperties2); + ok(hr == WINCODEC_ERR_VALUEOUTOFRANGE, "IPropertyBag2::GetPropertyInfo - iProperty out of bounce handled wrong, hr=%x\n", hr); + + hr = IPropertyBag2_GetPropertyInfo(options, 0, cProperties+1, all_props, &cProperties2); + ok(hr == WINCODEC_ERR_VALUEOUTOFRANGE, "IPropertyBag2::GetPropertyInfo - cProperty out of bounce handled wrong, hr=%x\n", hr); + + if (cProperties == 0) /* GetPropertyInfo can be called for zero items on Windows 8 but not on Windows 7 (wine behaves like Win8) */ + { + cProperties2 = cProperties; + hr = S_OK; + } + else + { + hr = IPropertyBag2_GetPropertyInfo(options, 0, min(64, cProperties), all_props, &cProperties2); + ok(SUCCEEDED(hr), "Reading infos from property bag failed, hr=%x\n", hr); + } + + if (FAILED(hr)) + return; + + ok(cProperties == cProperties2, "Missmatch of property count (IPropertyBag2::CountProperties=%i, IPropertyBag2::GetPropertyInfo=%i)\n", + (int)cProperties, (int)cProperties2); + } + + if (clsid_encoder == &CLSID_WICTiffEncoder) + test_specific_encoder_properties(options, testdata_tiff_props, all_props, cProperties2); + + for (i=0; i < cProperties2; i++) + { + ok(all_props[i].pstrName != NULL, "Unset property name in output of IPropertyBag2::GetPropertyInfo\n"); + CoTaskMemFree(all_props[i].pstrName); + } +} + static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* clsid_encoder, const struct bitmap_data **dsts, const CLSID *clsid_decoder, const char *name) { @@ -414,6 +555,10 @@ ok(SUCCEEDED(hr), "CreateFrame failed, hr=%x\n", hr); if (SUCCEEDED(hr)) { + ok(options != NULL, "Encoder initialization has not created an property bag\n"); + if(options) + test_encoder_properties(clsid_encoder, options); + hr = IWICBitmapFrameEncode_Initialize(frameencode, options); ok(SUCCEEDED(hr), "Initialize failed, hr=%x\n", hr); Modified: trunk/rostests/winetests/windowscodecs/gifformat.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/windowscodecs/g…
============================================================================== --- trunk/rostests/winetests/windowscodecs/gifformat.c [iso-8859-1] (original) +++ trunk/rostests/winetests/windowscodecs/gifformat.c [iso-8859-1] Thu Sep 19 14:54:53 2013 @@ -277,8 +277,9 @@ IWICBitmapDecoder *decoder; IWICBitmapFrameDecode *frame; IWICPalette *palette; + WICBitmapPaletteType type; GUID format; - UINT count, ret; + UINT count, ret, i; WICColor color[256]; decoder = create_decoder(gif_local_palette, sizeof(gif_local_palette)); @@ -289,8 +290,27 @@ /* global palette */ hr = IWICBitmapDecoder_CopyPalette(decoder, palette); - ok(hr == WINCODEC_ERR_FRAMEMISSING, - "expected WINCODEC_ERR_FRAMEMISSING, got %#x\n", hr); + ok(hr == S_OK || broken(hr == WINCODEC_ERR_FRAMEMISSING), "CopyPalette %#x\n", hr); + if (hr == S_OK) + { + type = -1; + hr = IWICPalette_GetType(palette, &type); + ok(hr == S_OK, "GetType error %#x\n", hr); + ok(type == WICBitmapPaletteTypeCustom, "expected WICBitmapPaletteTypeCustom, got %#x\n", type); + + hr = IWICPalette_GetColorCount(palette, &count); + ok(hr == S_OK, "GetColorCount error %#x\n", hr); + ok(count == 256, "expected 256, got %u\n", count); + + hr = IWICPalette_GetColors(palette, count, color, &ret); + ok(hr == S_OK, "GetColors error %#x\n", hr); + ok(ret == count, "expected %u, got %u\n", count, ret); + ok(color[0] == 0xff000000, "expected 0xff000000, got %#x\n", color[0]); + ok(color[1] == 0x00ffffff, "expected 0x00ffffff, got %#x\n", color[1]); + + for (i = 2; i < 256; i++) + ok(color[i] == 0xff000000, "expected 0xff000000, got %#x\n", color[i]); + } /* frame palette */ hr = IWICBitmapDecoder_GetFrame(decoder, 0, &frame); @@ -307,6 +327,11 @@ hr = IWICPalette_GetColorCount(palette, &count); ok(hr == S_OK, "GetColorCount error %#x\n", hr); ok(count == 4, "expected 4, got %u\n", count); + + type = -1; + hr = IWICPalette_GetType(palette, &type); + ok(hr == S_OK, "GetType error %#x\n", hr); + ok(type == WICBitmapPaletteTypeCustom, "expected WICBitmapPaletteTypeCustom, got %#x\n", type); hr = IWICPalette_GetColors(palette, count, color, &ret); ok(hr == S_OK, "GetColors error %#x\n", hr);
11 years, 1 month
1
0
0
0
[akhaldi] 60202: [WINDOWSCODECS] * Sync with Wine 1.7.1.
by akhaldi@svn.reactos.org
Author: akhaldi Date: Thu Sep 19 14:54:10 2013 New Revision: 60202 URL:
http://svn.reactos.org/svn/reactos?rev=60202&view=rev
Log: [WINDOWSCODECS] * Sync with Wine 1.7.1. Added: trunk/reactos/dll/win32/windowscodecs/clipper.c (with props) Modified: trunk/reactos/dll/win32/windowscodecs/CMakeLists.txt trunk/reactos/dll/win32/windowscodecs/bmpencode.c trunk/reactos/dll/win32/windowscodecs/colorcontext.c trunk/reactos/dll/win32/windowscodecs/gifformat.c trunk/reactos/dll/win32/windowscodecs/imgfactory.c trunk/reactos/dll/win32/windowscodecs/jpegformat.c trunk/reactos/dll/win32/windowscodecs/main.c trunk/reactos/dll/win32/windowscodecs/pngformat.c trunk/reactos/dll/win32/windowscodecs/tiffformat.c trunk/reactos/dll/win32/windowscodecs/wincodecs_private.h trunk/reactos/media/doc/README.WINE Modified: trunk/reactos/dll/win32/windowscodecs/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/CM…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/CMakeLists.txt [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -27,6 +27,7 @@ bitmap.c bmpdecode.c bmpencode.c + clipper.c clsfactory.c colorcontext.c colortransform.c Modified: trunk/reactos/dll/win32/windowscodecs/bmpencode.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/bm…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/bmpencode.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/bmpencode.c [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -364,7 +364,7 @@ bih.bV5GreenMask = This->format->greenmask; bih.bV5BlueMask = This->format->bluemask; bih.bV5AlphaMask = This->format->alphamask; - bih.bV5AlphaMask = LCS_DEVICE_RGB; + bih.bV5CSType = LCS_DEVICE_RGB; } bfh.bfSize = sizeof(BITMAPFILEHEADER) + info_size + bih.bV5SizeImage; Added: trunk/reactos/dll/win32/windowscodecs/clipper.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/cl…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/clipper.c (added) +++ trunk/reactos/dll/win32/windowscodecs/clipper.c [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -0,0 +1,260 @@ +/* + * Copyright 2013 Nikolay Sivov for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> + +#define COBJMACROS + +#include "windef.h" +#include "winbase.h" +#include "objbase.h" +#include "wincodec.h" + +#include "wincodecs_private.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(wincodecs); + +typedef struct BitmapClipper { + IWICBitmapClipper IWICBitmapClipper_iface; + LONG ref; + IWICBitmapSource *source; + WICRect rect; + CRITICAL_SECTION lock; /* must be held when initialized */ +} BitmapClipper; + +static inline BitmapClipper *impl_from_IWICBitmapClipper(IWICBitmapClipper *iface) +{ + return CONTAINING_RECORD(iface, BitmapClipper, IWICBitmapClipper_iface); +} + +static HRESULT WINAPI BitmapClipper_QueryInterface(IWICBitmapClipper *iface, REFIID iid, + void **ppv) +{ + BitmapClipper *This = impl_from_IWICBitmapClipper(iface); + TRACE("(%p,%s,%p)\n", iface, debugstr_guid(iid), ppv); + + if (!ppv) return E_INVALIDARG; + + if (IsEqualIID(&IID_IUnknown, iid) || + IsEqualIID(&IID_IWICBitmapSource, iid) || + IsEqualIID(&IID_IWICBitmapClipper, iid)) + { + *ppv = &This->IWICBitmapClipper_iface; + } + else + { + *ppv = NULL; + return E_NOINTERFACE; + } + + IUnknown_AddRef((IUnknown*)*ppv); + return S_OK; +} + +static ULONG WINAPI BitmapClipper_AddRef(IWICBitmapClipper *iface) +{ + BitmapClipper *This = impl_from_IWICBitmapClipper(iface); + ULONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) refcount=%u\n", iface, ref); + + return ref; +} + +static ULONG WINAPI BitmapClipper_Release(IWICBitmapClipper *iface) +{ + BitmapClipper *This = impl_from_IWICBitmapClipper(iface); + ULONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) refcount=%u\n", iface, ref); + + if (ref == 0) + { + This->lock.DebugInfo->Spare[0] = 0; + DeleteCriticalSection(&This->lock); + if (This->source) IWICBitmapSource_Release(This->source); + HeapFree(GetProcessHeap(), 0, This); + } + + return ref; +} + +static HRESULT WINAPI BitmapClipper_GetSize(IWICBitmapClipper *iface, + UINT *width, UINT *height) +{ + BitmapClipper *This = impl_from_IWICBitmapClipper(iface); + + TRACE("(%p,%p,%p)\n", iface, width, height); + + if (!width || !height) + return E_INVALIDARG; + + if (!This->source) + return WINCODEC_ERR_WRONGSTATE; + + *width = This->rect.Width; + *height = This->rect.Height; + + return S_OK; +} + +static HRESULT WINAPI BitmapClipper_GetPixelFormat(IWICBitmapClipper *iface, + WICPixelFormatGUID *format) +{ + BitmapClipper *This = impl_from_IWICBitmapClipper(iface); + TRACE("(%p,%p)\n", iface, format); + + if (!format) + return E_INVALIDARG; + + if (!This->source) + return WINCODEC_ERR_WRONGSTATE; + + return IWICBitmapSource_GetPixelFormat(This->source, format); +} + +static HRESULT WINAPI BitmapClipper_GetResolution(IWICBitmapClipper *iface, + double *dpiX, double *dpiY) +{ + BitmapClipper *This = impl_from_IWICBitmapClipper(iface); + + TRACE("(%p,%p,%p)\n", iface, dpiX, dpiY); + + if (!dpiX || !dpiY) + return E_INVALIDARG; + + if (!This->source) + return WINCODEC_ERR_WRONGSTATE; + + return IWICBitmapSource_GetResolution(This->source, dpiX, dpiY); +} + +static HRESULT WINAPI BitmapClipper_CopyPalette(IWICBitmapClipper *iface, + IWICPalette *palette) +{ + BitmapClipper *This = impl_from_IWICBitmapClipper(iface); + + TRACE("(%p,%p)\n", iface, palette); + + if (!palette) + return E_INVALIDARG; + + if (!This->source) + return WINCODEC_ERR_WRONGSTATE; + + return IWICBitmapSource_CopyPalette(This->source, palette); +} + +static HRESULT WINAPI BitmapClipper_CopyPixels(IWICBitmapClipper *iface, + const WICRect *rc, UINT stride, UINT buffer_size, BYTE *buffer) +{ + BitmapClipper *This = impl_from_IWICBitmapClipper(iface); + WICRect rect; + + TRACE("(%p,%p,%u,%u,%p)\n", iface, rc, stride, buffer_size, buffer); + + if (!This->source) + return WINCODEC_ERR_WRONGSTATE; + + if (rc) + { + rect = *rc; + + /* transform to source coordinates */ + rect.X += This->rect.X; + rect.Y += This->rect.Y; + + if ((rect.X + rect.Width > This->rect.X + This->rect.Width) || + (rect.Y + rect.Height > This->rect.Y + This->rect.Height)) + return E_INVALIDARG; + + rc = ▭ + } + else + rc = &This->rect; + + return IWICBitmapSource_CopyPixels(This->source, rc, stride, buffer_size, buffer); +} + +static HRESULT WINAPI BitmapClipper_Initialize(IWICBitmapClipper *iface, + IWICBitmapSource *source, const WICRect *rc) +{ + BitmapClipper *This = impl_from_IWICBitmapClipper(iface); + UINT width, height; + HRESULT hr = S_OK; + + TRACE("(%p,%p,%p)\n", iface, source, rc); + + EnterCriticalSection(&This->lock); + + if (This->source) + { + hr = WINCODEC_ERR_WRONGSTATE; + goto end; + } + + hr = IWICBitmapSource_GetSize(source, &width, &height); + if (FAILED(hr)) goto end; + + if ((rc->X + rc->Width > width) || (rc->Y + rc->Height > height)) + { + hr = E_INVALIDARG; + goto end; + } + + This->rect = *rc; + This->source = source; + IWICBitmapSource_AddRef(This->source); + +end: + LeaveCriticalSection(&This->lock); + + return hr; +} + +static const IWICBitmapClipperVtbl BitmapClipper_Vtbl = { + BitmapClipper_QueryInterface, + BitmapClipper_AddRef, + BitmapClipper_Release, + BitmapClipper_GetSize, + BitmapClipper_GetPixelFormat, + BitmapClipper_GetResolution, + BitmapClipper_CopyPalette, + BitmapClipper_CopyPixels, + BitmapClipper_Initialize +}; + +HRESULT BitmapClipper_Create(IWICBitmapClipper **clipper) +{ + BitmapClipper *This; + + This = HeapAlloc(GetProcessHeap(), 0, sizeof(BitmapClipper)); + if (!This) return E_OUTOFMEMORY; + + This->IWICBitmapClipper_iface.lpVtbl = &BitmapClipper_Vtbl; + This->ref = 1; + This->source = NULL; + InitializeCriticalSection(&This->lock); + This->lock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": BitmapClipper.lock"); + + *clipper = &This->IWICBitmapClipper_iface; + + return S_OK; +} Propchange: trunk/reactos/dll/win32/windowscodecs/clipper.c ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/reactos/dll/win32/windowscodecs/colorcontext.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/co…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/colorcontext.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/colorcontext.c [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -130,8 +130,16 @@ } ret = ReadFile(handle, *profile, size.u.LowPart, &count, NULL); CloseHandle(handle); - if (!ret) return HRESULT_FROM_WIN32(GetLastError()); - if (count != size.u.LowPart) return E_FAIL; + if (!ret) { + HeapFree (GetProcessHeap(),0,*profile); + *profile = NULL; + return HRESULT_FROM_WIN32(GetLastError()); + } + if (count != size.u.LowPart) { + HeapFree (GetProcessHeap(),0,*profile); + *profile = NULL; + return E_FAIL; + } *len = count; return S_OK; } Modified: trunk/reactos/dll/win32/windowscodecs/gifformat.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/gi…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/gifformat.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/gifformat.c [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -1185,26 +1185,39 @@ GifDecoder *This = impl_from_IWICBitmapDecoder(iface); WICColor colors[256]; ColorMapObject *cm; - int i, trans; + int i, trans, count; ExtensionBlock *eb; TRACE("(%p,%p)\n", iface, palette); cm = This->gif->SColorMap; - if (!cm) return WINCODEC_ERR_FRAMEMISSING; - - if (cm->ColorCount > 256) - { - ERR("GIF contains invalid number of colors: %d\n", cm->ColorCount); - return E_FAIL; - } - - for (i = 0; i < cm->ColorCount; i++) - { - colors[i] = 0xff000000 | /* alpha */ - cm->Colors[i].Red << 16 | - cm->Colors[i].Green << 8 | - cm->Colors[i].Blue; + if (cm) + { + if (cm->ColorCount > 256) + { + ERR("GIF contains invalid number of colors: %d\n", cm->ColorCount); + return E_FAIL; + } + + for (i = 0; i < cm->ColorCount; i++) + { + colors[i] = 0xff000000 | /* alpha */ + cm->Colors[i].Red << 16 | + cm->Colors[i].Green << 8 | + cm->Colors[i].Blue; + } + + count = cm->ColorCount; + } + else + { + colors[0] = 0xff000000; + colors[1] = 0xffffffff; + + for (i = 2; i < 256; i++) + colors[i] = 0xff000000; + + count = 256; } /* look for the transparent color extension */ @@ -1222,7 +1235,7 @@ } } - return IWICPalette_InitializeCustom(palette, colors, cm->ColorCount); + return IWICPalette_InitializeCustom(palette, colors, count); } static HRESULT WINAPI GifDecoder_GetMetadataQueryReader(IWICBitmapDecoder *iface, Modified: trunk/reactos/dll/win32/windowscodecs/imgfactory.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/im…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/imgfactory.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/imgfactory.c [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -442,8 +442,8 @@ static HRESULT WINAPI ComponentFactory_CreateBitmapClipper(IWICComponentFactory *iface, IWICBitmapClipper **ppIBitmapClipper) { - FIXME("(%p,%p): stub\n", iface, ppIBitmapClipper); - return E_NOTIMPL; + TRACE("(%p,%p)\n", iface, ppIBitmapClipper); + return BitmapClipper_Create(ppIBitmapClipper); } static HRESULT WINAPI ComponentFactory_CreateBitmapFlipRotator(IWICComponentFactory *iface, Modified: trunk/reactos/dll/win32/windowscodecs/jpegformat.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/jp…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/jpegformat.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/jpegformat.c [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -552,16 +552,23 @@ EnterCriticalSection(&This->lock); - if (This->cinfo.density_unit == 2) /* pixels per centimeter */ - { + switch (This->cinfo.density_unit) + { + case 2: /* pixels per centimeter */ *pDpiX = This->cinfo.X_density * 2.54; *pDpiY = This->cinfo.Y_density * 2.54; - } - else - { - /* 1 = pixels per inch, 0 = unknown */ + break; + + case 1: /* pixels per inch */ *pDpiX = This->cinfo.X_density; *pDpiY = This->cinfo.Y_density; + break; + + case 0: /* unknown */ + default: + *pDpiX = 96.0; + *pDpiY = 96.0; + break; } LeaveCriticalSection(&This->lock); Modified: trunk/reactos/dll/win32/windowscodecs/main.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/ma…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/main.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/main.c [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -45,8 +45,6 @@ { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hinstDLL); - break; - case DLL_PROCESS_DETACH: break; } Modified: trunk/reactos/dll/win32/windowscodecs/pngformat.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/pn…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/pngformat.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/pngformat.c [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -180,7 +180,7 @@ MAKE_FUNCPTR(png_set_bgr); MAKE_FUNCPTR(png_set_crc_action); MAKE_FUNCPTR(png_set_error_fn); -#if HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8 +#ifdef HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8 MAKE_FUNCPTR(png_set_expand_gray_1_2_4_to_8); #else MAKE_FUNCPTR(png_set_gray_1_2_4_to_8); @@ -229,7 +229,7 @@ LOAD_FUNCPTR(png_set_bgr); LOAD_FUNCPTR(png_set_crc_action); LOAD_FUNCPTR(png_set_error_fn); -#if HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8 +#ifdef HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8 LOAD_FUNCPTR(png_set_expand_gray_1_2_4_to_8); #else LOAD_FUNCPTR(png_set_gray_1_2_4_to_8); @@ -471,7 +471,7 @@ { if (bit_depth < 8) { -#if HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8 +#ifdef HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8 ppng_set_expand_gray_1_2_4_to_8(This->png_ptr); #else ppng_set_gray_1_2_4_to_8(This->png_ptr); @@ -870,7 +870,8 @@ UINT cCount, IWICColorContext **ppIColorContexts, UINT *pcActualCount) { PngDecoder *This = impl_from_IWICBitmapFrameDecode(iface); - png_charp name, profile; + png_charp name; + BYTE *profile; png_uint_32 len; int compression_type; HRESULT hr; @@ -881,11 +882,11 @@ EnterCriticalSection(&This->lock); - if (ppng_get_iCCP(This->png_ptr, This->info_ptr, &name, &compression_type, &profile, &len)) + if (ppng_get_iCCP(This->png_ptr, This->info_ptr, &name, &compression_type, (void *)&profile, &len)) { if (cCount && ppIColorContexts) { - hr = IWICColorContext_InitializeFromMemory(*ppIColorContexts, (const BYTE *)profile, len); + hr = IWICColorContext_InitializeFromMemory(*ppIColorContexts, profile, len); if (FAILED(hr)) { LeaveCriticalSection(&This->lock); Modified: trunk/reactos/dll/win32/windowscodecs/tiffformat.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/ti…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/tiffformat.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/tiffformat.c [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -36,6 +36,7 @@ #include <windef.h> #include <winbase.h> #include <objbase.h> +#include <oleauto.h> //#include "wincodec.h" #include <wincodecsdk.h> @@ -47,6 +48,16 @@ WINE_DEFAULT_DEBUG_CHANNEL(wincodecs); #ifdef SONAME_LIBTIFF + +/* Workaround for broken libtiff 4.x headers on some 64-bit hosts which + * define TIFF_UINT64_T/toff_t as 32-bit for 32-bit builds, while they + * are supposed to be always 64-bit. + * TIFF_UINT64_T doesn't exist in libtiff 3.x, it was introduced in 4.x. + */ +#ifdef TIFF_UINT64_T +# undef toff_t +# define toff_t UINT64 +#endif static CRITICAL_SECTION init_tiff_cs; static CRITICAL_SECTION_DEBUG init_tiff_cs_debug = @@ -57,6 +68,9 @@ 0, 0, { (DWORD_PTR)(__FILE__ ": init_tiff_cs") } }; static CRITICAL_SECTION init_tiff_cs = { &init_tiff_cs_debug, -1, 0, 0, 0, 0 }; + +static const WCHAR wszTiffCompressionMethod[] = {'T','i','f','f','C','o','m','p','r','e','s','s','i','o','n','M','e','t','h','o','d',0}; +static const WCHAR wszCompressionQuality[] = {'C','o','m','p','r','e','s','s','i','o','n','Q','u','a','l','i','t','y',0}; static void *libtiff_handle; #define MAKE_FUNCPTR(f) static typeof(f) * p##f @@ -210,8 +224,8 @@ IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); return pTIFFClientOpen("<IStream object>", mode, stream, tiff_stream_read, - tiff_stream_write, tiff_stream_seek, tiff_stream_close, - tiff_stream_size, tiff_stream_map, tiff_stream_unmap); + tiff_stream_write, (void *)tiff_stream_seek, tiff_stream_close, + (void *)tiff_stream_size, (void *)tiff_stream_map, (void *)tiff_stream_unmap); } typedef struct { @@ -1913,7 +1927,31 @@ if (SUCCEEDED(hr)) { - hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions); + PROPBAG2 opts[2]= {{0}}; + opts[0].pstrName = (LPOLESTR)wszTiffCompressionMethod; + opts[0].vt = VT_UI1; + opts[0].dwType = PROPBAG2_TYPE_DATA; + + opts[1].pstrName = (LPOLESTR)wszCompressionQuality; + opts[1].vt = VT_R4; + opts[1].dwType = PROPBAG2_TYPE_DATA; + + hr = CreatePropertyBag2(opts, 2, ppIEncoderOptions); + + if (SUCCEEDED(hr)) + { + VARIANT v; + VariantInit(&v); + V_VT(&v) = VT_UI1; + V_UNION(&v, bVal) = WICTiffCompressionDontCare; + hr = IPropertyBag2_Write(*ppIEncoderOptions, 1, opts, &v); + VariantClear(&v); + if (FAILED(hr)) + { + IPropertyBag2_Release(*ppIEncoderOptions); + *ppIEncoderOptions = NULL; + } + } } if (SUCCEEDED(hr)) Modified: trunk/reactos/dll/win32/windowscodecs/wincodecs_private.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/wi…
============================================================================== --- trunk/reactos/dll/win32/windowscodecs/wincodecs_private.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/windowscodecs/wincodecs_private.h [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -54,6 +54,7 @@ extern HRESULT StreamImpl_Create(IWICStream **stream) DECLSPEC_HIDDEN; extern HRESULT ColorContext_Create(IWICColorContext **context) DECLSPEC_HIDDEN; extern HRESULT ColorTransform_Create(IWICColorTransform **transform) DECLSPEC_HIDDEN; +extern HRESULT BitmapClipper_Create(IWICBitmapClipper **clipper) DECLSPEC_HIDDEN; extern HRESULT copy_pixels(UINT bpp, const BYTE *srcbuffer, UINT srcwidth, UINT srcheight, INT srcstride, Modified: trunk/reactos/media/doc/README.WINE URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Thu Sep 19 14:54:10 2013 @@ -199,7 +199,7 @@ reactos/dll/win32/version # Autosync reactos/dll/win32/wbemprox # Synced to Wine-1.5.26 reactos/dll/win32/wer # Autosync -reactos/dll/win32/windowscodecs # Synced to Wine-1.5.26 +reactos/dll/win32/windowscodecs # Synced to Wine-1.7.1 reactos/dll/win32/winemp3.acm # Synced to Wine-1.5.19 reactos/dll/win32/wing32 # Out of sync reactos/dll/win32/winhttp # Synced to Wine-1.5.26
11 years, 1 month
1
0
0
0
[aandrejevic] 60201: [SOFT386] Implement the LEAVE instruction.
by aandrejevic@svn.reactos.org
Author: aandrejevic Date: Wed Sep 18 21:13:40 2013 New Revision: 60201 URL:
http://svn.reactos.org/svn/reactos?rev=60201&view=rev
Log: [SOFT386] Implement the LEAVE instruction. Modified: branches/ntvdm/lib/soft386/opcodes.c Modified: branches/ntvdm/lib/soft386/opcodes.c URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/soft386/opcodes.c?rev…
============================================================================== --- branches/ntvdm/lib/soft386/opcodes.c [iso-8859-1] (original) +++ branches/ntvdm/lib/soft386/opcodes.c [iso-8859-1] Wed Sep 18 21:13:40 2013 @@ -4208,13 +4208,58 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeLeave) { + BOOLEAN Size = State->SegmentRegs[SOFT386_REG_CS].Size; + + /* Make sure this is the right instruction */ + ASSERT(Opcode == 0xC9); + + if (State->PrefixFlags & SOFT386_PREFIX_LOCK) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + { + /* The OPSIZE prefix toggles the size */ + Size = !Size; + } + + if (Size) + { + /* Set the stack pointer (ESP) to the base pointer (EBP) */ + State->GeneralRegs[SOFT386_REG_ESP].Long = State->GeneralRegs[SOFT386_REG_EBP].Long; + + /* Pop the saved base pointer from the stack */ + return Soft386StackPop(State, &State->GeneralRegs[SOFT386_REG_EBP].Long); + } + else + { + ULONG Value; + + /* Set the stack pointer (SP) to the base pointer (BP) */ + State->GeneralRegs[SOFT386_REG_ESP].LowWord = State->GeneralRegs[SOFT386_REG_EBP].LowWord; + + /* Pop the saved base pointer from the stack */ + if (Soft386StackPop(State, &Value)) + { + State->GeneralRegs[SOFT386_REG_EBP].LowWord = LOWORD(Value); + return TRUE; + } + else return FALSE; + } +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeRetFarImm) +{ // TODO: NOT IMPLEMENTED UNIMPLEMENTED; return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeRetFarImm) +SOFT386_OPCODE_HANDLER(Soft386OpcodeRetFar) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4222,7 +4267,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeRetFar) +SOFT386_OPCODE_HANDLER(Soft386OpcodeInt3) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4230,7 +4275,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeInt3) +SOFT386_OPCODE_HANDLER(Soft386OpcodeInt) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4238,7 +4283,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeInt) +SOFT386_OPCODE_HANDLER(Soft386OpcodeIntOverflow) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4246,7 +4291,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeIntOverflow) +SOFT386_OPCODE_HANDLER(Soft386OpcodeIret) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4254,7 +4299,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeIret) +SOFT386_OPCODE_HANDLER(Soft386OpcodeAam) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4262,7 +4307,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeAam) +SOFT386_OPCODE_HANDLER(Soft386OpcodeAad) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4270,7 +4315,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeAad) +SOFT386_OPCODE_HANDLER(Soft386OpcodeXlat) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4278,7 +4323,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeXlat) +SOFT386_OPCODE_HANDLER(Soft386OpcodeLoopnz) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4286,7 +4331,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeLoopnz) +SOFT386_OPCODE_HANDLER(Soft386OpcodeLoopz) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4294,7 +4339,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeLoopz) +SOFT386_OPCODE_HANDLER(Soft386OpcodeLoop) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4302,7 +4347,7 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeLoop) +SOFT386_OPCODE_HANDLER(Soft386OpcodeJecxz) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; @@ -4310,127 +4355,119 @@ return FALSE; } -SOFT386_OPCODE_HANDLER(Soft386OpcodeJecxz) +SOFT386_OPCODE_HANDLER(Soft386OpcodeCall) +{ + BOOLEAN Size = State->SegmentRegs[SOFT386_REG_CS].Size; + + /* Make sure this is the right instruction */ + ASSERT(Opcode == 0xE8); + + if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + { + /* The OPSIZE prefix toggles the size */ + Size = !Size; + } + else if (State->PrefixFlags != 0) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + /* Push the current value of the instruction pointer */ + if (!Soft386StackPush(State, State->InstPtr.Long)) + { + /* Exception occurred */ + return FALSE; + } + + if (Size) + { + LONG Offset = 0; + + /* Fetch the offset */ + if (!Soft386FetchDword(State, (PULONG)&Offset)) + { + /* An exception occurred */ + return FALSE; + } + + /* Move the instruction pointer */ + State->InstPtr.Long += Offset; + } + else + { + SHORT Offset = 0; + + /* Fetch the offset */ + if (!Soft386FetchWord(State, (PUSHORT)&Offset)) + { + /* An exception occurred */ + return FALSE; + } + + /* Move the instruction pointer */ + State->InstPtr.LowWord += Offset; + } + + return TRUE; +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeJmp) +{ + BOOLEAN Size = State->SegmentRegs[SOFT386_REG_CS].Size; + + /* Make sure this is the right instruction */ + ASSERT(Opcode == 0xE9); + + if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) + { + /* The OPSIZE prefix toggles the size */ + Size = !Size; + } + else if (State->PrefixFlags != 0) + { + /* Invalid prefix */ + Soft386Exception(State, SOFT386_EXCEPTION_UD); + return FALSE; + } + + if (Size) + { + LONG Offset = 0; + + /* Fetch the offset */ + if (!Soft386FetchDword(State, (PULONG)&Offset)) + { + /* An exception occurred */ + return FALSE; + } + + /* Move the instruction pointer */ + State->InstPtr.Long += Offset; + } + else + { + SHORT Offset = 0; + + /* Fetch the offset */ + if (!Soft386FetchWord(State, (PUSHORT)&Offset)) + { + /* An exception occurred */ + return FALSE; + } + + /* Move the instruction pointer */ + State->InstPtr.LowWord += Offset; + } + + return TRUE; +} + +SOFT386_OPCODE_HANDLER(Soft386OpcodeJmpAbs) { // TODO: NOT IMPLEMENTED UNIMPLEMENTED; return FALSE; } - -SOFT386_OPCODE_HANDLER(Soft386OpcodeCall) -{ - BOOLEAN Size = State->SegmentRegs[SOFT386_REG_CS].Size; - - /* Make sure this is the right instruction */ - ASSERT(Opcode == 0xE8); - - if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) - { - /* The OPSIZE prefix toggles the size */ - Size = !Size; - } - else if (State->PrefixFlags != 0) - { - /* Invalid prefix */ - Soft386Exception(State, SOFT386_EXCEPTION_UD); - return FALSE; - } - - /* Push the current value of the instruction pointer */ - if (!Soft386StackPush(State, State->InstPtr.Long)) - { - /* Exception occurred */ - return FALSE; - } - - if (Size) - { - LONG Offset = 0; - - /* Fetch the offset */ - if (!Soft386FetchDword(State, (PULONG)&Offset)) - { - /* An exception occurred */ - return FALSE; - } - - /* Move the instruction pointer */ - State->InstPtr.Long += Offset; - } - else - { - SHORT Offset = 0; - - /* Fetch the offset */ - if (!Soft386FetchWord(State, (PUSHORT)&Offset)) - { - /* An exception occurred */ - return FALSE; - } - - /* Move the instruction pointer */ - State->InstPtr.LowWord += Offset; - } - - return TRUE; -} - -SOFT386_OPCODE_HANDLER(Soft386OpcodeJmp) -{ - BOOLEAN Size = State->SegmentRegs[SOFT386_REG_CS].Size; - - /* Make sure this is the right instruction */ - ASSERT(Opcode == 0xE9); - - if (State->PrefixFlags == SOFT386_PREFIX_OPSIZE) - { - /* The OPSIZE prefix toggles the size */ - Size = !Size; - } - else if (State->PrefixFlags != 0) - { - /* Invalid prefix */ - Soft386Exception(State, SOFT386_EXCEPTION_UD); - return FALSE; - } - - if (Size) - { - LONG Offset = 0; - - /* Fetch the offset */ - if (!Soft386FetchDword(State, (PULONG)&Offset)) - { - /* An exception occurred */ - return FALSE; - } - - /* Move the instruction pointer */ - State->InstPtr.Long += Offset; - } - else - { - SHORT Offset = 0; - - /* Fetch the offset */ - if (!Soft386FetchWord(State, (PUSHORT)&Offset)) - { - /* An exception occurred */ - return FALSE; - } - - /* Move the instruction pointer */ - State->InstPtr.LowWord += Offset; - } - - return TRUE; -} - -SOFT386_OPCODE_HANDLER(Soft386OpcodeJmpAbs) -{ - // TODO: NOT IMPLEMENTED - UNIMPLEMENTED; - - return FALSE; -}
11 years, 1 month
1
0
0
0
[ekohl] 60200: [NETAPI32] NetLocalGroupGetMembers: Fix the typos that caused the netapi32 access wintest crash.
by ekohl@svn.reactos.org
Author: ekohl Date: Wed Sep 18 20:57:15 2013 New Revision: 60200 URL:
http://svn.reactos.org/svn/reactos?rev=60200&view=rev
Log: [NETAPI32] NetLocalGroupGetMembers: Fix the typos that caused the netapi32 access wintest crash. Modified: trunk/reactos/dll/win32/netapi32/local_group.c Modified: trunk/reactos/dll/win32/netapi32/local_group.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/local_g…
============================================================================== --- trunk/reactos/dll/win32/netapi32/local_group.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/local_group.c [iso-8859-1] Wed Sep 18 20:57:15 2013 @@ -1375,7 +1375,7 @@ NET_API_STATUS ApiStatus = NERR_Success; NTSTATUS Status = STATUS_SUCCESS; - TRACE("(%s %s %d %p %d, %p %p %p)\n", debugstr_w(servername), + TRACE("(%s %s %d %p %d %p %p %p)\n", debugstr_w(servername), debugstr_w(localgroupname), level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle); @@ -1659,7 +1659,7 @@ if (EnumContext->Names[i].DomainIndex >= 0) { - memcpy(MembersInfo2->lgrmi2_domainandname, + memcpy(MembersInfo3->lgrmi3_domainandname, EnumContext->Domains->Domains[EnumContext->Names[i].DomainIndex].Name.Buffer, EnumContext->Domains->Domains[EnumContext->Names[i].DomainIndex].Name.Length);
11 years, 1 month
1
0
0
0
[ekohl] 60199: [NETAPI32] - NetLocalGroupAdd: Delete the newly created alias if setting alias information fails. - NetUserGetGroups, NetUserGetInfo and NetUserGetLocalGroups: Return NERR_UserNotFou...
by ekohl@svn.reactos.org
Author: ekohl Date: Wed Sep 18 18:02:36 2013 New Revision: 60199 URL:
http://svn.reactos.org/svn/reactos?rev=60199&view=rev
Log: [NETAPI32] - NetLocalGroupAdd: Delete the newly created alias if setting alias information fails. - NetUserGetGroups, NetUserGetInfo and NetUserGetLocalGroups: Return NERR_UserNotFound if no matching user was found. Modified: trunk/reactos/dll/win32/netapi32/local_group.c trunk/reactos/dll/win32/netapi32/user.c Modified: trunk/reactos/dll/win32/netapi32/local_group.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/local_g…
============================================================================== --- trunk/reactos/dll/win32/netapi32/local_group.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/local_group.c [iso-8859-1] Wed Sep 18 18:02:36 2013 @@ -468,7 +468,12 @@ done: if (AliasHandle != NULL) - SamCloseHandle(AliasHandle); + { + if (ApiStatus != NERR_Success) + SamDeleteAlias(AliasHandle); + else + SamCloseHandle(AliasHandle); + } if (DomainHandle != NULL) SamCloseHandle(DomainHandle); Modified: trunk/reactos/dll/win32/netapi32/user.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/user.c?…
============================================================================== --- trunk/reactos/dll/win32/netapi32/user.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/user.c [iso-8859-1] Wed Sep 18 18:02:36 2013 @@ -2692,7 +2692,10 @@ if (!NT_SUCCESS(Status)) { ERR("SamLookupNamesInDomain failed (Status %08lx)\n", Status); - ApiStatus = NetpNtStatusToApiStatus(Status); + if (Status == STATUS_NONE_MAPPED) + ApiStatus = NERR_UserNotFound; + else + ApiStatus = NetpNtStatusToApiStatus(Status); goto done; } @@ -2846,7 +2849,10 @@ if (!NT_SUCCESS(Status)) { ERR("SamOpenDomain failed (Status %08lx)\n", Status); - ApiStatus = NetpNtStatusToApiStatus(Status); + if (Status == STATUS_NONE_MAPPED) + ApiStatus = NERR_UserNotFound; + else + ApiStatus = NetpNtStatusToApiStatus(Status); goto done; } @@ -3029,7 +3035,10 @@ if (!NT_SUCCESS(Status)) { ERR("SamLookupNamesInDomain failed (Status %08lx)\n", Status); - ApiStatus = NetpNtStatusToApiStatus(Status); + if (Status == STATUS_NONE_MAPPED) + ApiStatus = NERR_UserNotFound; + else + ApiStatus = NetpNtStatusToApiStatus(Status); goto done; }
11 years, 1 month
1
0
0
0
[khornicek] 60198: [RAPPS] Mind the null terminator. Spotted by dmex. ROSAPPS-237 #resolve #comment Fixed in r60198. Thank you.
by khornicek@svn.reactos.org
Author: khornicek Date: Wed Sep 18 16:36:16 2013 New Revision: 60198 URL:
http://svn.reactos.org/svn/reactos?rev=60198&view=rev
Log: [RAPPS] Mind the null terminator. Spotted by dmex. ROSAPPS-237 #resolve #comment Fixed in r60198. Thank you. Modified: trunk/reactos/base/applications/rapps/richedit.c Modified: trunk/reactos/base/applications/rapps/richedit.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/rapps/ri…
============================================================================== --- trunk/reactos/base/applications/rapps/richedit.c [iso-8859-1] (original) +++ trunk/reactos/base/applications/rapps/richedit.c [iso-8859-1] Wed Sep 18 16:36:16 2013 @@ -25,7 +25,7 @@ pLink = (PWSTR) HeapAlloc(GetProcessHeap(), 0, (max(Link->chrg.cpMin, Link->chrg.cpMax) - - min(Link->chrg.cpMin, Link->chrg.cpMax))*sizeof(WCHAR)); + min(Link->chrg.cpMin, Link->chrg.cpMax) + 1) * sizeof(WCHAR)); if (!pLink) { /* TODO: Error message */
11 years, 1 month
1
0
0
0
[jgardou] 60197: [OPENGL32_NEW] - Implement reading from the frontbuffer.
by jgardou@svn.reactos.org
Author: jgardou Date: Tue Sep 17 23:24:13 2013 New Revision: 60197 URL:
http://svn.reactos.org/svn/reactos?rev=60197&view=rev
Log: [OPENGL32_NEW] - Implement reading from the frontbuffer. Modified: trunk/reactos/dll/opengl/opengl32_new/swimpl.c Modified: trunk/reactos/dll/opengl/opengl32_new/swimpl.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/opengl/opengl32_new/sw…
============================================================================== --- trunk/reactos/dll/opengl/opengl32_new/swimpl.c [iso-8859-1] (original) +++ trunk/reactos/dll/opengl/opengl32_new/swimpl.c [iso-8859-1] Tue Sep 17 23:24:13 2013 @@ -12,6 +12,8 @@ #include <wine/debug.h> WINE_DEFAULT_DEBUG_CHANNEL(opengl32); + +#define WIDTH_BYTES_ALIGN32(cx, bpp) ((((cx) * (bpp) + 31) & ~31) >> 3) /* OSMesa stuff */ static HMODULE hMesaDll = NULL; @@ -28,26 +30,45 @@ OSMesaContext mesa_ctx; HHOOK hook; struct sw_framebuffer* framebuffer; + GLenum readmode; }; #define SW_FB_DOUBLEBUFFERED 0x1 #define SW_FB_DIBSECTION 0x2 #define SW_FB_FREE_BITS 0x4 +#define SW_FB_DIRTY_BITS 0x8 +#define SW_FB_DIRTY_SIZE 0x10 +#define SW_FB_DIRTY (SW_FB_DIRTY_BITS | SW_FB_DIRTY_SIZE) + struct sw_framebuffer { INT sw_format; UINT format_index; - void* bits; + union + { + void* backbuffer; + void* bits; + }; + void* frontbuffer; DWORD flags; BITMAPINFO bmi; }; -/* For our special SB glFinish implementation */ +/* + * Functions that we shadow to compensate with the impossibility + * to use double buffered format in osmesa + */ static void (GLAPIENTRY * pFinish)(void); - -/* Single buffered API table */ +static void (GLAPIENTRY * pReadBuffer)(GLenum); +static void (GLAPIENTRY * pGetBooleanv)(GLenum pname, GLboolean* params); +static void (GLAPIENTRY * pGetFloatv)(GLenum pname, GLfloat* params); +static void (GLAPIENTRY * pGetDoublev)(GLenum pname, GLdouble* params); +static void (GLAPIENTRY * pGetIntegerv)(GLenum pname, GLint* params); +static void (GLAPIENTRY * pReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); + +/* API table for single buffered mode */ static GLCLTPROCTABLE sw_table_sb; -/* Double buffered API table */ +/* API table for double buffered mode */ static GLCLTPROCTABLE sw_table_db; static const struct @@ -77,12 +98,12 @@ { OSMESA_RGB_565, 16, 5, 0, 6, 5, 5, 11, 0, 0, 16, 16, 8 }, }; -/* glFinish for single-buffered pixel formats */ +/* Single buffered format specifics */ static void GLAPIENTRY sw_sb_Finish(void) { struct wgl_dc_data* dc_data = IntGetCurrentDcData(); struct sw_framebuffer* fb; - HDC hdc; + HDC hdc = IntGetCurrentDC(); /* Call osmesa */ pFinish(); @@ -91,13 +112,9 @@ fb = dc_data->sw_data; assert(fb != NULL); + /* osmesa directly updated the bits of the DIB section */ if(fb->flags & SW_FB_DIBSECTION) return; - - if(dc_data->flags & WGL_DC_OBJ_DC) - hdc = GetDC(dc_data->owner.hwnd); - else - hdc = dc_data->owner.hdc; /* Upload the data to the device */ SetDIBitsToDevice(hdc, @@ -112,11 +129,178 @@ fb->bits, &fb->bmi, DIB_RGB_COLORS); - - if(dc_data->flags & WGL_DC_OBJ_DC) - ReleaseDC(dc_data->owner.hwnd, hdc); -} - +} + +/* Double buffered format specifics */ +static void sw_db_update_frontbuffer(struct sw_framebuffer* fb, HDC hdc) +{ + unsigned int widthbytes = WIDTH_BYTES_ALIGN32(fb->bmi.bmiHeader.biWidth, + pixel_formats[fb->format_index].color_bits); + size_t buffer_size = widthbytes*fb->bmi.bmiHeader.biHeight; + if(fb->flags & SW_FB_DIRTY_SIZE) + { + if(fb->frontbuffer) + fb->frontbuffer = HeapReAlloc(GetProcessHeap(), 0, fb->frontbuffer, buffer_size); + else + fb->frontbuffer = HeapAlloc(GetProcessHeap(), 0, buffer_size); + fb->flags ^= SW_FB_DIRTY_SIZE; + } + + if(fb->flags & SW_FB_DIRTY_BITS) + { + /* On windows, there is SetDIBitsToDevice, but not FROM device... */ + HBITMAP hbmp; + HDC hmemDC = CreateCompatibleDC(hdc); + void* DIBits; + hbmp = CreateDIBSection(hdc, + &fb->bmi, + DIB_RGB_COLORS, + &DIBits, + NULL, 0); + hbmp = SelectObject(hmemDC, hbmp); + BitBlt(hdc, + 0, + 0, + fb->bmi.bmiHeader.biWidth, + fb->bmi.bmiHeader.biHeight, + hmemDC, + 0, + 0, + SRCCOPY); + /* Copy the bits */ + CopyMemory(fb->frontbuffer, DIBits, buffer_size); + /* Clean up */ + hbmp = SelectObject(hmemDC, hbmp); + DeleteDC(hmemDC); + DeleteObject(hbmp); + /* We're clean */ + fb->flags ^= SW_FB_DIRTY_BITS; + } +} + +static void GLAPIENTRY sw_db_ReadBuffer(GLenum mode) +{ + struct sw_context* ctx = (struct sw_context*)IntGetCurrentDHGLRC(); + + /* All good */ + if(ctx->readmode == mode) + return; + + /* We don't support stereoscopic formats */ + if(mode == GL_FRONT) + mode = GL_FRONT_LEFT; + + if(mode == GL_BACK) + mode = GL_BACK_LEFT; + + /* Validate the asked mode */ + if((mode != GL_FRONT_LEFT) || (mode != GL_BACK_LEFT)) + { + ERR("Incompatble mode passed: %lx.\n", mode); + return; + } + + /* Save it */ + ctx->readmode = mode; +} + +static void GLAPIENTRY sw_db_GetBooleanv(GLenum pname, GLboolean* params) +{ + struct sw_context* ctx = (struct sw_context*)IntGetCurrentDHGLRC(); + switch(pname) + { + case GL_READ_BUFFER: + /* Well, it's never 0, but eh, the spec you know */ + *params = (ctx->readmode != 0); + return; + default: + pGetBooleanv(pname, params); + return; + } +} + +static void GLAPIENTRY sw_db_GetDoublev(GLenum pname, GLdouble* params) +{ + struct sw_context* ctx = (struct sw_context*)IntGetCurrentDHGLRC(); + switch(pname) + { + case GL_READ_BUFFER: + *params = (GLdouble)ctx->readmode; + return; + default: + pGetDoublev(pname, params); + return; + } +} + +static void GLAPIENTRY sw_db_GetFloatv(GLenum pname, GLfloat* params) +{ + struct sw_context* ctx = (struct sw_context*)IntGetCurrentDHGLRC(); + switch(pname) + { + case GL_READ_BUFFER: + *params = (GLfloat)ctx->readmode; + return; + default: + pGetFloatv(pname, params); + return; + } +} + +static void GLAPIENTRY sw_db_GetIntegerv(GLenum pname, GLint* params) +{ + struct sw_context* ctx = (struct sw_context*)IntGetCurrentDHGLRC(); + switch(pname) + { + case GL_READ_BUFFER: + *params = ctx->readmode; + return; + default: + pGetIntegerv(pname, params); + return; + } +} + +static void GLAPIENTRY sw_db_ReadPixels( + GLint x, + GLint y, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + GLvoid *pixels +) +{ + struct sw_context* ctx = (struct sw_context*)IntGetCurrentDHGLRC(); + struct wgl_dc_data* dc_data = IntGetCurrentDcData(); + struct sw_framebuffer* fb = dc_data->sw_data; + + /* Quick path */ + if(ctx->readmode == GL_BACK_LEFT) + { + pReadPixels(x, y, width, height, format, type, pixels); + return; + } + + assert(ctx->readmode == GL_FRONT_LEFT); + + /* Update frontbuffer */ + if(fb->flags & SW_FB_DIRTY) + sw_db_update_frontbuffer(fb, IntGetCurrentDC()); + + /* Finish wahtever is going on on backbuffer */ + pFinish(); + /* Tell osmesa we changed the buffer */ + pOSMesaMakeCurrent(ctx->mesa_ctx, fb->frontbuffer, GL_UNSIGNED_BYTE, width, height); + + /* Go ahead */ + pReadPixels(x, y, width, height, format, type, pixels); + + /* Go back to backbuffer operation */ + pOSMesaMakeCurrent(ctx->mesa_ctx, fb->backbuffer, GL_UNSIGNED_BYTE, width, height); +} + +/* WGL <-> OSMesa functions */ static UINT index_from_format(struct wgl_dc_data* dc_data, INT format, BOOL* doubleBuffered) { UINT index, nb_win_compat = 0, start_win_compat = 0; @@ -230,7 +414,7 @@ { struct sw_framebuffer* fb; BOOL doubleBuffered; - /* NOTE: we let the wgl implementation tracking the pixel format for us */ + if(hMesaDll != NULL) goto osmesa_loaded; @@ -280,9 +464,27 @@ /* For completeness */ sw_table_db.cEntries = sw_table_sb.cEntries = OPENGL_VERSION_110_ENTRIES; - /* We are not really single buffered. */ - pFinish = sw_table_sb.glDispatchTable.Finish; - sw_table_sb.glDispatchTable.Finish = sw_sb_Finish; + /* We are not really single/double buffered. */ +#define SWAP_SB_FUNC(x) do \ +{ \ + p##x = sw_table_sb.glDispatchTable.x; \ + sw_table_sb.glDispatchTable.x = sw_sb_##x; \ +} while(0) + SWAP_SB_FUNC(Finish); +#undef SWAP_SB_FUNC +#define SWAP_DB_FUNC(x) do \ +{ \ + p##x = sw_table_db.glDispatchTable.x; \ + sw_table_db.glDispatchTable.x = sw_db_##x; \ +} while(0) + SWAP_DB_FUNC(ReadBuffer); + SWAP_DB_FUNC(ReadPixels); + SWAP_DB_FUNC(GetBooleanv); + SWAP_DB_FUNC(GetIntegerv); + SWAP_DB_FUNC(GetFloatv); + SWAP_DB_FUNC(GetDoublev); +#undef SWAP_DB_FUNC + /* OpenGL spec: flush == all pending commands are sent to the server, * and the client will receive the data in finished time. * We will call this finish in our case */ @@ -320,7 +522,9 @@ HeapFree( GetProcessHeap(), 0, context ); return NULL; } + /* Set defaults */ context->hook = NULL; + context->readmode = GL_BACK_LEFT; return (DHGLRC)context; } @@ -352,7 +556,6 @@ } } -#define WIDTH_BYTES_ALIGN32(cx, bpp) ((((cx) * (bpp) + 31) & ~31) >> 3) static LRESULT CALLBACK sw_call_window_proc( @@ -396,6 +599,9 @@ height = client_rect.bottom - client_rect.top; /* Do not reallocate for minimized windows */ if(width <= 0 || height <= 0) + goto end; + /* Do not bother with unchanged size */ + if(width == fb->bmi.bmiHeader.biWidth && height == fb->bmi.bmiHeader.biHeight) goto end; /* Resize the buffer accordingly */ widthBytes = WIDTH_BYTES_ALIGN32(width, pixel_formats[fb->format_index].color_bits); @@ -407,6 +613,8 @@ /* Re-enable osmesa */ pOSMesaMakeCurrent(ctx->mesa_ctx, fb->bits, GL_UNSIGNED_BYTE, width, height); pOSMesaPixelStore(OSMESA_ROW_LENGTH, widthBytes * 8 / pixel_formats[fb->format_index].color_bits); + /* Mark dirty bit acordingly */ + fb->flags |= SW_FB_DIRTY_SIZE; } } @@ -481,6 +689,7 @@ if(bits) { + assert(!(fb->flags & SW_FB_DOUBLEBUFFERED)); if(fb->flags & SW_FB_FREE_BITS) { fb->flags ^= SW_FB_FREE_BITS; @@ -489,14 +698,14 @@ fb->flags |= SW_FB_DIBSECTION; fb->bits = bits; } - else + else if((width != fb->bmi.bmiHeader.biWidth) || (height != fb->bmi.bmiHeader.biHeight)) { widthBytes = WIDTH_BYTES_ALIGN32(width, pixel_formats[fb->format_index].color_bits); if(fb->flags & SW_FB_FREE_BITS) fb->bits = HeapReAlloc(GetProcessHeap(), 0, fb->bits, widthBytes * height); else fb->bits = HeapAlloc(GetProcessHeap(), 0, widthBytes * height); - fb->flags |= SW_FB_FREE_BITS; + fb->flags |= (SW_FB_FREE_BITS | SW_FB_DIRTY_SIZE); fb->flags &= ~SW_FB_DIBSECTION; } @@ -572,6 +781,9 @@ /* Finish before swapping */ pFinish(); + /* We are now dirty */ + fb->flags |= SW_FB_DIRTY_BITS; + return (SetDIBitsToDevice(hdc, 0, 0,
11 years, 1 month
1
0
0
0
← Newer
1
...
26
27
28
29
30
31
32
...
56
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
Results per page:
10
25
50
100
200