diff options
Diffstat (limited to 'src')
297 files changed, 12524 insertions, 3346 deletions
diff --git a/src/3rdparty/phonon/mmf/audioplayer.cpp b/src/3rdparty/phonon/mmf/audioplayer.cpp index 77a0964..f49e898 100644 --- a/src/3rdparty/phonon/mmf/audioplayer.cpp +++ b/src/3rdparty/phonon/mmf/audioplayer.cpp @@ -99,7 +99,7 @@ int MMF::AudioPlayer::setDeviceVolume(int mmfVolume) * stack by doing a runtime check of the SDK version. */ #if !defined(__SERIES60_31__) const int err = m_player->SetVolume(mmfVolume); - if (QSysInfo::s60Version() >= QSysInfo::SV_S60_5_0) + if (QSysInfo::s60Version() >= QSysInfo::SV_S60_3_2) return err; else return KErrNone; diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag index 4813e1e..75fc5e7 100644 --- a/src/3rdparty/webkit/.tag +++ b/src/3rdparty/webkit/.tag @@ -1 +1 @@ -862268aeb7150d3795d05bfc05f661bb5c598a27 +b4aa5e1ddc41edab895132aba3cc66d9d7129444 diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog index 53fde39..1439ae0 100644 --- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog @@ -1,3 +1,202 @@ +2010-05-02 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Reviewed by Eric Seidel. + + [Qt] Enable JIT for QtWebKit on Symbian + https://bugs.webkit.org/show_bug.cgi?id=38339 + + JIT on Symbian has been stable for quite some time, it + is time to turn it on by default. + + * wtf/Platform.h: + +2010-04-28 Simon Hausmann <simon.hausmann@nokia.com>, Kent Hansen <kent.hansen@nokia.com> + + Reviewed by Darin Adler. + + JSC's currentThreadStackBase is not reentrant on some platforms + https://bugs.webkit.org/show_bug.cgi?id=37195 + + This function needs to be reentrant to avoid memory corruption on platforms where + the implementation uses global variables. + + This patch adds a mutex lock where necessary and makes the Symbian implementation + reentrant. + + * runtime/Collector.cpp: + (JSC::currentThreadStackBaseMutex): + (JSC::currentThreadStackBase): + +2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Simon Hausmann. + + Compile fix for Visual Studio 2010 + https://bugs.webkit.org/show_bug.cgi?id=37867 + + Patch by Prasanth Ullattil <prasanth.ullattil@nokia.com> + + * runtime/Structure.cpp: + (JSC::Structure::transitionTableAdd): + * wtf/MathExtras.h: + * wtf/Platform.h: + +2010-04-27 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Simon Hausmann. + + Rename COMPILER(MSVC7) to COMPILER(MSVC7_OR_LOWER) + + * config.h: + (JSC::Structure::transitionTableAdd): + * wtf/Assertions.h: + * wtf/Atomics.h: + * wtf/CurrentTime.h: + (WTF::getLocalTime): + * wtf/Platform.h: + * wtf/StaticConstructors.h: + * wtf/StringExtras.h: + * wtf/Vector.h: + (WTF::::append): + +2010-04-15 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Fix Mac build break. + + https://bugs.webkit.org/show_bug.cgi?id=37867 + - Make sure JavaScriptCore's debug_and_release config follows that + of WebCore. + - Use different name for JavaScriptCore target in debug and release + since they might be written in the same path at the same time on + parallel builds + - Consolidate the DESTDIR determination logic in JavaScriptCore.pri + + * JavaScriptCore.pri: + * JavaScriptCore.pro: + +2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Make sure WebKit is not compiled using C++0x. + https://bugs.webkit.org/show_bug.cgi?id=37867 + + As the rest of Qt compiles in the C++0x mode, people might start + compiling it in this mode. WebKit don't support this yet. + + Patch by Thiago Macieira <thiago.macieira@nokia.com> + + * JavaScriptCore.pro: + +2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Remove dependency of JSC to QtGui + https://bugs.webkit.org/show_bug.cgi?id=37867 + + The patch also make sure that hal.h is in the include path on Symbian. + The dependency to QtGui took care of that before. + + Patch by Thiago Macieira <thiago.macieira@nokia.com> + and Rohan McGovern <rohan.mcgovern@nokia.com> + + * JavaScriptCore.pri: + * JavaScriptCore.pro: + +2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Corrects symbols visibility for JavaScriptCore. + + https://bugs.webkit.org/show_bug.cgi?id=37867 + + * JavaScriptCore.pro: + +2010-04-27 Thomas Zander <t.zander@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fix the build on Symbian on Linux using the Makefile based mkspec + + * JavaScriptCore.pri: It is necessary to specify the library search path + when linking against JavaScriptCore. + +2010-04-02 Ruben Van Boxem <vanboxem.ruben@gmail.com> + + Reviewed by Eric Seidel. + + Mingw-w64 fixes for JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=35607 + + * runtime/Collector.cpp: use the msvc code for mingw-w64 (but not mingw-w32) + (JSC::Heap::allocateBlock): + (JSC::Heap::freeBlockPtr): + (JSC::currentThreadStackBase): + (JSC::currentThreadStackBase): + * wtf/Platform.h: added COMPILER(MINGW64) check to differentiate between mingw.org and mingw-w64 functions + +2010-04-14 Kent Hansen <kent.hansen@nokia.com> + + Reviewed by Maciej Stachowiak. + + Mac OS X: Use deployment target to determine whether memory tagging should be enabled + https://bugs.webkit.org/show_bug.cgi?id=34888 + + When building on (Snow) Leopard but targeting Tiger + (TARGETING_TIGER defined, BUILDING_ON_TIGER not defined), + WebKit would crash on Tiger because the tags passed to mmap + caused those function calls to fail. + + Conversely, when building on Tiger but targeting Leopard + (BUILDING_ON_TIGER defined, TARGETING_LEOPARD defined), WebKit + would crash on Leopard because the tags passed to vm_map and + vm_allocate caused those function calls to fail. + + Solution: Use TARGETING_TIGER rather than BUILDING_ON_TIGER to + govern the tag definitions. Use the same tags for vm_map and + vm_allocate regardless of target, since they work on + both. Fall back to the mmap tags that work on Tiger (that is, + "no tags") if targeting Tiger, since those tags also work on + Leopard. + + * wtf/VMTags.h: + +2010-04-18 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt] Fix JavaScriptCore's include path for WinCE builds + + https://bugs.webkit.org/show_bug.cgi?id=36751 + + * JavaScriptCore.pri: + +2010-04-19 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Build fix for WinCE. + + Moved the include of the non-existing errno.h header file inside + platform guard macros. + + * jit/ExecutableAllocatorFixedVMPool.cpp: + +2010-04-12 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by nobody, build fix. + + [Qt] Build fix for Mac when building with build-webkit --qt + + Specifying no configuration on Mac builds WebCore both in debug + and release. JavaScriptCore has to follow this rule as well. + + * JavaScriptCore.pro: + 2010-04-09 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> Reviewed by Simon Hausmann. diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri index 8aa914f..b7f6665 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri @@ -1,12 +1,14 @@ # JavaScriptCore - Qt4 build info VPATH += $$PWD -# Output in JavaScriptCore/<config> -CONFIG(debug, debug|release): JAVASCRIPTCORE_DESTDIR = debug -CONFIG(release, debug|release): JAVASCRIPTCORE_DESTDIR = release -# Use different targets to prevent parallel builds file clashes on Mac -CONFIG(debug, debug|release): JAVASCRIPTCORE_TARGET = jscored -CONFIG(release, debug|release): JAVASCRIPTCORE_TARGET = jscore - +CONFIG(debug, debug|release) { + # Output in JavaScriptCore/<config> + JAVASCRIPTCORE_DESTDIR = debug + # Use a config-specific target to prevent parallel builds file clashes on Mac + JAVASCRIPTCORE_TARGET = jscored +} else { + JAVASCRIPTCORE_DESTDIR = release + JAVASCRIPTCORE_TARGET = jscore +} CONFIG(standalone_package) { isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = $$PWD/generated } else { @@ -74,10 +76,12 @@ defineTest(addJavaScriptCoreLib) { pathToJavaScriptCoreOutput = $$ARGS/$$JAVASCRIPTCORE_DESTDIR win32-msvc* { - QMAKE_LIBDIR += $$pathToJavaScriptCoreOutput + LIBS += -L$$pathToJavaScriptCoreOutput LIBS += -l$$JAVASCRIPTCORE_TARGET } else:symbian { LIBS += -l$${JAVASCRIPTCORE_TARGET}.lib + # The default symbian build system does not use library paths at all. However when building with + # qmake's symbian makespec that uses Makefiles QMAKE_LIBDIR += $$pathToJavaScriptCoreOutput } else { # Make sure jscore will be early in the list of libraries to workaround a bug in MinGW diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro index 280742f..8e086b3 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro @@ -16,10 +16,6 @@ CONFIG += depend_includepath contains(QT_CONFIG, embedded):CONFIG += embedded -# Add these two lines both for QTDIR_build and not because we don't include qbase.pri -contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols -unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions - CONFIG(QTDIR_build) { # Make sure we compile both debug and release on mac when inside Qt. # This line was extracted from qbase.pri instead of including the whole file @@ -30,8 +26,16 @@ CONFIG(QTDIR_build) { } else { # Release OBJECTS_DIR = obj/release } + # Make sure that build_all follows the build_all config in WebCore + mac:contains(QT_CONFIG, qt_framework):!CONFIG(webkit_no_framework):!build_pass:CONFIG += build_all } +# WebCore adds these config only when in a standalone build. +# qbase.pri takes care of that when in a QTDIR_build +# Here we add the config for both cases since we don't include qbase.pri +contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols +unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions + CONFIG(QTDIR_build) { # Remove the following 2 lines if you want debug information in JavaScriptCore CONFIG -= separate_debug_info @@ -223,5 +227,5 @@ SOURCES += \ SOURCES += wtf/TCSystemAlloc.cpp } -# JavaScriptCore is not going to build with C++0x any time soon +# Disable C++0x mode in JSC for those who enabled it in their Qt's mkspec *-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x diff --git a/src/3rdparty/webkit/JavaScriptCore/config.h b/src/3rdparty/webkit/JavaScriptCore/config.h index d5fdfe9..acc162a 100644 --- a/src/3rdparty/webkit/JavaScriptCore/config.h +++ b/src/3rdparty/webkit/JavaScriptCore/config.h @@ -44,7 +44,7 @@ #define max max #define min min -#if !COMPILER(MSVC7) && !OS(WINCE) +#if !COMPILER(MSVC7_OR_LOWER) && !OS(WINCE) // We need to define this before the first #include of stdlib.h or it won't contain rand_s. #ifndef _CRT_RAND_S #define _CRT_RAND_S diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h index ffe067f..88d3717 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h @@ -1,4 +1,4 @@ -// Automatically generated from runtime\ArrayPrototype.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT! +// Automatically generated from runtime/ArrayPrototype.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT! #include "Lookup.h" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h index 56acdba..0174298 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h @@ -1,4 +1,4 @@ -// Automatically generated from runtime\DatePrototype.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT! +// Automatically generated from runtime/DatePrototype.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT! #include "Lookup.h" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp index 50ff9cd..e62a1c4 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp @@ -76,7 +76,7 @@ /* Copy the first part of user declarations. */ /* Line 189 of yacc.c */ -#line 3 "parser\\Grammar.y" +#line 3 "parser/Grammar.y" /* @@ -221,7 +221,7 @@ static inline void appendToVarDeclarationList(JSGlobalData* globalData, ParserAr /* Line 189 of yacc.c */ -#line 225 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.c" +#line 225 "/JavaScriptCore/generated/Grammar.tab.c" /* Enabling traces. */ #ifndef YYDEBUG @@ -321,7 +321,7 @@ typedef union YYSTYPE { /* Line 214 of yacc.c */ -#line 146 "parser\\Grammar.y" +#line 146 "parser/Grammar.y" int intValue; double doubleValue; @@ -356,7 +356,7 @@ typedef union YYSTYPE /* Line 214 of yacc.c */ -#line 360 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.c" +#line 360 "/JavaScriptCore/generated/Grammar.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -380,7 +380,7 @@ typedef struct YYLTYPE /* Copy the second part of user declarations. */ /* Line 264 of yacc.c */ -#line 178 "parser\\Grammar.y" +#line 178 "parser/Grammar.y" template <typename T> inline void setStatementLocation(StatementNode* statement, const T& start, const T& end) @@ -396,7 +396,7 @@ static inline void setExceptionLocation(ThrowableExpressionData* node, unsigned /* Line 264 of yacc.c */ -#line 400 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.c" +#line 400 "/JavaScriptCore/generated/Grammar.tab.c" #ifdef short # undef short @@ -2974,42 +2974,42 @@ yyreduce: case 2: /* Line 1455 of yacc.c */ -#line 293 "parser\\Grammar.y" +#line 293 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NullNode(GLOBAL_DATA), 0, 1); ;} break; case 3: /* Line 1455 of yacc.c */ -#line 294 "parser\\Grammar.y" +#line 294 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, true), 0, 1); ;} break; case 4: /* Line 1455 of yacc.c */ -#line 295 "parser\\Grammar.y" +#line 295 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, false), 0, 1); ;} break; case 5: /* Line 1455 of yacc.c */ -#line 296 "parser\\Grammar.y" +#line 296 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeNumberNode(GLOBAL_DATA, (yyvsp[(1) - (1)].doubleValue)), 0, 1); ;} break; case 6: /* Line 1455 of yacc.c */ -#line 297 "parser\\Grammar.y" +#line 297 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StringNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident)), 0, 1); ;} break; case 7: /* Line 1455 of yacc.c */ -#line 298 "parser\\Grammar.y" +#line 298 "parser/Grammar.y" { Lexer& l = *GLOBAL_DATA->lexer; const Identifier* pattern; @@ -3026,7 +3026,7 @@ yyreduce: case 8: /* Line 1455 of yacc.c */ -#line 309 "parser\\Grammar.y" +#line 309 "parser/Grammar.y" { Lexer& l = *GLOBAL_DATA->lexer; const Identifier* pattern; @@ -3043,35 +3043,35 @@ yyreduce: case 9: /* Line 1455 of yacc.c */ -#line 323 "parser\\Grammar.y" +#line 323 "parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 10: /* Line 1455 of yacc.c */ -#line 324 "parser\\Grammar.y" +#line 324 "parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 11: /* Line 1455 of yacc.c */ -#line 325 "parser\\Grammar.y" +#line 325 "parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, (yyvsp[(1) - (3)].doubleValue), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 12: /* Line 1455 of yacc.c */ -#line 326 "parser\\Grammar.y" +#line 326 "parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (7)].ident), *(yyvsp[(2) - (7)].ident), 0, (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), ClosureFeature, 0); setStatementLocation((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); if (!(yyval.propertyNode).m_node) YYABORT; ;} break; case 13: /* Line 1455 of yacc.c */ -#line 328 "parser\\Grammar.y" +#line 328 "parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (8)].ident), *(yyvsp[(2) - (8)].ident), (yyvsp[(4) - (8)].parameterList).m_node.head, (yyvsp[(7) - (8)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line)), (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); if ((yyvsp[(4) - (8)].parameterList).m_features & ArgumentsFeature) @@ -3085,7 +3085,7 @@ yyreduce: case 14: /* Line 1455 of yacc.c */ -#line 339 "parser\\Grammar.y" +#line 339 "parser/Grammar.y" { (yyval.propertyList).m_node.head = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].propertyNode).m_node); (yyval.propertyList).m_node.tail = (yyval.propertyList).m_node.head; (yyval.propertyList).m_features = (yyvsp[(1) - (1)].propertyNode).m_features; @@ -3095,7 +3095,7 @@ yyreduce: case 15: /* Line 1455 of yacc.c */ -#line 343 "parser\\Grammar.y" +#line 343 "parser/Grammar.y" { (yyval.propertyList).m_node.head = (yyvsp[(1) - (3)].propertyList).m_node.head; (yyval.propertyList).m_node.tail = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, (yyvsp[(3) - (3)].propertyNode).m_node, (yyvsp[(1) - (3)].propertyList).m_node.tail); (yyval.propertyList).m_features = (yyvsp[(1) - (3)].propertyList).m_features | (yyvsp[(3) - (3)].propertyNode).m_features; @@ -3105,70 +3105,70 @@ yyreduce: case 17: /* Line 1455 of yacc.c */ -#line 351 "parser\\Grammar.y" +#line 351 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA), 0, 0); ;} break; case 18: /* Line 1455 of yacc.c */ -#line 352 "parser\\Grammar.y" +#line 352 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, (yyvsp[(2) - (3)].propertyList).m_node.head), (yyvsp[(2) - (3)].propertyList).m_features, (yyvsp[(2) - (3)].propertyList).m_numConstants); ;} break; case 19: /* Line 1455 of yacc.c */ -#line 354 "parser\\Grammar.y" +#line 354 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, (yyvsp[(2) - (4)].propertyList).m_node.head), (yyvsp[(2) - (4)].propertyList).m_features, (yyvsp[(2) - (4)].propertyList).m_numConstants); ;} break; case 20: /* Line 1455 of yacc.c */ -#line 358 "parser\\Grammar.y" +#line 358 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ThisNode(GLOBAL_DATA), ThisFeature, 0); ;} break; case 23: /* Line 1455 of yacc.c */ -#line 361 "parser\\Grammar.y" +#line 361 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident), (yylsp[(1) - (1)]).first_column), (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0, 0); ;} break; case 24: /* Line 1455 of yacc.c */ -#line 362 "parser\\Grammar.y" +#line 362 "parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (3)].expressionNode); ;} break; case 25: /* Line 1455 of yacc.c */ -#line 366 "parser\\Grammar.y" +#line 366 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(2) - (3)].intValue)), 0, (yyvsp[(2) - (3)].intValue) ? 1 : 0); ;} break; case 26: /* Line 1455 of yacc.c */ -#line 367 "parser\\Grammar.y" +#line 367 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(2) - (3)].elementList).m_node.head), (yyvsp[(2) - (3)].elementList).m_features, (yyvsp[(2) - (3)].elementList).m_numConstants); ;} break; case 27: /* Line 1455 of yacc.c */ -#line 368 "parser\\Grammar.y" +#line 368 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(4) - (5)].intValue), (yyvsp[(2) - (5)].elementList).m_node.head), (yyvsp[(2) - (5)].elementList).m_features, (yyvsp[(4) - (5)].intValue) ? (yyvsp[(2) - (5)].elementList).m_numConstants + 1 : (yyvsp[(2) - (5)].elementList).m_numConstants); ;} break; case 28: /* Line 1455 of yacc.c */ -#line 372 "parser\\Grammar.y" +#line 372 "parser/Grammar.y" { (yyval.elementList).m_node.head = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].intValue), (yyvsp[(2) - (2)].expressionNode).m_node); (yyval.elementList).m_node.tail = (yyval.elementList).m_node.head; (yyval.elementList).m_features = (yyvsp[(2) - (2)].expressionNode).m_features; @@ -3178,7 +3178,7 @@ yyreduce: case 29: /* Line 1455 of yacc.c */ -#line 377 "parser\\Grammar.y" +#line 377 "parser/Grammar.y" { (yyval.elementList).m_node.head = (yyvsp[(1) - (4)].elementList).m_node.head; (yyval.elementList).m_node.tail = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, (yyvsp[(1) - (4)].elementList).m_node.tail, (yyvsp[(3) - (4)].intValue), (yyvsp[(4) - (4)].expressionNode).m_node); (yyval.elementList).m_features = (yyvsp[(1) - (4)].elementList).m_features | (yyvsp[(4) - (4)].expressionNode).m_features; @@ -3188,35 +3188,35 @@ yyreduce: case 30: /* Line 1455 of yacc.c */ -#line 384 "parser\\Grammar.y" +#line 384 "parser/Grammar.y" { (yyval.intValue) = 0; ;} break; case 32: /* Line 1455 of yacc.c */ -#line 389 "parser\\Grammar.y" +#line 389 "parser/Grammar.y" { (yyval.intValue) = 1; ;} break; case 33: /* Line 1455 of yacc.c */ -#line 390 "parser\\Grammar.y" +#line 390 "parser/Grammar.y" { (yyval.intValue) = (yyvsp[(1) - (2)].intValue) + 1; ;} break; case 35: /* Line 1455 of yacc.c */ -#line 395 "parser\\Grammar.y" +#line 395 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>((yyvsp[(1) - (1)].funcExprNode).m_node, (yyvsp[(1) - (1)].funcExprNode).m_features, (yyvsp[(1) - (1)].funcExprNode).m_numConstants); ;} break; case 36: /* Line 1455 of yacc.c */ -#line 396 "parser\\Grammar.y" +#line 396 "parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (4)].expressionNode).m_features | (yyvsp[(3) - (4)].expressionNode).m_features, (yyvsp[(1) - (4)].expressionNode).m_numConstants + (yyvsp[(3) - (4)].expressionNode).m_numConstants); @@ -3226,7 +3226,7 @@ yyreduce: case 37: /* Line 1455 of yacc.c */ -#line 400 "parser\\Grammar.y" +#line 400 "parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants); @@ -3236,7 +3236,7 @@ yyreduce: case 38: /* Line 1455 of yacc.c */ -#line 404 "parser\\Grammar.y" +#line 404 "parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].argumentsNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(2) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].argumentsNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].argumentsNode).m_numConstants); @@ -3246,7 +3246,7 @@ yyreduce: case 40: /* Line 1455 of yacc.c */ -#line 412 "parser\\Grammar.y" +#line 412 "parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (4)].expressionNode).m_features | (yyvsp[(3) - (4)].expressionNode).m_features, (yyvsp[(1) - (4)].expressionNode).m_numConstants + (yyvsp[(3) - (4)].expressionNode).m_numConstants); @@ -3256,7 +3256,7 @@ yyreduce: case 41: /* Line 1455 of yacc.c */ -#line 416 "parser\\Grammar.y" +#line 416 "parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants); @@ -3266,7 +3266,7 @@ yyreduce: case 42: /* Line 1455 of yacc.c */ -#line 420 "parser\\Grammar.y" +#line 420 "parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].argumentsNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(2) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].argumentsNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].argumentsNode).m_numConstants); @@ -3276,7 +3276,7 @@ yyreduce: case 44: /* Line 1455 of yacc.c */ -#line 428 "parser\\Grammar.y" +#line 428 "parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); @@ -3286,7 +3286,7 @@ yyreduce: case 46: /* Line 1455 of yacc.c */ -#line 436 "parser\\Grammar.y" +#line 436 "parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); @@ -3296,21 +3296,21 @@ yyreduce: case 47: /* Line 1455 of yacc.c */ -#line 443 "parser\\Grammar.y" +#line 443 "parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 48: /* Line 1455 of yacc.c */ -#line 444 "parser\\Grammar.y" +#line 444 "parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 49: /* Line 1455 of yacc.c */ -#line 445 "parser\\Grammar.y" +#line 445 "parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (4)].expressionNode).m_features | (yyvsp[(3) - (4)].expressionNode).m_features, (yyvsp[(1) - (4)].expressionNode).m_numConstants + (yyvsp[(3) - (4)].expressionNode).m_numConstants); @@ -3320,7 +3320,7 @@ yyreduce: case 50: /* Line 1455 of yacc.c */ -#line 449 "parser\\Grammar.y" +#line 449 "parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants); ;} @@ -3329,21 +3329,21 @@ yyreduce: case 51: /* Line 1455 of yacc.c */ -#line 455 "parser\\Grammar.y" +#line 455 "parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 52: /* Line 1455 of yacc.c */ -#line 456 "parser\\Grammar.y" +#line 456 "parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 53: /* Line 1455 of yacc.c */ -#line 457 "parser\\Grammar.y" +#line 457 "parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (4)].expressionNode).m_features | (yyvsp[(3) - (4)].expressionNode).m_features, (yyvsp[(1) - (4)].expressionNode).m_numConstants + (yyvsp[(3) - (4)].expressionNode).m_numConstants); @@ -3353,7 +3353,7 @@ yyreduce: case 54: /* Line 1455 of yacc.c */ -#line 461 "parser\\Grammar.y" +#line 461 "parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants); @@ -3363,21 +3363,21 @@ yyreduce: case 55: /* Line 1455 of yacc.c */ -#line 468 "parser\\Grammar.y" +#line 468 "parser/Grammar.y" { (yyval.argumentsNode) = createNodeInfo<ArgumentsNode*>(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA), 0, 0); ;} break; case 56: /* Line 1455 of yacc.c */ -#line 469 "parser\\Grammar.y" +#line 469 "parser/Grammar.y" { (yyval.argumentsNode) = createNodeInfo<ArgumentsNode*>(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA, (yyvsp[(2) - (3)].argumentList).m_node.head), (yyvsp[(2) - (3)].argumentList).m_features, (yyvsp[(2) - (3)].argumentList).m_numConstants); ;} break; case 57: /* Line 1455 of yacc.c */ -#line 473 "parser\\Grammar.y" +#line 473 "parser/Grammar.y" { (yyval.argumentList).m_node.head = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].expressionNode).m_node); (yyval.argumentList).m_node.tail = (yyval.argumentList).m_node.head; (yyval.argumentList).m_features = (yyvsp[(1) - (1)].expressionNode).m_features; @@ -3387,7 +3387,7 @@ yyreduce: case 58: /* Line 1455 of yacc.c */ -#line 477 "parser\\Grammar.y" +#line 477 "parser/Grammar.y" { (yyval.argumentList).m_node.head = (yyvsp[(1) - (3)].argumentList).m_node.head; (yyval.argumentList).m_node.tail = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, (yyvsp[(1) - (3)].argumentList).m_node.tail, (yyvsp[(3) - (3)].expressionNode).m_node); (yyval.argumentList).m_features = (yyvsp[(1) - (3)].argumentList).m_features | (yyvsp[(3) - (3)].expressionNode).m_features; @@ -3397,252 +3397,252 @@ yyreduce: case 64: /* Line 1455 of yacc.c */ -#line 495 "parser\\Grammar.y" +#line 495 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 65: /* Line 1455 of yacc.c */ -#line 496 "parser\\Grammar.y" +#line 496 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 67: /* Line 1455 of yacc.c */ -#line 501 "parser\\Grammar.y" +#line 501 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 68: /* Line 1455 of yacc.c */ -#line 502 "parser\\Grammar.y" +#line 502 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 69: /* Line 1455 of yacc.c */ -#line 506 "parser\\Grammar.y" +#line 506 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeDeleteNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 70: /* Line 1455 of yacc.c */ -#line 507 "parser\\Grammar.y" +#line 507 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) VoidNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants + 1); ;} break; case 71: /* Line 1455 of yacc.c */ -#line 508 "parser\\Grammar.y" +#line 508 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeTypeOfNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 72: /* Line 1455 of yacc.c */ -#line 509 "parser\\Grammar.y" +#line 509 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 73: /* Line 1455 of yacc.c */ -#line 510 "parser\\Grammar.y" +#line 510 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 74: /* Line 1455 of yacc.c */ -#line 511 "parser\\Grammar.y" +#line 511 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 75: /* Line 1455 of yacc.c */ -#line 512 "parser\\Grammar.y" +#line 512 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 76: /* Line 1455 of yacc.c */ -#line 513 "parser\\Grammar.y" +#line 513 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) UnaryPlusNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 77: /* Line 1455 of yacc.c */ -#line 514 "parser\\Grammar.y" +#line 514 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeNegateNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 78: /* Line 1455 of yacc.c */ -#line 515 "parser\\Grammar.y" +#line 515 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeBitwiseNotNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 79: /* Line 1455 of yacc.c */ -#line 516 "parser\\Grammar.y" +#line 516 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalNotNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 85: /* Line 1455 of yacc.c */ -#line 530 "parser\\Grammar.y" +#line 530 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeMultNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 86: /* Line 1455 of yacc.c */ -#line 531 "parser\\Grammar.y" +#line 531 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeDivNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 87: /* Line 1455 of yacc.c */ -#line 532 "parser\\Grammar.y" +#line 532 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 89: /* Line 1455 of yacc.c */ -#line 538 "parser\\Grammar.y" +#line 538 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeMultNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 90: /* Line 1455 of yacc.c */ -#line 540 "parser\\Grammar.y" +#line 540 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeDivNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 91: /* Line 1455 of yacc.c */ -#line 542 "parser\\Grammar.y" +#line 542 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 93: /* Line 1455 of yacc.c */ -#line 547 "parser\\Grammar.y" +#line 547 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAddNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 94: /* Line 1455 of yacc.c */ -#line 548 "parser\\Grammar.y" +#line 548 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeSubNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 96: /* Line 1455 of yacc.c */ -#line 554 "parser\\Grammar.y" +#line 554 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAddNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 97: /* Line 1455 of yacc.c */ -#line 556 "parser\\Grammar.y" +#line 556 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeSubNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 99: /* Line 1455 of yacc.c */ -#line 561 "parser\\Grammar.y" +#line 561 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeLeftShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 100: /* Line 1455 of yacc.c */ -#line 562 "parser\\Grammar.y" +#line 562 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 101: /* Line 1455 of yacc.c */ -#line 563 "parser\\Grammar.y" +#line 563 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 103: /* Line 1455 of yacc.c */ -#line 568 "parser\\Grammar.y" +#line 568 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeLeftShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 104: /* Line 1455 of yacc.c */ -#line 569 "parser\\Grammar.y" +#line 569 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 105: /* Line 1455 of yacc.c */ -#line 570 "parser\\Grammar.y" +#line 570 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 107: /* Line 1455 of yacc.c */ -#line 575 "parser\\Grammar.y" +#line 575 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 108: /* Line 1455 of yacc.c */ -#line 576 "parser\\Grammar.y" +#line 576 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 109: /* Line 1455 of yacc.c */ -#line 577 "parser\\Grammar.y" +#line 577 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 110: /* Line 1455 of yacc.c */ -#line 578 "parser\\Grammar.y" +#line 578 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 111: /* Line 1455 of yacc.c */ -#line 579 "parser\\Grammar.y" +#line 579 "parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} @@ -3651,7 +3651,7 @@ yyreduce: case 112: /* Line 1455 of yacc.c */ -#line 582 "parser\\Grammar.y" +#line 582 "parser/Grammar.y" { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} @@ -3660,35 +3660,35 @@ yyreduce: case 114: /* Line 1455 of yacc.c */ -#line 589 "parser\\Grammar.y" +#line 589 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 115: /* Line 1455 of yacc.c */ -#line 590 "parser\\Grammar.y" +#line 590 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 116: /* Line 1455 of yacc.c */ -#line 591 "parser\\Grammar.y" +#line 591 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 117: /* Line 1455 of yacc.c */ -#line 592 "parser\\Grammar.y" +#line 592 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 118: /* Line 1455 of yacc.c */ -#line 594 "parser\\Grammar.y" +#line 594 "parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} @@ -3697,35 +3697,35 @@ yyreduce: case 120: /* Line 1455 of yacc.c */ -#line 601 "parser\\Grammar.y" +#line 601 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 121: /* Line 1455 of yacc.c */ -#line 602 "parser\\Grammar.y" +#line 602 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 122: /* Line 1455 of yacc.c */ -#line 603 "parser\\Grammar.y" +#line 603 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 123: /* Line 1455 of yacc.c */ -#line 604 "parser\\Grammar.y" +#line 604 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 124: /* Line 1455 of yacc.c */ -#line 606 "parser\\Grammar.y" +#line 606 "parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} @@ -3734,7 +3734,7 @@ yyreduce: case 125: /* Line 1455 of yacc.c */ -#line 610 "parser\\Grammar.y" +#line 610 "parser/Grammar.y" { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} @@ -3743,217 +3743,217 @@ yyreduce: case 127: /* Line 1455 of yacc.c */ -#line 617 "parser\\Grammar.y" +#line 617 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 128: /* Line 1455 of yacc.c */ -#line 618 "parser\\Grammar.y" +#line 618 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 129: /* Line 1455 of yacc.c */ -#line 619 "parser\\Grammar.y" +#line 619 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 130: /* Line 1455 of yacc.c */ -#line 620 "parser\\Grammar.y" +#line 620 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 132: /* Line 1455 of yacc.c */ -#line 626 "parser\\Grammar.y" +#line 626 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 133: /* Line 1455 of yacc.c */ -#line 628 "parser\\Grammar.y" +#line 628 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 134: /* Line 1455 of yacc.c */ -#line 630 "parser\\Grammar.y" +#line 630 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 135: /* Line 1455 of yacc.c */ -#line 632 "parser\\Grammar.y" +#line 632 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 137: /* Line 1455 of yacc.c */ -#line 638 "parser\\Grammar.y" +#line 638 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 138: /* Line 1455 of yacc.c */ -#line 639 "parser\\Grammar.y" +#line 639 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 139: /* Line 1455 of yacc.c */ -#line 641 "parser\\Grammar.y" +#line 641 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 140: /* Line 1455 of yacc.c */ -#line 643 "parser\\Grammar.y" +#line 643 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 142: /* Line 1455 of yacc.c */ -#line 648 "parser\\Grammar.y" +#line 648 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 144: /* Line 1455 of yacc.c */ -#line 654 "parser\\Grammar.y" +#line 654 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 146: /* Line 1455 of yacc.c */ -#line 659 "parser\\Grammar.y" +#line 659 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 148: /* Line 1455 of yacc.c */ -#line 664 "parser\\Grammar.y" +#line 664 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 150: /* Line 1455 of yacc.c */ -#line 670 "parser\\Grammar.y" +#line 670 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 152: /* Line 1455 of yacc.c */ -#line 676 "parser\\Grammar.y" +#line 676 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 154: /* Line 1455 of yacc.c */ -#line 681 "parser\\Grammar.y" +#line 681 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 156: /* Line 1455 of yacc.c */ -#line 687 "parser\\Grammar.y" +#line 687 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 158: /* Line 1455 of yacc.c */ -#line 693 "parser\\Grammar.y" +#line 693 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 160: /* Line 1455 of yacc.c */ -#line 698 "parser\\Grammar.y" +#line 698 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 162: /* Line 1455 of yacc.c */ -#line 704 "parser\\Grammar.y" +#line 704 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 164: /* Line 1455 of yacc.c */ -#line 710 "parser\\Grammar.y" +#line 710 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 166: /* Line 1455 of yacc.c */ -#line 715 "parser\\Grammar.y" +#line 715 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 168: /* Line 1455 of yacc.c */ -#line 721 "parser\\Grammar.y" +#line 721 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 170: /* Line 1455 of yacc.c */ -#line 726 "parser\\Grammar.y" +#line 726 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 172: /* Line 1455 of yacc.c */ -#line 732 "parser\\Grammar.y" +#line 732 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 174: /* Line 1455 of yacc.c */ -#line 738 "parser\\Grammar.y" +#line 738 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 176: /* Line 1455 of yacc.c */ -#line 744 "parser\\Grammar.y" +#line 744 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 178: /* Line 1455 of yacc.c */ -#line 750 "parser\\Grammar.y" +#line 750 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} @@ -3962,7 +3962,7 @@ yyreduce: case 180: /* Line 1455 of yacc.c */ -#line 758 "parser\\Grammar.y" +#line 758 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} @@ -3971,7 +3971,7 @@ yyreduce: case 182: /* Line 1455 of yacc.c */ -#line 766 "parser\\Grammar.y" +#line 766 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} @@ -3980,112 +3980,112 @@ yyreduce: case 183: /* Line 1455 of yacc.c */ -#line 772 "parser\\Grammar.y" +#line 772 "parser/Grammar.y" { (yyval.op) = OpEqual; ;} break; case 184: /* Line 1455 of yacc.c */ -#line 773 "parser\\Grammar.y" +#line 773 "parser/Grammar.y" { (yyval.op) = OpPlusEq; ;} break; case 185: /* Line 1455 of yacc.c */ -#line 774 "parser\\Grammar.y" +#line 774 "parser/Grammar.y" { (yyval.op) = OpMinusEq; ;} break; case 186: /* Line 1455 of yacc.c */ -#line 775 "parser\\Grammar.y" +#line 775 "parser/Grammar.y" { (yyval.op) = OpMultEq; ;} break; case 187: /* Line 1455 of yacc.c */ -#line 776 "parser\\Grammar.y" +#line 776 "parser/Grammar.y" { (yyval.op) = OpDivEq; ;} break; case 188: /* Line 1455 of yacc.c */ -#line 777 "parser\\Grammar.y" +#line 777 "parser/Grammar.y" { (yyval.op) = OpLShift; ;} break; case 189: /* Line 1455 of yacc.c */ -#line 778 "parser\\Grammar.y" +#line 778 "parser/Grammar.y" { (yyval.op) = OpRShift; ;} break; case 190: /* Line 1455 of yacc.c */ -#line 779 "parser\\Grammar.y" +#line 779 "parser/Grammar.y" { (yyval.op) = OpURShift; ;} break; case 191: /* Line 1455 of yacc.c */ -#line 780 "parser\\Grammar.y" +#line 780 "parser/Grammar.y" { (yyval.op) = OpAndEq; ;} break; case 192: /* Line 1455 of yacc.c */ -#line 781 "parser\\Grammar.y" +#line 781 "parser/Grammar.y" { (yyval.op) = OpXOrEq; ;} break; case 193: /* Line 1455 of yacc.c */ -#line 782 "parser\\Grammar.y" +#line 782 "parser/Grammar.y" { (yyval.op) = OpOrEq; ;} break; case 194: /* Line 1455 of yacc.c */ -#line 783 "parser\\Grammar.y" +#line 783 "parser/Grammar.y" { (yyval.op) = OpModEq; ;} break; case 196: /* Line 1455 of yacc.c */ -#line 788 "parser\\Grammar.y" +#line 788 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 198: /* Line 1455 of yacc.c */ -#line 793 "parser\\Grammar.y" +#line 793 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 200: /* Line 1455 of yacc.c */ -#line 798 "parser\\Grammar.y" +#line 798 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 218: /* Line 1455 of yacc.c */ -#line 822 "parser\\Grammar.y" +#line 822 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BlockNode(GLOBAL_DATA, 0), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; @@ -4093,7 +4093,7 @@ yyreduce: case 219: /* Line 1455 of yacc.c */ -#line 824 "parser\\Grammar.y" +#line 824 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BlockNode(GLOBAL_DATA, (yyvsp[(2) - (3)].sourceElements).m_node), (yyvsp[(2) - (3)].sourceElements).m_varDeclarations, (yyvsp[(2) - (3)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (3)].sourceElements).m_features, (yyvsp[(2) - (3)].sourceElements).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; @@ -4101,7 +4101,7 @@ yyreduce: case 220: /* Line 1455 of yacc.c */ -#line 829 "parser\\Grammar.y" +#line 829 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].varDeclList).m_node), (yyvsp[(2) - (3)].varDeclList).m_varDeclarations, (yyvsp[(2) - (3)].varDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].varDeclList).m_features, (yyvsp[(2) - (3)].varDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; @@ -4109,7 +4109,7 @@ yyreduce: case 221: /* Line 1455 of yacc.c */ -#line 831 "parser\\Grammar.y" +#line 831 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].varDeclList).m_node), (yyvsp[(2) - (3)].varDeclList).m_varDeclarations, (yyvsp[(2) - (3)].varDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].varDeclList).m_features, (yyvsp[(2) - (3)].varDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; ;} @@ -4118,7 +4118,7 @@ yyreduce: case 222: /* Line 1455 of yacc.c */ -#line 837 "parser\\Grammar.y" +#line 837 "parser/Grammar.y" { (yyval.varDeclList).m_node = 0; (yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>; appendToVarDeclarationList(GLOBAL_DATA, (yyval.varDeclList).m_varDeclarations, *(yyvsp[(1) - (1)].ident), 0); @@ -4131,7 +4131,7 @@ yyreduce: case 223: /* Line 1455 of yacc.c */ -#line 844 "parser\\Grammar.y" +#line 844 "parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node, (yyvsp[(2) - (2)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column); (yyval.varDeclList).m_node = node; @@ -4146,7 +4146,7 @@ yyreduce: case 224: /* Line 1455 of yacc.c */ -#line 854 "parser\\Grammar.y" +#line 854 "parser/Grammar.y" { (yyval.varDeclList).m_node = (yyvsp[(1) - (3)].varDeclList).m_node; (yyval.varDeclList).m_varDeclarations = (yyvsp[(1) - (3)].varDeclList).m_varDeclarations; appendToVarDeclarationList(GLOBAL_DATA, (yyval.varDeclList).m_varDeclarations, *(yyvsp[(3) - (3)].ident), 0); @@ -4159,7 +4159,7 @@ yyreduce: case 225: /* Line 1455 of yacc.c */ -#line 862 "parser\\Grammar.y" +#line 862 "parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(3) - (4)].ident), (yyvsp[(4) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(3) - (4)]).first_column, (yylsp[(4) - (4)]).first_column + 1, (yylsp[(4) - (4)]).last_column); (yyval.varDeclList).m_node = combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (4)].varDeclList).m_node, node); @@ -4174,7 +4174,7 @@ yyreduce: case 226: /* Line 1455 of yacc.c */ -#line 874 "parser\\Grammar.y" +#line 874 "parser/Grammar.y" { (yyval.varDeclList).m_node = 0; (yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>; appendToVarDeclarationList(GLOBAL_DATA, (yyval.varDeclList).m_varDeclarations, *(yyvsp[(1) - (1)].ident), 0); @@ -4187,7 +4187,7 @@ yyreduce: case 227: /* Line 1455 of yacc.c */ -#line 881 "parser\\Grammar.y" +#line 881 "parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node, (yyvsp[(2) - (2)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column); (yyval.varDeclList).m_node = node; @@ -4202,7 +4202,7 @@ yyreduce: case 228: /* Line 1455 of yacc.c */ -#line 891 "parser\\Grammar.y" +#line 891 "parser/Grammar.y" { (yyval.varDeclList).m_node = (yyvsp[(1) - (3)].varDeclList).m_node; (yyval.varDeclList).m_varDeclarations = (yyvsp[(1) - (3)].varDeclList).m_varDeclarations; appendToVarDeclarationList(GLOBAL_DATA, (yyval.varDeclList).m_varDeclarations, *(yyvsp[(3) - (3)].ident), 0); @@ -4215,7 +4215,7 @@ yyreduce: case 229: /* Line 1455 of yacc.c */ -#line 899 "parser\\Grammar.y" +#line 899 "parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(3) - (4)].ident), (yyvsp[(4) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(3) - (4)]).first_column, (yylsp[(4) - (4)]).first_column + 1, (yylsp[(4) - (4)]).last_column); (yyval.varDeclList).m_node = combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (4)].varDeclList).m_node, node); @@ -4230,7 +4230,7 @@ yyreduce: case 230: /* Line 1455 of yacc.c */ -#line 911 "parser\\Grammar.y" +#line 911 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ConstStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].constDeclList).m_node.head), (yyvsp[(2) - (3)].constDeclList).m_varDeclarations, (yyvsp[(2) - (3)].constDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].constDeclList).m_features, (yyvsp[(2) - (3)].constDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; @@ -4238,7 +4238,7 @@ yyreduce: case 231: /* Line 1455 of yacc.c */ -#line 914 "parser\\Grammar.y" +#line 914 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ConstStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].constDeclList).m_node.head), (yyvsp[(2) - (3)].constDeclList).m_varDeclarations, (yyvsp[(2) - (3)].constDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].constDeclList).m_features, (yyvsp[(2) - (3)].constDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; ;} break; @@ -4246,7 +4246,7 @@ yyreduce: case 232: /* Line 1455 of yacc.c */ -#line 919 "parser\\Grammar.y" +#line 919 "parser/Grammar.y" { (yyval.constDeclList).m_node.head = (yyvsp[(1) - (1)].constDeclNode).m_node; (yyval.constDeclList).m_node.tail = (yyval.constDeclList).m_node.head; (yyval.constDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>; @@ -4260,7 +4260,7 @@ yyreduce: case 233: /* Line 1455 of yacc.c */ -#line 928 "parser\\Grammar.y" +#line 928 "parser/Grammar.y" { (yyval.constDeclList).m_node.head = (yyvsp[(1) - (3)].constDeclList).m_node.head; (yyvsp[(1) - (3)].constDeclList).m_node.tail->m_next = (yyvsp[(3) - (3)].constDeclNode).m_node; (yyval.constDeclList).m_node.tail = (yyvsp[(3) - (3)].constDeclNode).m_node; @@ -4274,42 +4274,42 @@ yyreduce: case 234: /* Line 1455 of yacc.c */ -#line 939 "parser\\Grammar.y" +#line 939 "parser/Grammar.y" { (yyval.constDeclNode) = createNodeInfo<ConstDeclNode*>(new (GLOBAL_DATA) ConstDeclNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident), 0), (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0, 0); ;} break; case 235: /* Line 1455 of yacc.c */ -#line 940 "parser\\Grammar.y" +#line 940 "parser/Grammar.y" { (yyval.constDeclNode) = createNodeInfo<ConstDeclNode*>(new (GLOBAL_DATA) ConstDeclNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node), ((*(yyvsp[(1) - (2)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 236: /* Line 1455 of yacc.c */ -#line 944 "parser\\Grammar.y" +#line 944 "parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;} break; case 237: /* Line 1455 of yacc.c */ -#line 948 "parser\\Grammar.y" +#line 948 "parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;} break; case 238: /* Line 1455 of yacc.c */ -#line 952 "parser\\Grammar.y" +#line 952 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) EmptyStatementNode(GLOBAL_DATA), 0, 0, 0, 0); ;} break; case 239: /* Line 1455 of yacc.c */ -#line 956 "parser\\Grammar.y" +#line 956 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ExprStatementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node), 0, 0, (yyvsp[(1) - (2)].expressionNode).m_features, (yyvsp[(1) - (2)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; @@ -4317,7 +4317,7 @@ yyreduce: case 240: /* Line 1455 of yacc.c */ -#line 958 "parser\\Grammar.y" +#line 958 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ExprStatementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node), 0, 0, (yyvsp[(1) - (2)].expressionNode).m_features, (yyvsp[(1) - (2)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} break; @@ -4325,7 +4325,7 @@ yyreduce: case 241: /* Line 1455 of yacc.c */ -#line 964 "parser\\Grammar.y" +#line 964 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) IfNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} break; @@ -4333,7 +4333,7 @@ yyreduce: case 242: /* Line 1455 of yacc.c */ -#line 967 "parser\\Grammar.y" +#line 967 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) IfElseNode(GLOBAL_DATA, (yyvsp[(3) - (7)].expressionNode).m_node, (yyvsp[(5) - (7)].statementNode).m_node, (yyvsp[(7) - (7)].statementNode).m_node), mergeDeclarationLists((yyvsp[(5) - (7)].statementNode).m_varDeclarations, (yyvsp[(7) - (7)].statementNode).m_varDeclarations), mergeDeclarationLists((yyvsp[(5) - (7)].statementNode).m_funcDeclarations, (yyvsp[(7) - (7)].statementNode).m_funcDeclarations), @@ -4345,7 +4345,7 @@ yyreduce: case 243: /* Line 1455 of yacc.c */ -#line 976 "parser\\Grammar.y" +#line 976 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DoWhileNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node), (yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(2) - (7)].statementNode).m_features | (yyvsp[(5) - (7)].expressionNode).m_features, (yyvsp[(2) - (7)].statementNode).m_numConstants + (yyvsp[(5) - (7)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (7)]), (yylsp[(3) - (7)])); ;} break; @@ -4353,7 +4353,7 @@ yyreduce: case 244: /* Line 1455 of yacc.c */ -#line 978 "parser\\Grammar.y" +#line 978 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DoWhileNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node), (yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(2) - (7)].statementNode).m_features | (yyvsp[(5) - (7)].expressionNode).m_features, (yyvsp[(2) - (7)].statementNode).m_numConstants + (yyvsp[(5) - (7)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (7)]), (yylsp[(3) - (7)])); ;} break; @@ -4361,7 +4361,7 @@ yyreduce: case 245: /* Line 1455 of yacc.c */ -#line 980 "parser\\Grammar.y" +#line 980 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) WhileNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} break; @@ -4369,7 +4369,7 @@ yyreduce: case 246: /* Line 1455 of yacc.c */ -#line 983 "parser\\Grammar.y" +#line 983 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ForNode(GLOBAL_DATA, (yyvsp[(3) - (9)].expressionNode).m_node, (yyvsp[(5) - (9)].expressionNode).m_node, (yyvsp[(7) - (9)].expressionNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node, false), (yyvsp[(9) - (9)].statementNode).m_varDeclarations, (yyvsp[(9) - (9)].statementNode).m_funcDeclarations, (yyvsp[(3) - (9)].expressionNode).m_features | (yyvsp[(5) - (9)].expressionNode).m_features | (yyvsp[(7) - (9)].expressionNode).m_features | (yyvsp[(9) - (9)].statementNode).m_features, (yyvsp[(3) - (9)].expressionNode).m_numConstants + (yyvsp[(5) - (9)].expressionNode).m_numConstants + (yyvsp[(7) - (9)].expressionNode).m_numConstants + (yyvsp[(9) - (9)].statementNode).m_numConstants); @@ -4380,7 +4380,7 @@ yyreduce: case 247: /* Line 1455 of yacc.c */ -#line 989 "parser\\Grammar.y" +#line 989 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ForNode(GLOBAL_DATA, (yyvsp[(4) - (10)].varDeclList).m_node, (yyvsp[(6) - (10)].expressionNode).m_node, (yyvsp[(8) - (10)].expressionNode).m_node, (yyvsp[(10) - (10)].statementNode).m_node, true), mergeDeclarationLists((yyvsp[(4) - (10)].varDeclList).m_varDeclarations, (yyvsp[(10) - (10)].statementNode).m_varDeclarations), mergeDeclarationLists((yyvsp[(4) - (10)].varDeclList).m_funcDeclarations, (yyvsp[(10) - (10)].statementNode).m_funcDeclarations), @@ -4392,7 +4392,7 @@ yyreduce: case 248: /* Line 1455 of yacc.c */ -#line 996 "parser\\Grammar.y" +#line 996 "parser/Grammar.y" { ForInNode* node = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, (yyvsp[(3) - (7)].expressionNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node, (yyvsp[(7) - (7)].statementNode).m_node); setExceptionLocation(node, (yylsp[(3) - (7)]).first_column, (yylsp[(3) - (7)]).last_column, (yylsp[(5) - (7)]).last_column); @@ -4406,7 +4406,7 @@ yyreduce: case 249: /* Line 1455 of yacc.c */ -#line 1005 "parser\\Grammar.y" +#line 1005 "parser/Grammar.y" { ForInNode *forIn = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, *(yyvsp[(4) - (8)].ident), 0, (yyvsp[(6) - (8)].expressionNode).m_node, (yyvsp[(8) - (8)].statementNode).m_node, (yylsp[(5) - (8)]).first_column, (yylsp[(5) - (8)]).first_column - (yylsp[(4) - (8)]).first_column, (yylsp[(6) - (8)]).last_column - (yylsp[(5) - (8)]).first_column); setExceptionLocation(forIn, (yylsp[(4) - (8)]).first_column, (yylsp[(5) - (8)]).first_column + 1, (yylsp[(6) - (8)]).last_column); appendToVarDeclarationList(GLOBAL_DATA, (yyvsp[(8) - (8)].statementNode).m_varDeclarations, *(yyvsp[(4) - (8)].ident), DeclarationStacks::HasInitializer); @@ -4417,7 +4417,7 @@ yyreduce: case 250: /* Line 1455 of yacc.c */ -#line 1011 "parser\\Grammar.y" +#line 1011 "parser/Grammar.y" { ForInNode *forIn = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, *(yyvsp[(4) - (9)].ident), (yyvsp[(5) - (9)].expressionNode).m_node, (yyvsp[(7) - (9)].expressionNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node, (yylsp[(5) - (9)]).first_column, (yylsp[(5) - (9)]).first_column - (yylsp[(4) - (9)]).first_column, (yylsp[(5) - (9)]).last_column - (yylsp[(5) - (9)]).first_column); setExceptionLocation(forIn, (yylsp[(4) - (9)]).first_column, (yylsp[(6) - (9)]).first_column + 1, (yylsp[(7) - (9)]).last_column); appendToVarDeclarationList(GLOBAL_DATA, (yyvsp[(9) - (9)].statementNode).m_varDeclarations, *(yyvsp[(4) - (9)].ident), DeclarationStacks::HasInitializer); @@ -4430,21 +4430,21 @@ yyreduce: case 251: /* Line 1455 of yacc.c */ -#line 1021 "parser\\Grammar.y" +#line 1021 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(0, 0, 0); ;} break; case 253: /* Line 1455 of yacc.c */ -#line 1026 "parser\\Grammar.y" +#line 1026 "parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(0, 0, 0); ;} break; case 255: /* Line 1455 of yacc.c */ -#line 1031 "parser\\Grammar.y" +#line 1031 "parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); @@ -4454,7 +4454,7 @@ yyreduce: case 256: /* Line 1455 of yacc.c */ -#line 1035 "parser\\Grammar.y" +#line 1035 "parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); @@ -4464,7 +4464,7 @@ yyreduce: case 257: /* Line 1455 of yacc.c */ -#line 1039 "parser\\Grammar.y" +#line 1039 "parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); @@ -4474,7 +4474,7 @@ yyreduce: case 258: /* Line 1455 of yacc.c */ -#line 1043 "parser\\Grammar.y" +#line 1043 "parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); @@ -4484,7 +4484,7 @@ yyreduce: case 259: /* Line 1455 of yacc.c */ -#line 1050 "parser\\Grammar.y" +#line 1050 "parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} @@ -4493,7 +4493,7 @@ yyreduce: case 260: /* Line 1455 of yacc.c */ -#line 1053 "parser\\Grammar.y" +#line 1053 "parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BreakNode(GLOBAL_DATA), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} @@ -4502,7 +4502,7 @@ yyreduce: case 261: /* Line 1455 of yacc.c */ -#line 1056 "parser\\Grammar.y" +#line 1056 "parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} @@ -4511,7 +4511,7 @@ yyreduce: case 262: /* Line 1455 of yacc.c */ -#line 1059 "parser\\Grammar.y" +#line 1059 "parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; ;} @@ -4520,7 +4520,7 @@ yyreduce: case 263: /* Line 1455 of yacc.c */ -#line 1065 "parser\\Grammar.y" +#line 1065 "parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, 0); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} @@ -4529,7 +4529,7 @@ yyreduce: case 264: /* Line 1455 of yacc.c */ -#line 1068 "parser\\Grammar.y" +#line 1068 "parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, 0); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} @@ -4538,7 +4538,7 @@ yyreduce: case 265: /* Line 1455 of yacc.c */ -#line 1071 "parser\\Grammar.y" +#line 1071 "parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} @@ -4547,7 +4547,7 @@ yyreduce: case 266: /* Line 1455 of yacc.c */ -#line 1074 "parser\\Grammar.y" +#line 1074 "parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; ;} @@ -4556,7 +4556,7 @@ yyreduce: case 267: /* Line 1455 of yacc.c */ -#line 1080 "parser\\Grammar.y" +#line 1080 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) WithNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node, (yylsp[(3) - (5)]).last_column, (yylsp[(3) - (5)]).last_column - (yylsp[(3) - (5)]).first_column), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features | WithFeature, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} @@ -4565,7 +4565,7 @@ yyreduce: case 268: /* Line 1455 of yacc.c */ -#line 1086 "parser\\Grammar.y" +#line 1086 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) SwitchNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].caseBlockNode).m_node), (yyvsp[(5) - (5)].caseBlockNode).m_varDeclarations, (yyvsp[(5) - (5)].caseBlockNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].caseBlockNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].caseBlockNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} @@ -4574,14 +4574,14 @@ yyreduce: case 269: /* Line 1455 of yacc.c */ -#line 1092 "parser\\Grammar.y" +#line 1092 "parser/Grammar.y" { (yyval.caseBlockNode) = createNodeDeclarationInfo<CaseBlockNode*>(new (GLOBAL_DATA) CaseBlockNode(GLOBAL_DATA, (yyvsp[(2) - (3)].clauseList).m_node.head, 0, 0), (yyvsp[(2) - (3)].clauseList).m_varDeclarations, (yyvsp[(2) - (3)].clauseList).m_funcDeclarations, (yyvsp[(2) - (3)].clauseList).m_features, (yyvsp[(2) - (3)].clauseList).m_numConstants); ;} break; case 270: /* Line 1455 of yacc.c */ -#line 1094 "parser\\Grammar.y" +#line 1094 "parser/Grammar.y" { (yyval.caseBlockNode) = createNodeDeclarationInfo<CaseBlockNode*>(new (GLOBAL_DATA) CaseBlockNode(GLOBAL_DATA, (yyvsp[(2) - (5)].clauseList).m_node.head, (yyvsp[(3) - (5)].caseClauseNode).m_node, (yyvsp[(4) - (5)].clauseList).m_node.head), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (5)].clauseList).m_varDeclarations, (yyvsp[(3) - (5)].caseClauseNode).m_varDeclarations), (yyvsp[(4) - (5)].clauseList).m_varDeclarations), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (5)].clauseList).m_funcDeclarations, (yyvsp[(3) - (5)].caseClauseNode).m_funcDeclarations), (yyvsp[(4) - (5)].clauseList).m_funcDeclarations), @@ -4592,14 +4592,14 @@ yyreduce: case 271: /* Line 1455 of yacc.c */ -#line 1102 "parser\\Grammar.y" +#line 1102 "parser/Grammar.y" { (yyval.clauseList).m_node.head = 0; (yyval.clauseList).m_node.tail = 0; (yyval.clauseList).m_varDeclarations = 0; (yyval.clauseList).m_funcDeclarations = 0; (yyval.clauseList).m_features = 0; (yyval.clauseList).m_numConstants = 0; ;} break; case 273: /* Line 1455 of yacc.c */ -#line 1107 "parser\\Grammar.y" +#line 1107 "parser/Grammar.y" { (yyval.clauseList).m_node.head = new (GLOBAL_DATA) ClauseListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].caseClauseNode).m_node); (yyval.clauseList).m_node.tail = (yyval.clauseList).m_node.head; (yyval.clauseList).m_varDeclarations = (yyvsp[(1) - (1)].caseClauseNode).m_varDeclarations; @@ -4611,7 +4611,7 @@ yyreduce: case 274: /* Line 1455 of yacc.c */ -#line 1113 "parser\\Grammar.y" +#line 1113 "parser/Grammar.y" { (yyval.clauseList).m_node.head = (yyvsp[(1) - (2)].clauseList).m_node.head; (yyval.clauseList).m_node.tail = new (GLOBAL_DATA) ClauseListNode(GLOBAL_DATA, (yyvsp[(1) - (2)].clauseList).m_node.tail, (yyvsp[(2) - (2)].caseClauseNode).m_node); (yyval.clauseList).m_varDeclarations = mergeDeclarationLists((yyvsp[(1) - (2)].clauseList).m_varDeclarations, (yyvsp[(2) - (2)].caseClauseNode).m_varDeclarations); @@ -4624,35 +4624,35 @@ yyreduce: case 275: /* Line 1455 of yacc.c */ -#line 1123 "parser\\Grammar.y" +#line 1123 "parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node), 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); ;} break; case 276: /* Line 1455 of yacc.c */ -#line 1124 "parser\\Grammar.y" +#line 1124 "parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, (yyvsp[(2) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].sourceElements).m_node), (yyvsp[(4) - (4)].sourceElements).m_varDeclarations, (yyvsp[(4) - (4)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (4)].expressionNode).m_features | (yyvsp[(4) - (4)].sourceElements).m_features, (yyvsp[(2) - (4)].expressionNode).m_numConstants + (yyvsp[(4) - (4)].sourceElements).m_numConstants); ;} break; case 277: /* Line 1455 of yacc.c */ -#line 1128 "parser\\Grammar.y" +#line 1128 "parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, 0), 0, 0, 0, 0); ;} break; case 278: /* Line 1455 of yacc.c */ -#line 1129 "parser\\Grammar.y" +#line 1129 "parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, 0, (yyvsp[(3) - (3)].sourceElements).m_node), (yyvsp[(3) - (3)].sourceElements).m_varDeclarations, (yyvsp[(3) - (3)].sourceElements).m_funcDeclarations, (yyvsp[(3) - (3)].sourceElements).m_features, (yyvsp[(3) - (3)].sourceElements).m_numConstants); ;} break; case 279: /* Line 1455 of yacc.c */ -#line 1133 "parser\\Grammar.y" +#line 1133 "parser/Grammar.y" { LabelNode* node = new (GLOBAL_DATA) LabelNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].statementNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, (yyvsp[(3) - (3)].statementNode).m_varDeclarations, (yyvsp[(3) - (3)].statementNode).m_funcDeclarations, (yyvsp[(3) - (3)].statementNode).m_features, (yyvsp[(3) - (3)].statementNode).m_numConstants); ;} @@ -4661,7 +4661,7 @@ yyreduce: case 280: /* Line 1455 of yacc.c */ -#line 1139 "parser\\Grammar.y" +#line 1139 "parser/Grammar.y" { ThrowNode* node = new (GLOBAL_DATA) ThrowNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); @@ -4671,7 +4671,7 @@ yyreduce: case 281: /* Line 1455 of yacc.c */ -#line 1143 "parser\\Grammar.y" +#line 1143 "parser/Grammar.y" { ThrowNode* node = new (GLOBAL_DATA) ThrowNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; @@ -4681,7 +4681,7 @@ yyreduce: case 282: /* Line 1455 of yacc.c */ -#line 1150 "parser\\Grammar.y" +#line 1150 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (4)].statementNode).m_node, GLOBAL_DATA->propertyNames->nullIdentifier, false, 0, (yyvsp[(4) - (4)].statementNode).m_node), mergeDeclarationLists((yyvsp[(2) - (4)].statementNode).m_varDeclarations, (yyvsp[(4) - (4)].statementNode).m_varDeclarations), mergeDeclarationLists((yyvsp[(2) - (4)].statementNode).m_funcDeclarations, (yyvsp[(4) - (4)].statementNode).m_funcDeclarations), @@ -4693,7 +4693,7 @@ yyreduce: case 283: /* Line 1455 of yacc.c */ -#line 1156 "parser\\Grammar.y" +#line 1156 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, *(yyvsp[(5) - (7)].ident), ((yyvsp[(7) - (7)].statementNode).m_features & EvalFeature) != 0, (yyvsp[(7) - (7)].statementNode).m_node, 0), mergeDeclarationLists((yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(7) - (7)].statementNode).m_varDeclarations), mergeDeclarationLists((yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(7) - (7)].statementNode).m_funcDeclarations), @@ -4705,7 +4705,7 @@ yyreduce: case 284: /* Line 1455 of yacc.c */ -#line 1163 "parser\\Grammar.y" +#line 1163 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (9)].statementNode).m_node, *(yyvsp[(5) - (9)].ident), ((yyvsp[(7) - (9)].statementNode).m_features & EvalFeature) != 0, (yyvsp[(7) - (9)].statementNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (9)].statementNode).m_varDeclarations, (yyvsp[(7) - (9)].statementNode).m_varDeclarations), (yyvsp[(9) - (9)].statementNode).m_varDeclarations), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (9)].statementNode).m_funcDeclarations, (yyvsp[(7) - (9)].statementNode).m_funcDeclarations), (yyvsp[(9) - (9)].statementNode).m_funcDeclarations), @@ -4717,7 +4717,7 @@ yyreduce: case 285: /* Line 1455 of yacc.c */ -#line 1172 "parser\\Grammar.y" +#line 1172 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; @@ -4725,7 +4725,7 @@ yyreduce: case 286: /* Line 1455 of yacc.c */ -#line 1174 "parser\\Grammar.y" +#line 1174 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} break; @@ -4733,14 +4733,14 @@ yyreduce: case 287: /* Line 1455 of yacc.c */ -#line 1179 "parser\\Grammar.y" +#line 1179 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) FuncDeclNode(GLOBAL_DATA, *(yyvsp[(2) - (7)].ident), (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), 0, new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::FunctionStack>, ((*(yyvsp[(2) - (7)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | ClosureFeature, 0); setStatementLocation((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); (yyval.statementNode).m_funcDeclarations->data.append(static_cast<FuncDeclNode*>((yyval.statementNode).m_node)->body()); ;} break; case 288: /* Line 1455 of yacc.c */ -#line 1181 "parser\\Grammar.y" +#line 1181 "parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) FuncDeclNode(GLOBAL_DATA, *(yyvsp[(2) - (8)].ident), (yyvsp[(7) - (8)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line), (yyvsp[(4) - (8)].parameterList).m_node.head), 0, new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::FunctionStack>, ((*(yyvsp[(2) - (8)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); if ((yyvsp[(4) - (8)].parameterList).m_features & ArgumentsFeature) @@ -4753,14 +4753,14 @@ yyreduce: case 289: /* Line 1455 of yacc.c */ -#line 1191 "parser\\Grammar.y" +#line 1191 "parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, (yyvsp[(5) - (6)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(4) - (6)].intValue), (yyvsp[(6) - (6)].intValue), (yylsp[(4) - (6)]).first_line)), ClosureFeature, 0); setStatementLocation((yyvsp[(5) - (6)].functionBodyNode), (yylsp[(4) - (6)]), (yylsp[(6) - (6)])); ;} break; case 290: /* Line 1455 of yacc.c */ -#line 1193 "parser\\Grammar.y" +#line 1193 "parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line), (yyvsp[(3) - (7)].parameterList).m_node.head), (yyvsp[(3) - (7)].parameterList).m_features | ClosureFeature, 0); if ((yyvsp[(3) - (7)].parameterList).m_features & ArgumentsFeature) @@ -4772,14 +4772,14 @@ yyreduce: case 291: /* Line 1455 of yacc.c */ -#line 1199 "parser\\Grammar.y" +#line 1199 "parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, *(yyvsp[(2) - (7)].ident), (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), ClosureFeature, 0); setStatementLocation((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); ;} break; case 292: /* Line 1455 of yacc.c */ -#line 1201 "parser\\Grammar.y" +#line 1201 "parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, *(yyvsp[(2) - (8)].ident), (yyvsp[(7) - (8)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line), (yyvsp[(4) - (8)].parameterList).m_node.head), (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); if ((yyvsp[(4) - (8)].parameterList).m_features & ArgumentsFeature) @@ -4791,7 +4791,7 @@ yyreduce: case 293: /* Line 1455 of yacc.c */ -#line 1210 "parser\\Grammar.y" +#line 1210 "parser/Grammar.y" { (yyval.parameterList).m_node.head = new (GLOBAL_DATA) ParameterNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident)); (yyval.parameterList).m_features = (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0; (yyval.parameterList).m_node.tail = (yyval.parameterList).m_node.head; ;} @@ -4800,7 +4800,7 @@ yyreduce: case 294: /* Line 1455 of yacc.c */ -#line 1213 "parser\\Grammar.y" +#line 1213 "parser/Grammar.y" { (yyval.parameterList).m_node.head = (yyvsp[(1) - (3)].parameterList).m_node.head; (yyval.parameterList).m_features = (yyvsp[(1) - (3)].parameterList).m_features | ((*(yyvsp[(3) - (3)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0); (yyval.parameterList).m_node.tail = new (GLOBAL_DATA) ParameterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].parameterList).m_node.tail, *(yyvsp[(3) - (3)].ident)); ;} @@ -4809,28 +4809,28 @@ yyreduce: case 295: /* Line 1455 of yacc.c */ -#line 1219 "parser\\Grammar.y" +#line 1219 "parser/Grammar.y" { (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;} break; case 296: /* Line 1455 of yacc.c */ -#line 1220 "parser\\Grammar.y" +#line 1220 "parser/Grammar.y" { (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;} break; case 297: /* Line 1455 of yacc.c */ -#line 1224 "parser\\Grammar.y" +#line 1224 "parser/Grammar.y" { GLOBAL_DATA->parser->didFinishParsing(new (GLOBAL_DATA) SourceElements(GLOBAL_DATA), 0, 0, NoFeatures, (yylsp[(0) - (0)]).last_line, 0); ;} break; case 298: /* Line 1455 of yacc.c */ -#line 1225 "parser\\Grammar.y" +#line 1225 "parser/Grammar.y" { GLOBAL_DATA->parser->didFinishParsing((yyvsp[(1) - (1)].sourceElements).m_node, (yyvsp[(1) - (1)].sourceElements).m_varDeclarations, (yyvsp[(1) - (1)].sourceElements).m_funcDeclarations, (yyvsp[(1) - (1)].sourceElements).m_features, (yylsp[(1) - (1)]).last_line, (yyvsp[(1) - (1)].sourceElements).m_numConstants); ;} break; @@ -4838,7 +4838,7 @@ yyreduce: case 299: /* Line 1455 of yacc.c */ -#line 1230 "parser\\Grammar.y" +#line 1230 "parser/Grammar.y" { (yyval.sourceElements).m_node = new (GLOBAL_DATA) SourceElements(GLOBAL_DATA); (yyval.sourceElements).m_node->append((yyvsp[(1) - (1)].statementNode).m_node); (yyval.sourceElements).m_varDeclarations = (yyvsp[(1) - (1)].statementNode).m_varDeclarations; @@ -4851,7 +4851,7 @@ yyreduce: case 300: /* Line 1455 of yacc.c */ -#line 1237 "parser\\Grammar.y" +#line 1237 "parser/Grammar.y" { (yyval.sourceElements).m_node->append((yyvsp[(2) - (2)].statementNode).m_node); (yyval.sourceElements).m_varDeclarations = mergeDeclarationLists((yyvsp[(1) - (2)].sourceElements).m_varDeclarations, (yyvsp[(2) - (2)].statementNode).m_varDeclarations); (yyval.sourceElements).m_funcDeclarations = mergeDeclarationLists((yyvsp[(1) - (2)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (2)].statementNode).m_funcDeclarations); @@ -4863,259 +4863,259 @@ yyreduce: case 304: /* Line 1455 of yacc.c */ -#line 1251 "parser\\Grammar.y" +#line 1251 "parser/Grammar.y" { ;} break; case 305: /* Line 1455 of yacc.c */ -#line 1252 "parser\\Grammar.y" +#line 1252 "parser/Grammar.y" { ;} break; case 306: /* Line 1455 of yacc.c */ -#line 1253 "parser\\Grammar.y" +#line 1253 "parser/Grammar.y" { if (!GLOBAL_DATA->lexer->skipRegExp()) YYABORT; ;} break; case 307: /* Line 1455 of yacc.c */ -#line 1254 "parser\\Grammar.y" +#line 1254 "parser/Grammar.y" { if (!GLOBAL_DATA->lexer->skipRegExp()) YYABORT; ;} break; case 308: /* Line 1455 of yacc.c */ -#line 1258 "parser\\Grammar.y" +#line 1258 "parser/Grammar.y" { ;} break; case 309: /* Line 1455 of yacc.c */ -#line 1259 "parser\\Grammar.y" +#line 1259 "parser/Grammar.y" { ;} break; case 310: /* Line 1455 of yacc.c */ -#line 1260 "parser\\Grammar.y" +#line 1260 "parser/Grammar.y" { ;} break; case 311: /* Line 1455 of yacc.c */ -#line 1261 "parser\\Grammar.y" +#line 1261 "parser/Grammar.y" { if (*(yyvsp[(1) - (7)].ident) != "get" && *(yyvsp[(1) - (7)].ident) != "set") YYABORT; ;} break; case 312: /* Line 1455 of yacc.c */ -#line 1262 "parser\\Grammar.y" +#line 1262 "parser/Grammar.y" { if (*(yyvsp[(1) - (8)].ident) != "get" && *(yyvsp[(1) - (8)].ident) != "set") YYABORT; ;} break; case 316: /* Line 1455 of yacc.c */ -#line 1272 "parser\\Grammar.y" +#line 1272 "parser/Grammar.y" { ;} break; case 317: /* Line 1455 of yacc.c */ -#line 1273 "parser\\Grammar.y" +#line 1273 "parser/Grammar.y" { ;} break; case 318: /* Line 1455 of yacc.c */ -#line 1275 "parser\\Grammar.y" +#line 1275 "parser/Grammar.y" { ;} break; case 322: /* Line 1455 of yacc.c */ -#line 1282 "parser\\Grammar.y" +#line 1282 "parser/Grammar.y" { ;} break; case 517: /* Line 1455 of yacc.c */ -#line 1650 "parser\\Grammar.y" +#line 1650 "parser/Grammar.y" { ;} break; case 518: /* Line 1455 of yacc.c */ -#line 1651 "parser\\Grammar.y" +#line 1651 "parser/Grammar.y" { ;} break; case 520: /* Line 1455 of yacc.c */ -#line 1656 "parser\\Grammar.y" +#line 1656 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 521: /* Line 1455 of yacc.c */ -#line 1660 "parser\\Grammar.y" +#line 1660 "parser/Grammar.y" { ;} break; case 522: /* Line 1455 of yacc.c */ -#line 1661 "parser\\Grammar.y" +#line 1661 "parser/Grammar.y" { ;} break; case 525: /* Line 1455 of yacc.c */ -#line 1667 "parser\\Grammar.y" +#line 1667 "parser/Grammar.y" { ;} break; case 526: /* Line 1455 of yacc.c */ -#line 1668 "parser\\Grammar.y" +#line 1668 "parser/Grammar.y" { ;} break; case 530: /* Line 1455 of yacc.c */ -#line 1675 "parser\\Grammar.y" +#line 1675 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 533: /* Line 1455 of yacc.c */ -#line 1684 "parser\\Grammar.y" +#line 1684 "parser/Grammar.y" { ;} break; case 534: /* Line 1455 of yacc.c */ -#line 1685 "parser\\Grammar.y" +#line 1685 "parser/Grammar.y" { ;} break; case 539: /* Line 1455 of yacc.c */ -#line 1702 "parser\\Grammar.y" +#line 1702 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 555: /* Line 1455 of yacc.c */ -#line 1733 "parser\\Grammar.y" +#line 1733 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 557: /* Line 1455 of yacc.c */ -#line 1735 "parser\\Grammar.y" +#line 1735 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 559: /* Line 1455 of yacc.c */ -#line 1740 "parser\\Grammar.y" +#line 1740 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 561: /* Line 1455 of yacc.c */ -#line 1742 "parser\\Grammar.y" +#line 1742 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 563: /* Line 1455 of yacc.c */ -#line 1747 "parser\\Grammar.y" +#line 1747 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 565: /* Line 1455 of yacc.c */ -#line 1749 "parser\\Grammar.y" +#line 1749 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 568: /* Line 1455 of yacc.c */ -#line 1761 "parser\\Grammar.y" +#line 1761 "parser/Grammar.y" { ;} break; case 569: /* Line 1455 of yacc.c */ -#line 1762 "parser\\Grammar.y" +#line 1762 "parser/Grammar.y" { ;} break; case 578: /* Line 1455 of yacc.c */ -#line 1786 "parser\\Grammar.y" +#line 1786 "parser/Grammar.y" { ;} break; case 580: /* Line 1455 of yacc.c */ -#line 1791 "parser\\Grammar.y" +#line 1791 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 585: /* Line 1455 of yacc.c */ -#line 1802 "parser\\Grammar.y" +#line 1802 "parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 592: /* Line 1455 of yacc.c */ -#line 1818 "parser\\Grammar.y" +#line 1818 "parser/Grammar.y" { ;} break; /* Line 1455 of yacc.c */ -#line 5119 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.c" +#line 5119 "/JavaScriptCore/generated/Grammar.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -5334,7 +5334,7 @@ yyreturn: /* Line 1675 of yacc.c */ -#line 1834 "parser\\Grammar.y" +#line 1834 "parser/Grammar.y" #undef GLOBAL_DATA diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h index 69942f7..04dfeb1 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h @@ -112,7 +112,7 @@ typedef union YYSTYPE { /* Line 1676 of yacc.c */ -#line 146 "parser\\Grammar.y" +#line 146 "parser/Grammar.y" int intValue; double doubleValue; @@ -147,7 +147,7 @@ typedef union YYSTYPE /* Line 1676 of yacc.c */ -#line 151 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.h" +#line 151 "/JavaScriptCore/generated/Grammar.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h index acfe7d2..4ec868e 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h @@ -1,4 +1,4 @@ -// Automatically generated from runtime\JSONObject.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT! +// Automatically generated from runtime/JSONObject.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT! #include "Lookup.h" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h index 556a6f4..c17f34d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h @@ -1,4 +1,4 @@ -// Automatically generated from parser\Keywords.table using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT! +// Automatically generated from parser/Keywords.table using /JavaScriptCore/create_hash_table. DO NOT EDIT! #include "Lookup.h" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h index 85a1bb6..6222ef9 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h @@ -1,4 +1,4 @@ -// Automatically generated from runtime\MathObject.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT! +// Automatically generated from runtime/MathObject.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT! #include "Lookup.h" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h index 1cd4117..bfa6341 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h @@ -1,4 +1,4 @@ -// Automatically generated from runtime\NumberConstructor.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT! +// Automatically generated from runtime/NumberConstructor.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT! #include "Lookup.h" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h index 938d368..d45db01 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h @@ -1,4 +1,4 @@ -// Automatically generated from runtime\RegExpConstructor.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT! +// Automatically generated from runtime/RegExpConstructor.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT! #include "Lookup.h" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h index aadd236..8dcb7c9 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h @@ -1,4 +1,4 @@ -// Automatically generated from runtime\RegExpObject.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT! +// Automatically generated from runtime/RegExpObject.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT! #include "Lookup.h" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h index 2d08eac..6ea0803 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h @@ -1,4 +1,4 @@ -// Automatically generated from runtime\StringPrototype.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT! +// Automatically generated from runtime/StringPrototype.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT! #include "Lookup.h" diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp index 2859290..0eca610 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp @@ -201,7 +201,7 @@ NEVER_INLINE CollectorBlock* Heap::allocateBlock() #elif OS(WINCE) void* address = VirtualAlloc(NULL, BLOCK_SIZE, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); #elif OS(WINDOWS) -#if COMPILER(MINGW) && !defined(__MINGW64_VERSION_MAJOR) +#if COMPILER(MINGW) && !COMPILER(MINGW64) void* address = __mingw_aligned_malloc(BLOCK_SIZE, BLOCK_SIZE); #else void* address = _aligned_malloc(BLOCK_SIZE, BLOCK_SIZE); @@ -292,7 +292,7 @@ NEVER_INLINE void Heap::freeBlockPtr(CollectorBlock* block) #elif OS(WINCE) VirtualFree(block, 0, MEM_RELEASE); #elif OS(WINDOWS) -#if COMPILER(MINGW) && !defined(__MINGW64_VERSION_MAJOR) +#if COMPILER(MINGW) && !COMPILER(MINGW64) __mingw_aligned_free(block); #else _aligned_free(block); @@ -558,6 +558,8 @@ static inline void* currentThreadStackBase() PNT_TIB64 pTib = reinterpret_cast<PNT_TIB64>(NtCurrentTeb()); return reinterpret_cast<void*>(pTib->StackBase); #elif OS(QNX) + AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex); + MutexLocker locker(mutex); return currentThreadStackBaseQNX(); #elif OS(SOLARIS) stack_t s; @@ -569,19 +571,17 @@ static inline void* currentThreadStackBase() pthread_stackseg_np(thread, &stack); return stack.ss_sp; #elif OS(SYMBIAN) - static void* stackBase = 0; - if (stackBase == 0) { - TThreadStackInfo info; - RThread thread; - thread.StackInfo(info); - stackBase = (void*)info.iBase; - } - return (void*)stackBase; + TThreadStackInfo info; + RThread thread; + thread.StackInfo(info); + return (void*)info.iBase; #elif OS(HAIKU) thread_info threadInfo; get_thread_info(find_thread(NULL), &threadInfo); return threadInfo.stack_end; #elif OS(UNIX) + AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex); + MutexLocker locker(mutex); static void* stackBase = 0; static size_t stackSize = 0; static pthread_t stackThread; @@ -604,6 +604,8 @@ static inline void* currentThreadStackBase() } return static_cast<char*>(stackBase) + stackSize; #elif OS(WINCE) + AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex); + MutexLocker locker(mutex); if (g_stackBase) return g_stackBase; else { diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp index dab7f51..6d13f4b 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp @@ -168,14 +168,14 @@ inline void Structure::transitionTableAdd(const StructureTransitionTableHash::Ke if (!specificValue) { TransitionTable::iterator find = transitionTable()->find(key); if (find == transitionTable()->end()) - transitionTable()->add(key, Transition(structure, (Structure*)0)); + transitionTable()->add(key, Transition(structure, static_cast<Structure*>(0))); else find->second.first = structure; } else { // If we're adding a transition to a specific value, then there cannot be // an existing transition ASSERT(!transitionTable()->contains(key)); - transitionTable()->add(key, Transition((Structure*)0, structure)); + transitionTable()->add(key, Transition(static_cast<Structure*>(0), structure)); } } diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h index 0e02af5..8b6d09a 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h @@ -61,7 +61,7 @@ #define ASSERTIONS_DISABLED_DEFAULT 0 #endif -#if COMPILER(MSVC7) || COMPILER(WINSCW) +#if COMPILER(MSVC7_OR_LOWER) || COMPILER(WINSCW) #define HAVE_VARIADIC_MACRO 0 #else #define HAVE_VARIADIC_MACRO 1 @@ -213,7 +213,7 @@ while (0) /* ASSERT_WITH_MESSAGE */ -#if COMPILER(MSVC7) +#if COMPILER(MSVC7_OR_LOWER) #define ASSERT_WITH_MESSAGE(assertion) ((void)0) #elif COMPILER(WINSCW) #define ASSERT_WITH_MESSAGE(assertion, arg...) ((void)0) @@ -253,7 +253,7 @@ while (0) /* FATAL */ -#if COMPILER(MSVC7) +#if COMPILER(MSVC7_OR_LOWER) #define FATAL() ((void)0) #elif COMPILER(WINSCW) #define FATAL(arg...) ((void)0) @@ -268,7 +268,7 @@ while (0) /* LOG_ERROR */ -#if COMPILER(MSVC7) +#if COMPILER(MSVC7_OR_LOWER) #define LOG_ERROR() ((void)0) #elif COMPILER(WINSCW) #define LOG_ERROR(arg...) ((void)0) @@ -280,7 +280,7 @@ while (0) /* LOG */ -#if COMPILER(MSVC7) +#if COMPILER(MSVC7_OR_LOWER) #define LOG() ((void)0) #elif COMPILER(WINSCW) #define LOG(arg...) ((void)0) @@ -294,7 +294,7 @@ while (0) /* LOG_VERBOSE */ -#if COMPILER(MSVC7) +#if COMPILER(MSVC7_OR_LOWER) #define LOG_VERBOSE(channel) ((void)0) #elif COMPILER(WINSCW) #define LOG_VERBOSE(channel, arg...) ((void)0) diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h b/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h index 033448f..dcb1f6c 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h @@ -49,7 +49,7 @@ namespace WTF { inline void getLocalTime(const time_t* localTime, struct tm* localTM) { - #if COMPILER(MSVC7) || COMPILER(MINGW) || OS(WINCE) + #if COMPILER(MSVC7_OR_LOWER) || COMPILER(MINGW) || OS(WINCE) *localTM = *localtime(localTime); #elif COMPILER(MSVC) localtime_s(localTM, localTime); diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h index 49d6ec3..f8bace4 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h @@ -123,7 +123,7 @@ inline double trunc(double num) { return num > 0 ? floor(num) : ceil(num); } #if COMPILER(MSVC) // The 64bit version of abs() is already defined in stdlib.h which comes with VC10 -#if COMPILER(MSVC9) +#if COMPILER(MSVC9_OR_LOWER) inline long long abs(long long num) { return _abs64(num); } #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h index 2a5a48f..c582905 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h @@ -58,13 +58,14 @@ /* ==== COMPILER() - the compiler being used to build the project ==== */ /* COMPILER(MSVC) Microsoft Visual C++ */ -/* COMPILER(MSVC7) Microsoft Visual C++ v7 or lower*/ +/* COMPILER(MSVC7_OR_LOWER) Microsoft Visual C++ 2003 or lower*/ +/* COMPILER(MSVC9_OR_LOWER) Microsoft Visual C++ 2008 or lower*/ #if defined(_MSC_VER) #define WTF_COMPILER_MSVC 1 #if _MSC_VER < 1400 -#define WTF_COMPILER_MSVC7 1 +#define WTF_COMPILER_MSVC7_OR_LOWER 1 #elif _MSC_VER < 1600 -#define WTF_COMPILER_MSVC9 1 +#define WTF_COMPILER_MSVC9_OR_LOWER 1 #endif #endif @@ -81,9 +82,14 @@ #endif /* COMPILER(MINGW) - MinGW GCC */ -#if defined(MINGW) || defined(__MINGW32__) +/* COMPILER(MINGW64) - mingw-w64 GCC - only used as additional check to exclude mingw.org specific functions */ +#if defined(__MINGW32__) #define WTF_COMPILER_MINGW 1 -#endif +#include <_mingw.h> /* private MinGW header */ + #if defined(__MINGW64_VERSION_MAJOR) /* best way to check for mingw-w64 vs mingw.org */ + #define WTF_COMPILER_MINGW64 1 + #endif /* __MINGW64_VERSION_MAJOR */ +#endif /* __MINGW32__ */ /* COMPILER(WINSCW) - CodeWarrior for Symbian emulator */ #if defined(__WINSCW__) @@ -921,6 +927,8 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */ #elif CPU(X86) && OS(WINDOWS) && COMPILER(MINGW) && GCC_VERSION >= 40100 #define ENABLE_JIT 1 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1 +#elif CPU(X86_64) && OS(WINDOWS) && COMPILER(MINGW64) && GCC_VERSION >= 40100 + #define ENABLE_JIT 1 #elif CPU(X86) && OS(WINDOWS) && COMPILER(MSVC) #define ENABLE_JIT 1 #define WTF_USE_JIT_STUB_ARGUMENT_REGISTER 1 @@ -931,6 +939,8 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */ #define ENABLE_JIT 1 #elif CPU(ARM_TRADITIONAL) && OS(LINUX) #define ENABLE_JIT 1 +#elif CPU(ARM_TRADITIONAL) && OS(SYMBIAN) && COMPILER(RVCT) + #define ENABLE_JIT 1 #endif #endif /* PLATFORM(QT) */ @@ -995,10 +1005,12 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */ #if PLATFORM(QT) #if (CPU(X86) && OS(WINDOWS) && COMPILER(MINGW) && GCC_VERSION >= 40100) \ + || (CPU(X86_64) && OS(WINDOWS) && COMPILER(MINGW64) && GCC_VERSION >= 40100) \ || (CPU(X86) && OS(WINDOWS) && COMPILER(MSVC)) \ || (CPU(X86) && OS(LINUX) && GCC_VERSION >= 40100) \ || (CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100) \ || (CPU(ARM_TRADITIONAL) && OS(LINUX)) \ + || (CPU(ARM_TRADITIONAL) && OS(SYMBIAN) && COMPILER(RVCT)) \ || (CPU(MIPS) && OS(LINUX)) #define ENABLE_YARR 1 #define ENABLE_YARR_JIT 1 diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h b/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h index b1ec09f..28e80b8 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h @@ -46,7 +46,7 @@ inline int snprintf(char* buffer, size_t count, const char* format, ...) return result; } -#if COMPILER(MSVC7) || OS(WINCE) +#if COMPILER(MSVC7_OR_LOWER) || OS(WINCE) inline int vsnprintf(char* buffer, size_t count, const char* format, va_list args) { diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h index 768aecf..50e08bd 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h @@ -220,7 +220,7 @@ private: #if OS(WINDOWS) #define WTF_USE_LOCKFREE_THREADSAFESHARED 1 -#if COMPILER(MINGW) || COMPILER(MSVC7) || OS(WINCE) +#if COMPILER(MINGW) || COMPILER(MSVC7_OR_LOWER) || OS(WINCE) inline int atomicIncrement(int* addend) { return InterlockedIncrement(reinterpret_cast<long*>(addend)); } inline int atomicDecrement(int* addend) { return InterlockedDecrement(reinterpret_cast<long*>(addend)); } #else diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h b/src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h index 7ac02da..6600050 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h @@ -28,25 +28,48 @@ // On Mac OS X, the VM subsystem allows tagging memory requested from mmap and vm_map // in order to aid tools that inspect system memory use. -#if OS(DARWIN) && !defined(BUILDING_ON_TIGER) +#if OS(DARWIN) #include <mach/vm_statistics.h> +#if !defined(TARGETING_TIGER) + #if defined(VM_MEMORY_TCMALLOC) #define VM_TAG_FOR_TCMALLOC_MEMORY VM_MAKE_TAG(VM_MEMORY_TCMALLOC) #else #define VM_TAG_FOR_TCMALLOC_MEMORY VM_MAKE_TAG(53) #endif // defined(VM_MEMORY_TCMALLOC) -#if defined(VM_MEMORY_JAVASCRIPT_CORE) && defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) -#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_CORE) -#define VM_TAG_FOR_REGISTERFILE_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) +#if defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) #define VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) #else -#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(63) #define VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY VM_MAKE_TAG(64) +#endif // defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) + +#if defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) +#define VM_TAG_FOR_REGISTERFILE_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) +#else #define VM_TAG_FOR_REGISTERFILE_MEMORY VM_MAKE_TAG(65) -#endif // defined(VM_MEMORY_JAVASCRIPT_CORE) && defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) +#endif // defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) + +#else // !defined(TARGETING_TIGER) + +// mmap on Tiger fails with tags that work on Leopard, so fall +// back to Tiger-compatible tags (that also work on Leopard) +// when targeting Tiger. +#define VM_TAG_FOR_TCMALLOC_MEMORY -1 +#define VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY -1 +#define VM_TAG_FOR_REGISTERFILE_MEMORY -1 + +#endif // !defined(TARGETING_TIGER) + +// Tags for vm_map and vm_allocate work on both Tiger and Leopard. + +#if defined(VM_MEMORY_JAVASCRIPT_CORE) +#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_CORE) +#else +#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(63) +#endif // defined(VM_MEMORY_JAVASCRIPT_CORE) #if defined(VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS) #define VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY VM_MAKE_TAG(VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS) @@ -54,7 +77,7 @@ #define VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY VM_MAKE_TAG(69) #endif // defined(VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS) -#else // OS(DARWIN) && !defined(BUILDING_ON_TIGER) +#else // OS(DARWIN) #define VM_TAG_FOR_TCMALLOC_MEMORY -1 #define VM_TAG_FOR_COLLECTOR_MEMORY -1 @@ -62,6 +85,6 @@ #define VM_TAG_FOR_REGISTERFILE_MEMORY -1 #define VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY -1 -#endif // OS(DARWIN) && !defined(BUILDING_ON_TIGER) +#endif // OS(DARWIN) #endif // VMTags_h diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h index 6f55e53..e495067 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h @@ -939,7 +939,7 @@ namespace WTF { return; } -#if COMPILER(MSVC7) +#if COMPILER(MSVC7_OR_LOWER) // FIXME: MSVC7 generates compilation errors when trying to assign // a pointer to a Vector of its base class (i.e. can't downcast). So far // I've been unable to determine any logical reason for this, so I can diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION new file mode 100644 index 0000000..98debf6 --- /dev/null +++ b/src/3rdparty/webkit/VERSION @@ -0,0 +1,7 @@ +This is a snapshot of the Qt port of WebKit from + + git://gitorious.org/qtwebkit/qtwebkit.git + +and has the sha1 checksum + + 07b60cf799680fcfb7785ee88e14f8030a5dbfa2 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index f52872c..6617b66 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,987 @@ +2010-05-04 Luiz Agostini <luiz.agostini@openbossa.org> + + Reviewed by Simon Hausmann. + + [Qt] QT_MOBILE_THEME compile time flag + https://bugs.webkit.org/show_bug.cgi?id=38439 + + Replacing preprocessor conditional used in RenderThemeQt from Q_WS_MAEMO_5 to + USE(QT_MOBILE_THEME). + + * WebCore.pro: + * platform/qt/RenderThemeQt.cpp: + (WebCore::RenderThemeQt::RenderThemeQt): + (WebCore::RenderThemeQt::qStyle): + (WebCore::RenderThemeQt::extraDefaultStyleSheet): + (WebCore::RenderThemeQt::adjustMenuListButtonStyle): + (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists): + * platform/qt/RenderThemeQt.h: + +2010-03-25 Tasuku Suzuki <tasuku.suzuki@nokia.com> + + Reviewed by Eric Seidel. + + [Qt]Fix compile error with QT_NO_LIBRARY + https://bugs.webkit.org/show_bug.cgi?id=36533 + + * platform/FileSystem.h: + * platform/qt/FileSystemQt.cpp: + (WebCore::unloadModule): + +2010-05-06 Csaba Osztrogonác <ossy@webkit.org> + + Unreviewed WinCE buildfix after r58842. + Preprocessor doesn't understand "true", changed to "1" + + * platform/graphics/MediaPlayer.cpp: + +2010-05-06 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Kenneth Christiansen. + + Spatial Navigation: adapt the logic of {deep}findFocusableNodeInDirection to do traversal starting from Node* not Document* + https://bugs.webkit.org/show_bug.cgi?id=37803 + + Instead of receiving a Document pointer as incoming parameter, patch modifies + findFocusableNodeInDirection and deepFindFocusableNodeInDirection methods to + receive a Node pointer as start for content traversal. + This way we can make good use of deepFindFocusableNodeInDirection to traverse + other scrollable container like scrollable div's, and not only frames or iframes. + + Patch also makes use of 'while' instead of 'for' to loop control, that gives move + flexibility to the incremental step: e.g. if a scrollable div was processed, the incremental + step in the loop does not have to do node->traverseNextNode() but node->traverseNextSibling(). + + No behavior change. It is a preparation for supporting scrollable containers in Spatial + Navigation. + + * page/FocusController.cpp: + (WebCore::FocusController::advanceFocusDirectionally): + (WebCore::FocusController::findFocusableNodeInDirection): + (WebCore::FocusController::deepFindFocusableNodeInDirection): + * page/FocusController.h: + +2010-05-06 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] REGRESSION: Loading of external CSS and JS files over network fails in some cases + https://bugs.webkit.org/show_bug.cgi?id=36755 + + Enable the direct connection between QtNetwork and QtWebKit only for Qt versions + greater than 4.6.2, due to a bug in Qt that's been fixed after 4.6.2. + + * platform/network/qt/QNetworkReplyHandler.cpp: + +2010-05-05 Csaba Osztrogonác <ossy@webkit.org> + + Reviewed by Simon Hausmann. + + [Qt]Disable Qt Multimedia backend for HTML 5 Audio and Video elements + Fall back to the Phonon backend until the release situation has been cleared up. + + https://bugs.webkit.org/show_bug.cgi?id=38612 + + Buildfix for QT_VERSION >= 0x040700 after r58810. + + * platform/graphics/MediaPlayer.cpp: + +2010-05-03 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fix rendering of <button> elements on Mac OS X + + The <button> element has ButtonPart appearance, not PushButton part, + so we have to include ButtonPart when we decide if we should draw the + button as raised on Mac OS X. + + https://bugs.webkit.org/show_bug.cgi?id=38458 + + * platform/qt/RenderThemeQt.cpp: + (WebCore::RenderThemeQt::initializeCommonQStyleOptions): + +2010-04-26 Luiz Agostini <luiz.agostini@openbossa.org> + + Reviewed by Kenneth Rohde Christiansen. + + View modes names in CSSValueKeywords.in + https://bugs.webkit.org/show_bug.cgi?id=38125 + + View mode names has changed in previous patch but CSSValueKeywords.in file was + not updated. + + * css/CSSValueKeywords.in: + +2010-04-28 Luiz Agostini <luiz.agostini@openbossa.org> + + Reviewed by Simon Fraser. + + Media queries empty values + https://bugs.webkit.org/show_bug.cgi?id=38116 + + Adding isValid() method to MediaQueryExp to make it possible to differentiate + between queries with empty values and queries with invalid values. + + Test: fast/media/media-query-invalid-value.html + + * css/MediaQueryEvaluator.cpp: + (WebCore::MediaQueryEvaluator::eval): + * css/MediaQueryExp.cpp: + (WebCore::MediaQueryExp::MediaQueryExp): + * css/MediaQueryExp.h: + (WebCore::MediaQueryExp::isValid): + +2010-05-05 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Disable Qt Multimedia backend for HTML 5 Audio and Video elements + + Fall back to the Phonon backend until the release situation has been cleared up. + + * WebCore.pro: + +2010-05-03 Janne Koskinen <janne.p.koskinen@digia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fix qtlibraryinfix not to contain space + + List catenation with += adds whitespace cutting the infix + from the final target. + + * WebCore.pro: + +2010-05-03 Thomas Zander <t.zander@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fix library infix usage when compiling inside of Qt + + Don't apply the infix when building inside Qt, as that's done through the + inclusion of qbase.pri. + + * WebCore.pro: + +2010-04-29 Janne Koskinen <janne.p.koskinen@digia.com> + + Reviewed by Simon Hausmann. + + [Qt] QtWebKit versioning added + https://bugs.webkit.org/show_bug.cgi?id=37207 + + QtWebkit releases separated from Qt release cycle. + + * WebCore.pro: + +2010-03-27 Robert Hogan <robert@webkit.org> + + Reviewed by nobody, fix typo in previous commit. + + Allow plugins implemented by the application, such as mimetype 'x-qt-plugin', + when pluginsEnabled is false + + Fix parentheses typo in r56661. This happened while rebasing and was not present + in the reviewed patch, so committing unreviewed. + + https://bugs.webkit.org/attachment.cgi?id=49515 + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::requestObject): + +2010-03-26 Robert Hogan <robert@roberthogan.net> + + Reviewed by Simon Hausmann. + + Allow plugins implemented by the application, such as mimetype 'x-qt-plugin', + when pluginsEnabled is false. + + The purpose of disabling plugins is to prevent the execution of third-party code + that may be untrustworthy. Qt plugins are implemented by the client rather than + loaded from an external source, so the client should have the opportunity to + consider them separately from other plugins. + + Add a function MimeTypeRegistry::isApplicationPluginMIMEType() that WebKit + uses in conjunction with arePluginsEnabled() to determine if it should attempt + to load a plugin. If isApplicationPluginMIMEType() returns true, WebKit will load + the plugin even if arePluginsEnabled() is false. + + Currently, only Qt has application-implemented plugins: these use the mimetype + 'x-qt-plugin' and 'x-qt-styled-widget'. This patch permits Qt clients' + reimplementation of QWebPage::createPlugin() to decide whether or not + to create a Qt plugin, even when arePluginsEnabled is false. + + For all platforms apart from Qt, isApplicationPluginMIMEType() returns false. + + https://bugs.webkit.org/show_bug.cgi?id=32196 + + Test: plugins/application-plugin-plugins-disabled.html + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::requestObject): + * platform/MIMETypeRegistry.h: + * platform/brew/MIMETypeRegistryBrew.cpp: + (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType): + * platform/chromium/MIMETypeRegistryChromium.cpp: + (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType): + * platform/gtk/MIMETypeRegistryGtk.cpp: + (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType): + * platform/haiku/MIMETypeRegistryHaiku.cpp: + (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType): + * platform/mac/MIMETypeRegistryMac.mm: + (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType): + * platform/qt/MIMETypeRegistryQt.cpp: + (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType): + * platform/win/MIMETypeRegistryWin.cpp: + (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType): + * platform/wince/MIMETypeRegistryWince.cpp: + (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType): + * platform/wx/MimeTypeRegistryWx.cpp: + (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType): + +2010-04-29 Noam Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] GraphicsLayer: flicker when starting an animation before the previous one ended. + https://bugs.webkit.org/show_bug.cgi?id=38076 + + This was due to the cude in the removeAnimations functions, which called deleteLater() without stopping the + animation synchronously. The delay between the call to that function and the actual call to the animation's destructor + is when the flicker occured. We fix this by calling stop() synchronously, and making sure that the value is reverted + upon stop (updateState) and not upon the object's destruction. + + http://staff.washington.edu/fmf/2009/03/25/iphone-3d-css-transformations/ now doesn't flicker when + the animation is toggled frequently. + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::TransformAnimationQt::~TransformAnimationQt): + (WebCore::TransformAnimationQt::applyFrame): + (WebCore::TransformAnimationQt::updateState): + (WebCore::OpacityAnimationQt::~OpacityAnimationQt): + (WebCore::OpacityAnimationQt::updateState): + (WebCore::GraphicsLayerQt::removeAnimationsForProperty): + (WebCore::GraphicsLayerQt::removeAnimationsForKeyframes): + +2010-04-29 Noam Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Simon Hausmann. + + Reverse animations don't work in some use cases + https://bugs.webkit.org/show_bug.cgi?id=38075 + + This was due to a code path special-casing reverse animations, that became obselete when we aligned our animation code + with the CA implementation. That special case code path is now a bug - and this patch removes it. + + http://staff.washington.edu/fmf/2009/03/25/iphone-3d-css-transformations/ now runs the reverse + animation correctly. + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::TransformAnimationQt::applyFrame): + +2010-04-29 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Speed up text layouting + https://bugs.webkit.org/show_bug.cgi?id=31719 + + Use QFontMetrics::width() for the text width calculation instead + of QTextLayout. This avoids expensive bearing calculations and the + line breaking code. + + * platform/graphics/qt/FontQt.cpp: + (WebCore::Font::floatWidthForComplexText): + +2010-04-29 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] REGRESSION(r57638): tst_qwebframe::objectDeleted() fails + https://bugs.webkit.org/show_bug.cgi?id=38316 + + Accessing properties of a deleted objects doesn't throw an exception + anymore. + + Continue to expose the QObject class wrapper for objects that + previously existed but don't exist anymore. QtClass is safe to + use with a deleted QObject. + + * bridge/qt/qt_instance.cpp: + (JSC::Bindings::QtInstance::getClass): Return null only if m_class + doesn't exist yet and there's no m_object. + +2010-04-28 Noam Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] GraphicsLayer: preserves-3d and backface visibility + https://bugs.webkit.org/show_bug.cgi?id=35312 + + Implement preserves-3d by maintaining the 3D transformation heirarchy inside GraphicsLayerQt, and extrapolating + the relative QTransform. When the extrapolation fails (un-invertible matrix) we ignore the transformation change. + + WebKitSite/blog-files/3d-transforms test now work with Qt. + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::GraphicsLayerQtImpl::updateTransform): + (WebCore::GraphicsLayerQtImpl::opaqueArea): + (WebCore::GraphicsLayerQtImpl::boundingRect): + (WebCore::GraphicsLayerQtImpl::paint): + (WebCore::GraphicsLayerQtImpl::flushChanges): + +2010-04-28 Justin McPherson <justin.mcpherson@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fix detection of Qt 4.7's multimedia libraries + + QtMultimedia has been split into an additional media services library, which + we're using. mediaservices depends on multimedia. + + * WebCore.pro: + +2010-04-26 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Fix compilation against Qt 4.7 + + Some QtMultimedia things have been moved into QtMediaServices + https://bugs.webkit.org/show_bug.cgi?id=38111 + + * WebCore.pro: + * platform/graphics/qt/MediaPlayerPrivateQt.cpp: + (WebCore::MediaPlayerPrivate::supportsType): + (WebCore::MediaPlayerPrivate::totalBytes): + +2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Make sure WebKit is not compiled using C++0x. + https://bugs.webkit.org/show_bug.cgi?id=37867 + + As the rest of Qt compiles in the C++0x mode, people might start + compiling it in this mode. WebKit don't support this yet. + + Patch by Thiago Macieira <thiago.macieira@nokia.com> + + * WebCore.pro: + +2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Hide the OpenGL and QtMultimedia dependencies from syncqt. + + This prevents the dependent headers from being included by + qt/include/QtWebKit/QtWebKit + + * WebCore.pro: + +2010-04-27 Thomas Zander <t.zander@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fix linking on Symbian on Linux using the Makefile based mkspec. + + Disable thumb mode due to library size limitations, just like it's done + for the sbs/sbsv2 based build system. + + * WebCore.pro: + +2010-04-26 Ruben Van Boxem <vanboxem.ruben@gmail.com> + + Reviewed by Adam Roben. + + Fixes for Win64 compilation under gcc (mingw-w64) + + * WebCore/bridge/npapi.h: for win64 compatibility, mirroring mozilla-central, see Mozilla bug 560298 + * WebCore/platform/Arena.h: uword is used to cast from pointers here. unsigned long is 32-bit on Windows (but 64-bit on mac), and too small to hold a pointer. uintptr_t is 32-bit on 32-bit systems (mac, linux and windows) and 64-bit on all 64-bit systems + * WebCore/platform/graphics/transforms/TransformationMatrix.h: let mingw-w64/w32 use MSVC codepath + * WebCore/platform/text/TextStream.cpp: let mingw-w64 use MSVC codepath + * WebCore/platform/text/TextStream.h: let mingw-w64 use MSVC codepath + * WebCore/plugins/PluginView.cpp: fix pointer casts on WIN64 and let mingw-w64 use MSVC codepath + * WebCore/plugins/win/PluginViewWin.cpp: fix pointer casts on WIN64 + +2010-01-07 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Reviewed by NOBODY (OOPS!). + + [RVCT] ACID3 test crash + https://bugs.webkit.org/show_bug.cgi?id=33280 + + Workaround developed by Yongjun Zhang. + + * dom/Element.cpp: + (WebCore::Element::setAttribute): + +2010-04-26 Markus Goetz <Markus.Goetz@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] HTTP pipelining efficiency increase + https://bugs.webkit.org/show_bug.cgi?id=38062 + + Increase number of network requests that are fed into + QNetworkAccessManager. + + * platform/network/qt/ResourceRequestQt.cpp: + (WebCore::initializeMaximumHTTPConnectionCountPerHost): + +2010-04-26 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Fix compilation with RVCT 4 + https://bugs.webkit.org/show_bug.cgi?id=37727 + + Swap extern and declspec to fix visibility of symbol imported from QtGui. + + * page/qt/EventHandlerQt.cpp: + +2010-04-26 Bruno Schmidt <bruno.schmidt@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Exposing an QVariantMap containing QObjectStar to Javascript + causes Segmentation Fault + https://bugs.webkit.org/show_bug.cgi?id=34729 + + If an QVariantMap containing QObjectStar is added to the to QtWebkit + Javascript, it's use causes Segmentation Fault. + It happens because, in the case QMetaType::QVariantMap, the "root" + object that is inside of a PassRefPtr is passed recursively inside a + loop to recover the content of the map, but the PassRefPtr semantics + prohibit its use inside a loop, so the "root" object mus be passed + using the method "PassRefPtr::get" in order to keep the current + reference. + + * bridge/qt/qt_runtime.cpp: + (JSC::Bindings::convertValueToQVariant): + (JSC::Bindings::convertQVariantToValue): change to root.get() + +2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Darin Adler. + + Fix the MSVC 64bit build. + https://bugs.webkit.org/show_bug.cgi?id=37980 + + * platform/text/TextStream.cpp: + * platform/text/TextStream.h: + * plugins/win/PluginViewWin.cpp: + (WebCore::PluginView::platformStart): + +2010-04-22 Ray Rischpater <Raymond.Rischpater@Nokia.com> + + Reviewed by Darin Adler. + + In HTMLInputElement.cpp, shouldUseInputMethod does not return true for + some text input types (TELEPHONE, NUMBER, URL, and EMAIL). Addressed + this by changing shouldUseInputMethod to use internal methods to + check that the field is a text field that isn't a password field. + + No new tests. + + Fixes <https://bugs.webkit.org/show_bug.cgi?id=37719> + + * html/HTMLInputElement.cpp: + (WebCore::HTMLInputElement::shouldUseInputMethod): + +2010-04-22 Gustavo Sverzut Barbieri <barbieri@profusion.mobi> + + Reviewed by Eric Seidel. + + Fix build if NPAPI support is disabled + https://bugs.webkit.org/show_bug.cgi?id=36621 + + No new tests, this is a build fix. + Re-submit r58043 with fix for EFL. + + * plugins/PluginViewNone.cpp: + +2010-03-25 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Reviewed by Darin Adler. + + Fix build if NPAPI support is disabled + https://bugs.webkit.org/show_bug.cgi?id=36621 + + No new tests, this is a build fix. + + * plugins/PluginView.cpp: Guard getValueStatic() with + NETSCAPE_PLUGIN_API + (WebCore::PluginView::getValue): + * plugins/PluginView.h: Guard getValue() with NETSCAPE_PLUGIN_API + * plugins/PluginViewNone.cpp: Guard platformGetValue() and + platformGetValueStatic with NETSCAPE_PLUGIN_API; + Guard privateBrowsingStateChanged() and setJavaScriptPaused() with + PLATFORM(MAC) + +2010-04-14 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + Repaint of fixed, transformed element is broken + https://bugs.webkit.org/show_bug.cgi?id=37637 + + RenderBox::computeRectForRepaint() failed to set the 'fixed' flag correctly + for elements that had both fixed position and a transform. If the element has + a transform, 'fixed' should only remain true if the element itself is fixed + position. + + Also cache style()->position() in a local variable for performance. + + Test: fast/repaint/fixed-tranformed.html + + * rendering/RenderBox.cpp: + (WebCore::RenderBox::computeRectForRepaint): + +2010-04-19 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Simon Fraser. + + Spatial Navigation: at @updateFocusCandidateIfCloser make an assignment shortcut when FocusCandidate is null + https://bugs.webkit.org/show_bug.cgi?id=37802 + + In updateFocusCandidateIfCloser method, we do all bail out checks in the begining of + the method body. If after those bail out checks, no "best FocusCandidate" has been taken + yet (i.e. focusCandidate.isNull() == true), we can safely take the current candidate, + and exit earlier. + + No behavior change, it is just a safe assignment shortcut. + + * page/FocusController.cpp: + (WebCore::updateFocusCandidateIfCloser): + +2010-04-21 No'am Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Simon Fraser. + + [Qt] Fix or remove the runtime flag for accelerated compositing. + + This adds a way for a chrome client to disallow layers from becoming composited, + even if the settings enable accelerated compositing. This is necessary for platforms + where different views can be applied with the same settings to the same page. + + We enable an API through ChromeClient to ask the chrome-client whether or not + it can render composited layers, which is taken into account when the compositor + decides whether or not to start compositing. + + https://bugs.webkit.org/show_bug.cgi?id=37313 + + Pages under LayoutTests/compositing now work under QWebView, even when + QWebSettings::AcceleratedCompositingEnabled is on. + + * page/ChromeClient.h: + (WebCore::ChromeClient::allowsAcceleratedCompositing): + * platform/qt/QWebPageClient.h: + (QWebPageClient::allowsAcceleratedCompositing): + * rendering/RenderLayerCompositor.cpp: + (WebCore::RenderLayerCompositor::canBeComposited): + +2010-04-23 No'am Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] [Performance] GraphicsLayer: constructing the layers takes too long + https://bugs.webkit.org/show_bug.cgi?id=36365 + + The issue came from using QGraphicsView's cache as is. The problem is that + several code-paths require re-rendering of the item, but not re-rendering + of the web content into the cache. + + The way to solve it is by having GraphicsLayerQt manage the cache directly + via QPixmapCache, instead of using QGraphicsItem cache modes. + + FPS measurement shows significant improvement (20FPS before, 40FPS after) + on several use-cases, including blog-files/leaves on a desktop environment. + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl): + (WebCore::GraphicsLayerQtImpl::recache): + (WebCore::GraphicsLayerQtImpl::paint): + (WebCore::GraphicsLayerQtImpl::flushChanges): + +2010-04-21 Benjamin Poulain <ikipou@gmail.com> + + Reviewed by Simon Fraser. + + Update of fixed elements is not made correctly when the page has been scrolled + https://bugs.webkit.org/show_bug.cgi?id=36783 + + When a fixed element was updated, the old geometry was not repainted correctly + because the repaint rect was cached during the layout and not updated when + scrolling. + + The rect is now updated while scrolling so the region updated correspond to the + region of the element on the screen. + + The method RenderLayer::updateRepaintRectsAfterScroll() updates + the repaint rect of all fixed tree after scroll. + + Tests: fast/repaint/fixed-child-move-after-scroll.html + fast/repaint/fixed-child-of-fixed-move-after-scroll.html + fast/repaint/fixed-child-of-transformed-move-after-scroll.html + fast/repaint/fixed-move-after-scroll.html + + * page/FrameView.cpp: + (WebCore::FrameView::scrollPositionChanged): + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::updateRepaintRectsAfterScroll): + * rendering/RenderLayer.h: + +2010-04-21 David Leong <david.leong@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Symbian apps crash on exit due to a bad qObject_cast. + + https://bugs.webkit.org/show_bug.cgi?id=37303 + + Added check for NULL to avoid the crash. Reworked to fix memory leak + + * plugins/symbian/PluginViewSymbian.cpp: + (WebCore::PluginView::platformDestroy): + +2010-04-14 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Simon Fraser. + + Spatial Navigation: make hasOffscreenRect() to earlier return 'true' if absoluteClippedOverflowRect() gives an empty rect + https://bugs.webkit.org/show_bug.cgi?id=37635 + + absoluteClippedOverflowRect method of RenderObject does return an empty IntRect for offscreen nodes. + So hasOffscreenRect method (SpatialNavigation.cpp) can safily bail out earlier in such cases. + + * page/SpatialNavigation.cpp: + (WebCore::hasOffscreenRect): + +2010-04-12 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Simon Fraser. + + Spatial Navigation: make renderRectRelativeToRootDocument method to fallback to getRect() of Element when needed + https://bugs.webkit.org/show_bug.cgi?id=37461 + + getRect() of Element can be used instead of absoluteClippedOverflowRect of RenderObject when + the node is currently offscreen in an scroll overflowed content. + + Test: fast/events/spatial-navigation/snav-simple-content-overflow.html + + * page/SpatialNavigation.cpp: + (WebCore::renderRectRelativeToRootDocument): + +2010-03-29 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Simon Fraser. + + Spatial Navigation: proper handle negative x or y coordinates + https://bugs.webkit.org/show_bug.cgi?id=36773 + + In Spatial Navigation logic, during rect acquisition in renderRectRelativeToRootDocument, + sometimes negative x() or y() values are got, and the current algorithm bails out in + any of such cases. + + However, when a node is in a scrollable content (content overflow <div>) and + this scrollable container scrolled up, element gets offscreen, and gets negative values + for y(), for example. In such cases, they are still valid to be used in Spatial Navigation + logic. + + Test: fast/events/spatial-navigation/snav-offscreen-content.html + + * page/SpatialNavigation.cpp: + (WebCore::distanceDataForNode): + (WebCore::checkNegativeCoordsForNode): + +2010-04-05 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Kenneth Christiansen. + + Spatial Navigation: bail out as soon as algorithm finds a focus candidate is not applicable + https://bugs.webkit.org/show_bug.cgi?id=37135 + + It happens, for example, when distanceDataForNode assigns numeric_limits<long long> to + current focus candidate's. It means that current candidate is not in direction, or not + a valid target node. + + * page/FocusController.cpp: + (WebCore::FocusController::findFocusableNodeInDirection): + +2010-03-29 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Simon Fraser. + Patch by Antonio Gomes <tonikitoo@webkit.org> + + Spatial Navigation: Initial code simplification in FocusController.cpp and SpatialNavigation.cpp + + WebCore::distanceInDirection method was handling much of the logic not + strictly only related to the distance between nodes acquisition. This + method was simplified and renamed to 'WebCore::distanceDataForNode'. + The latter is now responsible for only getting the distance and alignment + data, while all assignement logic previously in distanceInDirection method + was moved place to updateFocusCandidateIfCloser. + + Parent document distance and alignment acquisitions, in turn, have also + changed location: they are both got from deepFindFocusableNodeInDirection, + and passed in a recursive call to findFocusableNodeInDirection via the + candidateParent variable (optional parameter). In addition, the need for + the 'focusCandidateCopy' variable in deepFindFocusableNodeInDirection method + was removed, making the code much cleaner. + + No behaviour change at this point. Mostly moving code around to the place + where it should live in. + + * page/FocusController.cpp: + (WebCore::FocusController::advanceFocusDirectionally): + (WebCore::updateFocusCandidateIfCloser): + (WebCore::FocusController::findFocusableNodeInDirection): + (WebCore::FocusController::deepFindFocusableNodeInDirection): + * page/FocusController.h: + * page/SpatialNavigation.cpp: + (WebCore::distanceDataForNode): + (WebCore::renderRectRelativeToRootDocument): + * page/SpatialNavigation.h: + +2010-04-20 No'am Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Antti Koivisto. + + [Qt] GraphicsLayer: support fill-modes + https://bugs.webkit.org/show_bug.cgi?id=36216 + Implement the CSS-animation "fill mode" concept in GraphicsLayerQt. The concept + enables a key-frame animation to go to the animation's starting point before the delay, + and/or to stay at the animation's ending point after its ended, without reverting to the default + value. + We do that by manually setting the value to keyframe-0 before the delay if fill-mode is backwards/both, + and manually modifying the default value to the animated value as we animate, with fill-mode forwards/both. + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::AnimationQtBase::AnimationQtBase): + (WebCore::TransformAnimationQt::~TransformAnimationQt): + (WebCore::TransformAnimationQt::applyFrame): + (WebCore::GraphicsLayerQt::addAnimation): + +2010-04-13 Eskil Blomfeldt <eblomfel@trolltech.com>, Jesus Sanchez-Palencia <jesus.palencia@openbossa.org> + + Reviewed by Simon Hausmann. + + [Qt] Use integer pixel metric QFont API to fix rounding errors in text rendering on the Mac + https://bugs.webkit.org/show_bug.cgi?id=36532 + + * platform/graphics/qt/FontQt.cpp: + (WebCore::Font::floatWidthForComplexText): + (WebCore::Font::font): + +2010-04-16 Daniel Bates <dbates@rim.com> + + Reviewed by Adam Treat. + + https://bugs.webkit.org/show_bug.cgi?id=36312 + + Adds support for the viewport meta tag. The code is largely derived in whole + or in part from the WebCore-528.15 source published as part of the iPhone 3.1.3 + source code <http://www.opensource.apple.com/source/WebCore/WebCore-528.15/>. + + * Android.mk: Added file ViewportArguments.cpp. + * GNUmakefile.am: Added files ViewportArguments.cpp and ViewportArguments.h. + * WebCore.gypi: Ditto. + * WebCore.pro: Ditto. + * WebCore.vcproj/WebCore.vcproj: Ditto. + * WebCore.xcodeproj/project.pbxproj: Ditto. + * dom/Document.cpp: + (WebCore::isSeparator): Added. + (WebCore::Document::processArguments): Added. + (WebCore::Document::processViewport): Added. + * dom/Document.h: + * dom/ViewportArguments.cpp: Added. + (WebCore::setViewportFeature): + (WebCore::viewportErrorMessageTemplate): + (WebCore::viewportErrorMessageLevel): + (WebCore::reportViewportWarning): + * dom/ViewportArguments.h: Added. + (WebCore::): + (WebCore::ViewportArguments::): + (WebCore::ViewportArguments::ViewportArguments): + (WebCore::ViewportArguments::hasCustomArgument): + * html/HTMLMetaElement.cpp: + (WebCore::HTMLMetaElement::process): Modified to call Document::processViewport. + * page/ChromeClient.h: + (WebCore::ChromeClient::didReceiveViewportArguments): Added. + +2010-04-15 Luiz Agostini <luiz.agostini@openbossa.org> + + Reviewed by Antti Koivisto. + + No default selection for <select multiple> menu lists. + https://bugs.webkit.org/show_bug.cgi?id=37530 + + Manual test: manual-tests/no-listbox-rendering.html + + For menu lists, if the selection is not indicated by the html file, the first <option> will be + selected after loading the page or reseting the form. On the other hand listboxes may have no + element selected after loading the page or reseting the form. + + When NO_LISTBOX_RENDERING is enabled listboxes becomes menu lists. Those <select multiple> + that did not have selected elements, now being menu lists, will have the first <option> + selected. That is the behavior difference that this patch corrects. + + When NO_LISTBOX_RENDERING is enabled usesMenuList() always returns true then usesMenuList() cannot + be used to decide about initial selection of the elements. This patch replaces (usesMenuLists()) + by (!multiple && size <= 1) where initial selection is considered. + + * dom/SelectElement.cpp: + (WebCore::SelectElement::recalcListItems): + (WebCore::SelectElement::reset): + * manual-tests/no-listbox-rendering.html: Added. + +2010-04-19 Balazs Kelemen <kb@inf.u-szeged.hu> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Destroy SharedTimerQt before destruction of QCoreApplication. + + To avoid unsafe situations caused by running WebCore code (through firing timers) when destruction of QCoreApplication + has been started, we should explicitly destroy the SharedTimerQt instance on application exit. + We can achieve that through installing a self-destroying slot for the QCoreApplication::aboutToQuit() signal + into the SharedTimerQt instance. + + https://bugs.webkit.org/show_bug.cgi?id=36832 + + No functional change so no new tests. + + * platform/qt/SharedTimerQt.cpp: + (WebCore::SharedTimerQt::SharedTimerQt): + (WebCore::SharedTimerQt::destroy): + (WebCore::SharedTimerQt::inst): + +2010-04-16 Noam Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + Make GraphicsLayerQt always use ItemCoordinateCache, and remove ItemUsesExtendedStyleOption. + This aligns our implementation with the Safari implementation - layers are always uploaded + to textures in item units, and WebCore is responsible for the heuristics. + + [Qt] GraphicsLayer: performance optimizations + https://bugs.webkit.org/show_bug.cgi?id=35393 + + No new tests. Still no FPS benchmarks available (on any platform) + but animations are noticably better. + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl): + (WebCore::GraphicsLayerQtImpl::paint): + (WebCore::GraphicsLayerQtImpl::flushChanges): + (WebCore::TransformAnimationQt::updateState): + +2010-04-16 Antonio Gomes <tonikitoo@webkit.org> + + Unreviewed QtWebKit (with Qt 4.7) build fix. + + Bug 37683 moved code from FontQt.cpp to FontPlatformDataQt.cpp but did not + renamed the variable used. + + * platform/graphics/qt/FontPlatformDataQt.cpp: + (WebCore::FontPlatformData::FontPlatformData): + +2010-04-16 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] WebCore::Font::font() causes a QFont detach + https://bugs.webkit.org/show_bug.cgi?id=37683 + + Moved the setStyleStrategy call to FontPlatformData + to avoid the detach. + + Thanks to Holger for spotting this. + + * platform/graphics/qt/FontPlatformDataQt.cpp: + (WebCore::FontPlatformData::FontPlatformData): + * platform/graphics/qt/FontQt.cpp: + (WebCore::Font::font): + +2010-04-16 No'am Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Antti Koivisto. + + [Qt]QtLauncher crash on page with CSS 3D transform + https://bugs.webkit.org/show_bug.cgi?id=36859 + + Added a neccessary null-pointer check, lack of which created the crash circumstances. + + Tested by http://css-vfx.googlecode.com/svn/trunk/snowstack/snowstack.html + + * platform/graphics/qt/GraphicsLayerQt.cpp: + (WebCore::GraphicsLayerQtImpl::flushChanges): + +2010-04-18 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt] Fix JavaScriptCore's include path for WinCE builds + + https://bugs.webkit.org/show_bug.cgi?id=36751 + + * WebCore.pro: + +2010-04-19 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fix compilation against namespaced Qt. + + * platform/graphics/GraphicsLayer.h: + * platform/graphics/Tile.h: + * platform/graphics/qt/MediaPlayerPrivateQt.h: + * platform/network/qt/NetworkStateNotifierPrivate.h: + +2010-04-14 Luiz Agostini <luiz.agostini@openbossa.org> + + Reviewed by Kenneth Rohde Christiansen. + + Changing view mode names due to specification changes + https://bugs.webkit.org/show_bug.cgi?id=37615 + + test: fast/media/media-feature-wgt-view-mode.html + + specification: http://dev.w3.org/2006/waf/widgets-vmmf/ + + * css/MediaQueryEvaluator.cpp: + (WebCore::view_modeMediaFeatureEval): + * page/ChromeClient.h: + (WebCore::ChromeClient::isWindowed): + (WebCore::ChromeClient::isMaximized): + (WebCore::ChromeClient::isMinimized): + +2010-04-15 Bruno Schmidt <bruno.schmidt@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Null QObjects properties cause Segmentation Fault + https://bugs.webkit.org/show_bug.cgi?id=34730 + + QObjects exported to the QWebkit javascript with properties that are + a null "QObject*" cause Segmentation Fault. + + If an QObject is added to the javascript context and it contains + properties of the type QObject* with NULL value, calling the property + causes Segmentation Fault. + So now the code below properly checks for null pointers: + + * bridge/qt/qt_instance.cpp: + (JSC::Bindings::QtInstance::getClass): may return NULL + (JSC::Bindings::QtInstance::getMethod): may return jsNull() + (JSC::Bindings::QtInstance::stringValue): may return jsNull() + (JSC::Bindings::QtInstance::booleanValue): may return false + * bridge/qt/qt_runtime.cpp: + (JSC::Bindings::convertValueToQVariant): + (JSC::Bindings::convertQVariantToValue): May return jsNull on QObjectStar + 2010-04-09 Kenneth Rohde Christiansen <kenneth@webkit.org> Reviewed by Simon Fraser. diff --git a/src/3rdparty/webkit/WebCore/WebCore.gypi b/src/3rdparty/webkit/WebCore/WebCore.gypi index 9746b46..caa79f2 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.gypi +++ b/src/3rdparty/webkit/WebCore/WebCore.gypi @@ -1226,6 +1226,8 @@ 'dom/UIEvent.h', 'dom/UIEventWithKeyState.cpp', 'dom/UIEventWithKeyState.h', + 'dom/ViewportArguments.cpp', + 'dom/ViewportArguments.h', 'dom/WebKitAnimationEvent.cpp', 'dom/WebKitAnimationEvent.h', 'dom/WebKitTransitionEvent.cpp', diff --git a/src/3rdparty/webkit/WebCore/WebCore.pri b/src/3rdparty/webkit/WebCore/WebCore.pri index 039f26c..ad514a2 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pri +++ b/src/3rdparty/webkit/WebCore/WebCore.pri @@ -96,10 +96,9 @@ greaterThan(QT_MINOR_VERSION, 5) { # Web Socket support. !contains(DEFINES, ENABLE_WEB_SOCKETS=.): DEFINES += ENABLE_WEB_SOCKETS=1 -# XSLT support with QtXmlPatterns +# Disable XSLT support with QtXmlPatterns in the 2.0 release !contains(DEFINES, ENABLE_XSLT=.) { - contains(QT_CONFIG, xmlpatterns):DEFINES += ENABLE_XSLT=1 - else:DEFINES += ENABLE_XSLT=0 + DEFINES += ENABLE_XSLT=0 } !CONFIG(QTDIR_build):!contains(DEFINES, ENABLE_QT_BEARER=.) { diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 276ca04..beeb529 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -35,13 +35,13 @@ symbian: { # Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000. QMAKE_LFLAGS.ARMCC += --rw-base 0xE00000 MMP_RULES += ALWAYS_BUILD_AS_ARM - } else { + } else { QMAKE_CFLAGS -= --thumb QMAKE_CXXFLAGS -= --thumb } + CONFIG(release, debug|release): QMAKE_CXXFLAGS.ARMCC += -OTime -O3 } - isEmpty(OUTPUT_DIR): OUTPUT_DIR = .. include($$PWD/../WebKit.pri) @@ -55,8 +55,6 @@ CONFIG(standalone_package) { isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = $$PWD/../JavaScriptCore/generated PRECOMPILED_HEADER = $$PWD/../WebKit/qt/WebKit_pch.h - - symbian: TARGET += $${QT_LIBINFIX} } else { isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = generated isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = ../JavaScriptCore/generated @@ -71,12 +69,13 @@ CONFIG(standalone_package) { CONFIG(QTDIR_build) { include($$QT_SOURCE_TREE/src/qbase.pri) - # Qt will set the version for us when building in Qt's tree } else { - VERSION = $${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} DESTDIR = $$OUTPUT_DIR/lib !static: DEFINES += QT_MAKEDLL + symbian: TARGET =$$TARGET$${QT_LIBINFIX} } +include($$PWD/../WebKit/qt/qtwebkit_version.pri) +VERSION = $${QT_WEBKIT_MAJOR_VERSION}.$${QT_WEBKIT_MINOR_VERSION}.$${QT_WEBKIT_PATCH_VERSION} unix { QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui QtNetwork @@ -127,6 +126,10 @@ maemo5|symbian|embedded { } maemo5 { + DEFINES += WTF_USE_QT_MOBILE_THEME=1 +} + +contains(DEFINES, WTF_USE_QT_MOBILE_THEME=1) { DEFINES += ENABLE_NO_LISTBOX_RENDERING=1 } @@ -135,17 +138,12 @@ addJavaScriptCoreLib(../JavaScriptCore) # HTML5 Media Support -# We require phonon for versions of Qt < 4.7 -# We require QtMultimedia for versions of Qt >= 4.7 +# We require phonon. QtMultimedia support is disabled currently. !contains(DEFINES, ENABLE_VIDEO=.) { DEFINES -= ENABLE_VIDEO=1 DEFINES += ENABLE_VIDEO=0 - lessThan(QT_MINOR_VERSION, 7):contains(QT_CONFIG, phonon) { - DEFINES -= ENABLE_VIDEO=0 - DEFINES += ENABLE_VIDEO=1 - } - !lessThan(QT_MINOR_VERSION, 7):contains(QT_CONFIG, mediaservices) { + contains(QT_CONFIG, phonon) { DEFINES -= ENABLE_VIDEO=0 DEFINES += ENABLE_VIDEO=1 } @@ -531,6 +529,7 @@ SOURCES += \ dom/TreeWalker.cpp \ dom/UIEvent.cpp \ dom/UIEventWithKeyState.cpp \ + dom/ViewportArguments.cpp \ dom/WebKitAnimationEvent.cpp \ dom/WebKitTransitionEvent.cpp \ dom/WheelEvent.cpp \ @@ -1242,6 +1241,7 @@ HEADERS += \ dom/TreeWalker.h \ dom/UIEvent.h \ dom/UIEventWithKeyState.h \ + dom/ViewportArguments.h \ dom/WebKitAnimationEvent.h \ dom/WebKitTransitionEvent.h \ dom/WheelEvent.h \ @@ -2111,13 +2111,15 @@ SOURCES += \ ../WebKit/qt/Api/qwebinspector.cpp \ ../WebKit/qt/Api/qwebkitversion.cpp + +contains(DEFINES, WTF_USE_QT_MOBILE_THEME=1) { + HEADERS += platform/qt/Maemo5Webstyle.h + SOURCES += platform/qt/Maemo5Webstyle.cpp +} + maemo5 { - HEADERS += \ - ../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.h \ - platform/qt/Maemo5Webstyle.h - SOURCES += \ - ../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.cpp \ - platform/qt/Maemo5Webstyle.cpp + HEADERS += ../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.h + SOURCES += ../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.cpp } @@ -2368,8 +2370,8 @@ contains(DEFINES, ENABLE_VIDEO=1) { rendering/RenderMedia.cpp \ bindings/js/JSAudioConstructor.cpp - # QtMultimedia since 4.7 - greaterThan(QT_MINOR_VERSION, 6) { + # QtMultimedia disabled currently + false:greaterThan(QT_MINOR_VERSION, 6) { HEADERS += platform/graphics/qt/MediaPlayerPrivateQt.h SOURCES += platform/graphics/qt/MediaPlayerPrivateQt.cpp @@ -2950,5 +2952,5 @@ symbian { } } -# WebKit doesn't compile in C++0x mode +# Disable C++0x mode in WebCore for those who enabled it in their Qt's mkspec *-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x diff --git a/src/3rdparty/webkit/WebCore/bridge/npapi.h b/src/3rdparty/webkit/WebCore/bridge/npapi.h index 4a8492e..533fcba 100644 --- a/src/3rdparty/webkit/WebCore/bridge/npapi.h +++ b/src/3rdparty/webkit/WebCore/bridge/npapi.h @@ -590,8 +590,8 @@ typedef QEvent NPEvent; typedef struct _NPEvent { uint16 event; - uint32 wParam; - uint32 lParam; + uintptr_t wParam; + uintptr_t lParam; } NPEvent; #elif defined (XP_UNIX) typedef XEvent NPEvent; diff --git a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp index dc6df14..f6f368b 100644 --- a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp +++ b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp @@ -171,8 +171,11 @@ QtInstance* QtInstance::getInstance(JSObject* object) Class* QtInstance::getClass() const { - if (!m_class) + if (!m_class) { + if (!m_object) + return 0; m_class = QtClass::classForObject(m_object); + } return m_class; } @@ -238,7 +241,9 @@ void QtInstance::getPropertyNames(ExecState* exec, PropertyNameArray& array) JSValue QtInstance::getMethod(ExecState* exec, const Identifier& propertyName) { - MethodList methodList = getClass()->methodsNamed(propertyName, this); + if (!getClass()) + return jsNull(); + MethodList methodList = m_class->methodsNamed(propertyName, this); return new (exec) RuntimeMethod(exec, propertyName, methodList); } @@ -259,12 +264,15 @@ JSValue QtInstance::defaultValue(ExecState* exec, PreferredPrimitiveType hint) c JSValue QtInstance::stringValue(ExecState* exec) const { + QObject* obj = getObject(); + if (!obj) + return jsNull(); + // Hmm.. see if there is a toString defined QByteArray buf; bool useDefault = true; getClass(); - QObject* obj = getObject(); - if (m_class && obj) { + if (m_class) { // Cheat and don't use the full name resolution int index = obj->metaObject()->indexOfMethod("toString()"); if (index >= 0) { @@ -309,7 +317,7 @@ JSValue QtInstance::numberValue(ExecState* exec) const JSValue QtInstance::booleanValue() const { // ECMA 9.2 - return jsBoolean(true); + return jsBoolean(getObject()); } JSValue QtInstance::valueOf(ExecState* exec) const diff --git a/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp b/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp index 3bd5190..1775815 100644 --- a/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp +++ b/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp @@ -332,7 +332,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type break; } - case QMetaType::QVariantMap: + case QMetaType::QVariantMap: if (type == Object || type == Array || type == RTArray) { // Enumerate the contents of the object PropertyNameArray properties(exec); @@ -871,6 +871,8 @@ JSValue convertQVariantToValue(ExecState* exec, PassRefPtr<RootObject> root, con if (type == QMetaType::QObjectStar || type == QMetaType::QWidgetStar) { QObject* obj = variant.value<QObject*>(); + if (!obj) + return jsNull(); return QtInstance::getQtInstance(obj, root, QScriptEngine::QtOwnership)->createRuntimeObject(exec); } @@ -895,7 +897,7 @@ JSValue convertQVariantToValue(ExecState* exec, PassRefPtr<RootObject> root, con QVariantMap::const_iterator i = map.constBegin(); while (i != map.constEnd()) { QString s = i.key(); - JSValue val = convertQVariantToValue(exec, root, i.value()); + JSValue val = convertQVariantToValue(exec, root.get(), i.value()); if (val) { PutPropertySlot slot; ret->put(exec, Identifier(exec, (const UChar *)s.constData(), s.length()), val, slot); diff --git a/src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in b/src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in index 09d969a..1028dcf 100644 --- a/src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in +++ b/src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in @@ -711,7 +711,8 @@ geometricPrecision sRGB # (-webkit-view-mode:) media feature: -mini floating -application fullscreen +maximized +minimized +windowed diff --git a/src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp b/src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp index 4fda075..20c7bb9 100644 --- a/src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp +++ b/src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp @@ -501,14 +501,16 @@ static bool view_modeMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* fram if (value) { String mode = static_cast<CSSPrimitiveValue*>(value)->getStringValue(); if (ChromeClient* client = frame->page()->chrome()->client()) { - if (mode == "mini" && client->isDocked()) + if (mode == "windowed" && client->isWindowed()) return true; if (mode == "floating" && client->isFloating()) return true; - if (mode == "application" && client->isApplication()) - return true; if (mode == "fullscreen" && client->isFullscreen()) return true; + if (mode == "maximized" && client->isMaximized()) + return true; + if (mode == "minimized" && client->isMinimized()) + return true; return false; } } @@ -531,6 +533,9 @@ bool MediaQueryEvaluator::eval(const MediaQueryExp* expr) const if (!m_frame || !m_style) return m_expResult; + if (!expr->isValid()) + return false; + if (!gFunctionMap) createFunctionMap(); diff --git a/src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp b/src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp index 7ba6d84..53c0b73 100644 --- a/src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp +++ b/src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp @@ -37,6 +37,7 @@ namespace WebCore { MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserValueList* valueList) : m_mediaFeature(mediaFeature) , m_value(0) + , m_isValid(true) { if (valueList) { if (valueList->size() == 1) { @@ -73,6 +74,7 @@ MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserValueLis if (isValid) m_value = list.release(); } + m_isValid = m_value; } } diff --git a/src/3rdparty/webkit/WebCore/css/MediaQueryExp.h b/src/3rdparty/webkit/WebCore/css/MediaQueryExp.h index fd55cf6..9272402 100644 --- a/src/3rdparty/webkit/WebCore/css/MediaQueryExp.h +++ b/src/3rdparty/webkit/WebCore/css/MediaQueryExp.h @@ -52,6 +52,8 @@ public: || (other.m_value && m_value && other.m_value->cssText() == m_value->cssText())); } + bool isValid() const { return m_isValid; } + bool isViewportDependent() const { return m_mediaFeature == MediaFeatureNames::widthMediaFeature || m_mediaFeature == MediaFeatureNames::heightMediaFeature || m_mediaFeature == MediaFeatureNames::min_widthMediaFeature || @@ -65,6 +67,7 @@ public: private: AtomicString m_mediaFeature; RefPtr<CSSValue> m_value; + bool m_isValid; }; } // namespace diff --git a/src/3rdparty/webkit/WebCore/dom/Document.cpp b/src/3rdparty/webkit/WebCore/dom/Document.cpp index aedba0d..545819d 100644 --- a/src/3rdparty/webkit/WebCore/dom/Document.cpp +++ b/src/3rdparty/webkit/WebCore/dom/Document.cpp @@ -127,6 +127,7 @@ #include "TreeWalker.h" #include "UIEvent.h" #include "UserContentURLPattern.h" +#include "ViewportArguments.h" #include "WebKitAnimationEvent.h" #include "WebKitTransitionEvent.h" #include "WheelEvent.h" @@ -2282,6 +2283,78 @@ void Document::processHttpEquiv(const String& equiv, const String& content) } } +// Though isspace() considers \t and \v to be whitespace, Win IE doesn't. +static bool isSeparator(UChar c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '=' || c == ',' || c == '\0'; +} + +void Document::processArguments(const String& features, void* data, ArgumentsCallback callback) +{ + // Tread lightly in this code -- it was specifically designed to mimic Win IE's parsing behavior. + int keyBegin, keyEnd; + int valueBegin, valueEnd; + + int i = 0; + int length = features.length(); + String buffer = features.lower(); + while (i < length) { + // skip to first non-separator, but don't skip past the end of the string + while (isSeparator(buffer[i])) { + if (i >= length) + break; + i++; + } + keyBegin = i; + + // skip to first separator + while (!isSeparator(buffer[i])) + i++; + keyEnd = i; + + // skip to first '=', but don't skip past a ',' or the end of the string + while (buffer[i] != '=') { + if (buffer[i] == ',' || i >= length) + break; + i++; + } + + // skip to first non-separator, but don't skip past a ',' or the end of the string + while (isSeparator(buffer[i])) { + if (buffer[i] == ',' || i >= length) + break; + i++; + } + valueBegin = i; + + // skip to first separator + while (!isSeparator(buffer[i])) + i++; + valueEnd = i; + + ASSERT(i <= length); + + String keyString = buffer.substring(keyBegin, keyEnd - keyBegin); + String valueString = buffer.substring(valueBegin, valueEnd - valueBegin); + callback(keyString, valueString, this, data); + } +} + +void Document::processViewport(const String& features) +{ + ASSERT(!features.isNull()); + + Frame* frame = this->frame(); + if (!frame) + return; + + ViewportArguments arguments; + processArguments(features, (void*)&arguments, &setViewportFeature); + + if (frame->page()) + frame->page()->chrome()->client()->didReceiveViewportArguments(frame, arguments); +} + MouseEventWithHitTestResults Document::prepareMouseEvent(const HitTestRequest& request, const IntPoint& documentPoint, const PlatformMouseEvent& event) { ASSERT(!renderer() || renderer()->isRenderView()); diff --git a/src/3rdparty/webkit/WebCore/dom/Document.h b/src/3rdparty/webkit/WebCore/dom/Document.h index cc3e559..44cdf0d 100644 --- a/src/3rdparty/webkit/WebCore/dom/Document.h +++ b/src/3rdparty/webkit/WebCore/dom/Document.h @@ -698,7 +698,8 @@ public: * @param content The header value (value of the meta tag's "content" attribute) */ void processHttpEquiv(const String& equiv, const String& content); - + void processViewport(const String& features); + // Returns the owning element in the parent document. // Returns 0 if this is the top level document. Element* ownerElement() const; @@ -972,6 +973,10 @@ protected: void clearXMLVersion() { m_xmlVersion = String(); } private: + + typedef void (*ArgumentsCallback)(const String& keyString, const String& valueString, Document*, void* data); + void processArguments(const String& features, void* data, ArgumentsCallback); + virtual bool isDocument() const { return true; } virtual void removedLastRef(); virtual void determineParseMode() { } diff --git a/src/3rdparty/webkit/WebCore/dom/Element.cpp b/src/3rdparty/webkit/WebCore/dom/Element.cpp index 8711110..6bd512d 100644 --- a/src/3rdparty/webkit/WebCore/dom/Element.cpp +++ b/src/3rdparty/webkit/WebCore/dom/Element.cpp @@ -561,7 +561,11 @@ void Element::setAttribute(const AtomicString& name, const AtomicString& value, return; } +#if COMPILER(RVCT) + const AtomicString localName = shouldIgnoreAttributeCase(this) ? name.lower() : name; +#else const AtomicString& localName = shouldIgnoreAttributeCase(this) ? name.lower() : name; +#endif // allocate attributemap if necessary Attribute* old = attributes(false)->getAttributeItem(localName, false); diff --git a/src/3rdparty/webkit/WebCore/dom/SelectElement.cpp b/src/3rdparty/webkit/WebCore/dom/SelectElement.cpp index e900245..4af90c9 100644 --- a/src/3rdparty/webkit/WebCore/dom/SelectElement.cpp +++ b/src/3rdparty/webkit/WebCore/dom/SelectElement.cpp @@ -270,11 +270,11 @@ void SelectElement::recalcListItems(SelectElementData& data, const Element* elem if (OptionElement* optionElement = toOptionElement(current)) { listItems.append(current); - if (updateSelectedStates) { - if (!foundSelected && (data.usesMenuList() || (!data.multiple() && optionElement->selected()))) { + if (updateSelectedStates && !data.multiple()) { + if (!foundSelected && (data.size() <= 1 || optionElement->selected())) { foundSelected = optionElement; foundSelected->setSelectedState(true); - } else if (foundSelected && !data.multiple() && optionElement->selected()) { + } else if (foundSelected && optionElement->selected()) { foundSelected->setSelectedState(false); foundSelected = optionElement; } @@ -499,7 +499,7 @@ void SelectElement::reset(SelectElementData& data, Element* element) firstOption = optionElement; } - if (!selectedOption && firstOption && data.usesMenuList()) + if (!selectedOption && firstOption && !data.multiple() && data.size() <= 1) firstOption->setSelectedState(true); setOptionsChangedOnRenderer(data, element); diff --git a/src/3rdparty/webkit/WebCore/dom/ViewportArguments.cpp b/src/3rdparty/webkit/WebCore/dom/ViewportArguments.cpp new file mode 100644 index 0000000..d585896 --- /dev/null +++ b/src/3rdparty/webkit/WebCore/dom/ViewportArguments.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (C) 1999 Lars Knoll (knoll@kde.org) + * (C) 1999 Antti Koivisto (koivisto@kde.org) + * (C) 2001 Dirk Mueller (mueller@kde.org) + * (C) 2006 Alexey Proskuryakov (ap@webkit.org) + * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#include "config.h" +#include "ViewportArguments.h" + +#include "Chrome.h" +#include "Console.h" +#include "DOMWindow.h" +#include "Document.h" +#include "Frame.h" +#include "Page.h" +#include "PlatformString.h" +#include "Tokenizer.h" + +namespace WebCore { + +void setViewportFeature(const String& keyString, const String& valueString, Document* document, void* data) +{ + ViewportArguments* arguments = static_cast<ViewportArguments*>(data); + float value = ViewportArguments::ValueUndefined; + bool didUseConstants = false; + + if (equalIgnoringCase(valueString, "yes")) + value = 1; + else if (equalIgnoringCase(valueString, "device-width")) { + didUseConstants = true; + if (document->page()) + value = document->page()->chrome()->windowRect().width(); + } else if (equalIgnoringCase(valueString, "device-height")) { + didUseConstants = true; + if (document->page()) + value = document->page()->chrome()->windowRect().height(); + } else if (equalIgnoringCase(valueString, "default")) // This allows us to distinguish the omission of a key from asking for the default value. + value = -2; + else if (valueString.length()) // listing a key with no value is shorthand for key=default + value = valueString.toFloat(); + + if (keyString == "initial-scale") + arguments->initialScale = value; + else if (keyString == "minimum-scale") + arguments->minimumScale = value; + else if (keyString == "maximum-scale") { + arguments->maximumScale = value; + if (value > 10.0) + reportViewportWarning(document, MaximumScaleTooLargeError, keyString); + } else if (keyString == "user-scalable") + arguments->userScalable = value; + else if (keyString == "width") { + if (document->page() && value == document->page()->chrome()->windowRect().width() && !didUseConstants) + reportViewportWarning(document, DeviceWidthShouldBeUsedWarning, keyString); + else if (document->page() && value == document->page()->chrome()->windowRect().height() && !didUseConstants) + reportViewportWarning(document, DeviceHeightShouldBeUsedWarning, keyString); + + arguments->width = value; + } else if (keyString == "height") { + if (document->page() && value == document->page()->chrome()->windowRect().width() && !didUseConstants) + reportViewportWarning(document, DeviceWidthShouldBeUsedWarning, keyString); + else if (document->page() && value == document->page()->chrome()->windowRect().height() && !didUseConstants) + reportViewportWarning(document, DeviceHeightShouldBeUsedWarning, keyString); + + arguments->height = value; + } else + reportViewportWarning(document, UnrecognizedViewportArgumentError, keyString); +} + +static const char* viewportErrorMessageTemplate(ViewportErrorCode errorCode) +{ + static const char* const errors[] = { + "Viewport width or height set to physical device width, try using \"device-width\" constant instead for future compatibility.", + "Viewport height or height set to physical device height, try using \"device-height\" constant instead for future compatibility.", + "Viewport argument \"%replacement\" not recognized. Content ignored.", + "Viewport maximum-scale cannot be larger than 10.0. The maximum-scale will be set to 10.0." + }; + + return errors[errorCode]; +} + +static MessageLevel viewportErrorMessageLevel(ViewportErrorCode errorCode) +{ + return errorCode == UnrecognizedViewportArgumentError || errorCode == MaximumScaleTooLargeError ? ErrorMessageLevel : TipMessageLevel; +} + +void reportViewportWarning(Document* document, ViewportErrorCode errorCode, const String& replacement) +{ + Tokenizer* tokenizer = document->tokenizer(); + + Frame* frame = document->frame(); + if (!frame) + return; + + String message = viewportErrorMessageTemplate(errorCode); + message.replace("%replacement", replacement); + + frame->domWindow()->console()->addMessage(HTMLMessageSource, LogMessageType, viewportErrorMessageLevel(errorCode), message, tokenizer ? tokenizer->lineNumber() + 1 : 0, document->url().string()); +} + +} // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/dom/ViewportArguments.h b/src/3rdparty/webkit/WebCore/dom/ViewportArguments.h new file mode 100644 index 0000000..29eec8e --- /dev/null +++ b/src/3rdparty/webkit/WebCore/dom/ViewportArguments.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 1999 Lars Knoll (knoll@kde.org) + * (C) 1999 Antti Koivisto (koivisto@kde.org) + * (C) 2001 Dirk Mueller (mueller@kde.org) + * (C) 2006 Alexey Proskuryakov (ap@webkit.org) + * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + +#ifndef ViewportArguments_h +#define ViewportArguments_h + +namespace WebCore { + +class Document; +class String; + +enum ViewportErrorCode { + DeviceWidthShouldBeUsedWarning, + DeviceHeightShouldBeUsedWarning, + UnrecognizedViewportArgumentError, + MaximumScaleTooLargeError +}; + +struct ViewportArguments { + + enum { ValueUndefined = -1 }; + + ViewportArguments() + : initialScale(ValueUndefined) + , minimumScale(ValueUndefined) + , maximumScale(ValueUndefined) + , width(ValueUndefined) + , height(ValueUndefined) + , userScalable(ValueUndefined) + { + } + + float initialScale; + float minimumScale; + float maximumScale; + float width; + float height; + + float userScalable; + + bool hasCustomArgument() const + { + return initialScale != ValueUndefined || minimumScale != ValueUndefined || maximumScale != ValueUndefined || width != ValueUndefined || height != ValueUndefined || userScalable != ValueUndefined; + } +}; + +void setViewportFeature(const String& keyString, const String& valueString, Document*, void* data); +void reportViewportWarning(Document*, ViewportErrorCode, const String& replacement); + +} // namespace WebCore + +#endif // ViewportArguments_h diff --git a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp index de39328..9f3db9d 100644 --- a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp +++ b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp @@ -76,7 +76,7 @@ /* Copy the first part of user declarations. */ /* Line 189 of yacc.c */ -#line 1 "css\\CSSGrammar.y" +#line 1 "css/CSSGrammar.y" /* @@ -137,7 +137,7 @@ using namespace HTMLNames; /* Line 189 of yacc.c */ -#line 141 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.c" +#line 141 "/WebCore/generated/CSSGrammar.tab.c" /* Enabling traces. */ #ifndef YYDEBUG @@ -238,7 +238,7 @@ typedef union YYSTYPE { /* Line 214 of yacc.c */ -#line 62 "css\\CSSGrammar.y" +#line 62 "css/CSSGrammar.y" bool boolean; char character; @@ -265,7 +265,7 @@ typedef union YYSTYPE /* Line 214 of yacc.c */ -#line 269 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.c" +#line 269 "/WebCore/generated/CSSGrammar.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -276,7 +276,7 @@ typedef union YYSTYPE /* Copy the second part of user declarations. */ /* Line 264 of yacc.c */ -#line 86 "css\\CSSGrammar.y" +#line 86 "css/CSSGrammar.y" static inline int cssyyerror(const char*) @@ -292,7 +292,7 @@ static int cssyylex(YYSTYPE* yylval, void* parser) /* Line 264 of yacc.c */ -#line 296 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.c" +#line 296 "/WebCore/generated/CSSGrammar.tab.c" #ifdef short # undef short @@ -2170,7 +2170,7 @@ yyreduce: case 10: /* Line 1455 of yacc.c */ -#line 280 "css\\CSSGrammar.y" +#line 280 "css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->m_rule = (yyvsp[(4) - (6)].rule); ;} @@ -2179,7 +2179,7 @@ yyreduce: case 11: /* Line 1455 of yacc.c */ -#line 286 "css\\CSSGrammar.y" +#line 286 "css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->m_keyframe = (yyvsp[(4) - (6)].keyframeRule); ;} @@ -2188,7 +2188,7 @@ yyreduce: case 12: /* Line 1455 of yacc.c */ -#line 292 "css\\CSSGrammar.y" +#line 292 "css/CSSGrammar.y" { /* can be empty */ ;} @@ -2197,7 +2197,7 @@ yyreduce: case 13: /* Line 1455 of yacc.c */ -#line 298 "css\\CSSGrammar.y" +#line 298 "css/CSSGrammar.y" { /* can be empty */ ;} @@ -2206,7 +2206,7 @@ yyreduce: case 14: /* Line 1455 of yacc.c */ -#line 304 "css\\CSSGrammar.y" +#line 304 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); if ((yyvsp[(4) - (5)].valueList)) { @@ -2223,7 +2223,7 @@ yyreduce: case 15: /* Line 1455 of yacc.c */ -#line 318 "css\\CSSGrammar.y" +#line 318 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->m_mediaQuery = p->sinkFloatingMediaQuery((yyvsp[(4) - (5)].mediaQuery)); @@ -2233,7 +2233,7 @@ yyreduce: case 16: /* Line 1455 of yacc.c */ -#line 325 "css\\CSSGrammar.y" +#line 325 "css/CSSGrammar.y" { if ((yyvsp[(4) - (5)].selectorList)) { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2246,7 +2246,7 @@ yyreduce: case 23: /* Line 1455 of yacc.c */ -#line 347 "css\\CSSGrammar.y" +#line 347 "css/CSSGrammar.y" { ;} break; @@ -2254,7 +2254,7 @@ yyreduce: case 26: /* Line 1455 of yacc.c */ -#line 357 "css\\CSSGrammar.y" +#line 357 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.rule) = static_cast<CSSParser*>(parser)->createCharsetRule((yyvsp[(3) - (5)].string)); @@ -2266,7 +2266,7 @@ yyreduce: case 27: /* Line 1455 of yacc.c */ -#line 363 "css\\CSSGrammar.y" +#line 363 "css/CSSGrammar.y" { ;} break; @@ -2274,7 +2274,7 @@ yyreduce: case 28: /* Line 1455 of yacc.c */ -#line 365 "css\\CSSGrammar.y" +#line 365 "css/CSSGrammar.y" { ;} break; @@ -2282,7 +2282,7 @@ yyreduce: case 30: /* Line 1455 of yacc.c */ -#line 371 "css\\CSSGrammar.y" +#line 371 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); if ((yyvsp[(2) - (3)].rule) && p->m_styleSheet) @@ -2293,7 +2293,7 @@ yyreduce: case 39: /* Line 1455 of yacc.c */ -#line 390 "css\\CSSGrammar.y" +#line 390 "css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->m_hadSyntacticallyValidCSSRule = true; ;} @@ -2302,14 +2302,14 @@ yyreduce: case 42: /* Line 1455 of yacc.c */ -#line 398 "css\\CSSGrammar.y" +#line 398 "css/CSSGrammar.y" { (yyval.ruleList) = 0; ;} break; case 43: /* Line 1455 of yacc.c */ -#line 399 "css\\CSSGrammar.y" +#line 399 "css/CSSGrammar.y" { (yyval.ruleList) = (yyvsp[(1) - (3)].ruleList); if ((yyvsp[(2) - (3)].rule)) { @@ -2323,7 +2323,7 @@ yyreduce: case 55: /* Line 1455 of yacc.c */ -#line 428 "css\\CSSGrammar.y" +#line 428 "css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createImportRule((yyvsp[(3) - (6)].string), (yyvsp[(5) - (6)].mediaList)); ;} @@ -2332,7 +2332,7 @@ yyreduce: case 56: /* Line 1455 of yacc.c */ -#line 431 "css\\CSSGrammar.y" +#line 431 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2341,7 +2341,7 @@ yyreduce: case 57: /* Line 1455 of yacc.c */ -#line 434 "css\\CSSGrammar.y" +#line 434 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2350,7 +2350,7 @@ yyreduce: case 58: /* Line 1455 of yacc.c */ -#line 437 "css\\CSSGrammar.y" +#line 437 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2359,7 +2359,7 @@ yyreduce: case 59: /* Line 1455 of yacc.c */ -#line 443 "css\\CSSGrammar.y" +#line 443 "css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createVariablesRule((yyvsp[(3) - (7)].mediaList), true); ;} @@ -2368,7 +2368,7 @@ yyreduce: case 60: /* Line 1455 of yacc.c */ -#line 447 "css\\CSSGrammar.y" +#line 447 "css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createVariablesRule((yyvsp[(3) - (7)].mediaList), false); ;} @@ -2377,7 +2377,7 @@ yyreduce: case 61: /* Line 1455 of yacc.c */ -#line 453 "css\\CSSGrammar.y" +#line 453 "css/CSSGrammar.y" { (yyval.mediaList) = static_cast<CSSParser*>(parser)->createMediaList(); ;} @@ -2386,7 +2386,7 @@ yyreduce: case 62: /* Line 1455 of yacc.c */ -#line 457 "css\\CSSGrammar.y" +#line 457 "css/CSSGrammar.y" { (yyval.mediaList) = (yyvsp[(3) - (3)].mediaList); ;} @@ -2395,7 +2395,7 @@ yyreduce: case 63: /* Line 1455 of yacc.c */ -#line 463 "css\\CSSGrammar.y" +#line 463 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); ;} @@ -2404,7 +2404,7 @@ yyreduce: case 64: /* Line 1455 of yacc.c */ -#line 466 "css\\CSSGrammar.y" +#line 466 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); if ((yyvsp[(2) - (2)].boolean)) @@ -2415,7 +2415,7 @@ yyreduce: case 65: /* Line 1455 of yacc.c */ -#line 471 "css\\CSSGrammar.y" +#line 471 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); ;} @@ -2424,7 +2424,7 @@ yyreduce: case 66: /* Line 1455 of yacc.c */ -#line 474 "css\\CSSGrammar.y" +#line 474 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -2433,7 +2433,7 @@ yyreduce: case 67: /* Line 1455 of yacc.c */ -#line 477 "css\\CSSGrammar.y" +#line 477 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -2442,7 +2442,7 @@ yyreduce: case 68: /* Line 1455 of yacc.c */ -#line 480 "css\\CSSGrammar.y" +#line 480 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); ;} @@ -2451,7 +2451,7 @@ yyreduce: case 69: /* Line 1455 of yacc.c */ -#line 486 "css\\CSSGrammar.y" +#line 486 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (3)].boolean); ;} @@ -2460,7 +2460,7 @@ yyreduce: case 70: /* Line 1455 of yacc.c */ -#line 489 "css\\CSSGrammar.y" +#line 489 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -2469,7 +2469,7 @@ yyreduce: case 71: /* Line 1455 of yacc.c */ -#line 492 "css\\CSSGrammar.y" +#line 492 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -2478,7 +2478,7 @@ yyreduce: case 72: /* Line 1455 of yacc.c */ -#line 495 "css\\CSSGrammar.y" +#line 495 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -2487,7 +2487,7 @@ yyreduce: case 73: /* Line 1455 of yacc.c */ -#line 498 "css\\CSSGrammar.y" +#line 498 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (4)].boolean); if ((yyvsp[(2) - (4)].boolean)) @@ -2498,7 +2498,7 @@ yyreduce: case 74: /* Line 1455 of yacc.c */ -#line 503 "css\\CSSGrammar.y" +#line 503 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (4)].boolean); ;} @@ -2507,7 +2507,7 @@ yyreduce: case 75: /* Line 1455 of yacc.c */ -#line 506 "css\\CSSGrammar.y" +#line 506 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (6)].boolean); ;} @@ -2516,7 +2516,7 @@ yyreduce: case 76: /* Line 1455 of yacc.c */ -#line 512 "css\\CSSGrammar.y" +#line 512 "css/CSSGrammar.y" { (yyval.boolean) = static_cast<CSSParser*>(parser)->addVariable((yyvsp[(1) - (4)].string), (yyvsp[(4) - (4)].valueList)); ;} @@ -2525,7 +2525,7 @@ yyreduce: case 77: /* Line 1455 of yacc.c */ -#line 516 "css\\CSSGrammar.y" +#line 516 "css/CSSGrammar.y" { (yyval.boolean) = static_cast<CSSParser*>(parser)->addVariableDeclarationBlock((yyvsp[(1) - (7)].string)); ;} @@ -2534,7 +2534,7 @@ yyreduce: case 78: /* Line 1455 of yacc.c */ -#line 520 "css\\CSSGrammar.y" +#line 520 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -2543,7 +2543,7 @@ yyreduce: case 79: /* Line 1455 of yacc.c */ -#line 524 "css\\CSSGrammar.y" +#line 524 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -2552,7 +2552,7 @@ yyreduce: case 80: /* Line 1455 of yacc.c */ -#line 528 "css\\CSSGrammar.y" +#line 528 "css/CSSGrammar.y" { /* @variables { varname: } Just reduce away this variable with no value. */ (yyval.boolean) = false; @@ -2562,7 +2562,7 @@ yyreduce: case 81: /* Line 1455 of yacc.c */ -#line 533 "css\\CSSGrammar.y" +#line 533 "css/CSSGrammar.y" { /* if we come across rules with invalid values like this case: @variables { varname: *; }, just discard the property/value pair */ (yyval.boolean) = false; @@ -2572,7 +2572,7 @@ yyreduce: case 82: /* Line 1455 of yacc.c */ -#line 540 "css\\CSSGrammar.y" +#line 540 "css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} @@ -2581,7 +2581,7 @@ yyreduce: case 83: /* Line 1455 of yacc.c */ -#line 546 "css\\CSSGrammar.y" +#line 546 "css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->addNamespace((yyvsp[(3) - (6)].string), (yyvsp[(4) - (6)].string)); (yyval.rule) = 0; @@ -2591,7 +2591,7 @@ yyreduce: case 84: /* Line 1455 of yacc.c */ -#line 550 "css\\CSSGrammar.y" +#line 550 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2600,7 +2600,7 @@ yyreduce: case 85: /* Line 1455 of yacc.c */ -#line 553 "css\\CSSGrammar.y" +#line 553 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2609,7 +2609,7 @@ yyreduce: case 86: /* Line 1455 of yacc.c */ -#line 556 "css\\CSSGrammar.y" +#line 556 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2618,21 +2618,21 @@ yyreduce: case 87: /* Line 1455 of yacc.c */ -#line 562 "css\\CSSGrammar.y" +#line 562 "css/CSSGrammar.y" { (yyval.string).characters = 0; ;} break; case 88: /* Line 1455 of yacc.c */ -#line 563 "css\\CSSGrammar.y" +#line 563 "css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 91: /* Line 1455 of yacc.c */ -#line 572 "css\\CSSGrammar.y" +#line 572 "css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} @@ -2641,7 +2641,7 @@ yyreduce: case 92: /* Line 1455 of yacc.c */ -#line 578 "css\\CSSGrammar.y" +#line 578 "css/CSSGrammar.y" { (yyval.valueList) = 0; ;} @@ -2650,7 +2650,7 @@ yyreduce: case 93: /* Line 1455 of yacc.c */ -#line 581 "css\\CSSGrammar.y" +#line 581 "css/CSSGrammar.y" { (yyval.valueList) = (yyvsp[(3) - (4)].valueList); ;} @@ -2659,7 +2659,7 @@ yyreduce: case 94: /* Line 1455 of yacc.c */ -#line 587 "css\\CSSGrammar.y" +#line 587 "css/CSSGrammar.y" { (yyvsp[(3) - (7)].string).lower(); (yyval.mediaQueryExp) = static_cast<CSSParser*>(parser)->createFloatingMediaQueryExp((yyvsp[(3) - (7)].string), (yyvsp[(5) - (7)].valueList)); @@ -2669,7 +2669,7 @@ yyreduce: case 95: /* Line 1455 of yacc.c */ -#line 594 "css\\CSSGrammar.y" +#line 594 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.mediaQueryExpList) = p->createFloatingMediaQueryExpList(); @@ -2680,7 +2680,7 @@ yyreduce: case 96: /* Line 1455 of yacc.c */ -#line 599 "css\\CSSGrammar.y" +#line 599 "css/CSSGrammar.y" { (yyval.mediaQueryExpList) = (yyvsp[(1) - (5)].mediaQueryExpList); (yyval.mediaQueryExpList)->append(static_cast<CSSParser*>(parser)->sinkFloatingMediaQueryExp((yyvsp[(5) - (5)].mediaQueryExp))); @@ -2690,7 +2690,7 @@ yyreduce: case 97: /* Line 1455 of yacc.c */ -#line 606 "css\\CSSGrammar.y" +#line 606 "css/CSSGrammar.y" { (yyval.mediaQueryExpList) = static_cast<CSSParser*>(parser)->createFloatingMediaQueryExpList(); ;} @@ -2699,7 +2699,7 @@ yyreduce: case 98: /* Line 1455 of yacc.c */ -#line 609 "css\\CSSGrammar.y" +#line 609 "css/CSSGrammar.y" { (yyval.mediaQueryExpList) = (yyvsp[(3) - (3)].mediaQueryExpList); ;} @@ -2708,7 +2708,7 @@ yyreduce: case 99: /* Line 1455 of yacc.c */ -#line 615 "css\\CSSGrammar.y" +#line 615 "css/CSSGrammar.y" { (yyval.mediaQueryRestrictor) = MediaQuery::None; ;} @@ -2717,7 +2717,7 @@ yyreduce: case 100: /* Line 1455 of yacc.c */ -#line 618 "css\\CSSGrammar.y" +#line 618 "css/CSSGrammar.y" { (yyval.mediaQueryRestrictor) = MediaQuery::Only; ;} @@ -2726,7 +2726,7 @@ yyreduce: case 101: /* Line 1455 of yacc.c */ -#line 621 "css\\CSSGrammar.y" +#line 621 "css/CSSGrammar.y" { (yyval.mediaQueryRestrictor) = MediaQuery::Not; ;} @@ -2735,7 +2735,7 @@ yyreduce: case 102: /* Line 1455 of yacc.c */ -#line 627 "css\\CSSGrammar.y" +#line 627 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.mediaQuery) = p->createFloatingMediaQuery(p->sinkFloatingMediaQueryExpList((yyvsp[(1) - (1)].mediaQueryExpList))); @@ -2745,7 +2745,7 @@ yyreduce: case 103: /* Line 1455 of yacc.c */ -#line 632 "css\\CSSGrammar.y" +#line 632 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyvsp[(3) - (4)].string).lower(); @@ -2756,7 +2756,7 @@ yyreduce: case 104: /* Line 1455 of yacc.c */ -#line 640 "css\\CSSGrammar.y" +#line 640 "css/CSSGrammar.y" { (yyval.mediaList) = static_cast<CSSParser*>(parser)->createMediaList(); ;} @@ -2765,7 +2765,7 @@ yyreduce: case 106: /* Line 1455 of yacc.c */ -#line 647 "css\\CSSGrammar.y" +#line 647 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.mediaList) = p->createMediaList(); @@ -2776,7 +2776,7 @@ yyreduce: case 107: /* Line 1455 of yacc.c */ -#line 652 "css\\CSSGrammar.y" +#line 652 "css/CSSGrammar.y" { (yyval.mediaList) = (yyvsp[(1) - (4)].mediaList); if ((yyval.mediaList)) @@ -2787,7 +2787,7 @@ yyreduce: case 108: /* Line 1455 of yacc.c */ -#line 657 "css\\CSSGrammar.y" +#line 657 "css/CSSGrammar.y" { (yyval.mediaList) = 0; ;} @@ -2796,7 +2796,7 @@ yyreduce: case 109: /* Line 1455 of yacc.c */ -#line 663 "css\\CSSGrammar.y" +#line 663 "css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createMediaRule((yyvsp[(3) - (7)].mediaList), (yyvsp[(6) - (7)].ruleList)); ;} @@ -2805,7 +2805,7 @@ yyreduce: case 110: /* Line 1455 of yacc.c */ -#line 666 "css\\CSSGrammar.y" +#line 666 "css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createMediaRule(0, (yyvsp[(5) - (6)].ruleList)); ;} @@ -2814,7 +2814,7 @@ yyreduce: case 111: /* Line 1455 of yacc.c */ -#line 672 "css\\CSSGrammar.y" +#line 672 "css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} @@ -2823,7 +2823,7 @@ yyreduce: case 112: /* Line 1455 of yacc.c */ -#line 678 "css\\CSSGrammar.y" +#line 678 "css/CSSGrammar.y" { (yyval.rule) = (yyvsp[(7) - (8)].keyframesRule); (yyvsp[(7) - (8)].keyframesRule)->setNameInternal((yyvsp[(3) - (8)].string)); @@ -2833,14 +2833,14 @@ yyreduce: case 115: /* Line 1455 of yacc.c */ -#line 690 "css\\CSSGrammar.y" +#line 690 "css/CSSGrammar.y" { (yyval.keyframesRule) = static_cast<CSSParser*>(parser)->createKeyframesRule(); ;} break; case 116: /* Line 1455 of yacc.c */ -#line 691 "css\\CSSGrammar.y" +#line 691 "css/CSSGrammar.y" { (yyval.keyframesRule) = (yyvsp[(1) - (3)].keyframesRule); if ((yyvsp[(2) - (3)].keyframeRule)) @@ -2851,7 +2851,7 @@ yyreduce: case 117: /* Line 1455 of yacc.c */ -#line 699 "css\\CSSGrammar.y" +#line 699 "css/CSSGrammar.y" { (yyval.keyframeRule) = static_cast<CSSParser*>(parser)->createKeyframeRule((yyvsp[(1) - (6)].valueList)); ;} @@ -2860,7 +2860,7 @@ yyreduce: case 118: /* Line 1455 of yacc.c */ -#line 705 "css\\CSSGrammar.y" +#line 705 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.valueList) = p->createFloatingValueList(); @@ -2871,7 +2871,7 @@ yyreduce: case 119: /* Line 1455 of yacc.c */ -#line 710 "css\\CSSGrammar.y" +#line 710 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.valueList) = (yyvsp[(1) - (5)].valueList); @@ -2883,14 +2883,14 @@ yyreduce: case 120: /* Line 1455 of yacc.c */ -#line 719 "css\\CSSGrammar.y" +#line 719 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).fValue = (yyvsp[(1) - (1)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; ;} break; case 121: /* Line 1455 of yacc.c */ -#line 720 "css\\CSSGrammar.y" +#line 720 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; CSSParserString& str = (yyvsp[(1) - (1)].string); @@ -2906,7 +2906,7 @@ yyreduce: case 122: /* Line 1455 of yacc.c */ -#line 744 "css\\CSSGrammar.y" +#line 744 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2915,7 +2915,7 @@ yyreduce: case 123: /* Line 1455 of yacc.c */ -#line 747 "css\\CSSGrammar.y" +#line 747 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2924,7 +2924,7 @@ yyreduce: case 124: /* Line 1455 of yacc.c */ -#line 754 "css\\CSSGrammar.y" +#line 754 "css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createFontFaceRule(); ;} @@ -2933,7 +2933,7 @@ yyreduce: case 125: /* Line 1455 of yacc.c */ -#line 757 "css\\CSSGrammar.y" +#line 757 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2942,7 +2942,7 @@ yyreduce: case 126: /* Line 1455 of yacc.c */ -#line 760 "css\\CSSGrammar.y" +#line 760 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -2951,56 +2951,56 @@ yyreduce: case 127: /* Line 1455 of yacc.c */ -#line 766 "css\\CSSGrammar.y" +#line 766 "css/CSSGrammar.y" { (yyval.relation) = CSSSelector::DirectAdjacent; ;} break; case 128: /* Line 1455 of yacc.c */ -#line 767 "css\\CSSGrammar.y" +#line 767 "css/CSSGrammar.y" { (yyval.relation) = CSSSelector::IndirectAdjacent; ;} break; case 129: /* Line 1455 of yacc.c */ -#line 768 "css\\CSSGrammar.y" +#line 768 "css/CSSGrammar.y" { (yyval.relation) = CSSSelector::Child; ;} break; case 130: /* Line 1455 of yacc.c */ -#line 772 "css\\CSSGrammar.y" +#line 772 "css/CSSGrammar.y" { (yyval.integer) = (yyvsp[(1) - (1)].integer); ;} break; case 131: /* Line 1455 of yacc.c */ -#line 773 "css\\CSSGrammar.y" +#line 773 "css/CSSGrammar.y" { (yyval.integer) = 1; ;} break; case 132: /* Line 1455 of yacc.c */ -#line 777 "css\\CSSGrammar.y" +#line 777 "css/CSSGrammar.y" { (yyval.integer) = -1; ;} break; case 133: /* Line 1455 of yacc.c */ -#line 778 "css\\CSSGrammar.y" +#line 778 "css/CSSGrammar.y" { (yyval.integer) = 1; ;} break; case 134: /* Line 1455 of yacc.c */ -#line 782 "css\\CSSGrammar.y" +#line 782 "css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createStyleRule((yyvsp[(1) - (5)].selectorList)); ;} @@ -3009,7 +3009,7 @@ yyreduce: case 135: /* Line 1455 of yacc.c */ -#line 788 "css\\CSSGrammar.y" +#line 788 "css/CSSGrammar.y" { if ((yyvsp[(1) - (1)].selector)) { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3025,7 +3025,7 @@ yyreduce: case 136: /* Line 1455 of yacc.c */ -#line 798 "css\\CSSGrammar.y" +#line 798 "css/CSSGrammar.y" { if ((yyvsp[(1) - (4)].selectorList) && (yyvsp[(4) - (4)].selector)) { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3040,7 +3040,7 @@ yyreduce: case 137: /* Line 1455 of yacc.c */ -#line 807 "css\\CSSGrammar.y" +#line 807 "css/CSSGrammar.y" { (yyval.selectorList) = 0; ;} @@ -3049,7 +3049,7 @@ yyreduce: case 138: /* Line 1455 of yacc.c */ -#line 813 "css\\CSSGrammar.y" +#line 813 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (2)].selector); ;} @@ -3058,7 +3058,7 @@ yyreduce: case 139: /* Line 1455 of yacc.c */ -#line 819 "css\\CSSGrammar.y" +#line 819 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); ;} @@ -3067,7 +3067,7 @@ yyreduce: case 140: /* Line 1455 of yacc.c */ -#line 823 "css\\CSSGrammar.y" +#line 823 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); ;} @@ -3076,7 +3076,7 @@ yyreduce: case 141: /* Line 1455 of yacc.c */ -#line 827 "css\\CSSGrammar.y" +#line 827 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(2) - (2)].selector); if (!(yyvsp[(1) - (2)].selector)) @@ -3097,7 +3097,7 @@ yyreduce: case 142: /* Line 1455 of yacc.c */ -#line 842 "css\\CSSGrammar.y" +#line 842 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(3) - (3)].selector); if (!(yyvsp[(1) - (3)].selector)) @@ -3123,7 +3123,7 @@ yyreduce: case 143: /* Line 1455 of yacc.c */ -#line 862 "css\\CSSGrammar.y" +#line 862 "css/CSSGrammar.y" { (yyval.selector) = 0; ;} @@ -3132,28 +3132,28 @@ yyreduce: case 144: /* Line 1455 of yacc.c */ -#line 868 "css\\CSSGrammar.y" +#line 868 "css/CSSGrammar.y" { (yyval.string).characters = 0; (yyval.string).length = 0; ;} break; case 145: /* Line 1455 of yacc.c */ -#line 869 "css\\CSSGrammar.y" +#line 869 "css/CSSGrammar.y" { static UChar star = '*'; (yyval.string).characters = ☆ (yyval.string).length = 1; ;} break; case 146: /* Line 1455 of yacc.c */ -#line 870 "css\\CSSGrammar.y" +#line 870 "css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 147: /* Line 1455 of yacc.c */ -#line 874 "css\\CSSGrammar.y" +#line 874 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.selector) = p->createFloatingSelector(); @@ -3164,7 +3164,7 @@ yyreduce: case 148: /* Line 1455 of yacc.c */ -#line 879 "css\\CSSGrammar.y" +#line 879 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(2) - (2)].selector); if ((yyval.selector)) { @@ -3177,7 +3177,7 @@ yyreduce: case 149: /* Line 1455 of yacc.c */ -#line 886 "css\\CSSGrammar.y" +#line 886 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); CSSParser* p = static_cast<CSSParser*>(parser); @@ -3189,7 +3189,7 @@ yyreduce: case 150: /* Line 1455 of yacc.c */ -#line 892 "css\\CSSGrammar.y" +#line 892 "css/CSSGrammar.y" { AtomicString namespacePrefix = (yyvsp[(1) - (2)].string); CSSParser* p = static_cast<CSSParser*>(parser); @@ -3205,7 +3205,7 @@ yyreduce: case 151: /* Line 1455 of yacc.c */ -#line 902 "css\\CSSGrammar.y" +#line 902 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(3) - (3)].selector); if ((yyval.selector)) { @@ -3223,7 +3223,7 @@ yyreduce: case 152: /* Line 1455 of yacc.c */ -#line 914 "css\\CSSGrammar.y" +#line 914 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(2) - (2)].selector); if ((yyval.selector)) { @@ -3239,7 +3239,7 @@ yyreduce: case 153: /* Line 1455 of yacc.c */ -#line 927 "css\\CSSGrammar.y" +#line 927 "css/CSSGrammar.y" { CSSParserString& str = (yyvsp[(1) - (1)].string); CSSParser* p = static_cast<CSSParser*>(parser); @@ -3253,7 +3253,7 @@ yyreduce: case 154: /* Line 1455 of yacc.c */ -#line 935 "css\\CSSGrammar.y" +#line 935 "css/CSSGrammar.y" { static UChar star = '*'; (yyval.string).characters = ☆ @@ -3264,7 +3264,7 @@ yyreduce: case 155: /* Line 1455 of yacc.c */ -#line 943 "css\\CSSGrammar.y" +#line 943 "css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); ;} @@ -3273,7 +3273,7 @@ yyreduce: case 156: /* Line 1455 of yacc.c */ -#line 946 "css\\CSSGrammar.y" +#line 946 "css/CSSGrammar.y" { if (!(yyvsp[(2) - (2)].selector)) (yyval.selector) = 0; @@ -3292,7 +3292,7 @@ yyreduce: case 157: /* Line 1455 of yacc.c */ -#line 959 "css\\CSSGrammar.y" +#line 959 "css/CSSGrammar.y" { (yyval.selector) = 0; ;} @@ -3301,7 +3301,7 @@ yyreduce: case 158: /* Line 1455 of yacc.c */ -#line 965 "css\\CSSGrammar.y" +#line 965 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.selector) = p->createFloatingSelector(); @@ -3315,7 +3315,7 @@ yyreduce: case 159: /* Line 1455 of yacc.c */ -#line 973 "css\\CSSGrammar.y" +#line 973 "css/CSSGrammar.y" { if ((yyvsp[(1) - (1)].string).characters[0] >= '0' && (yyvsp[(1) - (1)].string).characters[0] <= '9') { (yyval.selector) = 0; @@ -3333,7 +3333,7 @@ yyreduce: case 163: /* Line 1455 of yacc.c */ -#line 991 "css\\CSSGrammar.y" +#line 991 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.selector) = p->createFloatingSelector(); @@ -3347,7 +3347,7 @@ yyreduce: case 164: /* Line 1455 of yacc.c */ -#line 1002 "css\\CSSGrammar.y" +#line 1002 "css/CSSGrammar.y" { CSSParserString& str = (yyvsp[(1) - (2)].string); CSSParser* p = static_cast<CSSParser*>(parser); @@ -3361,7 +3361,7 @@ yyreduce: case 165: /* Line 1455 of yacc.c */ -#line 1013 "css\\CSSGrammar.y" +#line 1013 "css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); (yyval.selector)->setAttribute(QualifiedName(nullAtom, (yyvsp[(3) - (4)].string), nullAtom)); @@ -3372,7 +3372,7 @@ yyreduce: case 166: /* Line 1455 of yacc.c */ -#line 1018 "css\\CSSGrammar.y" +#line 1018 "css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); (yyval.selector)->setAttribute(QualifiedName(nullAtom, (yyvsp[(3) - (8)].string), nullAtom)); @@ -3384,7 +3384,7 @@ yyreduce: case 167: /* Line 1455 of yacc.c */ -#line 1024 "css\\CSSGrammar.y" +#line 1024 "css/CSSGrammar.y" { AtomicString namespacePrefix = (yyvsp[(3) - (5)].string); CSSParser* p = static_cast<CSSParser*>(parser); @@ -3398,7 +3398,7 @@ yyreduce: case 168: /* Line 1455 of yacc.c */ -#line 1032 "css\\CSSGrammar.y" +#line 1032 "css/CSSGrammar.y" { AtomicString namespacePrefix = (yyvsp[(3) - (9)].string); CSSParser* p = static_cast<CSSParser*>(parser); @@ -3413,7 +3413,7 @@ yyreduce: case 169: /* Line 1455 of yacc.c */ -#line 1044 "css\\CSSGrammar.y" +#line 1044 "css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Exact; ;} @@ -3422,7 +3422,7 @@ yyreduce: case 170: /* Line 1455 of yacc.c */ -#line 1047 "css\\CSSGrammar.y" +#line 1047 "css/CSSGrammar.y" { (yyval.integer) = CSSSelector::List; ;} @@ -3431,7 +3431,7 @@ yyreduce: case 171: /* Line 1455 of yacc.c */ -#line 1050 "css\\CSSGrammar.y" +#line 1050 "css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Hyphen; ;} @@ -3440,7 +3440,7 @@ yyreduce: case 172: /* Line 1455 of yacc.c */ -#line 1053 "css\\CSSGrammar.y" +#line 1053 "css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Begin; ;} @@ -3449,7 +3449,7 @@ yyreduce: case 173: /* Line 1455 of yacc.c */ -#line 1056 "css\\CSSGrammar.y" +#line 1056 "css/CSSGrammar.y" { (yyval.integer) = CSSSelector::End; ;} @@ -3458,7 +3458,7 @@ yyreduce: case 174: /* Line 1455 of yacc.c */ -#line 1059 "css\\CSSGrammar.y" +#line 1059 "css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Contain; ;} @@ -3467,7 +3467,7 @@ yyreduce: case 177: /* Line 1455 of yacc.c */ -#line 1070 "css\\CSSGrammar.y" +#line 1070 "css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); (yyval.selector)->m_match = CSSSelector::PseudoClass; @@ -3503,7 +3503,7 @@ yyreduce: case 178: /* Line 1455 of yacc.c */ -#line 1100 "css\\CSSGrammar.y" +#line 1100 "css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); (yyval.selector)->m_match = CSSSelector::PseudoElement; @@ -3528,7 +3528,7 @@ yyreduce: case 179: /* Line 1455 of yacc.c */ -#line 1120 "css\\CSSGrammar.y" +#line 1120 "css/CSSGrammar.y" { CSSParser *p = static_cast<CSSParser*>(parser); (yyval.selector) = p->createFloatingSelector(); @@ -3551,7 +3551,7 @@ yyreduce: case 180: /* Line 1455 of yacc.c */ -#line 1138 "css\\CSSGrammar.y" +#line 1138 "css/CSSGrammar.y" { CSSParser *p = static_cast<CSSParser*>(parser); (yyval.selector) = p->createFloatingSelector(); @@ -3574,7 +3574,7 @@ yyreduce: case 181: /* Line 1455 of yacc.c */ -#line 1156 "css\\CSSGrammar.y" +#line 1156 "css/CSSGrammar.y" { CSSParser *p = static_cast<CSSParser*>(parser); (yyval.selector) = p->createFloatingSelector(); @@ -3598,7 +3598,7 @@ yyreduce: case 182: /* Line 1455 of yacc.c */ -#line 1175 "css\\CSSGrammar.y" +#line 1175 "css/CSSGrammar.y" { if (!(yyvsp[(4) - (6)].selector) || (yyvsp[(4) - (6)].selector)->simpleSelector() || (yyvsp[(4) - (6)].selector)->tagHistory() || (yyvsp[(4) - (6)].selector)->matchesPseudoElement()) (yyval.selector) = 0; @@ -3616,7 +3616,7 @@ yyreduce: case 183: /* Line 1455 of yacc.c */ -#line 1190 "css\\CSSGrammar.y" +#line 1190 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); ;} @@ -3625,7 +3625,7 @@ yyreduce: case 184: /* Line 1455 of yacc.c */ -#line 1193 "css\\CSSGrammar.y" +#line 1193 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); if ( (yyvsp[(2) - (2)].boolean) ) @@ -3636,7 +3636,7 @@ yyreduce: case 185: /* Line 1455 of yacc.c */ -#line 1198 "css\\CSSGrammar.y" +#line 1198 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); ;} @@ -3645,7 +3645,7 @@ yyreduce: case 186: /* Line 1455 of yacc.c */ -#line 1201 "css\\CSSGrammar.y" +#line 1201 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -3654,7 +3654,7 @@ yyreduce: case 187: /* Line 1455 of yacc.c */ -#line 1204 "css\\CSSGrammar.y" +#line 1204 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -3663,7 +3663,7 @@ yyreduce: case 188: /* Line 1455 of yacc.c */ -#line 1207 "css\\CSSGrammar.y" +#line 1207 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); ;} @@ -3672,7 +3672,7 @@ yyreduce: case 189: /* Line 1455 of yacc.c */ -#line 1210 "css\\CSSGrammar.y" +#line 1210 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); ;} @@ -3681,7 +3681,7 @@ yyreduce: case 190: /* Line 1455 of yacc.c */ -#line 1216 "css\\CSSGrammar.y" +#line 1216 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (3)].boolean); ;} @@ -3690,7 +3690,7 @@ yyreduce: case 191: /* Line 1455 of yacc.c */ -#line 1219 "css\\CSSGrammar.y" +#line 1219 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -3699,7 +3699,7 @@ yyreduce: case 192: /* Line 1455 of yacc.c */ -#line 1222 "css\\CSSGrammar.y" +#line 1222 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -3708,7 +3708,7 @@ yyreduce: case 193: /* Line 1455 of yacc.c */ -#line 1225 "css\\CSSGrammar.y" +#line 1225 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -3717,7 +3717,7 @@ yyreduce: case 194: /* Line 1455 of yacc.c */ -#line 1228 "css\\CSSGrammar.y" +#line 1228 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -3726,7 +3726,7 @@ yyreduce: case 195: /* Line 1455 of yacc.c */ -#line 1231 "css\\CSSGrammar.y" +#line 1231 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (4)].boolean); if ((yyvsp[(2) - (4)].boolean)) @@ -3737,7 +3737,7 @@ yyreduce: case 196: /* Line 1455 of yacc.c */ -#line 1236 "css\\CSSGrammar.y" +#line 1236 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (4)].boolean); ;} @@ -3746,7 +3746,7 @@ yyreduce: case 197: /* Line 1455 of yacc.c */ -#line 1239 "css\\CSSGrammar.y" +#line 1239 "css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (6)].boolean); ;} @@ -3755,7 +3755,7 @@ yyreduce: case 198: /* Line 1455 of yacc.c */ -#line 1245 "css\\CSSGrammar.y" +#line 1245 "css/CSSGrammar.y" { (yyval.boolean) = false; CSSParser* p = static_cast<CSSParser*>(parser); @@ -3774,7 +3774,7 @@ yyreduce: case 199: /* Line 1455 of yacc.c */ -#line 1259 "css\\CSSGrammar.y" +#line 1259 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); p->m_valueList = new CSSParserValueList; @@ -3791,7 +3791,7 @@ yyreduce: case 200: /* Line 1455 of yacc.c */ -#line 1271 "css\\CSSGrammar.y" +#line 1271 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} @@ -3800,7 +3800,7 @@ yyreduce: case 201: /* Line 1455 of yacc.c */ -#line 1275 "css\\CSSGrammar.y" +#line 1275 "css/CSSGrammar.y" { /* The default movable type template has letter-spacing: .none; Handle this by looking for error tokens at the start of an expr, recover the expr and then treat as an error, cleaning @@ -3812,7 +3812,7 @@ yyreduce: case 202: /* Line 1455 of yacc.c */ -#line 1282 "css\\CSSGrammar.y" +#line 1282 "css/CSSGrammar.y" { /* When we encounter something like p {color: red !important fail;} we should drop the declaration */ (yyval.boolean) = false; @@ -3822,7 +3822,7 @@ yyreduce: case 203: /* Line 1455 of yacc.c */ -#line 1287 "css\\CSSGrammar.y" +#line 1287 "css/CSSGrammar.y" { /* Handle this case: div { text-align: center; !important } Just reduce away the stray !important. */ (yyval.boolean) = false; @@ -3832,7 +3832,7 @@ yyreduce: case 204: /* Line 1455 of yacc.c */ -#line 1292 "css\\CSSGrammar.y" +#line 1292 "css/CSSGrammar.y" { /* div { font-family: } Just reduce away this property with no value. */ (yyval.boolean) = false; @@ -3842,7 +3842,7 @@ yyreduce: case 205: /* Line 1455 of yacc.c */ -#line 1297 "css\\CSSGrammar.y" +#line 1297 "css/CSSGrammar.y" { /* if we come across rules with invalid values like this case: p { weight: *; }, just discard the rule */ (yyval.boolean) = false; @@ -3852,7 +3852,7 @@ yyreduce: case 206: /* Line 1455 of yacc.c */ -#line 1302 "css\\CSSGrammar.y" +#line 1302 "css/CSSGrammar.y" { /* if we come across: div { color{;color:maroon} }, ignore everything within curly brackets */ (yyval.boolean) = false; @@ -3862,7 +3862,7 @@ yyreduce: case 207: /* Line 1455 of yacc.c */ -#line 1309 "css\\CSSGrammar.y" +#line 1309 "css/CSSGrammar.y" { (yyval.integer) = cssPropertyID((yyvsp[(1) - (2)].string)); ;} @@ -3871,21 +3871,21 @@ yyreduce: case 208: /* Line 1455 of yacc.c */ -#line 1315 "css\\CSSGrammar.y" +#line 1315 "css/CSSGrammar.y" { (yyval.boolean) = true; ;} break; case 209: /* Line 1455 of yacc.c */ -#line 1316 "css\\CSSGrammar.y" +#line 1316 "css/CSSGrammar.y" { (yyval.boolean) = false; ;} break; case 210: /* Line 1455 of yacc.c */ -#line 1320 "css\\CSSGrammar.y" +#line 1320 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.valueList) = p->createFloatingValueList(); @@ -3896,7 +3896,7 @@ yyreduce: case 211: /* Line 1455 of yacc.c */ -#line 1325 "css\\CSSGrammar.y" +#line 1325 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); (yyval.valueList) = (yyvsp[(1) - (3)].valueList); @@ -3916,7 +3916,7 @@ yyreduce: case 212: /* Line 1455 of yacc.c */ -#line 1339 "css\\CSSGrammar.y" +#line 1339 "css/CSSGrammar.y" { (yyval.valueList) = 0; ;} @@ -3925,7 +3925,7 @@ yyreduce: case 213: /* Line 1455 of yacc.c */ -#line 1342 "css\\CSSGrammar.y" +#line 1342 "css/CSSGrammar.y" { (yyval.valueList) = 0; ;} @@ -3934,7 +3934,7 @@ yyreduce: case 214: /* Line 1455 of yacc.c */ -#line 1345 "css\\CSSGrammar.y" +#line 1345 "css/CSSGrammar.y" { (yyval.valueList) = 0; ;} @@ -3943,7 +3943,7 @@ yyreduce: case 215: /* Line 1455 of yacc.c */ -#line 1351 "css\\CSSGrammar.y" +#line 1351 "css/CSSGrammar.y" { (yyval.character) = '/'; ;} @@ -3952,7 +3952,7 @@ yyreduce: case 216: /* Line 1455 of yacc.c */ -#line 1354 "css\\CSSGrammar.y" +#line 1354 "css/CSSGrammar.y" { (yyval.character) = ','; ;} @@ -3961,7 +3961,7 @@ yyreduce: case 217: /* Line 1455 of yacc.c */ -#line 1357 "css\\CSSGrammar.y" +#line 1357 "css/CSSGrammar.y" { (yyval.character) = 0; ;} @@ -3970,28 +3970,28 @@ yyreduce: case 218: /* Line 1455 of yacc.c */ -#line 1363 "css\\CSSGrammar.y" +#line 1363 "css/CSSGrammar.y" { (yyval.value) = (yyvsp[(1) - (1)].value); ;} break; case 219: /* Line 1455 of yacc.c */ -#line 1364 "css\\CSSGrammar.y" +#line 1364 "css/CSSGrammar.y" { (yyval.value) = (yyvsp[(2) - (2)].value); (yyval.value).fValue *= (yyvsp[(1) - (2)].integer); ;} break; case 220: /* Line 1455 of yacc.c */ -#line 1365 "css\\CSSGrammar.y" +#line 1365 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_STRING; ;} break; case 221: /* Line 1455 of yacc.c */ -#line 1366 "css\\CSSGrammar.y" +#line 1366 "css/CSSGrammar.y" { (yyval.value).id = cssValueKeywordID((yyvsp[(1) - (2)].string)); (yyval.value).unit = CSSPrimitiveValue::CSS_IDENT; @@ -4002,49 +4002,49 @@ yyreduce: case 222: /* Line 1455 of yacc.c */ -#line 1372 "css\\CSSGrammar.y" +#line 1372 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; ;} break; case 223: /* Line 1455 of yacc.c */ -#line 1373 "css\\CSSGrammar.y" +#line 1373 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(2) - (3)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; ;} break; case 224: /* Line 1455 of yacc.c */ -#line 1374 "css\\CSSGrammar.y" +#line 1374 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_URI; ;} break; case 225: /* Line 1455 of yacc.c */ -#line 1375 "css\\CSSGrammar.y" +#line 1375 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_UNICODE_RANGE; ;} break; case 226: /* Line 1455 of yacc.c */ -#line 1376 "css\\CSSGrammar.y" +#line 1376 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (1)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; ;} break; case 227: /* Line 1455 of yacc.c */ -#line 1377 "css\\CSSGrammar.y" +#line 1377 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = CSSParserString(); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; ;} break; case 228: /* Line 1455 of yacc.c */ -#line 1379 "css\\CSSGrammar.y" +#line 1379 "css/CSSGrammar.y" { (yyval.value) = (yyvsp[(1) - (1)].value); ;} @@ -4053,7 +4053,7 @@ yyreduce: case 229: /* Line 1455 of yacc.c */ -#line 1382 "css\\CSSGrammar.y" +#line 1382 "css/CSSGrammar.y" { (yyval.value) = (yyvsp[(1) - (2)].value); ;} @@ -4062,7 +4062,7 @@ yyreduce: case 230: /* Line 1455 of yacc.c */ -#line 1385 "css\\CSSGrammar.y" +#line 1385 "css/CSSGrammar.y" { /* Handle width: %; */ (yyval.value).id = 0; (yyval.value).unit = 0; ;} @@ -4071,147 +4071,147 @@ yyreduce: case 231: /* Line 1455 of yacc.c */ -#line 1391 "css\\CSSGrammar.y" +#line 1391 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).isInt = true; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; ;} break; case 232: /* Line 1455 of yacc.c */ -#line 1392 "css\\CSSGrammar.y" +#line 1392 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; ;} break; case 233: /* Line 1455 of yacc.c */ -#line 1393 "css\\CSSGrammar.y" +#line 1393 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PERCENTAGE; ;} break; case 234: /* Line 1455 of yacc.c */ -#line 1394 "css\\CSSGrammar.y" +#line 1394 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PX; ;} break; case 235: /* Line 1455 of yacc.c */ -#line 1395 "css\\CSSGrammar.y" +#line 1395 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_CM; ;} break; case 236: /* Line 1455 of yacc.c */ -#line 1396 "css\\CSSGrammar.y" +#line 1396 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MM; ;} break; case 237: /* Line 1455 of yacc.c */ -#line 1397 "css\\CSSGrammar.y" +#line 1397 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_IN; ;} break; case 238: /* Line 1455 of yacc.c */ -#line 1398 "css\\CSSGrammar.y" +#line 1398 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PT; ;} break; case 239: /* Line 1455 of yacc.c */ -#line 1399 "css\\CSSGrammar.y" +#line 1399 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PC; ;} break; case 240: /* Line 1455 of yacc.c */ -#line 1400 "css\\CSSGrammar.y" +#line 1400 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_DEG; ;} break; case 241: /* Line 1455 of yacc.c */ -#line 1401 "css\\CSSGrammar.y" +#line 1401 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_RAD; ;} break; case 242: /* Line 1455 of yacc.c */ -#line 1402 "css\\CSSGrammar.y" +#line 1402 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_GRAD; ;} break; case 243: /* Line 1455 of yacc.c */ -#line 1403 "css\\CSSGrammar.y" +#line 1403 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_TURN; ;} break; case 244: /* Line 1455 of yacc.c */ -#line 1404 "css\\CSSGrammar.y" +#line 1404 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MS; ;} break; case 245: /* Line 1455 of yacc.c */ -#line 1405 "css\\CSSGrammar.y" +#line 1405 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_S; ;} break; case 246: /* Line 1455 of yacc.c */ -#line 1406 "css\\CSSGrammar.y" +#line 1406 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_HZ; ;} break; case 247: /* Line 1455 of yacc.c */ -#line 1407 "css\\CSSGrammar.y" +#line 1407 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_KHZ; ;} break; case 248: /* Line 1455 of yacc.c */ -#line 1408 "css\\CSSGrammar.y" +#line 1408 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EMS; ;} break; case 249: /* Line 1455 of yacc.c */ -#line 1409 "css\\CSSGrammar.y" +#line 1409 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSParserValue::Q_EMS; ;} break; case 250: /* Line 1455 of yacc.c */ -#line 1410 "css\\CSSGrammar.y" +#line 1410 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EXS; ;} break; case 251: /* Line 1455 of yacc.c */ -#line 1411 "css\\CSSGrammar.y" +#line 1411 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); @@ -4225,7 +4225,7 @@ yyreduce: case 252: /* Line 1455 of yacc.c */ -#line 1422 "css\\CSSGrammar.y" +#line 1422 "css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (1)].string); @@ -4236,7 +4236,7 @@ yyreduce: case 253: /* Line 1455 of yacc.c */ -#line 1430 "css\\CSSGrammar.y" +#line 1430 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); CSSParserFunction* f = p->createFloatingFunction(); @@ -4251,7 +4251,7 @@ yyreduce: case 254: /* Line 1455 of yacc.c */ -#line 1439 "css\\CSSGrammar.y" +#line 1439 "css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); CSSParserFunction* f = p->createFloatingFunction(); @@ -4266,21 +4266,21 @@ yyreduce: case 255: /* Line 1455 of yacc.c */ -#line 1455 "css\\CSSGrammar.y" +#line 1455 "css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 256: /* Line 1455 of yacc.c */ -#line 1456 "css\\CSSGrammar.y" +#line 1456 "css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 257: /* Line 1455 of yacc.c */ -#line 1463 "css\\CSSGrammar.y" +#line 1463 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -4289,7 +4289,7 @@ yyreduce: case 258: /* Line 1455 of yacc.c */ -#line 1466 "css\\CSSGrammar.y" +#line 1466 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -4298,7 +4298,7 @@ yyreduce: case 259: /* Line 1455 of yacc.c */ -#line 1472 "css\\CSSGrammar.y" +#line 1472 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -4307,7 +4307,7 @@ yyreduce: case 260: /* Line 1455 of yacc.c */ -#line 1475 "css\\CSSGrammar.y" +#line 1475 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -4316,7 +4316,7 @@ yyreduce: case 261: /* Line 1455 of yacc.c */ -#line 1481 "css\\CSSGrammar.y" +#line 1481 "css/CSSGrammar.y" { (yyval.rule) = 0; ;} @@ -4325,7 +4325,7 @@ yyreduce: case 262: /* Line 1455 of yacc.c */ -#line 1499 "css\\CSSGrammar.y" +#line 1499 "css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->invalidBlockHit(); ;} @@ -4334,7 +4334,7 @@ yyreduce: case 263: /* Line 1455 of yacc.c */ -#line 1502 "css\\CSSGrammar.y" +#line 1502 "css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->invalidBlockHit(); ;} @@ -4343,7 +4343,7 @@ yyreduce: /* Line 1455 of yacc.c */ -#line 4347 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.c" +#line 4347 "/WebCore/generated/CSSGrammar.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -4555,6 +4555,6 @@ yyreturn: /* Line 1675 of yacc.c */ -#line 1512 "css\\CSSGrammar.y" +#line 1512 "css/CSSGrammar.y" diff --git a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h index 31d6cce..8e0f4bb 100644 --- a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h +++ b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h @@ -115,7 +115,7 @@ typedef union YYSTYPE { /* Line 1676 of yacc.c */ -#line 62 "css\\CSSGrammar.y" +#line 62 "css/CSSGrammar.y" bool boolean; char character; @@ -142,7 +142,7 @@ typedef union YYSTYPE /* Line 1676 of yacc.c */ -#line 144 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.h" +#line 144 "/WebCore/generated/CSSGrammar.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp b/src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp index e6ed010..87fb55b 100644 --- a/src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp +++ b/src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp @@ -1,4 +1,4 @@ -/* ANSI-C code produced by gperf version 3.0.1 */ +/* ANSI-C code produced by gperf version 3.0.3 */ /* Command-line: gperf -a -L ANSI-C -E -C -c -o -t --key-positions='*' -NfindProp -Hhash_prop -Wwordlist_prop -D -s 2 CSSPropertyNames.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -217,6 +217,9 @@ hash_prop (register const char *str, register unsigned int len) #ifdef __GNUC__ __inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif #endif const struct props * findProp (register const char *str, register unsigned int len) diff --git a/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c b/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c index 89b1c4a..b7bf3de 100644 --- a/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c +++ b/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c @@ -1,4 +1,4 @@ -/* ANSI-C code produced by gperf version 3.0.1 */ +/* ANSI-C code produced by gperf version 3.0.3 */ /* Command-line: gperf -L ANSI-C -E -C -n -o -t --key-positions='*' -NfindValue -Hhash_val -Wwordlist_value -D CSSValueKeywords.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -194,13 +194,16 @@ hash_val (register const char *str, register unsigned int len) #ifdef __GNUC__ __inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif #endif const struct css_value * findValue (register const char *str, register unsigned int len) { enum { - TOTAL_KEYWORDS = 613, + TOTAL_KEYWORDS = 614, MIN_WORD_LENGTH = 2, MAX_WORD_LENGTH = 35, MIN_HASH_VALUE = 0, @@ -223,7 +226,7 @@ findValue (register const char *str, register unsigned int len) {"end", CSSValueEnd}, #line 46 "CSSValueKeywords.gperf" {"700", CSSValue700}, -#line 621 "CSSValueKeywords.gperf" +#line 622 "CSSValueKeywords.gperf" {"lr", CSSValueLr}, #line 45 "CSSValueKeywords.gperf" {"600", CSSValue600}, @@ -233,17 +236,17 @@ findValue (register const char *str, register unsigned int len) {"400", CSSValue400}, #line 41 "CSSValueKeywords.gperf" {"200", CSSValue200}, -#line 623 "CSSValueKeywords.gperf" +#line 624 "CSSValueKeywords.gperf" {"tb", CSSValueTb}, #line 15 "CSSValueKeywords.gperf" {"inset", CSSValueInset}, #line 146 "CSSValueKeywords.gperf" {"sub", CSSValueSub}, -#line 520 "CSSValueKeywords.gperf" +#line 521 "CSSValueKeywords.gperf" {"indigo", CSSValueIndigo}, -#line 559 "CSSValueKeywords.gperf" +#line 560 "CSSValueKeywords.gperf" {"oldlace", CSSValueOldlace}, -#line 571 "CSSValueKeywords.gperf" +#line 572 "CSSValueKeywords.gperf" {"plum", CSSValuePlum}, #line 71 "CSSValueKeywords.gperf" {"cursive", CSSValueCursive}, @@ -261,7 +264,7 @@ findValue (register const char *str, register unsigned int len) {"armenian", CSSValueArmenian}, #line 299 "CSSValueKeywords.gperf" {"above", CSSValueAbove}, -#line 590 "CSSValueKeywords.gperf" +#line 591 "CSSValueKeywords.gperf" {"tomato", CSSValueTomato}, #line 36 "CSSValueKeywords.gperf" {"normal", CSSValueNormal}, @@ -269,7 +272,7 @@ findValue (register const char *str, register unsigned int len) {"cross", CSSValueCross}, #line 352 "CSSValueKeywords.gperf" {"multiple", CSSValueMultiple}, -#line 480 "CSSValueKeywords.gperf" +#line 481 "CSSValueKeywords.gperf" {"coral", CSSValueCoral}, #line 371 "CSSValueKeywords.gperf" {"ellipsis", CSSValueEllipsis}, @@ -291,7 +294,7 @@ findValue (register const char *str, register unsigned int len) {"contain", CSSValueContain}, #line 437 "CSSValueKeywords.gperf" {"logical", CSSValueLogical}, -#line 616 "CSSValueKeywords.gperf" +#line 617 "CSSValueKeywords.gperf" {"no-change", CSSValueNoChange}, #line 308 "CSSValueKeywords.gperf" {"crop", CSSValueCrop}, @@ -299,17 +302,17 @@ findValue (register const char *str, register unsigned int len) {"blue", CSSValueBlue}, #line 444 "CSSValueKeywords.gperf" {"ease", CSSValueEase}, -#line 588 "CSSValueKeywords.gperf" +#line 589 "CSSValueKeywords.gperf" {"tan", CSSValueTan}, #line 462 "CSSValueKeywords.gperf" {"srgb", CSSValueSrgb}, #line 53 "CSSValueKeywords.gperf" {"large", CSSValueLarge}, -#line 479 "CSSValueKeywords.gperf" +#line 480 "CSSValueKeywords.gperf" {"chocolate", CSSValueChocolate}, #line 258 "CSSValueKeywords.gperf" {"auto", CSSValueAuto}, -#line 618 "CSSValueKeywords.gperf" +#line 619 "CSSValueKeywords.gperf" {"lr-tb", CSSValueLrTb}, #line 298 "CSSValueKeywords.gperf" {"collapse", CSSValueCollapse}, @@ -323,9 +326,9 @@ findValue (register const char *str, register unsigned int len) {"orange", CSSValueOrange}, #line 18 "CSSValueKeywords.gperf" {"outset", CSSValueOutset}, -#line 576 "CSSValueKeywords.gperf" +#line 577 "CSSValueKeywords.gperf" {"salmon", CSSValueSalmon}, -#line 544 "CSSValueKeywords.gperf" +#line 545 "CSSValueKeywords.gperf" {"magenta", CSSValueMagenta}, #line 419 "CSSValueKeywords.gperf" {"caret", CSSValueCaret}, @@ -335,9 +338,9 @@ findValue (register const char *str, register unsigned int len) {"table", CSSValueTable}, #line 51 "CSSValueKeywords.gperf" {"small", CSSValueSmall}, -#line 613 "CSSValueKeywords.gperf" +#line 614 "CSSValueKeywords.gperf" {"hanging", CSSValueHanging}, -#line 474 "CSSValueKeywords.gperf" +#line 475 "CSSValueKeywords.gperf" {"blueviolet", CSSValueBlueviolet}, #line 243 "CSSValueKeywords.gperf" {"compact", CSSValueCompact}, @@ -365,10 +368,8 @@ findValue (register const char *str, register unsigned int len) {"top", CSSValueTop}, #line 310 "CSSValueKeywords.gperf" {"embed", CSSValueEmbed}, -#line 514 "CSSValueKeywords.gperf" +#line 515 "CSSValueKeywords.gperf" {"gold", CSSValueGold}, -#line 463 "CSSValueKeywords.gperf" - {"mini", CSSValueMini}, #line 439 "CSSValueKeywords.gperf" {"lines", CSSValueLines}, #line 351 "CSSValueKeywords.gperf" @@ -383,11 +384,11 @@ findValue (register const char *str, register unsigned int len) {"thin", CSSValueThin}, #line 21 "CSSValueKeywords.gperf" {"solid", CSSValueSolid}, -#line 543 "CSSValueKeywords.gperf" +#line 544 "CSSValueKeywords.gperf" {"linen", CSSValueLinen}, #line 319 "CSSValueKeywords.gperf" {"local", CSSValueLocal}, -#line 589 "CSSValueKeywords.gperf" +#line 590 "CSSValueKeywords.gperf" {"thistle", CSSValueThistle}, #line 392 "CSSValueKeywords.gperf" {"listitem", CSSValueListitem}, @@ -399,31 +400,31 @@ findValue (register const char *str, register unsigned int len) {"tibetan", CSSValueTibetan}, #line 105 "CSSValueKeywords.gperf" {"highlight", CSSValueHighlight}, -#line 484 "CSSValueKeywords.gperf" +#line 485 "CSSValueKeywords.gperf" {"cyan", CSSValueCyan}, -#line 483 "CSSValueKeywords.gperf" +#line 484 "CSSValueKeywords.gperf" {"crimson", CSSValueCrimson}, #line 117 "CSSValueKeywords.gperf" {"threedhighlight", CSSValueThreedhighlight}, -#line 592 "CSSValueKeywords.gperf" +#line 593 "CSSValueKeywords.gperf" {"violet", CSSValueViolet}, #line 164 "CSSValueKeywords.gperf" {"circle", CSSValueCircle}, #line 370 "CSSValueKeywords.gperf" {"clip", CSSValueClip}, -#line 535 "CSSValueKeywords.gperf" +#line 536 "CSSValueKeywords.gperf" {"lightsalmon", CSSValueLightsalmon}, -#line 557 "CSSValueKeywords.gperf" +#line 558 "CSSValueKeywords.gperf" {"moccasin", CSSValueMoccasin}, #line 206 "CSSValueKeywords.gperf" {"ethiopic", CSSValueEthiopic}, -#line 603 "CSSValueKeywords.gperf" +#line 604 "CSSValueKeywords.gperf" {"butt", CSSValueButt}, #line 356 "CSSValueKeywords.gperf" {"up", CSSValueUp}, #line 185 "CSSValueKeywords.gperf" {"urdu", CSSValueUrdu}, -#line 622 "CSSValueKeywords.gperf" +#line 623 "CSSValueKeywords.gperf" {"rl", CSSValueRl}, #line 312 "CSSValueKeywords.gperf" {"hand", CSSValueHand}, @@ -431,7 +432,7 @@ findValue (register const char *str, register unsigned int len) {"aqua", CSSValueAqua}, #line 211 "CSSValueKeywords.gperf" {"hangul", CSSValueHangul}, -#line 470 "CSSValueKeywords.gperf" +#line 471 "CSSValueKeywords.gperf" {"azure", CSSValueAzure}, #line 386 "CSSValueKeywords.gperf" {"button", CSSValueButton}, @@ -447,7 +448,7 @@ findValue (register const char *str, register unsigned int len) {"slow", CSSValueSlow}, #line 144 "CSSValueKeywords.gperf" {"baseline", CSSValueBaseline}, -#line 585 "CSSValueKeywords.gperf" +#line 586 "CSSValueKeywords.gperf" {"snow", CSSValueSnow}, #line 338 "CSSValueKeywords.gperf" {"static", CSSValueStatic}, @@ -457,7 +458,7 @@ findValue (register const char *str, register unsigned int len) {"outside", CSSValueOutside}, #line 306 "CSSValueKeywords.gperf" {"both", CSSValueBoth}, -#line 591 "CSSValueKeywords.gperf" +#line 592 "CSSValueKeywords.gperf" {"turquoise", CSSValueTurquoise}, #line 37 "CSSValueKeywords.gperf" {"bold", CSSValueBold}, @@ -467,11 +468,11 @@ findValue (register const char *str, register unsigned int len) {"inactivecaption", CSSValueInactivecaption}, #line 151 "CSSValueKeywords.gperf" {"bottom", CSSValueBottom}, -#line 612 "CSSValueKeywords.gperf" +#line 613 "CSSValueKeywords.gperf" {"alphabetic", CSSValueAlphabetic}, -#line 562 "CSSValueKeywords.gperf" +#line 563 "CSSValueKeywords.gperf" {"orchid", CSSValueOrchid}, -#line 620 "CSSValueKeywords.gperf" +#line 621 "CSSValueKeywords.gperf" {"tb-rl", CSSValueTbRl}, #line 32 "CSSValueKeywords.gperf" {"italic", CSSValueItalic}, @@ -483,7 +484,7 @@ findValue (register const char *str, register unsigned int len) {"oblique", CSSValueOblique}, #line 438 "CSSValueKeywords.gperf" {"visual", CSSValueVisual}, -#line 614 "CSSValueKeywords.gperf" +#line 615 "CSSValueKeywords.gperf" {"mathematical", CSSValueMathematical}, #line 22 "CSSValueKeywords.gperf" {"double", CSSValueDouble}, @@ -503,7 +504,7 @@ findValue (register const char *str, register unsigned int len) {"running", CSSValueRunning}, #line 279 "CSSValueKeywords.gperf" {"w-resize", CSSValueWResize}, -#line 513 "CSSValueKeywords.gperf" +#line 514 "CSSValueKeywords.gperf" {"ghostwhite", CSSValueGhostwhite}, #line 163 "CSSValueKeywords.gperf" {"disc", CSSValueDisc}, @@ -513,7 +514,7 @@ findValue (register const char *str, register unsigned int len) {"padding", CSSValuePadding}, #line 200 "CSSValueKeywords.gperf" {"amharic", CSSValueAmharic}, -#line 581 "CSSValueKeywords.gperf" +#line 582 "CSSValueKeywords.gperf" {"skyblue", CSSValueSkyblue}, #line 100 "CSSValueKeywords.gperf" {"buttonhighlight", CSSValueButtonhighlight}, @@ -521,8 +522,6 @@ findValue (register const char *str, register unsigned int len) {"landscape", CSSValueLandscape}, #line 246 "CSSValueKeywords.gperf" {"inline-table", CSSValueInlineTable}, -#line 465 "CSSValueKeywords.gperf" - {"application", CSSValueApplication}, #line 259 "CSSValueKeywords.gperf" {"crosshair", CSSValueCrosshair}, #line 267 "CSSValueKeywords.gperf" @@ -543,13 +542,13 @@ findValue (register const char *str, register unsigned int len) {"portrait", CSSValuePortrait}, #line 130 "CSSValueKeywords.gperf" {"no-repeat", CSSValueNoRepeat}, -#line 582 "CSSValueKeywords.gperf" +#line 583 "CSSValueKeywords.gperf" {"slateblue", CSSValueSlateblue}, #line 294 "CSSValueKeywords.gperf" {"capitalize", CSSValueCapitalize}, -#line 619 "CSSValueKeywords.gperf" +#line 620 "CSSValueKeywords.gperf" {"rl-tb", CSSValueRlTb}, -#line 602 "CSSValueKeywords.gperf" +#line 603 "CSSValueKeywords.gperf" {"crispedges", CSSValueCrispedges}, #line 293 "CSSValueKeywords.gperf" {"rtl", CSSValueRtl}, @@ -565,11 +564,13 @@ findValue (register const char *str, register unsigned int len) {"small-caps", CSSValueSmallCaps}, #line 147 "CSSValueKeywords.gperf" {"super", CSSValueSuper}, -#line 477 "CSSValueKeywords.gperf" +#line 478 "CSSValueKeywords.gperf" {"cadetblue", CSSValueCadetblue}, -#line 596 "CSSValueKeywords.gperf" +#line 466 "CSSValueKeywords.gperf" + {"minimized", CSSValueMinimized}, +#line 597 "CSSValueKeywords.gperf" {"nonzero", CSSValueNonzero}, -#line 475 "CSSValueKeywords.gperf" +#line 476 "CSSValueKeywords.gperf" {"brown", CSSValueBrown}, #line 90 "CSSValueKeywords.gperf" {"white", CSSValueWhite}, @@ -603,29 +604,29 @@ findValue (register const char *str, register unsigned int len) {"linear", CSSValueLinear}, #line 171 "CSSValueKeywords.gperf" {"cambodian", CSSValueCambodian}, -#line 467 "CSSValueKeywords.gperf" +#line 468 "CSSValueKeywords.gperf" {"aliceblue", CSSValueAliceblue}, -#line 527 "CSSValueKeywords.gperf" +#line 528 "CSSValueKeywords.gperf" {"lightblue", CSSValueLightblue}, #line 314 "CSSValueKeywords.gperf" {"higher", CSSValueHigher}, #line 19 "CSSValueKeywords.gperf" {"dotted", CSSValueDotted}, -#line 564 "CSSValueKeywords.gperf" +#line 565 "CSSValueKeywords.gperf" {"palegreen", CSSValuePalegreen}, #line 141 "CSSValueKeywords.gperf" {"xor", CSSValueXor}, #line 154 "CSSValueKeywords.gperf" {"left", CSSValueLeft}, -#line 519 "CSSValueKeywords.gperf" +#line 520 "CSSValueKeywords.gperf" {"indianred", CSSValueIndianred}, #line 39 "CSSValueKeywords.gperf" {"lighter", CSSValueLighter}, -#line 586 "CSSValueKeywords.gperf" +#line 587 "CSSValueKeywords.gperf" {"springgreen", CSSValueSpringgreen}, #line 80 "CSSValueKeywords.gperf" {"green", CSSValueGreen}, -#line 482 "CSSValueKeywords.gperf" +#line 483 "CSSValueKeywords.gperf" {"cornsilk", CSSValueCornsilk}, #line 79 "CSSValueKeywords.gperf" {"gray", CSSValueGray}, @@ -633,27 +634,27 @@ findValue (register const char *str, register unsigned int len) {"round", CSSValueRound}, #line 181 "CSSValueKeywords.gperf" {"myanmar", CSSValueMyanmar}, -#line 554 "CSSValueKeywords.gperf" +#line 555 "CSSValueKeywords.gperf" {"midnightblue", CSSValueMidnightblue}, #line 366 "CSSValueKeywords.gperf" {"element", CSSValueElement}, -#line 555 "CSSValueKeywords.gperf" +#line 556 "CSSValueKeywords.gperf" {"mintcream", CSSValueMintcream}, #line 242 "CSSValueKeywords.gperf" {"run-in", CSSValueRunIn}, #line 449 "CSSValueKeywords.gperf" {"document", CSSValueDocument}, -#line 540 "CSSValueKeywords.gperf" +#line 541 "CSSValueKeywords.gperf" {"lightsteelblue", CSSValueLightsteelblue}, #line 264 "CSSValueKeywords.gperf" {"cell", CSSValueCell}, #line 179 "CSSValueKeywords.gperf" {"malayalam", CSSValueMalayalam}, -#line 532 "CSSValueKeywords.gperf" +#line 533 "CSSValueKeywords.gperf" {"lightgreen", CSSValueLightgreen}, #line 92 "CSSValueKeywords.gperf" {"transparent", CSSValueTransparent}, -#line 542 "CSSValueKeywords.gperf" +#line 543 "CSSValueKeywords.gperf" {"limegreen", CSSValueLimegreen}, #line 456 "CSSValueKeywords.gperf" {"stroke", CSSValueStroke}, @@ -661,7 +662,7 @@ findValue (register const char *str, register unsigned int len) {"intrinsic", CSSValueIntrinsic}, #line 454 "CSSValueKeywords.gperf" {"painted", CSSValuePainted}, -#line 536 "CSSValueKeywords.gperf" +#line 537 "CSSValueKeywords.gperf" {"lightseagreen", CSSValueLightseagreen}, #line 331 "CSSValueKeywords.gperf" {"pre", CSSValuePre}, @@ -673,7 +674,7 @@ findValue (register const char *str, register unsigned int len) {"gurmukhi", CSSValueGurmukhi}, #line 348 "CSSValueKeywords.gperf" {"vertical", CSSValueVertical}, -#line 528 "CSSValueKeywords.gperf" +#line 529 "CSSValueKeywords.gperf" {"lightcoral", CSSValueLightcoral}, #line 384 "CSSValueKeywords.gperf" {"push-button", CSSValuePushButton}, @@ -693,7 +694,7 @@ findValue (register const char *str, register unsigned int len) {"close-quote", CSSValueCloseQuote}, #line 183 "CSSValueKeywords.gperf" {"oriya", CSSValueOriya}, -#line 464 "CSSValueKeywords.gperf" +#line 463 "CSSValueKeywords.gperf" {"floating", CSSValueFloating}, #line 143 "CSSValueKeywords.gperf" {"plus-lighter", CSSValuePlusLighter}, @@ -711,15 +712,15 @@ findValue (register const char *str, register unsigned int len) {"source-in", CSSValueSourceIn}, #line 261 "CSSValueKeywords.gperf" {"pointer", CSSValuePointer}, -#line 472 "CSSValueKeywords.gperf" +#line 473 "CSSValueKeywords.gperf" {"bisque", CSSValueBisque}, -#line 598 "CSSValueKeywords.gperf" +#line 599 "CSSValueKeywords.gperf" {"accumulate", CSSValueAccumulate}, #line 119 "CSSValueKeywords.gperf" {"threedshadow", CSSValueThreedshadow}, #line 339 "CSSValueKeywords.gperf" {"thick", CSSValueThick}, -#line 561 "CSSValueKeywords.gperf" +#line 562 "CSSValueKeywords.gperf" {"orangered", CSSValueOrangered}, #line 132 "CSSValueKeywords.gperf" {"copy", CSSValueCopy}, @@ -729,9 +730,9 @@ findValue (register const char *str, register unsigned int len) {"no-close-quote", CSSValueNoCloseQuote}, #line 459 "CSSValueKeywords.gperf" {"optimizespeed", CSSValueOptimizespeed}, -#line 570 "CSSValueKeywords.gperf" +#line 571 "CSSValueKeywords.gperf" {"pink", CSSValuePink}, -#line 604 "CSSValueKeywords.gperf" +#line 605 "CSSValueKeywords.gperf" {"miter", CSSValueMiter}, #line 442 "CSSValueKeywords.gperf" {"flat", CSSValueFlat}, @@ -741,7 +742,7 @@ findValue (register const char *str, register unsigned int len) {"bolder", CSSValueBolder}, #line 436 "CSSValueKeywords.gperf" {"cover", CSSValueCover}, -#line 469 "CSSValueKeywords.gperf" +#line 470 "CSSValueKeywords.gperf" {"aquamarine", CSSValueAquamarine}, #line 429 "CSSValueKeywords.gperf" {"border", CSSValueBorder}, @@ -757,7 +758,7 @@ findValue (register const char *str, register unsigned int len) {"button-bevel", CSSValueButtonBevel}, #line 325 "CSSValueKeywords.gperf" {"no-open-quote", CSSValueNoOpenQuote}, -#line 529 "CSSValueKeywords.gperf" +#line 530 "CSSValueKeywords.gperf" {"lightcyan", CSSValueLightcyan}, #line 118 "CSSValueKeywords.gperf" {"threedlightshadow", CSSValueThreedlightshadow}, @@ -769,13 +770,13 @@ findValue (register const char *str, register unsigned int len) {"ahead", CSSValueAhead}, #line 284 "CSSValueKeywords.gperf" {"col-resize", CSSValueColResize}, -#line 579 "CSSValueKeywords.gperf" +#line 580 "CSSValueKeywords.gperf" {"seashell", CSSValueSeashell}, -#line 473 "CSSValueKeywords.gperf" +#line 474 "CSSValueKeywords.gperf" {"blanchedalmond", CSSValueBlanchedalmond}, #line 76 "CSSValueKeywords.gperf" {"black", CSSValueBlack}, -#line 518 "CSSValueKeywords.gperf" +#line 519 "CSSValueKeywords.gperf" {"hotpink", CSSValueHotpink}, #line 78 "CSSValueKeywords.gperf" {"fuchsia", CSSValueFuchsia}, @@ -783,13 +784,13 @@ findValue (register const char *str, register unsigned int len) {"down", CSSValueDown}, #line 409 "CSSValueKeywords.gperf" {"menulist", CSSValueMenulist}, -#line 566 "CSSValueKeywords.gperf" +#line 567 "CSSValueKeywords.gperf" {"palevioletred", CSSValuePalevioletred}, -#line 515 "CSSValueKeywords.gperf" +#line 516 "CSSValueKeywords.gperf" {"goldenrod", CSSValueGoldenrod}, -#line 534 "CSSValueKeywords.gperf" +#line 535 "CSSValueKeywords.gperf" {"lightpink", CSSValueLightpink}, -#line 569 "CSSValueKeywords.gperf" +#line 570 "CSSValueKeywords.gperf" {"peru", CSSValuePeru}, #line 455 "CSSValueKeywords.gperf" {"fill", CSSValueFill}, @@ -797,7 +798,7 @@ findValue (register const char *str, register unsigned int len) {"kannada", CSSValueKannada}, #line 373 "CSSValueKeywords.gperf" {"dot-dash", CSSValueDotDash}, -#line 492 "CSSValueKeywords.gperf" +#line 493 "CSSValueKeywords.gperf" {"darkmagenta", CSSValueDarkmagenta}, #line 174 "CSSValueKeywords.gperf" {"gujarati", CSSValueGujarati}, @@ -813,17 +814,17 @@ findValue (register const char *str, register unsigned int len) {"currentcolor", CSSValueCurrentcolor}, #line 172 "CSSValueKeywords.gperf" {"khmer", CSSValueKhmer}, -#line 503 "CSSValueKeywords.gperf" +#line 504 "CSSValueKeywords.gperf" {"darkviolet", CSSValueDarkviolet}, #line 106 "CSSValueKeywords.gperf" {"highlighttext", CSSValueHighlighttext}, -#line 497 "CSSValueKeywords.gperf" +#line 498 "CSSValueKeywords.gperf" {"darksalmon", CSSValueDarksalmon}, #line 305 "CSSValueKeywords.gperf" {"blink", CSSValueBlink}, -#line 574 "CSSValueKeywords.gperf" +#line 575 "CSSValueKeywords.gperf" {"royalblue", CSSValueRoyalblue}, -#line 580 "CSSValueKeywords.gperf" +#line 581 "CSSValueKeywords.gperf" {"sienna", CSSValueSienna}, #line 349 "CSSValueKeywords.gperf" {"inline-axis", CSSValueInlineAxis}, @@ -837,7 +838,7 @@ findValue (register const char *str, register unsigned int len) {"buttonshadow", CSSValueButtonshadow}, #line 59 "CSSValueKeywords.gperf" {"wider", CSSValueWider}, -#line 468 "CSSValueKeywords.gperf" +#line 469 "CSSValueKeywords.gperf" {"antiquewhite", CSSValueAntiquewhite}, #line 54 "CSSValueKeywords.gperf" {"x-large", CSSValueXLarge}, @@ -845,7 +846,7 @@ findValue (register const char *str, register unsigned int len) {"ethiopic-abegede", CSSValueEthiopicAbegede}, #line 207 "CSSValueKeywords.gperf" {"ethiopic-halehame-gez", CSSValueEthiopicHalehameGez}, -#line 593 "CSSValueKeywords.gperf" +#line 594 "CSSValueKeywords.gperf" {"wheat", CSSValueWheat}, #line 295 "CSSValueKeywords.gperf" {"uppercase", CSSValueUppercase}, @@ -853,19 +854,21 @@ findValue (register const char *str, register unsigned int len) {"buttontext", CSSValueButtontext}, #line 317 "CSSValueKeywords.gperf" {"level", CSSValueLevel}, -#line 560 "CSSValueKeywords.gperf" +#line 561 "CSSValueKeywords.gperf" {"olivedrab", CSSValueOlivedrab}, -#line 512 "CSSValueKeywords.gperf" +#line 513 "CSSValueKeywords.gperf" {"gainsboro", CSSValueGainsboro}, +#line 465 "CSSValueKeywords.gperf" + {"maximized", CSSValueMaximized}, #line 186 "CSSValueKeywords.gperf" {"telugu", CSSValueTelugu}, -#line 607 "CSSValueKeywords.gperf" +#line 608 "CSSValueKeywords.gperf" {"after-edge", CSSValueAfterEdge}, #line 332 "CSSValueKeywords.gperf" {"pre-line", CSSValuePreLine}, #line 87 "CSSValueKeywords.gperf" {"red", CSSValueRed}, -#line 508 "CSSValueKeywords.gperf" +#line 509 "CSSValueKeywords.gperf" {"dodgerblue", CSSValueDodgerblue}, #line 83 "CSSValueKeywords.gperf" {"navy", CSSValueNavy}, @@ -879,7 +882,7 @@ findValue (register const char *str, register unsigned int len) {"inactivecaptiontext", CSSValueInactivecaptiontext}, #line 260 "CSSValueKeywords.gperf" {"default", CSSValueDefault}, -#line 471 "CSSValueKeywords.gperf" +#line 472 "CSSValueKeywords.gperf" {"beige", CSSValueBeige}, #line 244 "CSSValueKeywords.gperf" {"inline-block", CSSValueInlineBlock}, @@ -895,17 +898,17 @@ findValue (register const char *str, register unsigned int len) {"captiontext", CSSValueCaptiontext}, #line 166 "CSSValueKeywords.gperf" {"decimal", CSSValueDecimal}, -#line 583 "CSSValueKeywords.gperf" +#line 584 "CSSValueKeywords.gperf" {"slategray", CSSValueSlategray}, #line 156 "CSSValueKeywords.gperf" {"center", CSSValueCenter}, -#line 584 "CSSValueKeywords.gperf" +#line 585 "CSSValueKeywords.gperf" {"slategrey", CSSValueSlategrey}, #line 99 "CSSValueKeywords.gperf" {"buttonface", CSSValueButtonface}, -#line 563 "CSSValueKeywords.gperf" +#line 564 "CSSValueKeywords.gperf" {"palegoldenrod", CSSValuePalegoldenrod}, -#line 608 "CSSValueKeywords.gperf" +#line 609 "CSSValueKeywords.gperf" {"central", CSSValueCentral}, #line 269 "CSSValueKeywords.gperf" {"not-allowed", CSSValueNotAllowed}, @@ -921,21 +924,21 @@ findValue (register const char *str, register unsigned int len) {"sw-resize", CSSValueSwResize}, #line 318 "CSSValueKeywords.gperf" {"line-through", CSSValueLineThrough}, -#line 594 "CSSValueKeywords.gperf" +#line 595 "CSSValueKeywords.gperf" {"whitesmoke", CSSValueWhitesmoke}, -#line 466 "CSSValueKeywords.gperf" +#line 464 "CSSValueKeywords.gperf" {"fullscreen", CSSValueFullscreen}, #line 120 "CSSValueKeywords.gperf" {"window", CSSValueWindow}, #line 66 "CSSValueKeywords.gperf" {"expanded", CSSValueExpanded}, -#line 517 "CSSValueKeywords.gperf" +#line 518 "CSSValueKeywords.gperf" {"honeydew", CSSValueHoneydew}, #line 274 "CSSValueKeywords.gperf" {"nw-resize", CSSValueNwResize}, #line 326 "CSSValueKeywords.gperf" {"nowrap", CSSValueNowrap}, -#line 523 "CSSValueKeywords.gperf" +#line 524 "CSSValueKeywords.gperf" {"lavender", CSSValueLavender}, #line 233 "CSSValueKeywords.gperf" {"georgian", CSSValueGeorgian}, @@ -943,7 +946,7 @@ findValue (register const char *str, register unsigned int len) {"xx-small", CSSValueXxSmall}, #line 133 "CSSValueKeywords.gperf" {"source-over", CSSValueSourceOver}, -#line 511 "CSSValueKeywords.gperf" +#line 512 "CSSValueKeywords.gperf" {"forestgreen", CSSValueForestgreen}, #line 198 "CSSValueKeywords.gperf" {"ethiopic-halehame-aa-et", CSSValueEthiopicHalehameAaEt}, @@ -953,99 +956,99 @@ findValue (register const char *str, register unsigned int len) {"ethiopic-halehame-am-et", CSSValueEthiopicHalehameAmEt}, #line 452 "CSSValueKeywords.gperf" {"visiblefill", CSSValueVisiblefill}, -#line 558 "CSSValueKeywords.gperf" +#line 559 "CSSValueKeywords.gperf" {"navajowhite", CSSValueNavajowhite}, #line 303 "CSSValueKeywords.gperf" {"below", CSSValueBelow}, #line 286 "CSSValueKeywords.gperf" {"text", CSSValueText}, -#line 605 "CSSValueKeywords.gperf" +#line 606 "CSSValueKeywords.gperf" {"bevel", CSSValueBevel}, #line 214 "CSSValueKeywords.gperf" {"ethiopic-halehame-om-et", CSSValueEthiopicHalehameOmEt}, #line 276 "CSSValueKeywords.gperf" {"se-resize", CSSValueSeResize}, -#line 556 "CSSValueKeywords.gperf" +#line 557 "CSSValueKeywords.gperf" {"mistyrose", CSSValueMistyrose}, #line 218 "CSSValueKeywords.gperf" {"ethiopic-halehame-so-et", CSSValueEthiopicHalehameSoEt}, #line 432 "CSSValueKeywords.gperf" {"content-box", CSSValueContentBox}, -#line 541 "CSSValueKeywords.gperf" +#line 542 "CSSValueKeywords.gperf" {"lightyellow", CSSValueLightyellow}, -#line 531 "CSSValueKeywords.gperf" +#line 532 "CSSValueKeywords.gperf" {"lightgray", CSSValueLightgray}, #line 226 "CSSValueKeywords.gperf" {"ethiopic-halehame-ti-et", CSSValueEthiopicHalehameTiEt}, -#line 533 "CSSValueKeywords.gperf" +#line 534 "CSSValueKeywords.gperf" {"lightgrey", CSSValueLightgrey}, #line 265 "CSSValueKeywords.gperf" {"context-menu", CSSValueContextMenu}, #line 273 "CSSValueKeywords.gperf" {"ne-resize", CSSValueNeResize}, -#line 611 "CSSValueKeywords.gperf" +#line 612 "CSSValueKeywords.gperf" {"ideographic", CSSValueIdeographic}, -#line 478 "CSSValueKeywords.gperf" +#line 479 "CSSValueKeywords.gperf" {"chartreuse", CSSValueChartreuse}, -#line 522 "CSSValueKeywords.gperf" +#line 523 "CSSValueKeywords.gperf" {"khaki", CSSValueKhaki}, #line 250 "CSSValueKeywords.gperf" {"table-row", CSSValueTableRow}, -#line 600 "CSSValueKeywords.gperf" +#line 601 "CSSValueKeywords.gperf" {"linearrgb", CSSValueLinearrgb}, -#line 538 "CSSValueKeywords.gperf" - {"lightslategray", CSSValueLightslategray}, #line 539 "CSSValueKeywords.gperf" + {"lightslategray", CSSValueLightslategray}, +#line 540 "CSSValueKeywords.gperf" {"lightslategrey", CSSValueLightslategrey}, -#line 525 "CSSValueKeywords.gperf" +#line 526 "CSSValueKeywords.gperf" {"lawngreen", CSSValueLawngreen}, -#line 587 "CSSValueKeywords.gperf" +#line 588 "CSSValueKeywords.gperf" {"steelblue", CSSValueSteelblue}, #line 127 "CSSValueKeywords.gperf" {"repeat", CSSValueRepeat}, -#line 546 "CSSValueKeywords.gperf" +#line 547 "CSSValueKeywords.gperf" {"mediumblue", CSSValueMediumblue}, -#line 578 "CSSValueKeywords.gperf" +#line 579 "CSSValueKeywords.gperf" {"seagreen", CSSValueSeagreen}, #line 336 "CSSValueKeywords.gperf" {"separate", CSSValueSeparate}, -#line 565 "CSSValueKeywords.gperf" +#line 566 "CSSValueKeywords.gperf" {"paleturquoise", CSSValuePaleturquoise}, -#line 485 "CSSValueKeywords.gperf" +#line 486 "CSSValueKeywords.gperf" {"darkblue", CSSValueDarkblue}, #line 138 "CSSValueKeywords.gperf" {"destination-in", CSSValueDestinationIn}, -#line 476 "CSSValueKeywords.gperf" +#line 477 "CSSValueKeywords.gperf" {"burlywood", CSSValueBurlywood}, -#line 599 "CSSValueKeywords.gperf" +#line 600 "CSSValueKeywords.gperf" {"new", CSSValueNew}, -#line 550 "CSSValueKeywords.gperf" +#line 551 "CSSValueKeywords.gperf" {"mediumslateblue", CSSValueMediumslateblue}, #line 196 "CSSValueKeywords.gperf" {"upper-latin", CSSValueUpperLatin}, -#line 499 "CSSValueKeywords.gperf" +#line 500 "CSSValueKeywords.gperf" {"darkslateblue", CSSValueDarkslateblue}, -#line 549 "CSSValueKeywords.gperf" +#line 550 "CSSValueKeywords.gperf" {"mediumseagreen", CSSValueMediumseagreen}, #line 104 "CSSValueKeywords.gperf" {"graytext", CSSValueGraytext}, #line 458 "CSSValueKeywords.gperf" {"subpixel-antialiased", CSSValueSubpixelAntialiased}, -#line 489 "CSSValueKeywords.gperf" +#line 490 "CSSValueKeywords.gperf" {"darkgreen", CSSValueDarkgreen}, #line 140 "CSSValueKeywords.gperf" {"destination-atop", CSSValueDestinationAtop}, -#line 494 "CSSValueKeywords.gperf" +#line 495 "CSSValueKeywords.gperf" {"darkorange", CSSValueDarkorange}, #line 195 "CSSValueKeywords.gperf" {"upper-alpha", CSSValueUpperAlpha}, -#line 498 "CSSValueKeywords.gperf" +#line 499 "CSSValueKeywords.gperf" {"darkseagreen", CSSValueDarkseagreen}, #line 377 "CSSValueKeywords.gperf" {"skip-white-space", CSSValueSkipWhiteSpace}, #line 169 "CSSValueKeywords.gperf" {"binary", CSSValueBinary}, -#line 521 "CSSValueKeywords.gperf" +#line 522 "CSSValueKeywords.gperf" {"ivory", CSSValueIvory}, #line 460 "CSSValueKeywords.gperf" {"optimizelegibility", CSSValueOptimizelegibility}, @@ -1053,23 +1056,25 @@ findValue (register const char *str, register unsigned int len) {"serif", CSSValueSerif}, #line 60 "CSSValueKeywords.gperf" {"narrower", CSSValueNarrower}, -#line 575 "CSSValueKeywords.gperf" +#line 576 "CSSValueKeywords.gperf" {"saddlebrown", CSSValueSaddlebrown}, #line 209 "CSSValueKeywords.gperf" {"ethiopic-abegede-gez", CSSValueEthiopicAbegedeGez}, +#line 467 "CSSValueKeywords.gperf" + {"windowed", CSSValueWindowed}, #line 72 "CSSValueKeywords.gperf" {"fantasy", CSSValueFantasy}, #line 414 "CSSValueKeywords.gperf" {"progress-bar", CSSValueProgressBar}, -#line 493 "CSSValueKeywords.gperf" +#line 494 "CSSValueKeywords.gperf" {"darkolivegreen", CSSValueDarkolivegreen}, #line 31 "CSSValueKeywords.gperf" {"status-bar", CSSValueStatusBar}, -#line 506 "CSSValueKeywords.gperf" - {"dimgray", CSSValueDimgray}, #line 507 "CSSValueKeywords.gperf" + {"dimgray", CSSValueDimgray}, +#line 508 "CSSValueKeywords.gperf" {"dimgrey", CSSValueDimgrey}, -#line 567 "CSSValueKeywords.gperf" +#line 568 "CSSValueKeywords.gperf" {"papayawhip", CSSValuePapayawhip}, #line 453 "CSSValueKeywords.gperf" {"visiblestroke", CSSValueVisiblestroke}, @@ -1089,9 +1094,9 @@ findValue (register const char *str, register unsigned int len) {"destination-out", CSSValueDestinationOut}, #line 231 "CSSValueKeywords.gperf" {"hebrew", CSSValueHebrew}, -#line 617 "CSSValueKeywords.gperf" +#line 618 "CSSValueKeywords.gperf" {"reset-size", CSSValueResetSize}, -#line 597 "CSSValueKeywords.gperf" +#line 598 "CSSValueKeywords.gperf" {"evenodd", CSSValueEvenodd}, #line 107 "CSSValueKeywords.gperf" {"inactiveborder", CSSValueInactiveborder}, @@ -1103,7 +1108,7 @@ findValue (register const char *str, register unsigned int len) {"overline", CSSValueOverline}, #line 389 "CSSValueKeywords.gperf" {"inner-spin-button", CSSValueInnerSpinButton}, -#line 486 "CSSValueKeywords.gperf" +#line 487 "CSSValueKeywords.gperf" {"darkcyan", CSSValueDarkcyan}, #line 113 "CSSValueKeywords.gperf" {"menutext", CSSValueMenutext}, @@ -1111,15 +1116,15 @@ findValue (register const char *str, register unsigned int len) {"tigrinya-et", CSSValueTigrinyaEt}, #line 64 "CSSValueKeywords.gperf" {"semi-condensed", CSSValueSemiCondensed}, -#line 496 "CSSValueKeywords.gperf" +#line 497 "CSSValueKeywords.gperf" {"darkred", CSSValueDarkred}, -#line 601 "CSSValueKeywords.gperf" +#line 602 "CSSValueKeywords.gperf" {"optimizequality", CSSValueOptimizequality}, #line 203 "CSSValueKeywords.gperf" {"ethiopic-abegede-am-et", CSSValueEthiopicAbegedeAmEt}, #line 148 "CSSValueKeywords.gperf" {"text-top", CSSValueTextTop}, -#line 510 "CSSValueKeywords.gperf" +#line 511 "CSSValueKeywords.gperf" {"floralwhite", CSSValueFloralwhite}, #line 70 "CSSValueKeywords.gperf" {"sans-serif", CSSValueSansSerif}, @@ -1127,7 +1132,7 @@ findValue (register const char *str, register unsigned int len) {"padding-box", CSSValuePaddingBox}, #line 55 "CSSValueKeywords.gperf" {"xx-large", CSSValueXxLarge}, -#line 553 "CSSValueKeywords.gperf" +#line 554 "CSSValueKeywords.gperf" {"mediumvioletred", CSSValueMediumvioletred}, #line 228 "CSSValueKeywords.gperf" {"ethiopic-abegede-ti-et", CSSValueEthiopicAbegedeTiEt}, @@ -1137,13 +1142,13 @@ findValue (register const char *str, register unsigned int len) {"open-quote", CSSValueOpenQuote}, #line 61 "CSSValueKeywords.gperf" {"ultra-condensed", CSSValueUltraCondensed}, -#line 547 "CSSValueKeywords.gperf" +#line 548 "CSSValueKeywords.gperf" {"mediumorchid", CSSValueMediumorchid}, -#line 524 "CSSValueKeywords.gperf" +#line 525 "CSSValueKeywords.gperf" {"lavenderblush", CSSValueLavenderblush}, #line 199 "CSSValueKeywords.gperf" {"ethiopic-halehame-aa-er", CSSValueEthiopicHalehameAaEr}, -#line 495 "CSSValueKeywords.gperf" +#line 496 "CSSValueKeywords.gperf" {"darkorchid", CSSValueDarkorchid}, #line 410 "CSSValueKeywords.gperf" {"menulist-button", CSSValueMenulistButton}, @@ -1163,11 +1168,11 @@ findValue (register const char *str, register unsigned int len) {"ethiopic-halehame-ti-er", CSSValueEthiopicHalehameTiEr}, #line 95 "CSSValueKeywords.gperf" {"activeborder", CSSValueActiveborder}, -#line 516 "CSSValueKeywords.gperf" +#line 517 "CSSValueKeywords.gperf" {"greenyellow", CSSValueGreenyellow}, #line 443 "CSSValueKeywords.gperf" {"preserve-3d", CSSValuePreserve3d}, -#line 548 "CSSValueKeywords.gperf" +#line 549 "CSSValueKeywords.gperf" {"mediumpurple", CSSValueMediumpurple}, #line 263 "CSSValueKeywords.gperf" {"vertical-text", CSSValueVerticalText}, @@ -1175,7 +1180,7 @@ findValue (register const char *str, register unsigned int len) {"fixed", CSSValueFixed}, #line 378 "CSSValueKeywords.gperf" {"break-all", CSSValueBreakAll}, -#line 615 "CSSValueKeywords.gperf" +#line 616 "CSSValueKeywords.gperf" {"use-script", CSSValueUseScript}, #line 413 "CSSValueKeywords.gperf" {"outer-spin-button", CSSValueOuterSpinButton}, @@ -1195,23 +1200,23 @@ findValue (register const char *str, register unsigned int len) {"forwards", CSSValueForwards}, #line 251 "CSSValueKeywords.gperf" {"table-column-group", CSSValueTableColumnGroup}, -#line 606 "CSSValueKeywords.gperf" +#line 607 "CSSValueKeywords.gperf" {"before-edge", CSSValueBeforeEdge}, #line 415 "CSSValueKeywords.gperf" {"slider-horizontal", CSSValueSliderHorizontal}, -#line 537 "CSSValueKeywords.gperf" +#line 538 "CSSValueKeywords.gperf" {"lightskyblue", CSSValueLightskyblue}, #line 26 "CSSValueKeywords.gperf" {"message-box", CSSValueMessageBox}, -#line 545 "CSSValueKeywords.gperf" +#line 546 "CSSValueKeywords.gperf" {"mediumaquamarine", CSSValueMediumaquamarine}, #line 304 "CSSValueKeywords.gperf" {"bidi-override", CSSValueBidiOverride}, -#line 572 "CSSValueKeywords.gperf" +#line 573 "CSSValueKeywords.gperf" {"powderblue", CSSValuePowderblue}, #line 388 "CSSValueKeywords.gperf" {"default-button", CSSValueDefaultButton}, -#line 487 "CSSValueKeywords.gperf" +#line 488 "CSSValueKeywords.gperf" {"darkgoldenrod", CSSValueDarkgoldenrod}, #line 97 "CSSValueKeywords.gperf" {"appworkspace", CSSValueAppworkspace}, @@ -1229,23 +1234,23 @@ findValue (register const char *str, register unsigned int len) {"media-mute-button", CSSValueMediaMuteButton}, #line 346 "CSSValueKeywords.gperf" {"reverse", CSSValueReverse}, -#line 488 "CSSValueKeywords.gperf" +#line 489 "CSSValueKeywords.gperf" {"darkgray", CSSValueDarkgray}, -#line 490 "CSSValueKeywords.gperf" +#line 491 "CSSValueKeywords.gperf" {"darkgrey", CSSValueDarkgrey}, #line 282 "CSSValueKeywords.gperf" {"nesw-resize", CSSValueNeswResize}, -#line 551 "CSSValueKeywords.gperf" +#line 552 "CSSValueKeywords.gperf" {"mediumspringgreen", CSSValueMediumspringgreen}, #line 142 "CSSValueKeywords.gperf" {"plus-darker", CSSValuePlusDarker}, -#line 500 "CSSValueKeywords.gperf" - {"darkslategray", CSSValueDarkslategray}, #line 501 "CSSValueKeywords.gperf" + {"darkslategray", CSSValueDarkslategray}, +#line 502 "CSSValueKeywords.gperf" {"darkslategrey", CSSValueDarkslategrey}, #line 285 "CSSValueKeywords.gperf" {"row-resize", CSSValueRowResize}, -#line 577 "CSSValueKeywords.gperf" +#line 578 "CSSValueKeywords.gperf" {"sandybrown", CSSValueSandybrown}, #line 221 "CSSValueKeywords.gperf" {"tigrinya-er", CSSValueTigrinyaEr}, @@ -1255,27 +1260,27 @@ findValue (register const char *str, register unsigned int len) {"background", CSSValueBackground}, #line 430 "CSSValueKeywords.gperf" {"border-box", CSSValueBorderBox}, -#line 552 "CSSValueKeywords.gperf" +#line 553 "CSSValueKeywords.gperf" {"mediumturquoise", CSSValueMediumturquoise}, -#line 502 "CSSValueKeywords.gperf" +#line 503 "CSSValueKeywords.gperf" {"darkturquoise", CSSValueDarkturquoise}, #line 115 "CSSValueKeywords.gperf" {"threeddarkshadow", CSSValueThreeddarkshadow}, #line 224 "CSSValueKeywords.gperf" {"ethiopic-abegede-ti-er", CSSValueEthiopicAbegedeTiEr}, -#line 573 "CSSValueKeywords.gperf" +#line 574 "CSSValueKeywords.gperf" {"rosybrown", CSSValueRosybrown}, #line 328 "CSSValueKeywords.gperf" {"overlay", CSSValueOverlay}, -#line 491 "CSSValueKeywords.gperf" +#line 492 "CSSValueKeywords.gperf" {"darkkhaki", CSSValueDarkkhaki}, -#line 481 "CSSValueKeywords.gperf" +#line 482 "CSSValueKeywords.gperf" {"cornflowerblue", CSSValueCornflowerblue}, #line 402 "CSSValueKeywords.gperf" {"media-sliderthumb", CSSValueMediaSliderthumb}, #line 418 "CSSValueKeywords.gperf" {"sliderthumb-vertical", CSSValueSliderthumbVertical}, -#line 595 "CSSValueKeywords.gperf" +#line 596 "CSSValueKeywords.gperf" {"yellowgreen", CSSValueYellowgreen}, #line 354 "CSSValueKeywords.gperf" {"backwards", CSSValueBackwards}, @@ -1283,7 +1288,7 @@ findValue (register const char *str, register unsigned int len) {"table-header-group", CSSValueTableHeaderGroup}, #line 129 "CSSValueKeywords.gperf" {"repeat-y", CSSValueRepeatY}, -#line 509 "CSSValueKeywords.gperf" +#line 510 "CSSValueKeywords.gperf" {"firebrick", CSSValueFirebrick}, #line 382 "CSSValueKeywords.gperf" {"checkbox", CSSValueCheckbox}, @@ -1291,7 +1296,7 @@ findValue (register const char *str, register unsigned int len) {"media-volume-slider", CSSValueMediaVolumeSlider}, #line 230 "CSSValueKeywords.gperf" {"upper-norwegian", CSSValueUpperNorwegian}, -#line 530 "CSSValueKeywords.gperf" +#line 531 "CSSValueKeywords.gperf" {"lightgoldenrodyellow", CSSValueLightgoldenrodyellow}, #line 65 "CSSValueKeywords.gperf" {"semi-expanded", CSSValueSemiExpanded}, @@ -1315,7 +1320,7 @@ findValue (register const char *str, register unsigned int len) {"upper-greek", CSSValueUpperGreek}, #line 247 "CSSValueKeywords.gperf" {"table-row-group", CSSValueTableRowGroup}, -#line 526 "CSSValueKeywords.gperf" +#line 527 "CSSValueKeywords.gperf" {"lemonchiffon", CSSValueLemonchiffon}, #line 212 "CSSValueKeywords.gperf" {"lower-norwegian", CSSValueLowerNorwegian}, @@ -1325,7 +1330,7 @@ findValue (register const char *str, register unsigned int len) {"media-play-button", CSSValueMediaPlayButton}, #line 427 "CSSValueKeywords.gperf" {"caps-lock-indicator", CSSValueCapsLockIndicator}, -#line 504 "CSSValueKeywords.gperf" +#line 505 "CSSValueKeywords.gperf" {"deeppink", CSSValueDeeppink}, #line 121 "CSSValueKeywords.gperf" {"windowframe", CSSValueWindowframe}, @@ -1347,7 +1352,7 @@ findValue (register const char *str, register unsigned int len) {"table-footer-group", CSSValueTableFooterGroup}, #line 223 "CSSValueKeywords.gperf" {"tigrinya-er-abegede", CSSValueTigrinyaErAbegede}, -#line 568 "CSSValueKeywords.gperf" +#line 569 "CSSValueKeywords.gperf" {"peachpuff", CSSValuePeachpuff}, #line 379 "CSSValueKeywords.gperf" {"break-word", CSSValueBreakWord}, @@ -1373,11 +1378,11 @@ findValue (register const char *str, register unsigned int len) {"-webkit-center", CSSValueWebkitCenter}, #line 393 "CSSValueKeywords.gperf" {"media-fullscreen-button", CSSValueMediaFullscreenButton}, -#line 610 "CSSValueKeywords.gperf" +#line 611 "CSSValueKeywords.gperf" {"text-after-edge", CSSValueTextAfterEdge}, #line 30 "CSSValueKeywords.gperf" {"-webkit-control", CSSValueWebkitControl}, -#line 505 "CSSValueKeywords.gperf" +#line 506 "CSSValueKeywords.gperf" {"deepskyblue", CSSValueDeepskyblue}, #line 290 "CSSValueKeywords.gperf" {"-webkit-grab", CSSValueWebkitGrab}, @@ -1391,7 +1396,7 @@ findValue (register const char *str, register unsigned int len) {"-webkit-text", CSSValueWebkitText}, #line 94 "CSSValueKeywords.gperf" {"-webkit-activelink", CSSValueWebkitActivelink}, -#line 609 "CSSValueKeywords.gperf" +#line 610 "CSSValueKeywords.gperf" {"text-before-edge", CSSValueTextBeforeEdge}, #line 421 "CSSValueKeywords.gperf" {"searchfield-decoration", CSSValueSearchfieldDecoration}, @@ -1479,118 +1484,118 @@ findValue (register const char *str, register unsigned int len) -1, 66, -1, -1, -1, 67, 68, -1, -1, -1, 69, 70, 71, -1, -1, 72, -1, -1, 73, -1, -1, 74, -1, -1, -1, 75, -1, 76, -1, -1, - 77, 78, -1, -1, -1, -1, 79, -1, -1, -1, - -1, 80, 81, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 82, -1, -1, 83, 84, -1, -1, - -1, -1, -1, -1, -1, -1, 85, -1, -1, -1, - 86, 87, -1, -1, -1, 88, 89, -1, -1, -1, - -1, 90, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 91, 92, -1, -1, -1, + 77, 78, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 79, 80, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 81, -1, -1, 82, 83, -1, -1, + -1, -1, -1, -1, -1, -1, 84, -1, -1, -1, + 85, 86, -1, -1, -1, 87, 88, -1, -1, -1, + -1, 89, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 90, 91, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 92, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, - 95, 96, -1, -1, -1, -1, -1, -1, -1, -1, - 97, -1, -1, 98, -1, -1, 99, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 100, -1, 101, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, - 103, -1, 104, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 105, -1, -1, 106, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 107, 108, 109, -1, -1, - -1, -1, 110, -1, -1, -1, -1, 111, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 112, -1, -1, - -1, 113, -1, -1, -1, -1, 114, 115, -1, -1, - 116, 117, -1, -1, -1, 118, -1, -1, -1, -1, - -1, 119, -1, -1, -1, -1, -1, -1, -1, -1, - 120, -1, -1, -1, -1, -1, 121, 122, -1, -1, - -1, 123, -1, -1, -1, -1, -1, -1, -1, 124, - 125, 126, 127, -1, -1, 128, -1, -1, 129, -1, - -1, 130, -1, 131, -1, 132, -1, 133, -1, -1, - -1, 134, 135, 136, -1, -1, 137, -1, -1, -1, - -1, -1, 138, 139, -1, 140, -1, 141, -1, -1, - 142, 143, -1, -1, -1, -1, -1, -1, -1, -1, - 144, -1, -1, 145, 146, -1, -1, -1, 147, -1, - -1, -1, -1, -1, -1, -1, 148, 149, -1, -1, - -1, 150, -1, -1, -1, 151, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 152, -1, -1, -1, -1, - -1, -1, 153, -1, -1, -1, -1, -1, -1, -1, + 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, + 96, -1, -1, 97, -1, -1, 98, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 99, -1, 100, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, + 102, -1, 103, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 104, -1, -1, 105, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 106, 107, 108, -1, -1, + -1, -1, 109, -1, -1, -1, -1, 110, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, + -1, 112, -1, -1, -1, -1, 113, 114, -1, -1, + 115, 116, -1, -1, -1, 117, -1, -1, -1, -1, + -1, 118, -1, -1, -1, -1, -1, -1, -1, -1, + 119, -1, -1, -1, -1, -1, 120, 121, -1, -1, + -1, 122, -1, -1, -1, -1, -1, -1, -1, 123, + 124, 125, 126, -1, -1, 127, -1, -1, 128, -1, + -1, 129, -1, 130, -1, 131, -1, 132, -1, -1, + -1, 133, 134, 135, -1, -1, 136, -1, -1, -1, + -1, -1, 137, 138, -1, 139, -1, 140, -1, -1, + 141, 142, -1, -1, -1, -1, -1, -1, -1, -1, + 143, -1, -1, 144, 145, -1, -1, -1, 146, -1, + -1, -1, -1, -1, -1, -1, 147, 148, -1, -1, + -1, 149, -1, -1, -1, 150, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 151, -1, -1, -1, -1, + -1, -1, 152, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 153, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 154, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 155, -1, -1, -1, 156, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 157, -1, -1, -1, -1, 158, -1, -1, -1, - -1, 159, -1, -1, -1, 160, -1, -1, 161, -1, - 162, 163, -1, -1, -1, 164, -1, -1, -1, -1, - 165, -1, -1, 166, -1, 167, -1, 168, 169, -1, - -1, -1, -1, -1, -1, -1, -1, 170, -1, -1, - 171, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 172, 173, -1, -1, -1, -1, -1, -1, -1, - 174, 175, -1, -1, -1, 176, -1, -1, -1, 177, - 178, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 179, -1, -1, -1, -1, -1, 180, 181, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 182, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 183, -1, -1, -1, 184, -1, -1, -1, -1, - 185, -1, -1, -1, -1, -1, -1, 186, -1, -1, - -1, -1, -1, 187, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 188, -1, 189, -1, 190, -1, -1, - 191, 192, -1, -1, -1, -1, -1, -1, 193, -1, - 194, 195, -1, -1, -1, 196, 197, -1, 198, 199, - 200, 201, -1, -1, -1, 202, 203, -1, -1, -1, - 204, -1, -1, -1, -1, -1, -1, -1, 205, 206, - -1, -1, -1, -1, -1, -1, 207, 208, -1, -1, - -1, 209, 210, -1, -1, 211, -1, -1, 212, -1, - 213, 214, 215, -1, -1, 216, -1, -1, -1, -1, - -1, -1, -1, 217, -1, 218, -1, -1, -1, -1, - 219, -1, -1, -1, 220, 221, -1, 222, -1, -1, - -1, -1, 223, -1, -1, 224, 225, -1, -1, 226, - 227, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 228, 229, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 230, -1, -1, -1, -1, -1, 231, 232, -1, - -1, -1, -1, 233, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 234, 235, -1, -1, 236, -1, -1, -1, -1, - 237, -1, -1, 238, -1, -1, 239, 240, -1, -1, - -1, 241, -1, -1, -1, -1, 242, -1, -1, 243, - 244, -1, -1, -1, -1, -1, -1, 245, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 246, 247, -1, -1, -1, 248, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 249, -1, -1, - -1, 250, -1, 251, -1, 252, -1, 253, 254, -1, - -1, 255, 256, -1, -1, -1, -1, -1, -1, -1, - 257, -1, -1, -1, -1, 258, -1, 259, 260, -1, - -1, 261, -1, -1, -1, 262, -1, -1, -1, -1, - 263, -1, -1, -1, -1, 264, 265, 266, -1, -1, - 267, -1, 268, -1, -1, 269, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 270, -1, 271, -1, 272, - -1, -1, -1, -1, -1, 273, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 274, 275, - 276, 277, -1, -1, -1, 278, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 279, -1, -1, -1, -1, - -1, 280, -1, -1, -1, -1, 281, 282, 283, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 284, -1, - 285, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 286, -1, 287, -1, -1, -1, 288, -1, -1, -1, - 289, -1, -1, -1, -1, 290, 291, 292, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 293, -1, 294, -1, 295, -1, -1, -1, -1, - 296, 297, -1, -1, -1, 298, -1, -1, -1, -1, - -1, -1, -1, 299, -1, -1, -1, 300, -1, -1, - -1, -1, 301, -1, 302, -1, 303, 304, 305, -1, - -1, -1, -1, -1, -1, 306, 307, -1, -1, -1, - 308, -1, -1, -1, -1, 309, -1, 310, -1, -1, - -1, -1, -1, -1, 311, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 312, - -1, -1, 313, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 314, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 315, - -1, 316, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 317, -1, -1, 318, -1, -1, -1, - -1, -1, -1, -1, 319, -1, -1, 320, -1, -1, - -1, 321, -1, 322, -1, -1, -1, 323, -1, -1, - -1, -1, -1, -1, -1, -1, 324, 325, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 155, -1, -1, -1, -1, 156, -1, -1, -1, + -1, 157, -1, -1, -1, 158, -1, -1, 159, -1, + 160, 161, -1, -1, -1, 162, -1, -1, -1, -1, + 163, -1, -1, 164, -1, 165, -1, 166, 167, -1, + -1, -1, -1, -1, -1, -1, -1, 168, -1, -1, + 169, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 170, 171, -1, -1, -1, -1, -1, -1, -1, + 172, 173, -1, -1, -1, 174, -1, -1, -1, 175, + 176, -1, -1, -1, -1, -1, 177, -1, -1, -1, + 178, -1, -1, -1, -1, -1, 179, 180, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 181, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 182, -1, -1, -1, 183, -1, -1, -1, -1, + 184, -1, -1, -1, -1, -1, -1, 185, -1, -1, + -1, -1, -1, 186, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 187, -1, 188, -1, 189, -1, -1, + 190, 191, -1, -1, -1, -1, -1, -1, 192, -1, + 193, 194, -1, -1, -1, 195, 196, -1, 197, 198, + 199, 200, -1, -1, -1, 201, 202, -1, -1, -1, + 203, -1, -1, -1, -1, -1, -1, -1, 204, 205, + -1, -1, -1, -1, -1, -1, 206, 207, -1, -1, + -1, 208, 209, -1, -1, 210, -1, -1, 211, -1, + 212, 213, 214, -1, -1, 215, -1, -1, -1, -1, + -1, -1, -1, 216, -1, 217, -1, -1, -1, -1, + 218, -1, -1, -1, 219, 220, -1, 221, -1, -1, + -1, -1, 222, -1, -1, 223, 224, -1, -1, 225, + 226, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 227, 228, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 229, -1, -1, -1, -1, -1, 230, 231, -1, + -1, -1, -1, 232, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 233, 234, -1, -1, 235, -1, -1, -1, -1, + 236, -1, -1, 237, -1, -1, 238, 239, -1, -1, + -1, 240, -1, -1, -1, -1, 241, -1, -1, 242, + 243, -1, -1, -1, -1, -1, -1, 244, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 245, 246, -1, -1, -1, 247, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 248, -1, -1, + -1, 249, -1, 250, -1, 251, -1, 252, 253, -1, + -1, 254, 255, -1, -1, -1, -1, -1, -1, -1, + 256, -1, -1, -1, -1, 257, -1, 258, 259, -1, + -1, 260, -1, -1, -1, 261, -1, -1, -1, -1, + 262, -1, -1, -1, -1, 263, 264, 265, -1, -1, + 266, -1, 267, -1, -1, 268, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 269, -1, 270, -1, 271, + -1, -1, -1, -1, -1, 272, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 273, 274, + 275, 276, -1, -1, -1, 277, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 278, -1, -1, -1, -1, + -1, 279, -1, -1, -1, -1, 280, 281, 282, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 283, -1, + 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 285, -1, 286, -1, -1, -1, 287, -1, -1, -1, + 288, -1, -1, -1, -1, 289, 290, 291, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 292, -1, 293, -1, 294, -1, -1, -1, -1, + 295, 296, -1, -1, -1, 297, -1, -1, -1, -1, + -1, -1, -1, 298, -1, -1, -1, 299, -1, -1, + -1, -1, 300, -1, 301, -1, 302, 303, 304, -1, + -1, -1, -1, -1, -1, 305, 306, -1, -1, -1, + 307, -1, -1, -1, -1, 308, -1, 309, -1, -1, + -1, -1, -1, -1, 310, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 311, + -1, -1, 312, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 313, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 314, + -1, 315, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 316, -1, -1, 317, -1, -1, -1, + -1, -1, -1, -1, 318, -1, -1, 319, -1, -1, + -1, 320, -1, 321, -1, -1, -1, 322, -1, -1, + -1, -1, -1, -1, -1, 323, 324, 325, -1, -1, 326, -1, -1, -1, -1, 327, -1, -1, -1, -1, -1, 328, -1, -1, -1, -1, 329, -1, -1, -1, -1, 330, -1, -1, -1, 331, -1, -1, -1, -1, @@ -1636,136 +1641,135 @@ findValue (register const char *str, register unsigned int len) -1, 417, -1, -1, -1, -1, 418, -1, 419, -1, 420, -1, -1, -1, -1, -1, 421, -1, -1, -1, -1, 422, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 423, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 424, 425, -1, -1, -1, - -1, -1, -1, -1, -1, 426, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 427, -1, 428, -1, -1, -1, -1, 429, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 430, - 431, 432, -1, -1, -1, -1, -1, -1, -1, 433, - 434, -1, 435, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 436, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 437, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 438, -1, 439, -1, -1, 440, 441, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 442, -1, -1, - -1, -1, -1, 443, -1, -1, -1, -1, -1, -1, - -1, -1, 444, -1, -1, -1, -1, -1, -1, -1, - -1, 445, -1, -1, -1, 446, -1, 447, -1, -1, - -1, -1, -1, -1, -1, 448, -1, 449, -1, -1, - 450, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 451, -1, -1, -1, -1, -1, -1, 452, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 453, -1, -1, -1, 454, -1, 455, -1, -1, - 456, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 457, -1, -1, -1, -1, -1, -1, -1, 458, - -1, -1, 459, -1, -1, -1, 460, -1, -1, -1, - -1, 461, -1, -1, 462, 463, -1, -1, -1, -1, - -1, 464, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 465, -1, -1, -1, -1, 466, -1, -1, - -1, -1, -1, 467, -1, -1, -1, -1, -1, -1, - 468, -1, -1, -1, -1, 469, -1, -1, -1, -1, - -1, -1, -1, -1, 470, 471, -1, -1, 472, 473, - -1, -1, -1, 474, -1, -1, -1, 475, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 476, -1, -1, - -1, -1, 477, -1, -1, -1, -1, 478, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 479, -1, 480, -1, -1, - -1, -1, -1, -1, -1, -1, 481, 482, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 483, -1, 484, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 485, -1, -1, 486, -1, 487, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 488, 489, -1, -1, -1, -1, - -1, -1, 490, -1, -1, -1, -1, -1, -1, -1, - -1, 491, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 423, 424, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 425, 426, -1, -1, -1, + -1, -1, -1, -1, -1, 427, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 428, -1, 429, -1, -1, -1, -1, 430, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 431, + 432, 433, -1, -1, -1, -1, -1, -1, -1, 434, + 435, -1, 436, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 437, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 438, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 439, -1, 440, -1, -1, 441, 442, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 443, -1, -1, + -1, -1, -1, 444, -1, -1, -1, -1, -1, -1, + -1, -1, 445, -1, -1, -1, -1, -1, -1, -1, + -1, 446, -1, -1, -1, 447, -1, 448, -1, -1, + -1, -1, -1, -1, -1, 449, -1, 450, -1, -1, + 451, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 452, -1, -1, -1, -1, -1, -1, 453, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 454, -1, -1, -1, 455, -1, 456, -1, -1, + 457, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 458, -1, -1, -1, -1, -1, -1, -1, 459, + -1, -1, 460, -1, -1, -1, 461, -1, -1, -1, + -1, 462, -1, -1, 463, 464, -1, -1, -1, -1, + -1, 465, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 466, -1, -1, -1, -1, 467, -1, -1, + -1, -1, -1, 468, -1, -1, -1, -1, -1, -1, + 469, -1, -1, -1, -1, 470, -1, -1, -1, -1, + -1, -1, -1, -1, 471, 472, -1, -1, 473, 474, + -1, -1, -1, 475, -1, -1, -1, 476, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 477, -1, -1, + -1, -1, 478, -1, -1, -1, -1, 479, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 480, -1, 481, -1, -1, + -1, -1, -1, -1, -1, -1, 482, 483, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 484, -1, 485, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 486, -1, -1, 487, -1, 488, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 489, 490, -1, -1, -1, -1, + -1, -1, 491, -1, -1, -1, -1, -1, -1, -1, -1, 492, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 493, -1, -1, + -1, 493, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 494, -1, -1, - -1, -1, -1, -1, -1, 495, -1, -1, -1, -1, - -1, 496, 497, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 498, -1, - 499, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 500, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 495, -1, -1, + -1, -1, -1, -1, -1, 496, -1, -1, -1, -1, + -1, 497, 498, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 499, -1, + 500, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 501, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 501, -1, -1, -1, -1, -1, -1, - -1, -1, 502, -1, -1, 503, -1, -1, -1, -1, - -1, -1, -1, 504, -1, -1, -1, -1, -1, -1, - 505, 506, -1, -1, -1, -1, 507, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 508, 509, -1, -1, -1, - -1, -1, -1, 510, -1, -1, -1, -1, 511, -1, - -1, 512, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 502, -1, -1, -1, -1, -1, -1, + -1, -1, 503, -1, -1, 504, -1, -1, -1, -1, + -1, -1, -1, 505, -1, -1, -1, -1, -1, -1, + 506, 507, -1, -1, -1, -1, 508, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 513, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 514, - -1, -1, -1, 515, -1, -1, -1, -1, 516, -1, - 517, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 509, 510, -1, -1, -1, + -1, -1, -1, 511, -1, -1, -1, -1, 512, -1, + -1, 513, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 518, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 519, -1, -1, + -1, -1, 514, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 515, + -1, -1, -1, 516, -1, -1, -1, -1, 517, -1, + 518, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 520, -1, -1, -1, -1, -1, -1, -1, 521, -1, - 522, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 523, -1, -1, + -1, 519, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 520, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 524, + 521, -1, -1, -1, -1, -1, -1, -1, 522, -1, + 523, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 524, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 525, - -1, -1, -1, -1, -1, -1, 526, -1, -1, -1, - -1, 527, -1, -1, -1, -1, 528, -1, -1, -1, - -1, -1, 529, -1, -1, -1, -1, -1, -1, -1, - -1, 530, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 526, + -1, -1, -1, -1, -1, -1, 527, -1, -1, -1, + -1, 528, -1, -1, -1, -1, 529, -1, -1, -1, + -1, -1, 530, -1, -1, -1, -1, -1, -1, -1, -1, 531, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 532, - -1, -1, 533, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 532, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 533, + -1, -1, 534, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 534, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 535, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 536, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 535, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 537, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 537, -1, -1, -1, 538, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 539, -1, -1, - -1, 540, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 541, -1, -1, -1, -1, 542, -1, -1, -1, -1, + -1, -1, -1, 538, -1, -1, -1, 539, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, + -1, 541, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 543, -1, 544, -1, -1, -1, -1, - 545, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 542, -1, -1, -1, -1, 543, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 546, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 547, -1, + -1, -1, -1, 544, -1, 545, -1, -1, -1, -1, + 546, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 547, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 548, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 548, -1, -1, 549, -1, -1, -1, -1, - 550, -1, 551, -1, -1, -1, -1, 552, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 553, -1, -1, -1, - -1, -1, 554, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 549, -1, -1, 550, -1, -1, -1, -1, + 551, -1, 552, -1, -1, -1, -1, 553, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 555, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 554, -1, -1, -1, + -1, -1, 555, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 556, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 556, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 557, - -1, -1, 558, 559, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 557, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 558, + -1, -1, 559, 560, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 560, -1, -1, -1, - -1, -1, -1, 561, -1, 562, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 561, -1, -1, -1, + -1, -1, -1, 562, -1, 563, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -1784,38 +1788,38 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 563, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 564, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 564, -1, -1, 565, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 565, -1, -1, 566, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 566, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 567, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 567, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 568, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 568, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 569, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 569, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 570, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 570, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 571, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 571, -1, -1, -1, - -1, -1, 572, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 572, -1, -1, -1, + -1, -1, 573, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -1823,12 +1827,12 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 573, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 574, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 574, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 575, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 575, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -1844,58 +1848,59 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 576, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 577, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 577, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 578, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 578, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 579, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 579, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 580, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 580, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 581, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 582, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 583, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 581, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 582, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 583, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 584, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 584, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 585, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 585, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 586, -1, -1, -1, -1, -1, - -1, -1, 587, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 586, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 587, -1, -1, -1, -1, -1, + -1, -1, 588, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 588, - -1, -1, 589, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 589, + -1, -1, 590, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 590, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 591, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 592, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 593, -1, -1, -1, -1, -1, -1, -1, + -1, 593, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 594, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -1904,37 +1909,37 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 594, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 595, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 595, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 596, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 596, -1, 597, -1, -1, -1, -1, 598, - -1, -1, -1, -1, -1, -1, -1, 599, -1, -1, + -1, -1, 597, -1, 598, -1, -1, -1, -1, 599, + -1, -1, -1, -1, -1, -1, -1, 600, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 600, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 601, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 601, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 602, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 602, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 603, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 603, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 604, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 604, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 605, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -1956,14 +1961,14 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 605, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 606, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 606, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 607, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -1977,7 +1982,7 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 607, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 608, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2020,7 +2025,7 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 608, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 609, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2057,7 +2062,7 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 609, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 610, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2071,7 +2076,7 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 610, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 611, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2130,7 +2135,7 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 611, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 612, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2154,7 +2159,7 @@ findValue (register const char *str, register unsigned int len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 612 + -1, -1, -1, -1, -1, -1, -1, -1, 613 }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) @@ -2176,7 +2181,7 @@ findValue (register const char *str, register unsigned int len) } return 0; } -#line 624 "CSSValueKeywords.gperf" +#line 625 "CSSValueKeywords.gperf" static const char * const valueList[] = { "", @@ -2632,10 +2637,11 @@ static const char * const valueList[] = { "optimizelegibility", "geometricprecision", "srgb", -"mini", "floating", -"application", "fullscreen", +"maximized", +"minimized", +"windowed", "aliceblue", "antiquewhite", "aquamarine", diff --git a/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h b/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h index d79e658..71e8514 100644 --- a/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h +++ b/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h @@ -456,168 +456,169 @@ const int CSSValueOptimizespeed = 449; const int CSSValueOptimizelegibility = 450; const int CSSValueGeometricprecision = 451; const int CSSValueSrgb = 452; -const int CSSValueMini = 453; -const int CSSValueFloating = 454; -const int CSSValueApplication = 455; -const int CSSValueFullscreen = 456; -const int CSSValueAliceblue = 457; -const int CSSValueAntiquewhite = 458; -const int CSSValueAquamarine = 459; -const int CSSValueAzure = 460; -const int CSSValueBeige = 461; -const int CSSValueBisque = 462; -const int CSSValueBlanchedalmond = 463; -const int CSSValueBlueviolet = 464; -const int CSSValueBrown = 465; -const int CSSValueBurlywood = 466; -const int CSSValueCadetblue = 467; -const int CSSValueChartreuse = 468; -const int CSSValueChocolate = 469; -const int CSSValueCoral = 470; -const int CSSValueCornflowerblue = 471; -const int CSSValueCornsilk = 472; -const int CSSValueCrimson = 473; -const int CSSValueCyan = 474; -const int CSSValueDarkblue = 475; -const int CSSValueDarkcyan = 476; -const int CSSValueDarkgoldenrod = 477; -const int CSSValueDarkgray = 478; -const int CSSValueDarkgreen = 479; -const int CSSValueDarkgrey = 480; -const int CSSValueDarkkhaki = 481; -const int CSSValueDarkmagenta = 482; -const int CSSValueDarkolivegreen = 483; -const int CSSValueDarkorange = 484; -const int CSSValueDarkorchid = 485; -const int CSSValueDarkred = 486; -const int CSSValueDarksalmon = 487; -const int CSSValueDarkseagreen = 488; -const int CSSValueDarkslateblue = 489; -const int CSSValueDarkslategray = 490; -const int CSSValueDarkslategrey = 491; -const int CSSValueDarkturquoise = 492; -const int CSSValueDarkviolet = 493; -const int CSSValueDeeppink = 494; -const int CSSValueDeepskyblue = 495; -const int CSSValueDimgray = 496; -const int CSSValueDimgrey = 497; -const int CSSValueDodgerblue = 498; -const int CSSValueFirebrick = 499; -const int CSSValueFloralwhite = 500; -const int CSSValueForestgreen = 501; -const int CSSValueGainsboro = 502; -const int CSSValueGhostwhite = 503; -const int CSSValueGold = 504; -const int CSSValueGoldenrod = 505; -const int CSSValueGreenyellow = 506; -const int CSSValueHoneydew = 507; -const int CSSValueHotpink = 508; -const int CSSValueIndianred = 509; -const int CSSValueIndigo = 510; -const int CSSValueIvory = 511; -const int CSSValueKhaki = 512; -const int CSSValueLavender = 513; -const int CSSValueLavenderblush = 514; -const int CSSValueLawngreen = 515; -const int CSSValueLemonchiffon = 516; -const int CSSValueLightblue = 517; -const int CSSValueLightcoral = 518; -const int CSSValueLightcyan = 519; -const int CSSValueLightgoldenrodyellow = 520; -const int CSSValueLightgray = 521; -const int CSSValueLightgreen = 522; -const int CSSValueLightgrey = 523; -const int CSSValueLightpink = 524; -const int CSSValueLightsalmon = 525; -const int CSSValueLightseagreen = 526; -const int CSSValueLightskyblue = 527; -const int CSSValueLightslategray = 528; -const int CSSValueLightslategrey = 529; -const int CSSValueLightsteelblue = 530; -const int CSSValueLightyellow = 531; -const int CSSValueLimegreen = 532; -const int CSSValueLinen = 533; -const int CSSValueMagenta = 534; -const int CSSValueMediumaquamarine = 535; -const int CSSValueMediumblue = 536; -const int CSSValueMediumorchid = 537; -const int CSSValueMediumpurple = 538; -const int CSSValueMediumseagreen = 539; -const int CSSValueMediumslateblue = 540; -const int CSSValueMediumspringgreen = 541; -const int CSSValueMediumturquoise = 542; -const int CSSValueMediumvioletred = 543; -const int CSSValueMidnightblue = 544; -const int CSSValueMintcream = 545; -const int CSSValueMistyrose = 546; -const int CSSValueMoccasin = 547; -const int CSSValueNavajowhite = 548; -const int CSSValueOldlace = 549; -const int CSSValueOlivedrab = 550; -const int CSSValueOrangered = 551; -const int CSSValueOrchid = 552; -const int CSSValuePalegoldenrod = 553; -const int CSSValuePalegreen = 554; -const int CSSValuePaleturquoise = 555; -const int CSSValuePalevioletred = 556; -const int CSSValuePapayawhip = 557; -const int CSSValuePeachpuff = 558; -const int CSSValuePeru = 559; -const int CSSValuePink = 560; -const int CSSValuePlum = 561; -const int CSSValuePowderblue = 562; -const int CSSValueRosybrown = 563; -const int CSSValueRoyalblue = 564; -const int CSSValueSaddlebrown = 565; -const int CSSValueSalmon = 566; -const int CSSValueSandybrown = 567; -const int CSSValueSeagreen = 568; -const int CSSValueSeashell = 569; -const int CSSValueSienna = 570; -const int CSSValueSkyblue = 571; -const int CSSValueSlateblue = 572; -const int CSSValueSlategray = 573; -const int CSSValueSlategrey = 574; -const int CSSValueSnow = 575; -const int CSSValueSpringgreen = 576; -const int CSSValueSteelblue = 577; -const int CSSValueTan = 578; -const int CSSValueThistle = 579; -const int CSSValueTomato = 580; -const int CSSValueTurquoise = 581; -const int CSSValueViolet = 582; -const int CSSValueWheat = 583; -const int CSSValueWhitesmoke = 584; -const int CSSValueYellowgreen = 585; -const int CSSValueNonzero = 586; -const int CSSValueEvenodd = 587; -const int CSSValueAccumulate = 588; -const int CSSValueNew = 589; -const int CSSValueLinearrgb = 590; -const int CSSValueOptimizequality = 591; -const int CSSValueCrispedges = 592; -const int CSSValueButt = 593; -const int CSSValueMiter = 594; -const int CSSValueBevel = 595; -const int CSSValueBeforeEdge = 596; -const int CSSValueAfterEdge = 597; -const int CSSValueCentral = 598; -const int CSSValueTextBeforeEdge = 599; -const int CSSValueTextAfterEdge = 600; -const int CSSValueIdeographic = 601; -const int CSSValueAlphabetic = 602; -const int CSSValueHanging = 603; -const int CSSValueMathematical = 604; -const int CSSValueUseScript = 605; -const int CSSValueNoChange = 606; -const int CSSValueResetSize = 607; -const int CSSValueLrTb = 608; -const int CSSValueRlTb = 609; -const int CSSValueTbRl = 610; -const int CSSValueLr = 611; -const int CSSValueRl = 612; -const int CSSValueTb = 613; -const int numCSSValueKeywords = 614; +const int CSSValueFloating = 453; +const int CSSValueFullscreen = 454; +const int CSSValueMaximized = 455; +const int CSSValueMinimized = 456; +const int CSSValueWindowed = 457; +const int CSSValueAliceblue = 458; +const int CSSValueAntiquewhite = 459; +const int CSSValueAquamarine = 460; +const int CSSValueAzure = 461; +const int CSSValueBeige = 462; +const int CSSValueBisque = 463; +const int CSSValueBlanchedalmond = 464; +const int CSSValueBlueviolet = 465; +const int CSSValueBrown = 466; +const int CSSValueBurlywood = 467; +const int CSSValueCadetblue = 468; +const int CSSValueChartreuse = 469; +const int CSSValueChocolate = 470; +const int CSSValueCoral = 471; +const int CSSValueCornflowerblue = 472; +const int CSSValueCornsilk = 473; +const int CSSValueCrimson = 474; +const int CSSValueCyan = 475; +const int CSSValueDarkblue = 476; +const int CSSValueDarkcyan = 477; +const int CSSValueDarkgoldenrod = 478; +const int CSSValueDarkgray = 479; +const int CSSValueDarkgreen = 480; +const int CSSValueDarkgrey = 481; +const int CSSValueDarkkhaki = 482; +const int CSSValueDarkmagenta = 483; +const int CSSValueDarkolivegreen = 484; +const int CSSValueDarkorange = 485; +const int CSSValueDarkorchid = 486; +const int CSSValueDarkred = 487; +const int CSSValueDarksalmon = 488; +const int CSSValueDarkseagreen = 489; +const int CSSValueDarkslateblue = 490; +const int CSSValueDarkslategray = 491; +const int CSSValueDarkslategrey = 492; +const int CSSValueDarkturquoise = 493; +const int CSSValueDarkviolet = 494; +const int CSSValueDeeppink = 495; +const int CSSValueDeepskyblue = 496; +const int CSSValueDimgray = 497; +const int CSSValueDimgrey = 498; +const int CSSValueDodgerblue = 499; +const int CSSValueFirebrick = 500; +const int CSSValueFloralwhite = 501; +const int CSSValueForestgreen = 502; +const int CSSValueGainsboro = 503; +const int CSSValueGhostwhite = 504; +const int CSSValueGold = 505; +const int CSSValueGoldenrod = 506; +const int CSSValueGreenyellow = 507; +const int CSSValueHoneydew = 508; +const int CSSValueHotpink = 509; +const int CSSValueIndianred = 510; +const int CSSValueIndigo = 511; +const int CSSValueIvory = 512; +const int CSSValueKhaki = 513; +const int CSSValueLavender = 514; +const int CSSValueLavenderblush = 515; +const int CSSValueLawngreen = 516; +const int CSSValueLemonchiffon = 517; +const int CSSValueLightblue = 518; +const int CSSValueLightcoral = 519; +const int CSSValueLightcyan = 520; +const int CSSValueLightgoldenrodyellow = 521; +const int CSSValueLightgray = 522; +const int CSSValueLightgreen = 523; +const int CSSValueLightgrey = 524; +const int CSSValueLightpink = 525; +const int CSSValueLightsalmon = 526; +const int CSSValueLightseagreen = 527; +const int CSSValueLightskyblue = 528; +const int CSSValueLightslategray = 529; +const int CSSValueLightslategrey = 530; +const int CSSValueLightsteelblue = 531; +const int CSSValueLightyellow = 532; +const int CSSValueLimegreen = 533; +const int CSSValueLinen = 534; +const int CSSValueMagenta = 535; +const int CSSValueMediumaquamarine = 536; +const int CSSValueMediumblue = 537; +const int CSSValueMediumorchid = 538; +const int CSSValueMediumpurple = 539; +const int CSSValueMediumseagreen = 540; +const int CSSValueMediumslateblue = 541; +const int CSSValueMediumspringgreen = 542; +const int CSSValueMediumturquoise = 543; +const int CSSValueMediumvioletred = 544; +const int CSSValueMidnightblue = 545; +const int CSSValueMintcream = 546; +const int CSSValueMistyrose = 547; +const int CSSValueMoccasin = 548; +const int CSSValueNavajowhite = 549; +const int CSSValueOldlace = 550; +const int CSSValueOlivedrab = 551; +const int CSSValueOrangered = 552; +const int CSSValueOrchid = 553; +const int CSSValuePalegoldenrod = 554; +const int CSSValuePalegreen = 555; +const int CSSValuePaleturquoise = 556; +const int CSSValuePalevioletred = 557; +const int CSSValuePapayawhip = 558; +const int CSSValuePeachpuff = 559; +const int CSSValuePeru = 560; +const int CSSValuePink = 561; +const int CSSValuePlum = 562; +const int CSSValuePowderblue = 563; +const int CSSValueRosybrown = 564; +const int CSSValueRoyalblue = 565; +const int CSSValueSaddlebrown = 566; +const int CSSValueSalmon = 567; +const int CSSValueSandybrown = 568; +const int CSSValueSeagreen = 569; +const int CSSValueSeashell = 570; +const int CSSValueSienna = 571; +const int CSSValueSkyblue = 572; +const int CSSValueSlateblue = 573; +const int CSSValueSlategray = 574; +const int CSSValueSlategrey = 575; +const int CSSValueSnow = 576; +const int CSSValueSpringgreen = 577; +const int CSSValueSteelblue = 578; +const int CSSValueTan = 579; +const int CSSValueThistle = 580; +const int CSSValueTomato = 581; +const int CSSValueTurquoise = 582; +const int CSSValueViolet = 583; +const int CSSValueWheat = 584; +const int CSSValueWhitesmoke = 585; +const int CSSValueYellowgreen = 586; +const int CSSValueNonzero = 587; +const int CSSValueEvenodd = 588; +const int CSSValueAccumulate = 589; +const int CSSValueNew = 590; +const int CSSValueLinearrgb = 591; +const int CSSValueOptimizequality = 592; +const int CSSValueCrispedges = 593; +const int CSSValueButt = 594; +const int CSSValueMiter = 595; +const int CSSValueBevel = 596; +const int CSSValueBeforeEdge = 597; +const int CSSValueAfterEdge = 598; +const int CSSValueCentral = 599; +const int CSSValueTextBeforeEdge = 600; +const int CSSValueTextAfterEdge = 601; +const int CSSValueIdeographic = 602; +const int CSSValueAlphabetic = 603; +const int CSSValueHanging = 604; +const int CSSValueMathematical = 605; +const int CSSValueUseScript = 606; +const int CSSValueNoChange = 607; +const int CSSValueResetSize = 608; +const int CSSValueLrTb = 609; +const int CSSValueRlTb = 610; +const int CSSValueTbRl = 611; +const int CSSValueLr = 612; +const int CSSValueRl = 613; +const int CSSValueTb = 614; +const int numCSSValueKeywords = 615; const size_t maxCSSValueKeywordLength = 35; const char* getValueName(unsigned short id); diff --git a/src/3rdparty/webkit/WebCore/generated/ColorData.c b/src/3rdparty/webkit/WebCore/generated/ColorData.c index 4fb1bea..5d64dda 100644 --- a/src/3rdparty/webkit/WebCore/generated/ColorData.c +++ b/src/3rdparty/webkit/WebCore/generated/ColorData.c @@ -1,4 +1,4 @@ -/* ANSI-C code produced by gperf version 3.0.1 */ +/* ANSI-C code produced by gperf version 3.0.3 */ /* Command-line: gperf -CDEot -L ANSI-C --includes --key-positions='*' -N findColor -D -s 2 */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -141,6 +141,9 @@ hash (register const char *str, register unsigned int len) #ifdef __GNUC__ __inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif #endif const struct NamedColor * findColor (register const char *str, register unsigned int len) diff --git a/src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp b/src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp index 2aab9b9..d69b1b6 100644 --- a/src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp +++ b/src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp @@ -1,4 +1,4 @@ -/* ANSI-C code produced by gperf version 3.0.1 */ +/* ANSI-C code produced by gperf version 3.0.3 */ /* Command-line: gperf -CEot -L ANSI-C --includes --key-positions='*' -N findDoctypeEntry -F ,PubIDInfo::eAlmostStandards,PubIDInfo::eAlmostStandards */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -331,6 +331,9 @@ hash (register const char *str, register unsigned int len) #ifdef __GNUC__ __inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif #endif const struct PubIDInfo * findDoctypeEntry (register const char *str, register unsigned int len) diff --git a/src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c b/src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c index 8bd9d97..761f29d 100644 --- a/src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c +++ b/src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c @@ -1,4 +1,4 @@ -/* ANSI-C code produced by gperf version 3.0.1 */ +/* ANSI-C code produced by gperf version 3.0.3 */ /* Command-line: gperf -a -L ANSI-C -C -G -c -o -t --includes --key-positions='*' -N findEntity -D -s 2 */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ @@ -521,6 +521,9 @@ static const short lookup[] = #ifdef __GNUC__ __inline +#ifdef __GNUC_STDC_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif #endif const struct Entity * findEntity (register const char *str, register unsigned int len) diff --git a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp index 7a54748..0859634 100644 --- a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp +++ b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp @@ -76,7 +76,7 @@ /* Copy the first part of user declarations. */ /* Line 189 of yacc.c */ -#line 28 "xml\\XPathGrammar.y" +#line 28 "xml/XPathGrammar.y" #include "config.h" @@ -107,7 +107,7 @@ using namespace XPath; /* Line 189 of yacc.c */ -#line 111 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.c" +#line 111 "/WebCore/generated/XPathGrammar.tab.c" /* Enabling traces. */ #ifndef YYDEBUG @@ -162,7 +162,7 @@ typedef union YYSTYPE { /* Line 214 of yacc.c */ -#line 60 "xml\\XPathGrammar.y" +#line 60 "xml/XPathGrammar.y" Step::Axis axis; Step::NodeTest* nodeTest; @@ -178,7 +178,7 @@ typedef union YYSTYPE /* Line 214 of yacc.c */ -#line 182 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.c" +#line 182 "/WebCore/generated/XPathGrammar.tab.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -189,7 +189,7 @@ typedef union YYSTYPE /* Copy the second part of user declarations. */ /* Line 264 of yacc.c */ -#line 73 "xml\\XPathGrammar.y" +#line 73 "xml/XPathGrammar.y" static int xpathyylex(YYSTYPE* yylval) { return Parser::current()->lex(yylval); } @@ -198,7 +198,7 @@ static void xpathyyerror(const char*) { } /* Line 264 of yacc.c */ -#line 202 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.c" +#line 202 "/WebCore/generated/XPathGrammar.tab.c" #ifdef short # undef short @@ -1483,7 +1483,7 @@ yyreduce: case 2: /* Line 1455 of yacc.c */ -#line 122 "xml\\XPathGrammar.y" +#line 122 "xml/XPathGrammar.y" { PARSER->m_topExpr = (yyvsp[(1) - (1)].expr); ;} @@ -1492,7 +1492,7 @@ yyreduce: case 3: /* Line 1455 of yacc.c */ -#line 129 "xml\\XPathGrammar.y" +#line 129 "xml/XPathGrammar.y" { (yyval.locationPath)->setAbsolute(false); ;} @@ -1501,7 +1501,7 @@ yyreduce: case 4: /* Line 1455 of yacc.c */ -#line 134 "xml\\XPathGrammar.y" +#line 134 "xml/XPathGrammar.y" { (yyval.locationPath)->setAbsolute(true); ;} @@ -1510,7 +1510,7 @@ yyreduce: case 5: /* Line 1455 of yacc.c */ -#line 141 "xml\\XPathGrammar.y" +#line 141 "xml/XPathGrammar.y" { (yyval.locationPath) = new LocationPath; PARSER->registerParseNode((yyval.locationPath)); @@ -1520,7 +1520,7 @@ yyreduce: case 6: /* Line 1455 of yacc.c */ -#line 147 "xml\\XPathGrammar.y" +#line 147 "xml/XPathGrammar.y" { (yyval.locationPath) = (yyvsp[(2) - (2)].locationPath); ;} @@ -1529,7 +1529,7 @@ yyreduce: case 7: /* Line 1455 of yacc.c */ -#line 152 "xml\\XPathGrammar.y" +#line 152 "xml/XPathGrammar.y" { (yyval.locationPath) = (yyvsp[(2) - (2)].locationPath); (yyval.locationPath)->insertFirstStep((yyvsp[(1) - (2)].step)); @@ -1540,7 +1540,7 @@ yyreduce: case 8: /* Line 1455 of yacc.c */ -#line 161 "xml\\XPathGrammar.y" +#line 161 "xml/XPathGrammar.y" { (yyval.locationPath) = new LocationPath; (yyval.locationPath)->appendStep((yyvsp[(1) - (1)].step)); @@ -1552,7 +1552,7 @@ yyreduce: case 9: /* Line 1455 of yacc.c */ -#line 169 "xml\\XPathGrammar.y" +#line 169 "xml/XPathGrammar.y" { (yyval.locationPath)->appendStep((yyvsp[(3) - (3)].step)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].step)); @@ -1562,7 +1562,7 @@ yyreduce: case 10: /* Line 1455 of yacc.c */ -#line 175 "xml\\XPathGrammar.y" +#line 175 "xml/XPathGrammar.y" { (yyval.locationPath)->appendStep((yyvsp[(2) - (3)].step)); (yyval.locationPath)->appendStep((yyvsp[(3) - (3)].step)); @@ -1574,7 +1574,7 @@ yyreduce: case 11: /* Line 1455 of yacc.c */ -#line 185 "xml\\XPathGrammar.y" +#line 185 "xml/XPathGrammar.y" { if ((yyvsp[(2) - (2)].predList)) { (yyval.step) = new Step(Step::ChildAxis, *(yyvsp[(1) - (2)].nodeTest), *(yyvsp[(2) - (2)].predList)); @@ -1589,7 +1589,7 @@ yyreduce: case 12: /* Line 1455 of yacc.c */ -#line 196 "xml\\XPathGrammar.y" +#line 196 "xml/XPathGrammar.y" { String localName; String namespaceURI; @@ -1611,7 +1611,7 @@ yyreduce: case 13: /* Line 1455 of yacc.c */ -#line 214 "xml\\XPathGrammar.y" +#line 214 "xml/XPathGrammar.y" { if ((yyvsp[(3) - (3)].predList)) { (yyval.step) = new Step((yyvsp[(1) - (3)].axis), *(yyvsp[(2) - (3)].nodeTest), *(yyvsp[(3) - (3)].predList)); @@ -1626,7 +1626,7 @@ yyreduce: case 14: /* Line 1455 of yacc.c */ -#line 225 "xml\\XPathGrammar.y" +#line 225 "xml/XPathGrammar.y" { String localName; String namespaceURI; @@ -1648,7 +1648,7 @@ yyreduce: case 17: /* Line 1455 of yacc.c */ -#line 249 "xml\\XPathGrammar.y" +#line 249 "xml/XPathGrammar.y" { (yyval.axis) = Step::AttributeAxis; ;} @@ -1657,7 +1657,7 @@ yyreduce: case 18: /* Line 1455 of yacc.c */ -#line 256 "xml\\XPathGrammar.y" +#line 256 "xml/XPathGrammar.y" { if (*(yyvsp[(1) - (3)].str) == "node") (yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::AnyNodeTest); @@ -1674,7 +1674,7 @@ yyreduce: case 19: /* Line 1455 of yacc.c */ -#line 269 "xml\\XPathGrammar.y" +#line 269 "xml/XPathGrammar.y" { (yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest); PARSER->deleteString((yyvsp[(1) - (3)].str)); @@ -1685,7 +1685,7 @@ yyreduce: case 20: /* Line 1455 of yacc.c */ -#line 276 "xml\\XPathGrammar.y" +#line 276 "xml/XPathGrammar.y" { (yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest, (yyvsp[(3) - (4)].str)->stripWhiteSpace()); PARSER->deleteString((yyvsp[(1) - (4)].str)); @@ -1697,7 +1697,7 @@ yyreduce: case 21: /* Line 1455 of yacc.c */ -#line 286 "xml\\XPathGrammar.y" +#line 286 "xml/XPathGrammar.y" { (yyval.predList) = 0; ;} @@ -1706,7 +1706,7 @@ yyreduce: case 23: /* Line 1455 of yacc.c */ -#line 295 "xml\\XPathGrammar.y" +#line 295 "xml/XPathGrammar.y" { (yyval.predList) = new Vector<Predicate*>; (yyval.predList)->append(new Predicate((yyvsp[(1) - (1)].expr))); @@ -1718,7 +1718,7 @@ yyreduce: case 24: /* Line 1455 of yacc.c */ -#line 303 "xml\\XPathGrammar.y" +#line 303 "xml/XPathGrammar.y" { (yyval.predList)->append(new Predicate((yyvsp[(2) - (2)].expr))); PARSER->unregisterParseNode((yyvsp[(2) - (2)].expr)); @@ -1728,7 +1728,7 @@ yyreduce: case 25: /* Line 1455 of yacc.c */ -#line 311 "xml\\XPathGrammar.y" +#line 311 "xml/XPathGrammar.y" { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;} @@ -1737,7 +1737,7 @@ yyreduce: case 26: /* Line 1455 of yacc.c */ -#line 318 "xml\\XPathGrammar.y" +#line 318 "xml/XPathGrammar.y" { (yyval.step) = new Step(Step::DescendantOrSelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); PARSER->registerParseNode((yyval.step)); @@ -1747,7 +1747,7 @@ yyreduce: case 27: /* Line 1455 of yacc.c */ -#line 326 "xml\\XPathGrammar.y" +#line 326 "xml/XPathGrammar.y" { (yyval.step) = new Step(Step::SelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); PARSER->registerParseNode((yyval.step)); @@ -1757,7 +1757,7 @@ yyreduce: case 28: /* Line 1455 of yacc.c */ -#line 332 "xml\\XPathGrammar.y" +#line 332 "xml/XPathGrammar.y" { (yyval.step) = new Step(Step::ParentAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); PARSER->registerParseNode((yyval.step)); @@ -1767,7 +1767,7 @@ yyreduce: case 29: /* Line 1455 of yacc.c */ -#line 340 "xml\\XPathGrammar.y" +#line 340 "xml/XPathGrammar.y" { (yyval.expr) = new VariableReference(*(yyvsp[(1) - (1)].str)); PARSER->deleteString((yyvsp[(1) - (1)].str)); @@ -1778,7 +1778,7 @@ yyreduce: case 30: /* Line 1455 of yacc.c */ -#line 347 "xml\\XPathGrammar.y" +#line 347 "xml/XPathGrammar.y" { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;} @@ -1787,7 +1787,7 @@ yyreduce: case 31: /* Line 1455 of yacc.c */ -#line 352 "xml\\XPathGrammar.y" +#line 352 "xml/XPathGrammar.y" { (yyval.expr) = new StringExpression(*(yyvsp[(1) - (1)].str)); PARSER->deleteString((yyvsp[(1) - (1)].str)); @@ -1798,7 +1798,7 @@ yyreduce: case 32: /* Line 1455 of yacc.c */ -#line 359 "xml\\XPathGrammar.y" +#line 359 "xml/XPathGrammar.y" { (yyval.expr) = new Number((yyvsp[(1) - (1)].str)->toDouble()); PARSER->deleteString((yyvsp[(1) - (1)].str)); @@ -1809,7 +1809,7 @@ yyreduce: case 34: /* Line 1455 of yacc.c */ -#line 370 "xml\\XPathGrammar.y" +#line 370 "xml/XPathGrammar.y" { (yyval.expr) = createFunction(*(yyvsp[(1) - (3)].str)); if (!(yyval.expr)) @@ -1822,7 +1822,7 @@ yyreduce: case 35: /* Line 1455 of yacc.c */ -#line 379 "xml\\XPathGrammar.y" +#line 379 "xml/XPathGrammar.y" { (yyval.expr) = createFunction(*(yyvsp[(1) - (4)].str), *(yyvsp[(3) - (4)].argList)); if (!(yyval.expr)) @@ -1836,7 +1836,7 @@ yyreduce: case 36: /* Line 1455 of yacc.c */ -#line 391 "xml\\XPathGrammar.y" +#line 391 "xml/XPathGrammar.y" { (yyval.argList) = new Vector<Expression*>; (yyval.argList)->append((yyvsp[(1) - (1)].expr)); @@ -1848,7 +1848,7 @@ yyreduce: case 37: /* Line 1455 of yacc.c */ -#line 399 "xml\\XPathGrammar.y" +#line 399 "xml/XPathGrammar.y" { (yyval.argList)->append((yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr)); @@ -1858,7 +1858,7 @@ yyreduce: case 40: /* Line 1455 of yacc.c */ -#line 413 "xml\\XPathGrammar.y" +#line 413 "xml/XPathGrammar.y" { (yyval.expr) = new Union; (yyval.expr)->addSubExpression((yyvsp[(1) - (3)].expr)); @@ -1872,7 +1872,7 @@ yyreduce: case 41: /* Line 1455 of yacc.c */ -#line 425 "xml\\XPathGrammar.y" +#line 425 "xml/XPathGrammar.y" { (yyval.expr) = (yyvsp[(1) - (1)].locationPath); ;} @@ -1881,7 +1881,7 @@ yyreduce: case 43: /* Line 1455 of yacc.c */ -#line 432 "xml\\XPathGrammar.y" +#line 432 "xml/XPathGrammar.y" { (yyvsp[(3) - (3)].locationPath)->setAbsolute(true); (yyval.expr) = new Path(static_cast<Filter*>((yyvsp[(1) - (3)].expr)), (yyvsp[(3) - (3)].locationPath)); @@ -1894,7 +1894,7 @@ yyreduce: case 44: /* Line 1455 of yacc.c */ -#line 441 "xml\\XPathGrammar.y" +#line 441 "xml/XPathGrammar.y" { (yyvsp[(3) - (3)].locationPath)->insertFirstStep((yyvsp[(2) - (3)].step)); (yyvsp[(3) - (3)].locationPath)->setAbsolute(true); @@ -1909,7 +1909,7 @@ yyreduce: case 46: /* Line 1455 of yacc.c */ -#line 456 "xml\\XPathGrammar.y" +#line 456 "xml/XPathGrammar.y" { (yyval.expr) = new Filter((yyvsp[(1) - (2)].expr), *(yyvsp[(2) - (2)].predList)); PARSER->unregisterParseNode((yyvsp[(1) - (2)].expr)); @@ -1921,7 +1921,7 @@ yyreduce: case 48: /* Line 1455 of yacc.c */ -#line 468 "xml\\XPathGrammar.y" +#line 468 "xml/XPathGrammar.y" { (yyval.expr) = new LogicalOp(LogicalOp::OP_Or, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); @@ -1933,7 +1933,7 @@ yyreduce: case 50: /* Line 1455 of yacc.c */ -#line 480 "xml\\XPathGrammar.y" +#line 480 "xml/XPathGrammar.y" { (yyval.expr) = new LogicalOp(LogicalOp::OP_And, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); @@ -1945,7 +1945,7 @@ yyreduce: case 52: /* Line 1455 of yacc.c */ -#line 492 "xml\\XPathGrammar.y" +#line 492 "xml/XPathGrammar.y" { (yyval.expr) = new EqTestOp((yyvsp[(2) - (3)].eqop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); @@ -1957,7 +1957,7 @@ yyreduce: case 54: /* Line 1455 of yacc.c */ -#line 504 "xml\\XPathGrammar.y" +#line 504 "xml/XPathGrammar.y" { (yyval.expr) = new EqTestOp((yyvsp[(2) - (3)].eqop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); @@ -1969,7 +1969,7 @@ yyreduce: case 56: /* Line 1455 of yacc.c */ -#line 516 "xml\\XPathGrammar.y" +#line 516 "xml/XPathGrammar.y" { (yyval.expr) = new NumericOp(NumericOp::OP_Add, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); @@ -1981,7 +1981,7 @@ yyreduce: case 57: /* Line 1455 of yacc.c */ -#line 524 "xml\\XPathGrammar.y" +#line 524 "xml/XPathGrammar.y" { (yyval.expr) = new NumericOp(NumericOp::OP_Sub, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); @@ -1993,7 +1993,7 @@ yyreduce: case 59: /* Line 1455 of yacc.c */ -#line 536 "xml\\XPathGrammar.y" +#line 536 "xml/XPathGrammar.y" { (yyval.expr) = new NumericOp((yyvsp[(2) - (3)].numop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr)); @@ -2005,7 +2005,7 @@ yyreduce: case 61: /* Line 1455 of yacc.c */ -#line 548 "xml\\XPathGrammar.y" +#line 548 "xml/XPathGrammar.y" { (yyval.expr) = new Negative; (yyval.expr)->addSubExpression((yyvsp[(2) - (2)].expr)); @@ -2017,7 +2017,7 @@ yyreduce: /* Line 1455 of yacc.c */ -#line 2021 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.c" +#line 2021 "/WebCore/generated/XPathGrammar.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2229,7 +2229,7 @@ yyreturn: /* Line 1675 of yacc.c */ -#line 556 "xml\\XPathGrammar.y" +#line 556 "xml/XPathGrammar.y" #endif diff --git a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h index c3dbd2b..7264598 100644 --- a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h +++ b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h @@ -67,7 +67,7 @@ typedef union YYSTYPE { /* Line 1676 of yacc.c */ -#line 60 "xml\\XPathGrammar.y" +#line 60 "xml/XPathGrammar.y" Step::Axis axis; Step::NodeTest* nodeTest; @@ -83,7 +83,7 @@ typedef union YYSTYPE /* Line 1676 of yacc.c */ -#line 87 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.h" +#line 87 "/WebCore/generated/XPathGrammar.tab.h" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp b/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp index d9a94f5..9a19e9e 100644 --- a/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp +++ b/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp @@ -65,46 +65,53 @@ typedef unsigned int flex_uint32_t; #endif /* ! C99 */ #define YY_NUM_RULES 69 #define YY_END_OF_BUFFER 70 -static yyconst short int yy_accept[482] = +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[482] = { 0, 0, 0, 0, 0, 0, 0, 70, 68, 2, 2, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 57, 68, 68, 68, 68, 15, 15, 15, 68, 68, + 57, 68, 68, 15, 15, 15, 68, 68, 68, 68, 67, 15, 15, 15, 66, 15, 2, 0, 0, 0, - 14, 0, 0, 0, 0, 18, 18, 8, 0, 0, - 9, 0, 16, 0, 0, 15, 15, 15, 58, 0, - 56, 0, 0, 57, 0, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 16, 55, 55, 52, 55, - 0, 0, 0, 35, 35, 35, 35, 35, 35, 35, - 15, 15, 7, 63, 15, 0, 0, 15, 15, 0, - - 15, 6, 5, 15, 15, 15, 15, 0, 0, 0, - 14, 0, 0, 0, 18, 18, 18, 0, 18, 0, - 0, 14, 0, 0, 4, 15, 0, 0, 55, 55, - 55, 0, 55, 42, 55, 37, 40, 55, 53, 44, - 55, 43, 51, 55, 46, 45, 41, 55, 55, 55, - 0, 35, 35, 35, 35, 0, 35, 35, 35, 35, - 35, 35, 15, 15, 15, 16, 15, 15, 64, 64, - 15, 12, 10, 15, 13, 0, 0, 0, 17, 18, - 18, 18, 17, 0, 0, 15, 0, 1, 55, 55, - 55, 55, 47, 55, 54, 16, 48, 38, 55, 3, + 14, 0, 0, 0, 18, 18, 0, 8, 0, 0, + 9, 0, 16, 0, 15, 15, 15, 0, 58, 0, + 56, 0, 0, 57, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 16, 55, 55, 52, 55, 0, 55, + 0, 0, 35, 35, 35, 35, 35, 35, 35, 0, + 63, 15, 0, 0, 15, 15, 0, 15, 15, 15, + + 7, 6, 5, 15, 15, 15, 15, 0, 0, 0, + 14, 0, 0, 0, 18, 18, 0, 18, 18, 0, + 0, 14, 0, 0, 4, 15, 0, 0, 55, 0, + 42, 55, 37, 40, 55, 53, 44, 55, 43, 51, + 55, 46, 45, 41, 55, 55, 55, 55, 55, 55, + 0, 35, 35, 0, 35, 35, 35, 35, 35, 35, + 35, 35, 15, 15, 16, 15, 15, 64, 64, 15, + 15, 12, 10, 15, 13, 0, 0, 0, 17, 17, + 18, 18, 18, 0, 0, 15, 0, 1, 55, 55, + 47, 55, 54, 16, 48, 38, 55, 55, 55, 3, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 15, 15, 59, 0, 64, 64, 64, 63, 11, 0, + 15, 59, 0, 64, 64, 64, 63, 15, 11, 0, 0, 0, 18, 18, 18, 0, 15, 0, 0, 55, - 55, 55, 49, 50, 35, 35, 35, 35, 35, 35, - 35, 35, 20, 15, 15, 65, 64, 64, 64, 64, - 0, 0, 0, 0, 61, 0, 0, 0, 0, 18, + 49, 50, 55, 55, 35, 35, 35, 35, 35, 35, + 35, 20, 35, 15, 65, 64, 64, 64, 64, 0, + 0, 0, 0, 61, 0, 15, 0, 0, 0, 18, 18, 18, 0, 15, 55, 55, 39, 35, 35, 35, - 35, 35, 35, 21, 35, 15, 15, 65, 64, 64, - 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 61, 0, 0, 0, 0, 17, 18, 18, - - 17, 0, 15, 55, 55, 35, 35, 35, 35, 35, - 19, 35, 15, 15, 65, 64, 64, 64, 64, 64, - 64, 0, 60, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 18, 0, 15, - 55, 55, 35, 35, 35, 23, 35, 35, 15, 65, + 35, 35, 21, 35, 35, 15, 65, 64, 64, 64, + 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 61, 0, 0, 15, 0, 0, 17, 17, 18, + + 18, 0, 15, 55, 55, 35, 35, 35, 35, 19, + 35, 35, 15, 65, 64, 64, 64, 64, 64, 64, + 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 15, 0, 0, 18, 18, 0, 15, + 55, 55, 35, 35, 23, 35, 35, 35, 15, 65, 64, 64, 64, 64, 64, 64, 64, 0, 60, 0, 0, 0, 60, 0, 0, 0, 0, 18, 15, 55, 35, 35, 35, 35, 65, 0, 0, 0, 36, 15, @@ -113,7 +120,7 @@ static yyconst short int yy_accept[482] = 0, 0, 63, 35, 35, 35, 35, 35, 35, 35, 35, 0, 0, 0, 0, 0, 0, 35, 35, 35, - 35, 25, 35, 35, 35, 0, 0, 0, 62, 0, + 35, 25, 35, 35, 35, 0, 62, 0, 0, 0, 0, 26, 35, 35, 35, 35, 27, 35, 0, 0, 0, 0, 31, 35, 35, 35, 35, 0, 0, 0, 35, 35, 35, 35, 0, 0, 35, 35, 29, 35, @@ -122,7 +129,7 @@ static yyconst short int yy_accept[482] = 0 } ; -static yyconst int yy_ec[256] = +static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 4, 5, 1, 1, 1, 1, 1, 1, 1, @@ -130,438 +137,911 @@ static yyconst int yy_ec[256] = 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 12, 18, 19, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 12, 22, 23, - 24, 25, 26, 27, 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, - 12, 28, 12, 29, 30, 12, 31, 32, 33, 34, - - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 12, 59, 1, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60 + 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, + 12, 54, 12, 55, 56, 12, 57, 58, 59, 60, + + 61, 62, 63, 64, 65, 37, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 12, 84, 1, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85 } ; -static yyconst int yy_meta[61] = +static yyconst flex_int32_t yy_meta[86] = { 0, - 1, 2, 3, 3, 3, 4, 5, 5, 5, 5, - 5, 5, 5, 6, 7, 5, 5, 8, 5, 5, - 9, 5, 5, 5, 5, 10, 5, 11, 5, 11, - 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 5, 5, 5, 11 + 1, 2, 3, 4, 4, 5, 6, 7, 6, 6, + 6, 6, 7, 8, 9, 6, 6, 10, 6, 6, + 11, 6, 6, 6, 6, 12, 6, 13, 13, 13, + 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 6, 14, 13, 13, 13, 13, + 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 6, 6, 6, 14 } ; -static yyconst short int yy_base[520] = +static yyconst flex_int16_t yy_base[553] = { 0, - 0, 0, 39, 41, 1591, 1590, 1625, 2401, 62, 71, - 76, 61, 69, 1588, 78, 1587, 50, 89, 1583, 1580, - 132, 1579, 91, 123, 1561, 85, 94, 104, 1560, 1559, - 2401, 117, 176, 175, 2401, 177, 193, 204, 1539, 108, - 2401, 242, 120, 180, 196, 1553, 205, 2401, 101, 277, - 2401, 102, 75, 1555, 221, 112, 206, 234, 181, 1561, - 1565, 1547, 1553, 0, 268, 119, 1545, 221, 60, 240, - 223, 230, 244, 257, 278, 279, 286, 256, 1533, 264, - 1542, 298, 297, 1523, 296, 190, 292, 231, 97, 294, - 309, 350, 2401, 2401, 329, 327, 1524, 351, 352, 372, - - 359, 2401, 2401, 360, 361, 381, 362, 1496, 339, 341, - 342, 422, 457, 400, 1513, 492, 1512, 448, 483, 409, - 364, 386, 527, 562, 2401, 435, 1523, 245, 1498, 597, - 1497, 518, 368, 1483, 363, 1481, 1479, 310, 1478, 1477, - 289, 1474, 1463, 239, 1440, 1432, 1428, 385, 401, 369, - 1436, 311, 1425, 632, 1422, 553, 410, 420, 424, 411, - 423, 440, 588, 458, 667, 1420, 626, 459, 481, 1403, - 492, 494, 507, 627, 528, 1382, 412, 658, 674, 683, - 1398, 718, 709, 544, 725, 563, 1368, 2401, 734, 1348, - 769, 474, 1324, 477, 1314, 482, 1313, 1305, 548, 2401, - - 414, 760, 1289, 804, 578, 484, 582, 508, 509, 510, - 795, 811, 2401, 820, 552, 1290, 1272, 855, 554, 1197, - 841, 857, 863, 879, 885, 901, 647, 1228, 455, 907, - 923, 614, 1191, 1123, 611, 929, 945, 628, 551, 630, - 515, 631, 1115, 951, 967, 973, 555, 1109, 1101, 1093, - 1008, 1022, 668, 684, 2401, 1049, 1061, 1008, 1040, 1057, - 1065, 1073, 1081, 634, 1089, 1097, 1067, 577, 1105, 1113, - 579, 615, 683, 1041, 685, 1121, 1129, 1137, 708, 1041, - 991, 965, 947, 774, 719, 782, 1172, 735, 1207, 1186, - 1219, 1246, 1260, 1287, 1322, 876, 1246, 2401, 1278, 1313, - - 854, 1330, 805, 1338, 1346, 770, 1354, 1362, 771, 580, - 822, 584, 1397, 1383, 1399, 710, 792, 712, 711, 661, - 659, 809, 2401, 877, 754, 1434, 1461, 1496, 1019, 821, - 1442, 1531, 1566, 1440, 639, 1487, 921, 1522, 1557, 851, - 965, 1574, 707, 1301, 1582, 618, 616, 617, 1617, 1603, - 562, 2401, 2401, 2401, 2401, 2401, 2401, 1475, 858, 859, - 1619, 1654, 917, 918, 1640, 1656, 521, 1482, 961, 1510, - 1652, 1544, 646, 836, 1675, 1681, 1697, 1703, 2401, 1017, - 873, 874, 962, 853, 1021, 701, 513, 473, 2401, 1719, - 1725, 1741, 1005, 1150, 419, 919, 992, 1018, 1139, 1747, - - 1763, 1769, 1804, 1154, 1020, 1030, 1040, 1131, 1167, 901, - 1187, 1792, 1808, 1831, 1403, 1829, 1851, 820, 1059, 967, - 920, 472, 789, 1201, 1185, 1865, 1892, 1281, 2401, 1871, - 1869, 448, 1202, 1225, 736, 946, 390, 585, 1906, 1908, - 1943, 1970, 388, 1190, 1218, 1227, 1156, 1929, 1951, 1949, - 1266, 1303, 990, 1304, 1976, 1992, 1394, 1169, 340, 1248, - 1998, 2014, 1312, 316, 1203, 1242, 2020, 2036, 1340, 265, - 1151, 2042, 1229, 1423, 1424, 1395, 92, 1382, 1364, 34, - 2401, 2077, 2082, 2093, 2098, 2103, 2112, 2119, 2130, 2139, - 2144, 2155, 2167, 2169, 2178, 2183, 2192, 2197, 2206, 2215, - - 2227, 2236, 2245, 2250, 2262, 2267, 2278, 2283, 2294, 2305, - 2316, 2321, 2332, 2343, 2348, 2359, 2368, 2379, 2388 + 0, 0, 64, 66, 54, 56, 1486, 6578, 93, 98, + 107, 83, 155, 1460, 77, 1459, 98, 99, 1446, 1449, + 207, 1454, 275, 100, 108, 146, 326, 1402, 1384, 1380, + 6578, 101, 110, 151, 6578, 127, 227, 295, 89, 136, + 6578, 387, 140, 0, 429, 1346, 471, 6578, 117, 532, + 6578, 138, 157, 1371, 142, 295, 307, 574, 283, 1379, + 1371, 1325, 1324, 0, 1290, 249, 150, 274, 93, 241, + 152, 256, 325, 309, 347, 313, 1289, 147, 616, 154, + 1322, 346, 1285, 284, 281, 357, 348, 170, 279, 658, + 6578, 208, 700, 1317, 389, 358, 1310, 399, 276, 761, + + 6578, 6578, 6578, 409, 367, 413, 420, 307, 427, 374, + 421, 822, 883, 0, 1254, 925, 967, 1249, 1028, 319, + 451, 465, 1089, 1150, 6578, 456, 1282, 183, 1233, 1192, + 1224, 443, 1184, 1165, 454, 1161, 1149, 441, 1141, 1131, + 383, 1082, 1060, 1047, 453, 458, 470, 1029, 1253, 494, + 1044, 464, 999, 1295, 492, 486, 496, 516, 504, 517, + 998, 1356, 417, 1417, 1019, 418, 422, 491, 997, 502, + 1459, 527, 528, 545, 554, 409, 515, 1520, 0, 1562, + 965, 1623, 1684, 570, 1745, 560, 994, 6578, 948, 1806, + 935, 556, 923, 500, 897, 896, 559, 1848, 569, 6578, + + 598, 882, 1909, 566, 565, 587, 606, 589, 631, 1951, + 2012, 6578, 0, 559, 907, 902, 691, 2054, 561, 593, + 2115, 0, 2157, 2218, 2279, 2340, 644, 878, 346, 2401, + 839, 836, 2443, 613, 616, 2504, 668, 534, 610, 656, + 680, 820, 2546, 2607, 0, 591, 847, 844, 803, 733, + 793, 614, 605, 6578, 2668, 2710, 625, 2771, 0, 2813, + 2874, 2935, 2996, 3057, 3131, 3173, 3234, 714, 3295, 695, + 690, 727, 762, 729, 3337, 3398, 0, 643, 777, 744, + 699, 698, 829, 654, 834, 3459, 689, 3520, 854, 894, + 915, 920, 3581, 3642, 3684, 683, 3745, 6578, 597, 3806, + + 3867, 3928, 3989, 4050, 4111, 730, 4172, 814, 719, 542, + 750, 4214, 4275, 0, 762, 558, 553, 552, 531, 447, + 860, 6578, 697, 838, 957, 4336, 4397, 699, 926, 988, + 4458, 4519, 4580, 1002, 744, 1010, 4622, 4664, 1042, 737, + 4706, 4767, 647, 4828, 402, 818, 848, 1069, 1033, 0, + 437, 6578, 6578, 6578, 6578, 6578, 6578, 1122, 898, 924, + 4870, 1162, 963, 968, 4912, 4973, 770, 1063, 877, 1074, + 5005, 1102, 989, 1009, 0, 5062, 5104, 5146, 6578, 1036, + 1079, 1080, 1081, 1084, 1130, 910, 353, 315, 6578, 5188, + 5230, 5272, 689, 1139, 895, 1085, 1090, 1119, 1160, 5314, + + 5356, 1226, 1242, 1120, 1152, 1164, 1207, 1208, 1210, 1219, + 1234, 1327, 1287, 1316, 1345, 1388, 5398, 1263, 1225, 1116, + 1211, 252, 1247, 1243, 1248, 1363, 6578, 1428, 5440, 1449, + 5501, 242, 1310, 1318, 1329, 856, 180, 813, 1454, 5562, + 1491, 5604, 148, 1357, 1326, 1061, 1370, 1531, 5646, 5688, + 1344, 1374, 1427, 1375, 5730, 5772, 1453, 1456, 135, 1458, + 5814, 5856, 1457, 97, 1183, 955, 5898, 1552, 1490, 91, + 1408, 1557, 1373, 1409, 1412, 1455, 78, 1530, 1522, 39, + 6578, 5959, 5964, 5977, 5982, 5987, 5994, 6004, 6017, 758, + 6022, 6032, 6045, 6059, 362, 6064, 6074, 6079, 6089, 6099, + + 6103, 798, 6112, 6125, 6138, 6152, 6166, 6176, 6186, 6191, + 6203, 799, 6217, 957, 6222, 6234, 6247, 1071, 6261, 1086, + 6266, 6278, 6291, 6304, 6317, 6330, 1087, 6335, 6348, 1179, + 6353, 6365, 6378, 6391, 6404, 6417, 6430, 6435, 6448, 1183, + 6453, 6465, 6478, 6491, 6504, 6517, 1189, 1223, 6530, 6543, + 6553, 6563 } ; -static yyconst short int yy_def[520] = +static yyconst flex_int16_t yy_def[553] = { 0, 481, 1, 1, 1, 1, 1, 481, 481, 481, 481, 481, 482, 483, 481, 484, 481, 481, 485, 481, 481, - 481, 481, 486, 487, 481, 488, 488, 488, 481, 481, - 481, 488, 488, 488, 481, 488, 481, 481, 481, 482, - 481, 489, 483, 481, 490, 491, 491, 481, 484, 492, - 481, 481, 481, 481, 487, 488, 488, 488, 21, 493, - 481, 494, 481, 21, 495, 496, 496, 496, 496, 496, + 481, 481, 486, 487, 487, 487, 488, 481, 481, 481, + 481, 487, 487, 487, 481, 487, 481, 481, 481, 482, + 481, 489, 483, 490, 491, 491, 492, 481, 484, 493, + 481, 481, 481, 481, 487, 487, 487, 488, 21, 494, + 481, 495, 481, 21, 496, 496, 496, 496, 496, 496, + 496, 496, 496, 496, 496, 496, 496, 496, 497, 496, + 481, 486, 498, 498, 498, 498, 498, 498, 498, 499, + 481, 487, 500, 481, 487, 487, 501, 487, 487, 487, + + 481, 481, 481, 487, 487, 487, 487, 481, 482, 482, + 482, 482, 489, 502, 491, 491, 503, 491, 116, 504, + 504, 504, 504, 505, 481, 487, 506, 507, 496, 508, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, - 481, 486, 497, 498, 498, 498, 498, 498, 498, 498, - 488, 488, 481, 481, 488, 499, 481, 488, 488, 481, - - 488, 481, 481, 488, 488, 488, 488, 481, 482, 482, - 482, 482, 489, 481, 491, 47, 491, 500, 47, 484, - 484, 484, 484, 492, 481, 488, 493, 501, 496, 496, - 496, 502, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, - 481, 498, 498, 498, 498, 503, 498, 498, 498, 498, - 498, 498, 92, 488, 92, 481, 488, 488, 504, 481, - 488, 488, 488, 488, 488, 481, 482, 112, 481, 116, - 491, 116, 47, 484, 123, 488, 505, 481, 130, 496, - 130, 496, 496, 496, 496, 496, 496, 496, 496, 481, - - 498, 154, 498, 154, 498, 498, 498, 498, 498, 498, - 92, 165, 481, 481, 506, 481, 481, 507, 488, 481, - 112, 481, 116, 182, 47, 123, 488, 505, 501, 130, - 191, 496, 496, 496, 498, 154, 204, 498, 498, 498, - 498, 498, 498, 92, 165, 481, 508, 481, 481, 481, - 507, 507, 509, 510, 481, 511, 481, 112, 481, 116, - 182, 47, 123, 488, 130, 191, 496, 498, 154, 204, - 498, 498, 498, 498, 498, 92, 165, 481, 512, 481, - 481, 481, 481, 481, 509, 481, 513, 510, 514, 507, - 507, 507, 507, 507, 511, 481, 112, 481, 116, 182, - - 491, 123, 488, 130, 191, 498, 154, 204, 498, 498, - 498, 498, 488, 165, 481, 515, 481, 481, 481, 481, - 481, 481, 481, 509, 509, 509, 509, 513, 510, 510, - 510, 510, 514, 294, 481, 112, 491, 182, 123, 488, - 496, 191, 498, 498, 204, 498, 498, 498, 488, 481, - 481, 481, 481, 481, 481, 481, 481, 509, 509, 509, - 327, 510, 510, 510, 332, 294, 481, 491, 488, 496, - 498, 498, 498, 498, 481, 327, 332, 294, 481, 488, - 498, 498, 498, 498, 498, 498, 498, 498, 481, 327, - 332, 294, 488, 498, 498, 498, 498, 498, 498, 327, - - 332, 294, 516, 498, 498, 498, 498, 498, 498, 498, - 498, 327, 332, 516, 414, 517, 518, 498, 498, 498, - 498, 498, 498, 498, 498, 518, 518, 481, 481, 518, - 519, 498, 498, 498, 498, 498, 498, 498, 518, 427, - 518, 427, 498, 498, 498, 498, 498, 427, 518, 442, - 498, 498, 498, 498, 427, 442, 498, 498, 498, 498, - 427, 442, 498, 498, 498, 498, 427, 442, 498, 498, - 498, 442, 498, 498, 498, 498, 498, 498, 498, 498, + 481, 498, 498, 509, 498, 498, 498, 498, 498, 498, + 498, 498, 487, 100, 481, 487, 487, 510, 481, 487, + 100, 487, 487, 487, 487, 481, 511, 511, 512, 116, + 491, 116, 116, 504, 504, 487, 513, 481, 496, 149, + 496, 496, 496, 496, 496, 496, 496, 149, 496, 481, + + 498, 498, 162, 498, 498, 498, 498, 498, 498, 162, + 100, 481, 514, 515, 481, 481, 516, 100, 487, 481, + 517, 518, 116, 116, 116, 504, 487, 513, 519, 149, + 496, 496, 149, 496, 498, 162, 498, 498, 498, 498, + 498, 498, 162, 100, 520, 521, 481, 481, 481, 522, + 522, 523, 524, 481, 525, 100, 481, 526, 527, 528, + 528, 261, 529, 100, 149, 149, 149, 498, 162, 498, + 498, 498, 498, 498, 162, 100, 530, 531, 481, 481, + 481, 481, 481, 523, 481, 532, 533, 534, 535, 535, + 535, 535, 535, 536, 100, 481, 537, 481, 538, 538, + + 300, 539, 100, 149, 304, 498, 162, 498, 498, 498, + 498, 162, 100, 540, 541, 481, 481, 481, 481, 481, + 481, 481, 542, 542, 542, 542, 543, 544, 544, 544, + 544, 545, 546, 303, 481, 537, 300, 301, 539, 303, + 304, 304, 498, 162, 498, 498, 498, 498, 303, 547, + 481, 481, 481, 481, 481, 481, 481, 542, 542, 542, + 326, 544, 544, 544, 331, 546, 481, 338, 303, 342, + 498, 498, 498, 498, 548, 326, 331, 366, 481, 303, + 498, 498, 498, 498, 498, 498, 498, 498, 481, 326, + 331, 366, 303, 498, 498, 498, 498, 498, 498, 326, + + 331, 546, 549, 498, 498, 498, 498, 498, 498, 498, + 498, 542, 544, 549, 549, 550, 551, 498, 498, 498, + 498, 498, 498, 498, 498, 481, 481, 550, 552, 550, + 550, 498, 498, 498, 498, 498, 498, 498, 550, 431, + 550, 431, 498, 498, 498, 498, 498, 550, 440, 431, + 498, 498, 498, 498, 440, 431, 498, 498, 498, 498, + 440, 431, 498, 498, 498, 498, 440, 550, 498, 498, + 498, 550, 498, 498, 498, 498, 498, 498, 498, 498, 0, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481 + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481 } ; -static yyconst short int yy_nxt[2462] = +static yyconst flex_int16_t yy_nxt[6664] = { 0, 8, 9, 10, 9, 9, 9, 11, 12, 13, 14, 8, 8, 15, 8, 8, 16, 17, 18, 19, 20, - 21, 8, 22, 8, 8, 8, 23, 24, 25, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 27, 26, 26, 26, 26, 26, 26, - 28, 26, 26, 26, 26, 26, 8, 29, 30, 26, - 31, 156, 31, 37, 37, 37, 37, 37, 41, 32, - 52, 32, 37, 37, 37, 37, 37, 38, 38, 38, - 38, 38, 33, 34, 33, 34, 43, 132, 42, 44, - 41, 97, 97, 53, 135, 35, 45, 35, 94, 47, - - 47, 47, 47, 47, 47, 50, 54, 94, 82, 52, - 97, 98, 96, 41, 39, 41, 55, 94, 83, 156, - 100, 96, 52, 85, 156, 94, 86, 161, 50, 87, - 94, 96, 57, 88, 89, 42, 90, 481, 99, 96, - 481, 58, 61, 92, 96, 53, 132, 45, 133, 62, - 63, 101, 64, 92, 92, 92, 92, 92, 92, 65, - 104, 66, 67, 67, 68, 69, 70, 67, 71, 72, - 73, 67, 74, 67, 75, 76, 67, 77, 67, 78, - 79, 80, 67, 67, 67, 67, 67, 67, 94, 94, - 94, 67, 97, 98, 37, 37, 37, 37, 37, 481, - - 114, 59, 96, 96, 96, 38, 38, 38, 38, 38, - 114, 114, 114, 114, 114, 114, 116, 156, 106, 94, - 105, 107, 97, 98, 67, 119, 116, 116, 116, 116, - 116, 116, 118, 96, 158, 119, 119, 119, 119, 119, - 119, 92, 39, 40, 40, 40, 109, 94, 132, 111, - 132, 92, 92, 92, 92, 92, 92, 132, 156, 196, - 128, 96, 112, 134, 188, 160, 132, 132, 126, 113, - 138, 132, 112, 112, 112, 112, 112, 112, 49, 49, - 49, 120, 136, 132, 132, 139, 148, 140, 130, 122, - 149, 132, 156, 137, 141, 97, 144, 123, 130, 130, - - 130, 130, 130, 130, 124, 132, 132, 123, 123, 123, - 123, 123, 123, 132, 150, 481, 132, 154, 145, 156, - 142, 156, 94, 156, 162, 83, 143, 154, 154, 154, - 154, 154, 154, 157, 159, 146, 96, 132, 156, 147, - 194, 40, 94, 156, 195, 201, 41, 165, 41, 41, - 152, 91, 91, 91, 91, 91, 96, 165, 165, 165, - 165, 165, 165, 94, 94, 94, 42, 156, 42, 42, - 163, 167, 94, 94, 94, 94, 41, 96, 96, 96, - 163, 163, 163, 163, 163, 163, 96, 96, 96, 96, - 132, 50, 169, 172, 94, 132, 132, 170, 41, 193, - - 171, 168, 169, 169, 169, 169, 169, 169, 96, 175, - 173, 49, 132, 50, 192, 156, 199, 156, 197, 41, - 179, 41, 174, 110, 177, 177, 177, 110, 132, 41, - 179, 179, 179, 179, 179, 179, 50, 156, 156, 42, - 205, 156, 178, 198, 208, 235, 156, 156, 94, 42, - 156, 156, 178, 178, 178, 178, 178, 178, 40, 40, - 40, 109, 96, 206, 111, 209, 186, 156, 182, 207, - 229, 94, 213, 406, 188, 156, 210, 112, 182, 182, - 182, 182, 182, 182, 113, 96, 96, 112, 112, 112, - 112, 112, 112, 115, 115, 115, 115, 115, 214, 156, - - 156, 132, 196, 183, 132, 218, 216, 94, 232, 132, - 233, 156, 180, 183, 183, 183, 183, 183, 183, 96, - 213, 96, 180, 180, 180, 180, 180, 180, 121, 184, - 184, 184, 121, 239, 96, 156, 156, 156, 191, 41, - 156, 94, 156, 242, 243, 274, 241, 185, 191, 191, - 191, 191, 191, 191, 50, 96, 41, 185, 185, 185, - 185, 185, 185, 49, 49, 49, 120, 94, 272, 214, - 379, 50, 214, 204, 122, 132, 94, 248, 156, 214, - 280, 96, 123, 204, 204, 204, 204, 204, 204, 124, - 96, 234, 123, 123, 123, 123, 123, 123, 129, 129, - - 129, 129, 129, 227, 156, 156, 156, 156, 211, 156, - 347, 156, 156, 309, 348, 306, 447, 189, 211, 211, - 211, 211, 211, 211, 132, 238, 240, 189, 189, 189, - 189, 189, 189, 153, 153, 153, 153, 153, 156, 94, - 94, 132, 156, 156, 156, 156, 167, 94, 373, 374, - 310, 268, 202, 96, 96, 156, 267, 156, 156, 156, - 94, 96, 202, 202, 202, 202, 202, 202, 164, 164, - 164, 164, 164, 156, 96, 286, 271, 273, 221, 275, - 387, 219, 367, 303, 357, 264, 356, 212, 221, 221, - 221, 221, 221, 221, 222, 287, 286, 212, 212, 212, - - 212, 212, 212, 223, 222, 222, 222, 222, 222, 222, - 156, 289, 156, 223, 223, 223, 223, 223, 223, 181, - 181, 181, 181, 181, 371, 214, 286, 214, 156, 225, - 312, 399, 311, 317, 156, 352, 355, 354, 224, 225, - 225, 225, 225, 225, 225, 226, 287, 286, 224, 224, - 224, 224, 224, 224, 230, 226, 226, 226, 226, 226, - 226, 286, 289, 156, 230, 230, 230, 230, 230, 230, - 190, 190, 190, 190, 190, 284, 284, 284, 284, 284, - 236, 287, 445, 322, 322, 322, 322, 322, 255, 231, - 236, 236, 236, 236, 236, 236, 323, 156, 156, 231, - - 231, 231, 231, 231, 231, 203, 203, 203, 203, 203, - 322, 322, 322, 322, 322, 244, 156, 353, 94, 343, - 346, 436, 340, 323, 237, 244, 244, 244, 244, 244, - 244, 245, 96, 286, 237, 237, 237, 237, 237, 237, - 246, 245, 245, 245, 245, 245, 245, 156, 289, 156, - 246, 246, 246, 246, 246, 246, 251, 251, 251, 251, - 251, 258, 253, 156, 94, 286, 286, 254, 432, 255, - 388, 258, 258, 258, 258, 258, 258, 259, 96, 285, - 156, 118, 256, 260, 286, 287, 287, 259, 259, 259, - 259, 259, 259, 260, 260, 260, 260, 260, 260, 261, - - 156, 156, 369, 397, 287, 262, 335, 394, 395, 261, - 261, 261, 261, 261, 261, 262, 262, 262, 262, 262, - 262, 263, 115, 115, 115, 115, 115, 265, 156, 286, - 286, 263, 263, 263, 263, 263, 263, 265, 265, 265, - 265, 265, 265, 266, 289, 289, 156, 156, 118, 269, - 435, 424, 407, 266, 266, 266, 266, 266, 266, 269, - 269, 269, 269, 269, 269, 270, 129, 129, 129, 129, - 129, 276, 321, 156, 94, 270, 270, 270, 270, 270, - 270, 276, 276, 276, 276, 276, 276, 277, 96, 156, - 320, 380, 132, 278, 156, 446, 396, 277, 277, 277, - - 277, 277, 277, 278, 278, 278, 278, 278, 278, 251, - 251, 251, 251, 251, 434, 253, 319, 156, 403, 156, - 254, 288, 255, 284, 284, 284, 284, 284, 297, 481, - 94, 286, 96, 408, 481, 256, 255, 459, 297, 297, - 297, 297, 297, 297, 96, 156, 289, 156, 156, 256, - 284, 284, 284, 284, 290, 398, 292, 156, 419, 409, - 298, 292, 292, 293, 393, 420, 318, 156, 156, 294, - 298, 298, 298, 298, 298, 298, 295, 299, 421, 294, - 294, 294, 294, 294, 294, 300, 156, 299, 299, 299, - 299, 299, 299, 301, 132, 300, 300, 300, 300, 300, - - 300, 302, 433, 301, 301, 301, 301, 301, 301, 304, - 296, 302, 302, 302, 302, 302, 302, 305, 283, 304, - 304, 304, 304, 304, 304, 307, 282, 305, 305, 305, - 305, 305, 305, 308, 281, 307, 307, 307, 307, 307, - 307, 313, 156, 308, 308, 308, 308, 308, 308, 314, - 132, 313, 313, 313, 313, 313, 313, 315, 156, 314, - 314, 314, 314, 314, 314, 422, 156, 315, 315, 315, - 315, 315, 315, 285, 285, 285, 324, 156, 156, 326, - 410, 156, 404, 156, 474, 405, 411, 284, 284, 284, - 284, 284, 327, 481, 156, 418, 156, 454, 481, 328, - - 255, 423, 327, 327, 327, 327, 327, 327, 288, 288, - 288, 329, 156, 256, 156, 438, 465, 156, 132, 331, - 284, 284, 284, 284, 284, 425, 481, 332, 156, 156, - 156, 481, 451, 255, 333, 437, 443, 332, 332, 332, - 332, 332, 332, 229, 257, 156, 256, 284, 284, 284, - 284, 284, 156, 481, 156, 444, 156, 470, 481, 471, - 255, 284, 284, 284, 284, 284, 336, 481, 452, 156, - 475, 453, 481, 256, 255, 156, 336, 336, 336, 336, - 336, 336, 428, 428, 428, 428, 428, 256, 290, 290, - 290, 290, 290, 156, 481, 429, 466, 250, 337, 481, - - 457, 255, 153, 153, 153, 153, 153, 334, 337, 337, - 337, 337, 337, 337, 256, 249, 156, 334, 334, 334, - 334, 334, 334, 284, 284, 284, 284, 290, 156, 292, - 156, 156, 132, 338, 292, 292, 293, 458, 460, 156, - 132, 132, 294, 338, 338, 338, 338, 338, 338, 295, - 339, 132, 294, 294, 294, 294, 294, 294, 341, 469, - 339, 339, 339, 339, 339, 339, 342, 156, 341, 341, - 341, 341, 341, 341, 344, 132, 342, 342, 342, 342, - 342, 342, 345, 229, 344, 344, 344, 344, 344, 344, - 473, 156, 345, 345, 345, 345, 345, 345, 91, 91, - - 91, 91, 91, 349, 481, 481, 481, 481, 481, 156, - 94, 463, 480, 349, 349, 349, 349, 349, 349, 350, - 481, 156, 156, 479, 96, 118, 220, 478, 217, 350, - 350, 350, 350, 350, 350, 358, 322, 322, 322, 358, - 166, 286, 464, 362, 322, 322, 322, 362, 359, 156, - 156, 156, 156, 200, 286, 132, 363, 476, 477, 132, - 366, 287, 325, 360, 360, 360, 325, 132, 286, 289, - 366, 366, 366, 366, 366, 366, 358, 322, 322, 322, - 358, 361, 286, 181, 181, 181, 181, 181, 287, 359, - 132, 361, 361, 361, 361, 361, 361, 285, 285, 285, - - 324, 132, 287, 326, 132, 132, 132, 40, 132, 118, - 132, 190, 190, 190, 190, 190, 327, 40, 40, 40, - 40, 40, 40, 328, 132, 132, 327, 327, 327, 327, - 327, 327, 330, 364, 364, 364, 330, 132, 128, 118, - 118, 176, 368, 286, 166, 203, 203, 203, 203, 203, - 156, 365, 368, 368, 368, 368, 368, 368, 289, 151, - 132, 365, 365, 365, 365, 365, 365, 288, 288, 288, - 329, 156, 132, 59, 65, 61, 128, 49, 331, 125, - 118, 108, 103, 102, 93, 81, 332, 49, 49, 49, - 49, 49, 49, 333, 370, 60, 332, 332, 332, 332, - - 332, 332, 372, 59, 370, 370, 370, 370, 370, 370, - 51, 48, 372, 372, 372, 372, 372, 372, 164, 164, - 164, 164, 164, 375, 481, 36, 36, 481, 481, 481, - 94, 481, 481, 375, 375, 375, 375, 375, 375, 376, - 481, 481, 481, 481, 96, 481, 481, 481, 481, 376, - 376, 376, 376, 376, 376, 362, 322, 322, 322, 362, - 377, 481, 481, 481, 481, 481, 286, 481, 363, 481, - 377, 377, 377, 377, 377, 377, 378, 481, 481, 156, - 481, 289, 481, 481, 481, 381, 378, 378, 378, 378, - 378, 378, 382, 481, 383, 389, 481, 481, 481, 384, - - 385, 390, 481, 386, 481, 389, 389, 389, 389, 389, - 389, 390, 390, 390, 390, 390, 390, 391, 481, 481, - 481, 481, 481, 392, 481, 481, 481, 391, 391, 391, - 391, 391, 391, 392, 392, 392, 392, 392, 392, 400, - 481, 481, 481, 481, 481, 401, 481, 481, 481, 400, - 400, 400, 400, 400, 400, 401, 401, 401, 401, 401, - 401, 402, 481, 481, 481, 481, 481, 412, 481, 481, - 481, 402, 402, 402, 402, 402, 402, 412, 412, 412, - 412, 412, 412, 413, 481, 481, 481, 481, 481, 252, - 481, 481, 481, 413, 413, 413, 413, 413, 413, 252, - - 252, 252, 252, 252, 252, 414, 414, 414, 414, 414, - 481, 481, 285, 481, 481, 481, 481, 481, 481, 481, - 481, 415, 285, 285, 285, 285, 285, 285, 288, 481, - 481, 416, 414, 414, 414, 414, 414, 481, 288, 288, - 288, 288, 288, 288, 481, 481, 481, 481, 415, 427, - 481, 481, 428, 428, 428, 428, 428, 481, 416, 427, - 427, 427, 427, 427, 427, 429, 428, 428, 428, 428, - 428, 481, 428, 428, 428, 428, 428, 481, 431, 429, - 481, 481, 481, 481, 481, 429, 481, 481, 481, 442, - 481, 481, 431, 439, 439, 439, 439, 439, 431, 442, - - 442, 442, 442, 442, 442, 481, 429, 428, 428, 428, - 428, 428, 440, 481, 481, 481, 481, 481, 481, 431, - 429, 481, 440, 440, 440, 440, 440, 440, 448, 481, - 481, 481, 481, 431, 481, 481, 481, 481, 448, 448, - 448, 448, 448, 448, 428, 428, 428, 428, 428, 455, - 481, 481, 428, 428, 428, 428, 428, 429, 481, 455, - 455, 455, 455, 455, 455, 429, 481, 481, 481, 456, - 431, 449, 449, 449, 449, 449, 481, 481, 431, 456, - 456, 456, 456, 456, 456, 481, 481, 481, 481, 481, - 450, 481, 481, 481, 481, 481, 461, 481, 481, 481, - - 450, 450, 450, 450, 450, 450, 461, 461, 461, 461, - 461, 461, 462, 481, 481, 481, 481, 481, 467, 481, - 481, 481, 462, 462, 462, 462, 462, 462, 467, 467, - 467, 467, 467, 467, 468, 481, 481, 481, 481, 481, - 430, 481, 481, 481, 468, 468, 468, 468, 468, 468, - 430, 430, 430, 430, 430, 430, 472, 481, 481, 481, - 481, 481, 430, 481, 481, 481, 472, 472, 472, 472, - 472, 472, 430, 430, 430, 430, 430, 430, 40, 481, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 46, - 46, 481, 46, 46, 49, 481, 49, 49, 49, 49, - - 49, 49, 49, 49, 49, 56, 56, 481, 56, 56, - 84, 481, 481, 84, 84, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 95, 481, 95, 95, 481, 95, - 95, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 115, 115, 115, 115, 115, 115, 115, 115, - 115, 117, 117, 481, 117, 117, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 67, - 67, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 131, 131, 481, 131, 131, 153, 153, 153, 153, 153, - - 153, 153, 153, 153, 155, 155, 481, 155, 155, 164, - 164, 164, 164, 164, 164, 164, 164, 164, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 215, 215, 215, - 481, 215, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 247, 247, 247, 481, 247, 252, - 252, 252, 252, 481, 252, 252, 252, 252, 252, 252, - 279, 279, 279, 481, 279, 285, 481, 285, 285, 285, - - 285, 285, 285, 285, 285, 285, 288, 481, 288, 288, - 288, 288, 288, 288, 288, 288, 288, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 316, 316, - 316, 481, 316, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 330, 330, 330, 330, 330, 330, - 330, 330, 330, 330, 330, 351, 351, 351, 481, 351, - 417, 417, 417, 481, 481, 481, 417, 481, 481, 417, - 417, 426, 426, 426, 426, 426, 426, 426, 426, 426, - 430, 430, 430, 481, 481, 430, 430, 430, 481, 430, - 430, 441, 441, 441, 441, 441, 441, 441, 441, 441, - - 7, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481 + 21, 8, 22, 8, 8, 8, 23, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 25, 24, 24, 24, 24, 24, 24, 26, 24, 24, + 24, 24, 24, 27, 28, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 25, 24, + 24, 24, 24, 24, 24, 26, 24, 24, 24, 24, + 24, 8, 29, 30, 24, 31, 36, 31, 36, 41, + 41, 32, 154, 32, 37, 37, 37, 37, 37, 37, + + 37, 37, 37, 37, 33, 34, 33, 34, 38, 38, + 38, 38, 38, 91, 91, 36, 54, 36, 52, 52, + 32, 91, 32, 91, 94, 95, 94, 95, 108, 41, + 50, 154, 33, 34, 33, 34, 42, 135, 53, 56, + 91, 104, 39, 41, 154, 35, 130, 35, 57, 96, + 154, 105, 58, 93, 93, 91, 108, 481, 52, 91, + 481, 93, 97, 93, 91, 135, 53, 56, 107, 104, + 50, 39, 43, 94, 94, 44, 57, 96, 53, 105, + 93, 132, 45, 45, 45, 45, 45, 45, 154, 42, + 98, 106, 137, 47, 147, 93, 107, 159, 128, 93, + + 130, 154, 188, 130, 93, 130, 53, 130, 47, 150, + 132, 45, 45, 45, 45, 45, 45, 61, 98, 106, + 137, 91, 147, 154, 62, 63, 159, 64, 37, 37, + 37, 37, 37, 154, 65, 65, 66, 67, 68, 65, + 69, 70, 71, 65, 72, 65, 73, 74, 65, 75, + 65, 76, 77, 78, 65, 65, 65, 65, 65, 65, + 79, 93, 80, 65, 65, 66, 67, 68, 65, 69, + 70, 71, 72, 65, 73, 74, 65, 75, 65, 76, + 77, 78, 65, 65, 65, 65, 65, 65, 131, 91, + 138, 65, 82, 136, 130, 154, 38, 38, 38, 38, + + 38, 481, 130, 59, 84, 154, 160, 85, 91, 130, + 86, 94, 95, 133, 87, 88, 131, 89, 155, 138, + 91, 136, 156, 65, 134, 94, 141, 130, 90, 93, + 39, 41, 154, 84, 154, 160, 85, 154, 126, 86, + 145, 133, 87, 88, 146, 89, 100, 155, 93, 176, + 156, 65, 134, 100, 100, 100, 100, 100, 100, 39, + 93, 229, 130, 481, 139, 188, 130, 126, 154, 145, + 140, 91, 50, 146, 65, 65, 142, 176, 130, 158, + 91, 41, 100, 100, 100, 100, 100, 100, 40, 40, + 40, 109, 139, 143, 111, 152, 157, 144, 140, 90, + + 130, 154, 91, 194, 167, 142, 154, 112, 158, 166, + 154, 93, 91, 173, 112, 112, 112, 112, 112, 112, + 93, 143, 91, 152, 157, 144, 91, 42, 41, 40, + 91, 91, 167, 91, 41, 212, 130, 170, 166, 172, + 113, 173, 93, 112, 112, 112, 112, 112, 112, 116, + 220, 174, 93, 481, 213, 154, 116, 116, 116, 116, + 116, 116, 93, 41, 175, 170, 93, 481, 172, 91, + 93, 93, 357, 93, 42, 93, 191, 41, 220, 174, + 42, 192, 117, 195, 186, 116, 116, 116, 116, 116, + 116, 119, 175, 193, 130, 201, 130, 196, 119, 119, + + 119, 119, 119, 119, 50, 191, 130, 130, 213, 93, + 192, 130, 195, 186, 197, 217, 215, 154, 50, 204, + 194, 193, 41, 130, 201, 196, 205, 119, 119, 119, + 119, 119, 119, 49, 49, 49, 120, 199, 206, 154, + 91, 212, 197, 208, 122, 154, 207, 130, 204, 154, + 209, 271, 123, 130, 205, 93, 356, 154, 91, 123, + 123, 123, 123, 123, 123, 199, 206, 91, 42, 154, + 154, 208, 481, 91, 91, 207, 213, 355, 354, 209, + 93, 93, 41, 353, 247, 124, 231, 154, 123, 123, + 123, 123, 123, 123, 100, 154, 219, 227, 93, 232, + + 234, 100, 100, 100, 100, 100, 100, 93, 213, 130, + 237, 238, 130, 93, 93, 231, 279, 285, 154, 154, + 241, 285, 130, 50, 219, 227, 235, 232, 239, 234, + 100, 100, 100, 100, 100, 100, 149, 257, 237, 238, + 154, 240, 154, 149, 149, 149, 149, 149, 149, 241, + 117, 154, 267, 268, 272, 235, 239, 91, 288, 154, + 213, 285, 242, 154, 371, 257, 130, 286, 316, 154, + 240, 296, 149, 149, 149, 149, 149, 149, 162, 264, + 267, 268, 272, 273, 154, 162, 162, 162, 162, 162, + 162, 242, 250, 250, 250, 250, 250, 93, 252, 296, + + 154, 285, 403, 253, 285, 254, 92, 286, 264, 154, + 335, 285, 273, 270, 162, 162, 162, 162, 162, 162, + 164, 154, 309, 320, 319, 274, 308, 164, 164, 164, + 164, 164, 164, 154, 250, 250, 250, 250, 250, 335, + 252, 270, 288, 154, 255, 253, 346, 254, 154, 306, + 286, 309, 288, 274, 92, 308, 164, 164, 164, 164, + 164, 164, 99, 99, 99, 99, 99, 154, 114, 318, + 114, 311, 154, 310, 91, 346, 343, 347, 306, 213, + 154, 171, 154, 154, 367, 369, 255, 352, 171, 171, + 171, 171, 171, 171, 283, 283, 283, 283, 283, 311, + + 481, 310, 317, 154, 343, 481, 347, 254, 179, 222, + 179, 222, 367, 369, 93, 154, 379, 171, 171, 171, + 171, 171, 171, 110, 177, 177, 177, 110, 282, 41, + 283, 283, 283, 283, 283, 321, 321, 321, 321, 321, + 481, 447, 178, 254, 379, 285, 255, 373, 322, 178, + 178, 178, 178, 178, 178, 283, 283, 283, 283, 283, + 345, 321, 321, 321, 321, 321, 154, 154, 254, 281, + 447, 154, 280, 154, 322, 42, 373, 374, 178, 178, + 178, 178, 178, 178, 40, 40, 40, 109, 345, 130, + 111, 286, 130, 229, 92, 283, 283, 283, 283, 283, + + 481, 154, 446, 112, 380, 285, 374, 255, 254, 154, + 112, 112, 112, 112, 112, 112, 283, 283, 283, 283, + 283, 283, 283, 283, 283, 283, 481, 249, 481, 254, + 446, 285, 248, 380, 254, 154, 113, 399, 285, 112, + 112, 112, 112, 112, 112, 180, 406, 255, 154, 130, + 130, 286, 180, 180, 180, 180, 180, 180, 358, 321, + 321, 321, 358, 154, 285, 481, 399, 245, 255, 245, + 481, 359, 471, 255, 406, 285, 130, 286, 117, 288, + 285, 180, 180, 180, 180, 180, 180, 182, 130, 362, + 321, 321, 321, 362, 182, 182, 182, 182, 182, 182, + + 285, 130, 363, 99, 99, 99, 99, 99, 154, 229, + 286, 110, 177, 177, 177, 110, 288, 41, 117, 92, + 387, 288, 216, 182, 182, 182, 182, 182, 182, 118, + 118, 118, 118, 118, 163, 163, 163, 163, 163, 165, + 388, 288, 154, 121, 184, 184, 184, 121, 183, 387, + 92, 154, 154, 92, 41, 183, 183, 183, 183, 183, + 183, 200, 154, 42, 181, 181, 181, 181, 181, 388, + 161, 161, 161, 161, 161, 189, 189, 189, 189, 189, + 393, 259, 130, 259, 183, 183, 183, 183, 183, 183, + 121, 184, 184, 184, 121, 50, 277, 298, 277, 298, + + 130, 41, 453, 202, 202, 202, 202, 202, 393, 185, + 394, 395, 396, 130, 154, 407, 185, 185, 185, 185, + 185, 185, 154, 358, 321, 321, 321, 358, 408, 285, + 453, 397, 154, 154, 154, 130, 359, 154, 154, 394, + 395, 396, 50, 154, 407, 185, 185, 185, 185, 185, + 185, 49, 49, 49, 120, 154, 408, 409, 418, 397, + 434, 398, 122, 362, 321, 321, 321, 362, 404, 154, + 123, 405, 154, 154, 285, 286, 363, 123, 123, 123, + 123, 123, 123, 154, 130, 409, 418, 419, 434, 314, + 398, 314, 154, 350, 130, 350, 420, 404, 410, 375, + + 405, 375, 130, 124, 411, 154, 123, 123, 123, 123, + 123, 123, 190, 154, 130, 288, 419, 154, 130, 190, + 190, 190, 190, 190, 190, 420, 410, 289, 289, 289, + 289, 289, 411, 389, 470, 389, 154, 130, 435, 422, + 254, 423, 421, 414, 414, 414, 414, 414, 190, 190, + 190, 190, 190, 190, 148, 148, 148, 148, 148, 415, + 154, 154, 470, 154, 154, 433, 424, 435, 422, 425, + 423, 421, 154, 198, 437, 438, 436, 130, 154, 255, + 198, 198, 198, 198, 198, 198, 130, 154, 329, 364, + 364, 364, 329, 433, 424, 417, 154, 128, 425, 285, + + 154, 154, 117, 437, 438, 436, 130, 117, 432, 198, + 198, 198, 198, 198, 198, 203, 154, 414, 414, 414, + 414, 414, 203, 203, 203, 203, 203, 203, 324, 360, + 360, 360, 324, 415, 285, 169, 432, 165, 154, 151, + 288, 443, 130, 130, 59, 444, 481, 481, 481, 481, + 481, 203, 203, 203, 203, 203, 203, 161, 161, 161, + 161, 161, 481, 154, 426, 426, 426, 426, 426, 417, + 443, 154, 445, 452, 444, 457, 210, 427, 79, 154, + 286, 61, 154, 210, 210, 210, 210, 210, 210, 426, + 426, 426, 426, 426, 128, 125, 451, 154, 417, 117, + + 445, 452, 427, 103, 457, 458, 460, 102, 454, 154, + 154, 475, 210, 210, 210, 210, 210, 210, 163, 163, + 163, 163, 163, 154, 451, 101, 154, 154, 154, 426, + 426, 426, 426, 426, 458, 460, 454, 211, 474, 475, + 476, 429, 427, 477, 211, 211, 211, 211, 211, 211, + 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, + 81, 154, 154, 427, 60, 154, 59, 474, 427, 476, + 463, 459, 477, 211, 211, 211, 211, 211, 211, 218, + 154, 429, 51, 48, 478, 481, 218, 218, 218, 218, + 218, 218, 426, 426, 426, 426, 426, 481, 464, 459, + + 465, 469, 429, 466, 481, 427, 154, 429, 154, 154, + 154, 154, 481, 478, 481, 218, 218, 218, 218, 218, + 218, 110, 177, 177, 177, 110, 464, 41, 465, 469, + 481, 466, 426, 426, 426, 426, 426, 473, 481, 481, + 221, 481, 481, 154, 429, 427, 481, 221, 221, 221, + 221, 221, 221, 441, 441, 441, 441, 441, 448, 448, + 448, 448, 448, 481, 481, 473, 427, 480, 479, 481, + 481, 427, 481, 42, 481, 154, 221, 221, 221, 221, + 221, 221, 223, 154, 429, 481, 481, 481, 481, 223, + 223, 223, 223, 223, 223, 480, 479, 481, 481, 481, + + 481, 481, 481, 481, 481, 429, 481, 481, 481, 481, + 429, 481, 481, 481, 481, 481, 481, 481, 223, 223, + 223, 223, 223, 223, 181, 181, 181, 181, 181, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 224, 481, 481, 481, 481, 481, 481, + 224, 224, 224, 224, 224, 224, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 224, + 224, 224, 224, 224, 224, 118, 118, 118, 118, 118, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 225, 481, 481, 481, 481, 481, + 481, 225, 225, 225, 225, 225, 225, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 225, 225, 225, 225, 225, 225, 121, 184, 184, 184, + 121, 481, 481, 481, 481, 481, 481, 41, 481, 481, + 481, 481, 481, 481, 481, 226, 481, 481, 481, 481, + 481, 481, 226, 226, 226, 226, 226, 226, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 50, 481, + + 481, 226, 226, 226, 226, 226, 226, 189, 189, 189, + 189, 189, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 230, 481, 481, 481, + 481, 481, 481, 230, 230, 230, 230, 230, 230, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 230, 230, 230, 230, 230, 230, 233, 481, + 481, 481, 481, 481, 481, 233, 233, 233, 233, 233, + 233, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 233, 233, 233, 233, 233, 233, + 202, 202, 202, 202, 202, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 236, + 481, 481, 481, 481, 481, 481, 236, 236, 236, 236, + 236, 236, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 236, 236, 236, 236, 236, + 236, 243, 481, 481, 481, 481, 481, 481, 243, 243, + 243, 243, 243, 243, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 243, 243, 243, + 243, 243, 243, 163, 163, 163, 163, 163, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 244, 481, 481, 481, 481, 481, 481, 244, + 244, 244, 244, 244, 244, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 244, 244, + 244, 244, 244, 244, 256, 481, 481, 481, 481, 481, + 481, 256, 256, 256, 256, 256, 256, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 256, 256, 256, 256, 256, 256, 110, 177, 177, 177, + 110, 481, 41, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 258, 481, 481, 481, 481, + 481, 481, 258, 258, 258, 258, 258, 258, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 42, 481, + 481, 258, 258, 258, 258, 258, 258, 260, 481, 481, + 481, 481, 481, 481, 260, 260, 260, 260, 260, 260, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 260, 260, 260, 260, 260, 260, 181, + 181, 181, 181, 181, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 261, 481, + 481, 481, 481, 481, 481, 261, 261, 261, 261, 261, + 261, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 261, 261, 261, 261, 261, 261, + 118, 118, 118, 118, 118, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 262, + + 481, 481, 481, 481, 481, 481, 262, 262, 262, 262, + 262, 262, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 262, 262, 262, 262, 262, + 262, 121, 184, 184, 184, 121, 481, 481, 481, 481, + 481, 481, 41, 481, 481, 481, 481, 481, 481, 481, + 263, 481, 481, 481, 481, 481, 481, 263, 263, 263, + 263, 263, 263, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 50, 481, 481, 263, 263, 263, 263, + + 263, 263, 189, 189, 189, 189, 189, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 265, 481, 481, 481, 481, 481, 481, 265, 265, + 265, 265, 265, 265, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 265, 265, 265, + 265, 265, 265, 266, 481, 481, 481, 481, 481, 481, + 266, 266, 266, 266, 266, 266, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 266, + + 266, 266, 266, 266, 266, 202, 202, 202, 202, 202, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 269, 481, 481, 481, 481, 481, + 481, 269, 269, 269, 269, 269, 269, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 269, 269, 269, 269, 269, 269, 275, 481, 481, 481, + 481, 481, 481, 275, 275, 275, 275, 275, 275, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 275, 275, 275, 275, 275, 275, 163, 163, + 163, 163, 163, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 276, 481, 481, + 481, 481, 481, 481, 276, 276, 276, 276, 276, 276, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 276, 276, 276, 276, 276, 276, 283, + 283, 283, 283, 289, 481, 291, 481, 481, 481, 481, + 291, 291, 292, 481, 481, 481, 481, 481, 293, 481, + 481, 481, 481, 481, 481, 293, 293, 293, 293, 293, + + 293, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 294, 481, 481, 293, 293, 293, 293, 293, 293, + 295, 481, 481, 481, 481, 481, 481, 295, 295, 295, + 295, 295, 295, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 295, 295, 295, 295, + 295, 295, 110, 177, 177, 177, 110, 481, 41, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 297, 481, 481, 481, 481, 481, 481, 297, 297, + + 297, 297, 297, 297, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 42, 481, 481, 297, 297, 297, + 297, 297, 297, 299, 481, 481, 481, 481, 481, 481, + 299, 299, 299, 299, 299, 299, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 117, 481, 481, 299, + 299, 299, 299, 299, 299, 181, 181, 181, 181, 181, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 300, 481, 481, 481, 481, 481, + + 481, 300, 300, 300, 300, 300, 300, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 117, 481, 481, + 300, 300, 300, 300, 300, 300, 118, 118, 118, 118, + 118, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 301, 481, 481, 481, 481, + 481, 481, 301, 301, 301, 301, 301, 301, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 301, 301, 301, 301, 301, 301, 121, 184, 184, + + 184, 121, 481, 481, 481, 481, 481, 481, 41, 481, + 481, 481, 481, 481, 481, 481, 302, 481, 481, 481, + 481, 481, 481, 302, 302, 302, 302, 302, 302, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 50, + 481, 481, 302, 302, 302, 302, 302, 302, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 92, 481, 481, + 481, 481, 481, 481, 92, 92, 92, 92, 92, 92, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 303, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 92, 92, 92, 92, 92, 92, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 303, 189, 189, 189, 189, 189, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 304, 481, 481, 481, 481, 481, 481, 304, 304, + 304, 304, 304, 304, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 304, 304, 304, + 304, 304, 304, 305, 481, 481, 481, 481, 481, 481, + + 305, 305, 305, 305, 305, 305, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 305, + 305, 305, 305, 305, 305, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 129, 481, 481, 481, 481, 481, + 481, 129, 129, 129, 129, 129, 129, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 129, 129, 129, 129, 129, 129, 202, 202, 202, 202, + + 202, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 307, 481, 481, 481, 481, + 481, 481, 307, 307, 307, 307, 307, 307, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 307, 307, 307, 307, 307, 307, 312, 481, 481, + 481, 481, 481, 481, 312, 312, 312, 312, 312, 312, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 312, 312, 312, 312, 312, 312, 163, + + 163, 163, 163, 163, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 313, 481, + 481, 481, 481, 481, 481, 313, 313, 313, 313, 313, + 313, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 313, 313, 313, 313, 313, 313, + 284, 284, 284, 323, 481, 481, 325, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 326, + 481, 481, 481, 481, 481, 481, 326, 326, 326, 326, + 326, 326, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 327, 481, 481, 326, 326, 326, 326, 326, + 326, 287, 287, 287, 328, 481, 481, 481, 481, 481, + 481, 481, 330, 481, 481, 481, 481, 481, 481, 481, + 331, 481, 481, 481, 481, 481, 481, 331, 331, 331, + 331, 331, 331, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 332, 481, 481, 331, 331, 331, 331, + 331, 331, 289, 289, 289, 289, 289, 481, 481, 481, + 481, 481, 481, 481, 481, 254, 481, 481, 481, 481, + + 481, 333, 481, 481, 481, 481, 481, 481, 333, 333, + 333, 333, 333, 333, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 255, 481, 481, 333, 333, 333, + 333, 333, 333, 283, 283, 283, 283, 289, 481, 291, + 481, 481, 481, 481, 291, 291, 292, 481, 481, 481, + 481, 481, 293, 481, 481, 481, 481, 481, 481, 293, + 293, 293, 293, 293, 293, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 294, 481, 481, 293, 293, + + 293, 293, 293, 293, 334, 481, 481, 481, 481, 481, + 481, 334, 334, 334, 334, 334, 334, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 334, 334, 334, 334, 334, 334, 110, 177, 177, 177, + 110, 481, 41, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 336, 481, 481, 481, 481, + 481, 481, 336, 336, 336, 336, 336, 336, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 42, 481, + + 481, 336, 336, 336, 336, 336, 336, 181, 181, 181, + 181, 181, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 337, 481, 481, 481, + 481, 481, 481, 337, 337, 337, 337, 337, 337, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 117, + 481, 481, 337, 337, 337, 337, 337, 337, 118, 118, + 118, 118, 118, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 338, 481, 481, + 481, 481, 481, 481, 338, 338, 338, 338, 338, 338, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 338, 338, 338, 338, 338, 338, 121, + 184, 184, 184, 121, 481, 481, 481, 481, 481, 481, + 41, 481, 481, 481, 481, 481, 481, 481, 339, 481, + 481, 481, 481, 481, 481, 339, 339, 339, 339, 339, + 339, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 50, 481, 481, 339, 339, 339, 339, 339, 339, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 340, 481, 481, 92, + 481, 481, 481, 481, 481, 481, 92, 92, 92, 92, + 92, 92, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 92, 92, 92, 92, 92, + 92, 189, 189, 189, 189, 189, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 341, 481, 481, 481, 481, 481, 481, 341, 341, 341, + 341, 341, 341, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 341, 341, 341, 341, + 341, 341, 148, 148, 148, 148, 148, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 342, 481, 481, 481, 481, 481, 481, 342, 342, + 342, 342, 342, 342, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 342, 342, 342, + 342, 342, 342, 202, 202, 202, 202, 202, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 344, 481, 481, 481, 481, 481, 481, 344, + + 344, 344, 344, 344, 344, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 344, 344, + 344, 344, 344, 344, 348, 481, 481, 481, 481, 481, + 481, 348, 348, 348, 348, 348, 348, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 348, 348, 348, 348, 348, 348, 163, 163, 163, 163, + 163, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 349, 481, 481, 481, 481, + + 481, 481, 349, 349, 349, 349, 349, 349, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 349, 349, 349, 349, 349, 349, 324, 360, 360, + 360, 324, 481, 285, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 361, 481, 481, 481, + 481, 481, 481, 361, 361, 361, 361, 361, 361, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 286, + 481, 481, 361, 361, 361, 361, 361, 361, 284, 284, + + 284, 323, 481, 481, 325, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 326, 481, 481, + 481, 481, 481, 481, 326, 326, 326, 326, 326, 326, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 327, 481, 481, 326, 326, 326, 326, 326, 326, 329, + 364, 364, 364, 329, 481, 481, 481, 481, 481, 481, + 285, 481, 481, 481, 481, 481, 481, 481, 365, 481, + 481, 481, 481, 481, 481, 365, 365, 365, 365, 365, + 365, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 288, 481, 481, 365, 365, 365, 365, 365, 365, + 287, 287, 287, 328, 481, 481, 481, 481, 481, 481, + 481, 330, 481, 481, 481, 481, 481, 481, 481, 331, + 481, 481, 481, 481, 481, 481, 331, 331, 331, 331, + 331, 331, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 332, 481, 481, 331, 331, 331, 331, 331, + 331, 289, 289, 289, 289, 289, 481, 481, 481, 481, + 481, 481, 481, 481, 254, 481, 481, 481, 481, 481, + + 366, 481, 481, 481, 481, 481, 481, 366, 366, 366, + 366, 366, 366, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 255, 481, 481, 366, 366, 366, 366, + 366, 366, 368, 481, 481, 481, 481, 481, 481, 368, + 368, 368, 368, 368, 368, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 368, 368, + 368, 368, 368, 368, 115, 481, 481, 481, 481, 481, + 481, 115, 115, 115, 115, 115, 115, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 115, 115, 115, 115, 115, 115, 370, 481, 481, 481, + 481, 481, 481, 370, 370, 370, 370, 370, 370, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 370, 370, 370, 370, 370, 370, 148, 148, + 148, 148, 148, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 129, 481, 481, + 481, 481, 481, 481, 129, 129, 129, 129, 129, 129, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 129, 129, 129, 129, 129, 129, 202, + 202, 202, 202, 202, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 372, 481, + 481, 481, 481, 481, 481, 372, 372, 372, 372, 372, + 372, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 372, 372, 372, 372, 372, 372, + 376, 481, 481, 481, 481, 481, 481, 376, 376, 376, + + 376, 376, 376, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 376, 376, 376, 376, + 376, 376, 377, 481, 481, 481, 481, 481, 481, 377, + 377, 377, 377, 377, 377, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 377, 377, + 377, 377, 377, 377, 289, 289, 289, 289, 289, 481, + 481, 481, 481, 481, 481, 481, 481, 254, 481, 481, + 481, 481, 481, 378, 481, 481, 481, 481, 481, 481, + + 378, 378, 378, 378, 378, 378, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 255, 481, 481, 378, + 378, 378, 378, 378, 378, 381, 481, 481, 481, 481, + 481, 481, 382, 481, 383, 481, 481, 481, 481, 384, + 385, 481, 481, 386, 481, 481, 481, 481, 154, 481, + 481, 481, 481, 481, 381, 481, 481, 481, 481, 481, + 382, 481, 383, 481, 481, 481, 481, 384, 385, 481, + 481, 386, 390, 481, 481, 481, 481, 481, 481, 390, + 390, 390, 390, 390, 390, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 390, 390, + 390, 390, 390, 390, 391, 481, 481, 481, 481, 481, + 481, 391, 391, 391, 391, 391, 391, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 391, 391, 391, 391, 391, 391, 392, 481, 481, 481, + 481, 481, 481, 392, 392, 392, 392, 392, 392, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 392, 392, 392, 392, 392, 392, 400, 481, + 481, 481, 481, 481, 481, 400, 400, 400, 400, 400, + 400, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 400, 400, 400, 400, 400, 400, + 401, 481, 481, 481, 481, 481, 481, 401, 401, 401, + 401, 401, 401, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 401, 401, 401, 401, + 401, 401, 402, 481, 481, 481, 481, 481, 481, 402, + + 402, 402, 402, 402, 402, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 402, 402, + 402, 402, 402, 402, 412, 481, 481, 481, 481, 481, + 481, 412, 412, 412, 412, 412, 412, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 412, 412, 412, 412, 412, 412, 413, 481, 481, 481, + 481, 481, 481, 413, 413, 413, 413, 413, 413, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 413, 413, 413, 413, 413, 413, 431, 481, + 481, 481, 481, 481, 481, 431, 431, 431, 431, 431, + 431, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 431, 431, 431, 431, 431, 431, + 440, 481, 481, 481, 481, 481, 481, 440, 440, 440, + 440, 440, 440, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 440, 440, 440, 440, + + 440, 440, 441, 441, 441, 441, 441, 481, 481, 481, + 481, 481, 481, 481, 481, 427, 481, 481, 481, 481, + 481, 442, 481, 481, 481, 481, 481, 481, 442, 442, + 442, 442, 442, 442, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 429, 481, 481, 442, 442, 442, + 442, 442, 442, 448, 448, 448, 448, 448, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 449, 481, 481, 481, 481, 481, 481, 449, + 449, 449, 449, 449, 449, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 449, 449, + 449, 449, 449, 449, 450, 481, 481, 481, 481, 481, + 481, 450, 450, 450, 450, 450, 450, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 450, 450, 450, 450, 450, 450, 455, 481, 481, 481, + 481, 481, 481, 455, 455, 455, 455, 455, 455, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 455, 455, 455, 455, 455, 455, 456, 481, + 481, 481, 481, 481, 481, 456, 456, 456, 456, 456, + 456, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 456, 456, 456, 456, 456, 456, + 461, 481, 481, 481, 481, 481, 481, 461, 461, 461, + 461, 461, 461, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 461, 461, 461, 461, + 461, 461, 462, 481, 481, 481, 481, 481, 481, 462, + + 462, 462, 462, 462, 462, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 462, 462, + 462, 462, 462, 462, 467, 481, 481, 481, 481, 481, + 481, 467, 467, 467, 467, 467, 467, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 467, 467, 467, 467, 467, 467, 468, 481, 481, 481, + 481, 481, 481, 468, 468, 468, 468, 468, 468, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 468, 468, 468, 468, 468, 468, 472, 481, + 481, 481, 481, 481, 481, 472, 472, 472, 472, 472, + 472, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 472, 472, 472, 472, 472, 472, + 40, 481, 481, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 46, 46, 481, 46, 46, 49, 481, + 481, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 55, 55, 481, 55, 55, 83, 481, 481, 83, + + 83, 92, 481, 92, 92, 481, 92, 92, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 115, 115, 481, 115, 115, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 129, 129, 481, 129, 129, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 153, 153, + 481, 153, 153, 161, 161, 161, 161, 161, 161, 161, + + 161, 161, 161, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 168, 168, 168, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 49, 49, 481, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, + 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, + + 214, 214, 214, 214, 40, 481, 481, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 246, 246, 246, 246, 251, 251, 251, 251, 251, + 251, 481, 251, 251, 251, 251, 251, 251, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 187, 187, 187, 187, 187, 278, 278, 278, 278, 251, + 251, 251, 251, 251, 251, 481, 251, 251, 251, 251, + 251, 251, 284, 481, 481, 284, 284, 284, 284, 284, + + 284, 284, 284, 284, 284, 287, 481, 481, 287, 287, + 287, 287, 287, 287, 287, 287, 287, 287, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 115, 115, 481, 115, 115, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 315, 315, 315, 315, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 324, 324, 324, 287, + 481, 481, 287, 287, 287, 287, 287, 287, 287, 287, + 287, 287, 329, 329, 329, 329, 329, 329, 329, 329, + + 329, 329, 329, 329, 329, 251, 251, 251, 251, 251, + 481, 481, 251, 251, 251, 251, 251, 251, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 115, 115, 481, 115, 115, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 351, 351, 351, 351, 284, 284, 481, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 324, + 324, 324, 324, 324, 324, 324, 324, 324, 324, 324, + 324, 324, 287, 287, 481, 287, 287, 287, 287, 287, + + 287, 287, 287, 287, 287, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 251, 251, + 251, 251, 251, 481, 481, 251, 251, 251, 251, 251, + 251, 416, 416, 416, 416, 481, 481, 481, 481, 416, + 481, 481, 416, 416, 428, 428, 428, 428, 481, 481, + 481, 428, 428, 428, 481, 428, 428, 430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 439, 439, 439, + 439, 439, 439, 439, 439, 439, 439, 7, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481 } ; -static yyconst short int yy_chk[2462] = +static yyconst flex_int16_t yy_chk[6664] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -569,263 +1049,725 @@ static yyconst short int yy_chk[2462] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 480, 4, 9, 9, 9, 9, 9, 12, 3, - 17, 4, 10, 10, 10, 10, 10, 11, 11, 11, - 11, 11, 3, 3, 4, 4, 13, 69, 12, 13, - 15, 53, 53, 17, 69, 3, 13, 4, 26, 13, - - 13, 13, 13, 13, 13, 15, 18, 27, 23, 18, - 27, 27, 26, 49, 11, 40, 18, 28, 23, 477, - 28, 27, 52, 23, 89, 56, 23, 89, 49, 23, - 32, 28, 18, 23, 23, 40, 23, 43, 27, 56, - 43, 18, 21, 24, 32, 52, 66, 43, 66, 21, - 21, 28, 21, 24, 24, 24, 24, 24, 24, 21, - 32, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 5, 4, 6, 15, + 12, 3, 480, 4, 9, 9, 9, 9, 9, 10, + + 10, 10, 10, 10, 3, 3, 4, 4, 11, 11, + 11, 11, 11, 24, 32, 5, 18, 6, 17, 18, + 3, 25, 4, 33, 25, 25, 33, 33, 39, 49, + 15, 477, 3, 3, 4, 4, 12, 69, 17, 18, + 36, 32, 11, 40, 470, 3, 69, 4, 18, 25, + 464, 33, 18, 24, 32, 55, 39, 43, 52, 26, + 43, 25, 26, 33, 34, 69, 17, 18, 36, 32, + 49, 11, 13, 53, 53, 13, 18, 25, 52, 33, + 36, 67, 13, 13, 13, 13, 13, 13, 459, 40, + 26, 34, 71, 43, 78, 55, 36, 88, 128, 26, + + 78, 443, 128, 67, 34, 71, 52, 80, 13, 80, + 67, 13, 13, 13, 13, 13, 13, 21, 26, 34, + 71, 92, 78, 88, 21, 21, 88, 21, 37, 37, + 37, 37, 37, 437, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 92, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 34, 33, - 36, 21, 33, 33, 37, 37, 37, 37, 37, 59, - - 44, 59, 34, 33, 36, 38, 38, 38, 38, 38, - 44, 44, 44, 44, 44, 44, 45, 86, 34, 57, - 33, 36, 57, 57, 59, 47, 45, 45, 45, 45, - 45, 45, 47, 57, 86, 47, 47, 47, 47, 47, - 47, 55, 38, 42, 42, 42, 42, 58, 68, 42, - 71, 55, 55, 55, 55, 55, 55, 72, 88, 144, - 128, 58, 42, 68, 128, 88, 144, 70, 58, 42, - 71, 73, 42, 42, 42, 42, 42, 42, 50, 50, - 50, 50, 70, 78, 74, 72, 78, 73, 65, 50, - 78, 80, 470, 70, 74, 76, 76, 50, 65, 65, - - 65, 65, 65, 65, 50, 75, 76, 50, 50, 50, - 50, 50, 50, 77, 80, 82, 141, 83, 77, 87, - 75, 90, 91, 85, 90, 82, 75, 83, 83, 83, - 83, 83, 83, 85, 87, 77, 91, 138, 152, 77, - 138, 109, 95, 464, 141, 152, 109, 96, 110, 111, - 82, 92, 92, 92, 92, 92, 95, 96, 96, 96, - 96, 96, 96, 92, 98, 99, 109, 459, 110, 111, - 92, 98, 101, 104, 105, 107, 121, 92, 98, 99, - 92, 92, 92, 92, 92, 92, 101, 104, 105, 107, - 135, 121, 100, 104, 106, 133, 150, 100, 122, 135, - - 101, 99, 100, 100, 100, 100, 100, 100, 106, 107, - 105, 120, 148, 122, 133, 443, 150, 437, 148, 177, - 114, 120, 106, 112, 112, 112, 112, 112, 149, 112, - 114, 114, 114, 114, 114, 114, 120, 157, 160, 177, - 157, 201, 112, 149, 160, 201, 395, 158, 126, 112, - 161, 159, 112, 112, 112, 112, 112, 112, 113, 113, - 113, 113, 126, 158, 113, 161, 126, 162, 118, 159, - 229, 164, 168, 395, 229, 432, 162, 113, 118, 118, - 118, 118, 118, 118, 113, 164, 168, 113, 113, 113, - 113, 113, 113, 116, 116, 116, 116, 116, 169, 422, - - 388, 192, 196, 119, 194, 171, 169, 172, 192, 196, - 194, 206, 116, 119, 119, 119, 119, 119, 119, 171, - 173, 172, 116, 116, 116, 116, 116, 116, 123, 123, - 123, 123, 123, 206, 173, 208, 209, 210, 132, 123, - 387, 175, 241, 209, 210, 241, 208, 123, 132, 132, - 132, 132, 132, 132, 123, 175, 184, 123, 123, 123, - 123, 123, 123, 124, 124, 124, 124, 219, 239, 215, - 367, 184, 247, 156, 124, 199, 186, 215, 239, 351, - 247, 219, 124, 156, 156, 156, 156, 156, 156, 124, - 186, 199, 124, 124, 124, 124, 124, 124, 130, 130, - - 130, 130, 130, 186, 268, 205, 271, 310, 163, 207, - 310, 312, 438, 271, 312, 268, 438, 130, 163, 163, - 163, 163, 163, 163, 130, 205, 207, 130, 130, 130, - 130, 130, 130, 154, 154, 154, 154, 154, 235, 167, - 174, 232, 272, 347, 348, 346, 167, 264, 347, 348, - 272, 235, 154, 167, 174, 238, 232, 240, 242, 154, - 227, 264, 154, 154, 154, 154, 154, 154, 165, 165, - 165, 165, 165, 373, 227, 253, 238, 240, 178, 242, - 373, 174, 335, 264, 321, 227, 320, 165, 178, 178, - 178, 178, 178, 178, 179, 253, 254, 165, 165, 165, - - 165, 165, 165, 180, 179, 179, 179, 179, 179, 179, - 273, 254, 275, 180, 180, 180, 180, 180, 180, 182, - 182, 182, 182, 182, 343, 279, 285, 316, 386, 183, - 275, 386, 273, 279, 343, 316, 319, 318, 182, 183, - 183, 183, 183, 183, 183, 185, 285, 288, 182, 182, - 182, 182, 182, 182, 189, 185, 185, 185, 185, 185, - 185, 325, 288, 435, 189, 189, 189, 189, 189, 189, - 191, 191, 191, 191, 191, 284, 284, 284, 284, 284, - 202, 325, 435, 286, 286, 286, 286, 286, 284, 191, - 202, 202, 202, 202, 202, 202, 286, 306, 309, 191, - - 191, 191, 191, 191, 191, 204, 204, 204, 204, 204, - 322, 322, 322, 322, 322, 211, 423, 317, 303, 306, - 309, 423, 303, 322, 204, 211, 211, 211, 211, 211, - 211, 212, 303, 330, 204, 204, 204, 204, 204, 204, - 214, 212, 212, 212, 212, 212, 212, 418, 330, 311, - 214, 214, 214, 214, 214, 214, 218, 218, 218, 218, - 218, 221, 218, 374, 340, 359, 360, 218, 418, 218, - 374, 221, 221, 221, 221, 221, 221, 222, 340, 324, - 384, 301, 218, 223, 324, 359, 360, 222, 222, 222, - 222, 222, 222, 223, 223, 223, 223, 223, 223, 224, - - 381, 382, 340, 384, 324, 225, 296, 381, 382, 224, - 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, - 225, 226, 337, 337, 337, 337, 337, 230, 410, 363, - 364, 226, 226, 226, 226, 226, 226, 230, 230, 230, - 230, 230, 230, 231, 363, 364, 396, 421, 337, 236, - 421, 410, 396, 231, 231, 231, 231, 231, 231, 236, - 236, 236, 236, 236, 236, 237, 341, 341, 341, 341, - 341, 244, 283, 436, 369, 237, 237, 237, 237, 237, - 237, 244, 244, 244, 244, 244, 244, 245, 369, 383, - 282, 369, 341, 246, 420, 436, 383, 245, 245, 245, - - 245, 245, 245, 246, 246, 246, 246, 246, 246, 251, - 251, 251, 251, 251, 420, 251, 281, 453, 393, 397, - 251, 329, 251, 252, 252, 252, 252, 252, 258, 252, - 380, 329, 393, 397, 252, 251, 252, 453, 258, 258, - 258, 258, 258, 258, 380, 398, 329, 405, 385, 252, - 256, 256, 256, 256, 256, 385, 256, 406, 405, 398, - 259, 256, 256, 256, 380, 406, 280, 407, 274, 256, - 259, 259, 259, 259, 259, 259, 256, 260, 407, 256, - 256, 256, 256, 256, 256, 261, 419, 260, 260, 260, - 260, 260, 260, 262, 267, 261, 261, 261, 261, 261, - - 261, 263, 419, 262, 262, 262, 262, 262, 262, 265, - 257, 263, 263, 263, 263, 263, 263, 266, 250, 265, - 265, 265, 265, 265, 265, 269, 249, 266, 266, 266, - 266, 266, 266, 270, 248, 269, 269, 269, 269, 269, - 269, 276, 243, 270, 270, 270, 270, 270, 270, 277, - 234, 276, 276, 276, 276, 276, 276, 278, 408, 277, - 277, 277, 277, 277, 277, 408, 399, 278, 278, 278, - 278, 278, 278, 287, 287, 287, 287, 394, 471, 287, - 399, 404, 394, 447, 471, 394, 399, 290, 290, 290, - 290, 290, 287, 290, 409, 404, 458, 447, 290, 287, - - 290, 409, 287, 287, 287, 287, 287, 287, 289, 289, - 289, 289, 425, 290, 411, 425, 458, 444, 233, 289, - 291, 291, 291, 291, 291, 411, 291, 289, 424, 433, - 465, 291, 444, 291, 289, 424, 433, 289, 289, 289, - 289, 289, 289, 228, 220, 445, 291, 292, 292, 292, - 292, 292, 434, 292, 446, 434, 473, 465, 292, 466, - 292, 293, 293, 293, 293, 293, 297, 293, 445, 466, - 473, 446, 293, 292, 293, 460, 297, 297, 297, 297, - 297, 297, 428, 428, 428, 428, 428, 293, 294, 294, - 294, 294, 294, 451, 294, 428, 460, 217, 299, 294, - - 451, 294, 344, 344, 344, 344, 344, 294, 299, 299, - 299, 299, 299, 299, 294, 216, 203, 294, 294, 294, - 294, 294, 294, 295, 295, 295, 295, 295, 344, 295, - 452, 454, 198, 300, 295, 295, 295, 452, 454, 463, - 197, 195, 295, 300, 300, 300, 300, 300, 300, 295, - 302, 193, 295, 295, 295, 295, 295, 295, 304, 463, - 302, 302, 302, 302, 302, 302, 305, 469, 304, 304, - 304, 304, 304, 304, 307, 190, 305, 305, 305, 305, - 305, 305, 308, 187, 307, 307, 307, 307, 307, 307, - 469, 479, 308, 308, 308, 308, 308, 308, 313, 313, - - 313, 313, 313, 314, 415, 415, 415, 415, 415, 478, - 313, 457, 479, 314, 314, 314, 314, 314, 314, 315, - 415, 457, 476, 478, 313, 181, 176, 476, 170, 315, - 315, 315, 315, 315, 315, 326, 326, 326, 326, 326, - 166, 326, 457, 331, 331, 331, 331, 331, 326, 155, - 474, 475, 153, 151, 331, 147, 331, 474, 475, 146, - 334, 326, 327, 327, 327, 327, 327, 145, 327, 331, - 334, 334, 334, 334, 334, 334, 358, 358, 358, 358, - 358, 327, 358, 368, 368, 368, 368, 368, 327, 358, - 143, 327, 327, 327, 327, 327, 327, 328, 328, 328, - - 328, 142, 358, 328, 140, 139, 137, 336, 136, 368, - 134, 370, 370, 370, 370, 370, 328, 336, 336, 336, - 336, 336, 336, 328, 131, 129, 328, 328, 328, 328, - 328, 328, 332, 332, 332, 332, 332, 370, 127, 117, - 115, 108, 338, 332, 97, 372, 372, 372, 372, 372, - 84, 332, 338, 338, 338, 338, 338, 338, 332, 81, - 79, 332, 332, 332, 332, 332, 332, 333, 333, 333, - 333, 372, 67, 63, 62, 61, 60, 339, 333, 54, - 46, 39, 30, 29, 25, 22, 333, 339, 339, 339, - 339, 339, 339, 333, 342, 20, 333, 333, 333, 333, - - 333, 333, 345, 19, 342, 342, 342, 342, 342, 342, - 16, 14, 345, 345, 345, 345, 345, 345, 349, 349, - 349, 349, 349, 350, 7, 6, 5, 0, 0, 0, - 349, 0, 0, 350, 350, 350, 350, 350, 350, 361, - 0, 0, 0, 0, 349, 0, 0, 0, 0, 361, - 361, 361, 361, 361, 361, 362, 362, 362, 362, 362, - 365, 0, 0, 0, 0, 0, 362, 0, 362, 0, - 365, 365, 365, 365, 365, 365, 366, 0, 0, 371, - 0, 362, 0, 0, 0, 371, 366, 366, 366, 366, - 366, 366, 371, 0, 371, 375, 0, 0, 0, 371, - - 371, 376, 0, 371, 0, 375, 375, 375, 375, 375, - 375, 376, 376, 376, 376, 376, 376, 377, 0, 0, - 0, 0, 0, 378, 0, 0, 0, 377, 377, 377, - 377, 377, 377, 378, 378, 378, 378, 378, 378, 390, - 0, 0, 0, 0, 0, 391, 0, 0, 0, 390, - 390, 390, 390, 390, 390, 391, 391, 391, 391, 391, - 391, 392, 0, 0, 0, 0, 0, 400, 0, 0, - 0, 392, 392, 392, 392, 392, 392, 400, 400, 400, - 400, 400, 400, 401, 0, 0, 0, 0, 0, 402, - 0, 0, 0, 401, 401, 401, 401, 401, 401, 402, - - 402, 402, 402, 402, 402, 403, 403, 403, 403, 403, - 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 403, 412, 412, 412, 412, 412, 412, 413, 0, - 0, 403, 414, 414, 414, 414, 414, 0, 413, 413, - 413, 413, 413, 413, 0, 0, 0, 0, 414, 416, - 0, 0, 417, 417, 417, 417, 417, 0, 414, 416, - 416, 416, 416, 416, 416, 417, 426, 426, 426, 426, - 426, 0, 430, 430, 430, 430, 430, 0, 417, 426, - 0, 0, 0, 0, 0, 430, 0, 0, 0, 431, - 0, 0, 426, 427, 427, 427, 427, 427, 430, 431, - - 431, 431, 431, 431, 431, 0, 427, 439, 439, 439, - 439, 439, 427, 0, 0, 0, 0, 0, 0, 427, - 439, 0, 427, 427, 427, 427, 427, 427, 440, 0, - 0, 0, 0, 439, 0, 0, 0, 0, 440, 440, - 440, 440, 440, 440, 441, 441, 441, 441, 441, 448, - 0, 0, 449, 449, 449, 449, 449, 441, 0, 448, - 448, 448, 448, 448, 448, 449, 0, 0, 0, 450, - 441, 442, 442, 442, 442, 442, 0, 0, 449, 450, - 450, 450, 450, 450, 450, 0, 0, 0, 0, 0, - 442, 0, 0, 0, 0, 0, 455, 0, 0, 0, - - 442, 442, 442, 442, 442, 442, 455, 455, 455, 455, - 455, 455, 456, 0, 0, 0, 0, 0, 461, 0, - 0, 0, 456, 456, 456, 456, 456, 456, 461, 461, - 461, 461, 461, 461, 462, 0, 0, 0, 0, 0, - 467, 0, 0, 0, 462, 462, 462, 462, 462, 462, - 467, 467, 467, 467, 467, 467, 468, 0, 0, 0, - 0, 0, 472, 0, 0, 0, 468, 468, 468, 468, - 468, 468, 472, 472, 472, 472, 472, 472, 482, 0, - 482, 482, 482, 482, 482, 482, 482, 482, 482, 483, - 483, 0, 483, 483, 484, 0, 484, 484, 484, 484, - - 484, 484, 484, 484, 484, 485, 485, 0, 485, 485, - 486, 0, 0, 486, 486, 487, 487, 487, 487, 487, - 487, 487, 487, 487, 488, 0, 488, 488, 0, 488, - 488, 489, 489, 489, 489, 489, 489, 489, 489, 489, - 489, 489, 490, 490, 490, 490, 490, 490, 490, 490, - 490, 491, 491, 0, 491, 491, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 493, 493, 493, + 21, 21, 21, 21, 21, 21, 21, 21, 66, 99, + 72, 21, 23, 70, 70, 432, 38, 38, 38, 38, + + 38, 59, 66, 59, 23, 422, 89, 23, 56, 72, + 23, 56, 56, 68, 23, 23, 66, 23, 84, 72, + 57, 70, 85, 59, 68, 74, 74, 68, 23, 99, + 38, 120, 89, 23, 85, 89, 23, 84, 57, 23, + 76, 68, 23, 23, 76, 23, 27, 84, 56, 108, + 85, 59, 68, 27, 27, 27, 27, 27, 27, 38, + 57, 229, 74, 82, 73, 229, 76, 57, 388, 76, + 73, 96, 120, 76, 495, 495, 75, 108, 73, 87, + 105, 110, 27, 27, 27, 27, 27, 27, 42, 42, + 42, 42, 73, 75, 42, 82, 86, 75, 73, 82, + + 75, 87, 95, 141, 96, 75, 387, 42, 87, 95, + 86, 96, 98, 105, 42, 42, 42, 42, 42, 42, + 105, 75, 104, 82, 86, 75, 106, 110, 111, 109, + 163, 166, 96, 107, 109, 167, 141, 98, 166, 104, + 42, 105, 95, 42, 42, 42, 42, 42, 42, 45, + 176, 106, 98, 121, 351, 345, 45, 45, 45, 45, + 45, 45, 104, 121, 107, 98, 106, 122, 104, 126, + 163, 166, 320, 107, 111, 167, 132, 122, 176, 106, + 109, 135, 45, 145, 126, 45, 45, 45, 45, 45, + 45, 47, 107, 138, 138, 152, 132, 146, 47, 47, + + 47, 47, 47, 47, 121, 132, 145, 135, 168, 126, + 135, 146, 145, 126, 147, 170, 168, 152, 122, 155, + 194, 138, 177, 147, 152, 146, 156, 47, 47, 47, + 47, 47, 47, 50, 50, 50, 50, 150, 157, 156, + 172, 173, 147, 159, 50, 155, 158, 150, 155, 157, + 160, 238, 50, 194, 156, 170, 319, 159, 174, 50, + 50, 50, 50, 50, 50, 150, 157, 175, 177, 158, + 160, 159, 184, 186, 219, 158, 214, 318, 317, 160, + 172, 173, 184, 316, 214, 50, 192, 238, 50, 50, + 50, 50, 50, 50, 58, 310, 174, 186, 174, 197, + + 199, 58, 58, 58, 58, 58, 58, 175, 246, 192, + 204, 205, 197, 186, 219, 192, 246, 253, 205, 204, + 208, 252, 199, 184, 174, 186, 201, 197, 206, 199, + 58, 58, 58, 58, 58, 58, 79, 220, 204, 205, + 206, 207, 208, 79, 79, 79, 79, 79, 79, 208, + 299, 201, 234, 235, 239, 201, 206, 227, 253, 207, + 278, 284, 209, 239, 343, 220, 234, 252, 278, 235, + 207, 257, 79, 79, 79, 79, 79, 79, 90, 227, + 234, 235, 239, 240, 209, 90, 90, 90, 90, 90, + 90, 209, 217, 217, 217, 217, 217, 227, 217, 257, + + 343, 287, 393, 217, 323, 217, 393, 284, 227, 240, + 296, 328, 240, 237, 90, 90, 90, 90, 90, 90, + 93, 237, 271, 282, 281, 241, 270, 93, 93, 93, + 93, 93, 93, 241, 250, 250, 250, 250, 250, 296, + 250, 237, 287, 271, 217, 250, 309, 250, 270, 268, + 323, 271, 328, 241, 340, 270, 93, 93, 93, 93, + 93, 93, 100, 100, 100, 100, 100, 268, 490, 280, + 490, 274, 309, 272, 100, 309, 306, 311, 268, 315, + 272, 100, 274, 306, 335, 340, 250, 315, 100, 100, + 100, 100, 100, 100, 251, 251, 251, 251, 251, 274, + + 251, 272, 279, 311, 306, 251, 311, 251, 502, 512, + 502, 512, 335, 340, 100, 273, 367, 100, 100, 100, + 100, 100, 100, 112, 112, 112, 112, 112, 249, 112, + 283, 283, 283, 283, 283, 285, 285, 285, 285, 285, + 324, 438, 112, 283, 367, 324, 251, 346, 285, 112, + 112, 112, 112, 112, 112, 289, 289, 289, 289, 289, + 308, 321, 321, 321, 321, 321, 438, 308, 289, 248, + 438, 346, 247, 242, 321, 112, 346, 347, 112, 112, + 112, 112, 112, 112, 113, 113, 113, 113, 308, 232, + 113, 324, 231, 228, 369, 290, 290, 290, 290, 290, + + 359, 347, 436, 113, 369, 359, 347, 289, 290, 436, + 113, 113, 113, 113, 113, 113, 291, 291, 291, 291, + 291, 292, 292, 292, 292, 292, 360, 216, 329, 291, + 436, 360, 215, 369, 292, 202, 113, 386, 329, 113, + 113, 113, 113, 113, 113, 116, 395, 290, 395, 196, + 195, 359, 116, 116, 116, 116, 116, 116, 325, 325, + 325, 325, 325, 386, 325, 363, 386, 514, 291, 514, + 364, 325, 466, 292, 395, 363, 193, 360, 116, 329, + 364, 116, 116, 116, 116, 116, 116, 117, 191, 330, + 330, 330, 330, 330, 117, 117, 117, 117, 117, 117, + + 330, 189, 330, 334, 334, 334, 334, 334, 466, 187, + 325, 336, 336, 336, 336, 336, 363, 336, 181, 334, + 373, 364, 169, 117, 117, 117, 117, 117, 117, 119, + 119, 119, 119, 119, 349, 349, 349, 349, 349, 165, + 374, 330, 373, 339, 339, 339, 339, 339, 119, 373, + 349, 161, 153, 380, 339, 119, 119, 119, 119, 119, + 119, 151, 374, 336, 368, 368, 368, 368, 368, 374, + 348, 348, 348, 348, 348, 370, 370, 370, 370, 370, + 380, 518, 148, 518, 119, 119, 119, 119, 119, 119, + 123, 123, 123, 123, 123, 339, 520, 527, 520, 527, + + 144, 123, 446, 372, 372, 372, 372, 372, 380, 123, + 381, 382, 383, 143, 446, 396, 123, 123, 123, 123, + 123, 123, 348, 358, 358, 358, 358, 358, 397, 358, + 446, 384, 381, 382, 383, 142, 358, 384, 396, 381, + 382, 383, 123, 397, 396, 123, 123, 123, 123, 123, + 123, 124, 124, 124, 124, 372, 397, 398, 404, 384, + 420, 385, 124, 362, 362, 362, 362, 362, 394, 420, + 124, 394, 398, 404, 362, 358, 362, 124, 124, 124, + 124, 124, 124, 385, 140, 398, 404, 405, 420, 530, + 385, 530, 394, 540, 139, 540, 406, 394, 399, 547, + + 394, 547, 137, 124, 399, 405, 124, 124, 124, 124, + 124, 124, 130, 399, 136, 362, 405, 406, 134, 130, + 130, 130, 130, 130, 130, 406, 399, 402, 402, 402, + 402, 402, 399, 548, 465, 548, 465, 133, 421, 408, + 402, 409, 407, 403, 403, 403, 403, 403, 130, 130, + 130, 130, 130, 130, 149, 149, 149, 149, 149, 403, + 407, 408, 465, 409, 421, 419, 410, 421, 408, 411, + 409, 407, 410, 149, 424, 425, 423, 131, 419, 402, + 149, 149, 149, 149, 149, 149, 129, 411, 413, 413, + 413, 413, 413, 419, 410, 403, 424, 127, 411, 413, + + 423, 425, 118, 424, 425, 423, 149, 115, 418, 149, + 149, 149, 149, 149, 149, 154, 418, 414, 414, 414, + 414, 414, 154, 154, 154, 154, 154, 154, 412, 412, + 412, 412, 412, 414, 412, 97, 418, 94, 83, 81, + 413, 433, 77, 65, 63, 434, 415, 415, 415, 415, + 415, 154, 154, 154, 154, 154, 154, 162, 162, 162, + 162, 162, 415, 433, 426, 426, 426, 426, 426, 414, + 433, 434, 435, 445, 434, 451, 162, 426, 62, 445, + 412, 61, 435, 162, 162, 162, 162, 162, 162, 416, + 416, 416, 416, 416, 60, 54, 444, 451, 415, 46, + + 435, 445, 416, 30, 451, 452, 454, 29, 447, 162, + 444, 473, 162, 162, 162, 162, 162, 162, 164, 164, + 164, 164, 164, 447, 444, 28, 473, 452, 454, 428, + 428, 428, 428, 428, 452, 454, 447, 164, 471, 473, + 474, 416, 428, 475, 164, 164, 164, 164, 164, 164, + 430, 430, 430, 430, 430, 439, 439, 439, 439, 439, + 22, 471, 474, 430, 20, 475, 19, 471, 439, 474, + 457, 453, 475, 164, 164, 164, 164, 164, 164, 171, + 453, 428, 16, 14, 476, 7, 171, 171, 171, 171, + 171, 171, 441, 441, 441, 441, 441, 0, 457, 453, + + 458, 463, 430, 460, 0, 441, 457, 439, 476, 458, + 463, 460, 0, 476, 0, 171, 171, 171, 171, 171, + 171, 178, 178, 178, 178, 178, 457, 178, 458, 463, + 0, 460, 448, 448, 448, 448, 448, 469, 0, 0, + 178, 0, 0, 469, 441, 448, 0, 178, 178, 178, + 178, 178, 178, 468, 468, 468, 468, 468, 472, 472, + 472, 472, 472, 0, 0, 469, 468, 479, 478, 0, + 0, 472, 0, 178, 0, 479, 178, 178, 178, 178, + 178, 178, 180, 478, 448, 0, 0, 0, 0, 180, + 180, 180, 180, 180, 180, 479, 478, 0, 0, 0, + + 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, + 472, 0, 0, 0, 0, 0, 0, 0, 180, 180, + 180, 180, 180, 180, 182, 182, 182, 182, 182, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 182, 0, 0, 0, 0, 0, 0, + 182, 182, 182, 182, 182, 182, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, + 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 183, 0, 0, 0, 0, 0, + 0, 183, 183, 183, 183, 183, 183, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 183, 183, 183, 183, 183, 183, 185, 185, 185, 185, + 185, 0, 0, 0, 0, 0, 0, 185, 0, 0, + 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, + 0, 0, 185, 185, 185, 185, 185, 185, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, + + 0, 185, 185, 185, 185, 185, 185, 190, 190, 190, + 190, 190, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 190, 0, 0, 0, + 0, 0, 0, 190, 190, 190, 190, 190, 190, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 190, 190, 190, 190, 190, 190, 198, 0, + 0, 0, 0, 0, 0, 198, 198, 198, 198, 198, + 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 198, 198, 198, 198, 198, 198, + 203, 203, 203, 203, 203, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, + 0, 0, 0, 0, 0, 0, 203, 203, 203, 203, + 203, 203, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 203, 203, 203, 203, 203, + 203, 210, 0, 0, 0, 0, 0, 0, 210, 210, + 210, 210, 210, 210, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 210, 210, 210, + 210, 210, 210, 211, 211, 211, 211, 211, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 211, 0, 0, 0, 0, 0, 0, 211, + 211, 211, 211, 211, 211, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 211, 211, + 211, 211, 211, 211, 218, 0, 0, 0, 0, 0, + 0, 218, 218, 218, 218, 218, 218, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 218, 218, 218, 218, 218, 218, 221, 221, 221, 221, + 221, 0, 221, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, + 0, 0, 221, 221, 221, 221, 221, 221, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, + 0, 221, 221, 221, 221, 221, 221, 223, 0, 0, + 0, 0, 0, 0, 223, 223, 223, 223, 223, 223, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 223, 223, 223, 223, 223, 223, 224, + 224, 224, 224, 224, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, + 0, 0, 0, 0, 0, 224, 224, 224, 224, 224, + 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 224, 224, 224, 224, 224, 224, + 225, 225, 225, 225, 225, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, + + 0, 0, 0, 0, 0, 0, 225, 225, 225, 225, + 225, 225, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 225, 225, 225, 225, 225, + 225, 226, 226, 226, 226, 226, 0, 0, 0, 0, + 0, 0, 226, 0, 0, 0, 0, 0, 0, 0, + 226, 0, 0, 0, 0, 0, 0, 226, 226, 226, + 226, 226, 226, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 226, 0, 0, 226, 226, 226, 226, + + 226, 226, 230, 230, 230, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 230, 0, 0, 0, 0, 0, 0, 230, 230, + 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, + 230, 230, 230, 233, 0, 0, 0, 0, 0, 0, + 233, 233, 233, 233, 233, 233, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, + + 233, 233, 233, 233, 233, 236, 236, 236, 236, 236, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, + 0, 236, 236, 236, 236, 236, 236, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 236, 236, 236, 236, 236, 236, 243, 0, 0, 0, + 0, 0, 0, 243, 243, 243, 243, 243, 243, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 243, 243, 243, 243, 243, 243, 244, 244, + 244, 244, 244, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, + 0, 0, 0, 0, 244, 244, 244, 244, 244, 244, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 244, 244, 244, 244, 244, 244, 255, + 255, 255, 255, 255, 0, 255, 0, 0, 0, 0, + 255, 255, 255, 0, 0, 0, 0, 0, 255, 0, + 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, + + 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 255, 0, 0, 255, 255, 255, 255, 255, 255, + 256, 0, 0, 0, 0, 0, 0, 256, 256, 256, + 256, 256, 256, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 256, 256, 256, 256, + 256, 256, 258, 258, 258, 258, 258, 0, 258, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 258, 0, 0, 0, 0, 0, 0, 258, 258, + + 258, 258, 258, 258, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 258, 0, 0, 258, 258, 258, + 258, 258, 258, 260, 0, 0, 0, 0, 0, 0, + 260, 260, 260, 260, 260, 260, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 260, 0, 0, 260, + 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 261, 0, 0, 0, 0, 0, + + 0, 261, 261, 261, 261, 261, 261, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 261, 0, 0, + 261, 261, 261, 261, 261, 261, 262, 262, 262, 262, + 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, + 0, 0, 262, 262, 262, 262, 262, 262, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 262, 262, 262, 262, 262, 262, 263, 263, 263, + + 263, 263, 0, 0, 0, 0, 0, 0, 263, 0, + 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, + 0, 0, 0, 263, 263, 263, 263, 263, 263, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, + 0, 0, 263, 263, 263, 263, 263, 263, 264, 264, + 264, 264, 264, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 264, 0, 0, + 0, 0, 0, 0, 264, 264, 264, 264, 264, 264, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 264, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 264, 264, 264, 264, 264, 264, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 264, 265, 265, 265, 265, 265, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 265, 0, 0, 0, 0, 0, 0, 265, 265, + 265, 265, 265, 265, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 265, 265, 265, + 265, 265, 265, 266, 0, 0, 0, 0, 0, 0, + + 266, 266, 266, 266, 266, 266, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, + 266, 266, 266, 266, 266, 267, 267, 267, 267, 267, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 267, 0, 0, 0, 0, 0, + 0, 267, 267, 267, 267, 267, 267, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 267, 267, 267, 267, 267, 267, 269, 269, 269, 269, + + 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 269, 0, 0, 0, 0, + 0, 0, 269, 269, 269, 269, 269, 269, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 269, 269, 269, 269, 269, 269, 275, 0, 0, + 0, 0, 0, 0, 275, 275, 275, 275, 275, 275, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 275, 275, 275, 275, 275, 275, 276, + + 276, 276, 276, 276, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, + 0, 0, 0, 0, 0, 276, 276, 276, 276, 276, + 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 276, 276, 276, 276, 276, 276, + 286, 286, 286, 286, 0, 0, 286, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, + 0, 0, 0, 0, 0, 0, 286, 286, 286, 286, + 286, 286, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 286, 0, 0, 286, 286, 286, 286, 286, + 286, 288, 288, 288, 288, 0, 0, 0, 0, 0, + 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, + 288, 0, 0, 0, 0, 0, 0, 288, 288, 288, + 288, 288, 288, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 288, 0, 0, 288, 288, 288, 288, + 288, 288, 293, 293, 293, 293, 293, 0, 0, 0, + 0, 0, 0, 0, 0, 293, 0, 0, 0, 0, + + 0, 293, 0, 0, 0, 0, 0, 0, 293, 293, + 293, 293, 293, 293, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 293, 0, 0, 293, 293, 293, + 293, 293, 293, 294, 294, 294, 294, 294, 0, 294, + 0, 0, 0, 0, 294, 294, 294, 0, 0, 0, + 0, 0, 294, 0, 0, 0, 0, 0, 0, 294, + 294, 294, 294, 294, 294, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 294, 0, 0, 294, 294, + + 294, 294, 294, 294, 295, 0, 0, 0, 0, 0, + 0, 295, 295, 295, 295, 295, 295, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 295, 295, 295, 295, 295, 295, 297, 297, 297, 297, + 297, 0, 297, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 297, 0, 0, 0, 0, + 0, 0, 297, 297, 297, 297, 297, 297, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 297, 0, + + 0, 297, 297, 297, 297, 297, 297, 300, 300, 300, + 300, 300, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, + 0, 0, 0, 300, 300, 300, 300, 300, 300, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, + 0, 0, 300, 300, 300, 300, 300, 300, 301, 301, + 301, 301, 301, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 301, 0, 0, + 0, 0, 0, 0, 301, 301, 301, 301, 301, 301, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 301, 301, 301, 301, 301, 301, 302, + 302, 302, 302, 302, 0, 0, 0, 0, 0, 0, + 302, 0, 0, 0, 0, 0, 0, 0, 302, 0, + 0, 0, 0, 0, 0, 302, 302, 302, 302, 302, + 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 302, 0, 0, 302, 302, 302, 302, 302, 302, + 303, 303, 303, 303, 303, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 303, 0, 0, 303, + 0, 0, 0, 0, 0, 0, 303, 303, 303, 303, + 303, 303, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 303, 303, 303, 303, 303, + 303, 304, 304, 304, 304, 304, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 304, 0, 0, 0, 0, 0, 0, 304, 304, 304, + 304, 304, 304, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 304, 304, 304, 304, + 304, 304, 305, 305, 305, 305, 305, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 305, 0, 0, 0, 0, 0, 0, 305, 305, + 305, 305, 305, 305, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 305, 305, 305, + 305, 305, 305, 307, 307, 307, 307, 307, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 307, 0, 0, 0, 0, 0, 0, 307, + + 307, 307, 307, 307, 307, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 307, 307, + 307, 307, 307, 307, 312, 0, 0, 0, 0, 0, + 0, 312, 312, 312, 312, 312, 312, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 312, 312, 312, 312, 312, 312, 313, 313, 313, 313, + 313, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 313, 0, 0, 0, 0, + + 0, 0, 313, 313, 313, 313, 313, 313, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 313, 313, 313, 313, 313, 313, 326, 326, 326, + 326, 326, 0, 326, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 0, 0, 0, 326, 326, 326, 326, 326, 326, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 326, + 0, 0, 326, 326, 326, 326, 326, 326, 327, 327, + + 327, 327, 0, 0, 327, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 327, 0, 0, + 0, 0, 0, 0, 327, 327, 327, 327, 327, 327, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 327, 0, 0, 327, 327, 327, 327, 327, 327, 331, + 331, 331, 331, 331, 0, 0, 0, 0, 0, 0, + 331, 0, 0, 0, 0, 0, 0, 0, 331, 0, + 0, 0, 0, 0, 0, 331, 331, 331, 331, 331, + 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 331, 0, 0, 331, 331, 331, 331, 331, 331, + 332, 332, 332, 332, 0, 0, 0, 0, 0, 0, + 0, 332, 0, 0, 0, 0, 0, 0, 0, 332, + 0, 0, 0, 0, 0, 0, 332, 332, 332, 332, + 332, 332, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 332, 0, 0, 332, 332, 332, 332, 332, + 332, 333, 333, 333, 333, 333, 0, 0, 0, 0, + 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, + + 333, 0, 0, 0, 0, 0, 0, 333, 333, 333, + 333, 333, 333, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 333, 0, 0, 333, 333, 333, 333, + 333, 333, 337, 0, 0, 0, 0, 0, 0, 337, + 337, 337, 337, 337, 337, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 337, 337, + 337, 337, 337, 337, 338, 0, 0, 0, 0, 0, + 0, 338, 338, 338, 338, 338, 338, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 338, 338, 338, 338, 338, 338, 341, 0, 0, 0, + 0, 0, 0, 341, 341, 341, 341, 341, 341, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 341, 341, 341, 341, 341, 341, 342, 342, + 342, 342, 342, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 342, 0, 0, + 0, 0, 0, 0, 342, 342, 342, 342, 342, 342, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 342, 342, 342, 342, 342, 342, 344, + 344, 344, 344, 344, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 344, 0, + 0, 0, 0, 0, 0, 344, 344, 344, 344, 344, + 344, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 344, 344, 344, 344, 344, 344, + 361, 0, 0, 0, 0, 0, 0, 361, 361, 361, + + 361, 361, 361, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 361, 361, 361, 361, + 361, 361, 365, 0, 0, 0, 0, 0, 0, 365, + 365, 365, 365, 365, 365, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 365, 365, + 365, 365, 365, 365, 366, 366, 366, 366, 366, 0, + 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, + 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, + + 366, 366, 366, 366, 366, 366, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 366, 0, 0, 366, + 366, 366, 366, 366, 366, 371, 0, 0, 0, 0, + 0, 0, 371, 0, 371, 0, 0, 0, 0, 371, + 371, 0, 0, 371, 0, 0, 0, 0, 371, 0, + 0, 0, 0, 0, 371, 0, 0, 0, 0, 0, + 371, 0, 371, 0, 0, 0, 0, 371, 371, 0, + 0, 371, 376, 0, 0, 0, 0, 0, 0, 376, + 376, 376, 376, 376, 376, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 376, 376, + 376, 376, 376, 376, 377, 0, 0, 0, 0, 0, + 0, 377, 377, 377, 377, 377, 377, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 377, 377, 377, 377, 377, 377, 378, 0, 0, 0, + 0, 0, 0, 378, 378, 378, 378, 378, 378, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 378, 378, 378, 378, 378, 378, 390, 0, + 0, 0, 0, 0, 0, 390, 390, 390, 390, 390, + 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 390, 390, 390, 390, 390, 390, + 391, 0, 0, 0, 0, 0, 0, 391, 391, 391, + 391, 391, 391, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 391, 391, 391, 391, + 391, 391, 392, 0, 0, 0, 0, 0, 0, 392, + + 392, 392, 392, 392, 392, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 392, 392, + 392, 392, 392, 392, 400, 0, 0, 0, 0, 0, + 0, 400, 400, 400, 400, 400, 400, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 400, 400, 400, 400, 400, 400, 401, 0, 0, 0, + 0, 0, 0, 401, 401, 401, 401, 401, 401, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 401, 401, 401, 401, 401, 401, 417, 0, + 0, 0, 0, 0, 0, 417, 417, 417, 417, 417, + 417, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 417, 417, 417, 417, 417, 417, + 429, 0, 0, 0, 0, 0, 0, 429, 429, 429, + 429, 429, 429, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 429, 429, 429, 429, + + 429, 429, 431, 431, 431, 431, 431, 0, 0, 0, + 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, + 0, 431, 0, 0, 0, 0, 0, 0, 431, 431, + 431, 431, 431, 431, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 431, 0, 0, 431, 431, 431, + 431, 431, 431, 440, 440, 440, 440, 440, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 440, 0, 0, 0, 0, 0, 0, 440, + 440, 440, 440, 440, 440, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 440, 440, + 440, 440, 440, 440, 442, 0, 0, 0, 0, 0, + 0, 442, 442, 442, 442, 442, 442, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 442, 442, 442, 442, 442, 442, 449, 0, 0, 0, + 0, 0, 0, 449, 449, 449, 449, 449, 449, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 449, 449, 449, 449, 449, 449, 450, 0, + 0, 0, 0, 0, 0, 450, 450, 450, 450, 450, + 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 450, 450, 450, 450, 450, 450, + 455, 0, 0, 0, 0, 0, 0, 455, 455, 455, + 455, 455, 455, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 455, 455, 455, 455, + 455, 455, 456, 0, 0, 0, 0, 0, 0, 456, + + 456, 456, 456, 456, 456, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 456, 456, + 456, 456, 456, 456, 461, 0, 0, 0, 0, 0, + 0, 461, 461, 461, 461, 461, 461, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 461, 461, 461, 461, 461, 461, 462, 0, 0, 0, + 0, 0, 0, 462, 462, 462, 462, 462, 462, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 462, 462, 462, 462, 462, 462, 467, 0, + 0, 0, 0, 0, 0, 467, 467, 467, 467, 467, + 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 467, 467, 467, 467, 467, 467, + 482, 0, 0, 482, 482, 482, 482, 482, 482, 482, + 482, 482, 482, 483, 483, 0, 483, 483, 484, 0, + 0, 484, 484, 484, 484, 484, 484, 484, 484, 484, + 484, 485, 485, 0, 485, 485, 486, 0, 0, 486, + + 486, 487, 0, 487, 487, 0, 487, 487, 488, 488, + 488, 488, 488, 488, 488, 488, 488, 488, 489, 489, + 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, + 489, 491, 491, 0, 491, 491, 492, 492, 492, 492, + 492, 492, 492, 492, 492, 492, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 494, - 494, 495, 495, 495, 495, 495, 495, 495, 495, 495, - 496, 496, 0, 496, 496, 497, 497, 497, 497, 497, - - 497, 497, 497, 497, 498, 498, 0, 498, 498, 499, - 499, 499, 499, 499, 499, 499, 499, 499, 500, 500, - 500, 500, 500, 500, 500, 500, 500, 501, 501, 501, - 501, 501, 501, 501, 501, 501, 501, 501, 501, 502, - 502, 502, 502, 502, 502, 502, 502, 502, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 504, 504, 504, - 0, 504, 505, 505, 505, 505, 505, 505, 505, 505, - 505, 505, 505, 505, 506, 506, 506, 0, 506, 507, - 507, 507, 507, 0, 507, 507, 507, 507, 507, 507, - 508, 508, 508, 0, 508, 509, 0, 509, 509, 509, - - 509, 509, 509, 509, 509, 509, 510, 0, 510, 510, - 510, 510, 510, 510, 510, 510, 510, 511, 511, 511, - 511, 511, 511, 511, 511, 511, 511, 511, 512, 512, - 512, 0, 512, 513, 513, 513, 513, 513, 513, 513, - 513, 513, 513, 513, 514, 514, 514, 514, 514, 514, - 514, 514, 514, 514, 514, 515, 515, 515, 0, 515, - 516, 516, 516, 0, 0, 0, 516, 0, 0, 516, - 516, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 518, 518, 518, 0, 0, 518, 518, 518, 0, 518, - 518, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, + 494, 494, 494, 496, 496, 0, 496, 496, 497, 497, + 497, 497, 497, 497, 497, 497, 497, 497, 498, 498, + 0, 498, 498, 499, 499, 499, 499, 499, 499, 499, + + 499, 499, 499, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 501, 501, 501, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 504, 504, 0, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 505, + 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, + 505, 505, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + + 510, 510, 510, 510, 511, 0, 0, 511, 511, 511, + 511, 511, 511, 511, 511, 511, 511, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 515, 515, 515, 515, 516, 516, 516, 516, 516, + 516, 0, 516, 516, 516, 516, 516, 516, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 519, 519, 519, 519, 519, 519, 519, 519, 519, + 519, 519, 519, 519, 519, 521, 521, 521, 521, 522, + 522, 522, 522, 522, 522, 0, 522, 522, 522, 522, + 522, 522, 523, 0, 0, 523, 523, 523, 523, 523, + + 523, 523, 523, 523, 523, 524, 0, 0, 524, 524, + 524, 524, 524, 524, 524, 524, 524, 524, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 526, 526, 526, 526, 526, 526, 526, 526, 526, + 526, 526, 526, 526, 528, 528, 0, 528, 528, 529, + 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, + 529, 529, 531, 531, 531, 531, 532, 532, 532, 532, + 532, 532, 532, 532, 532, 532, 532, 532, 532, 533, + 0, 0, 533, 533, 533, 533, 533, 533, 533, 533, + 533, 533, 534, 534, 534, 534, 534, 534, 534, 534, + + 534, 534, 534, 534, 534, 535, 535, 535, 535, 535, + 0, 0, 535, 535, 535, 535, 535, 535, 536, 536, + 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, + 536, 537, 537, 537, 537, 537, 537, 537, 537, 537, + 537, 537, 537, 537, 538, 538, 0, 538, 538, 539, + 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, + 539, 539, 541, 541, 541, 541, 542, 542, 0, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 543, + 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, + 543, 543, 544, 544, 0, 544, 544, 544, 544, 544, + + 544, 544, 544, 544, 544, 545, 545, 545, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, 546, 546, + 546, 546, 546, 0, 0, 546, 546, 546, 546, 546, + 546, 549, 549, 549, 549, 0, 0, 0, 0, 549, + 0, 0, 549, 549, 550, 550, 550, 550, 0, 0, + 0, 550, 550, 550, 0, 550, 550, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 552, 552, 552, + 552, 552, 552, 552, 552, 552, 552, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, @@ -833,38 +1775,35 @@ static yyconst short int yy_chk[2462] = 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481 + 481, 481, 481 } ; #line 1 "<stdin>" -#define INITIAL 0 -#define YY_STACK_USED 1 -#define mediaquery 1 YY_DECL - { +{ register yy_state_type yy_current_state; register UChar *yy_cp, *yy_bp; register int yy_act; while ( 1 ) /* loops until end-of-file is reached */ { - yy_cp = yy_c_buf_p; + yy_cp = (yy_c_buf_p); /* Support of yytext. */ - *yy_cp = yy_hold_char; + *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; - yy_current_state = yy_start; + yy_current_state = (yy_start); do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { - yy_last_accepting_state = yy_current_state; - yy_last_accepting_cpos = yy_cp; + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { @@ -875,37 +1814,37 @@ YY_DECL yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_base[yy_current_state] != 2401 ); + while ( yy_base[yy_current_state] != 6578 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; - - switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = yy_hold_char; - yy_cp = yy_last_accepting_cpos; - yy_current_state = yy_last_accepting_state; + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: +/* rule 1 can match eol */ YY_RULE_SETUP #line 31 "<stdin>" {countLines(); /* ignore comments */ } YY_BREAK case 2: +/* rule 2 can match eol */ YY_RULE_SETUP #line 33 "<stdin>" {countLines(); yyTok = WHITESPACE; return yyTok;} @@ -966,11 +1905,13 @@ YY_RULE_SETUP {BEGIN(mediaquery); yyTok = VARIABLES_FOR; return yyTok; } YY_BREAK case 14: +/* rule 14 can match eol */ YY_RULE_SETUP #line 47 "<stdin>" {yyTok = STRING; return yyTok;} YY_BREAK case 15: +/* rule 15 can match eol */ YY_RULE_SETUP #line 48 "<stdin>" {yyTok = IDENT; return yyTok;} @@ -986,6 +1927,7 @@ YY_RULE_SETUP {yyTok = HEX; return yyTok;} YY_BREAK case 18: +/* rule 18 can match eol */ YY_RULE_SETUP #line 52 "<stdin>" {yyTok = IDSEL; return yyTok;} @@ -1071,11 +2013,13 @@ YY_RULE_SETUP {yyTok = WEBKIT_KEYFRAME_RULE_SYM; return yyTok; } YY_BREAK case 35: +/* rule 35 can match eol */ YY_RULE_SETUP #line 71 "<stdin>" {yyTok = ATKEYWORD; return yyTok; } YY_BREAK case 36: +/* rule 36 can match eol */ YY_RULE_SETUP #line 73 "<stdin>" {yyTok = IMPORTANT_SYM; return yyTok;} @@ -1171,6 +2115,7 @@ YY_RULE_SETUP {yyTok = KHERZ; return yyTok;} YY_BREAK case 55: +/* rule 55 can match eol */ YY_RULE_SETUP #line 93 "<stdin>" {yyTok = DIMEN; return yyTok;} @@ -1196,21 +2141,25 @@ YY_RULE_SETUP {yyTok = NOTFUNCTION; return yyTok;} YY_BREAK case 60: +/* rule 60 can match eol */ YY_RULE_SETUP #line 99 "<stdin>" {yyTok = URI; return yyTok;} YY_BREAK case 61: +/* rule 61 can match eol */ YY_RULE_SETUP #line 100 "<stdin>" {yyTok = URI; return yyTok;} YY_BREAK case 62: +/* rule 62 can match eol */ YY_RULE_SETUP #line 101 "<stdin>" { yyTok = VARCALL; return yyTok; } YY_BREAK case 63: +/* rule 63 can match eol */ YY_RULE_SETUP #line 102 "<stdin>" {yyTok = FUNCTION; return yyTok;} @@ -1242,6 +2191,7 @@ YY_RULE_SETUP #line 111 "<stdin>" ECHO; YY_BREAK +#line 2746 "<stdout>" case YY_END_OF_BUFFER: yy_c_buf_p = yy_cp - 1; yy_cp = yy_c_buf_p; @@ -1255,4 +2205,4 @@ case YY_STATE_EOF(forkeyword): "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ - } /* end of yylex */ +} /* end of yylex */ diff --git a/src/3rdparty/webkit/WebCore/history/qt/HistoryItemQt.cpp b/src/3rdparty/webkit/WebCore/history/qt/HistoryItemQt.cpp index 8bbd233..c5fb069 100644 --- a/src/3rdparty/webkit/WebCore/history/qt/HistoryItemQt.cpp +++ b/src/3rdparty/webkit/WebCore/history/qt/HistoryItemQt.cpp @@ -25,8 +25,9 @@ bool WebCore::HistoryItem::restoreState(QDataStream& in, int version) { - // we support up to version 2 - if (version > 2) + // we only support version 1 for now + + if (version != 1) return false; WebCore::String url; @@ -47,7 +48,6 @@ bool WebCore::HistoryItem::restoreState(QDataStream& in, int version) WebCore::IntPoint scrollPoint; WTF::Vector<int> weeklyVisitCounts; WTF::Vector<int> dailyVisitCounts; - long long documentSequenceNumber; // bool loadFormdata; // WebCore::String formContentType; // WTF::Vector<char> formData; @@ -79,12 +79,6 @@ bool WebCore::HistoryItem::restoreState(QDataStream& in, int version) setTitle(title); setAlternateTitle(altTitle); - if (version > 1) - { - in >> documentSequenceNumber; - setDocumentSequenceNumber(documentSequenceNumber); - } - // at the end load userData in >> validUserData; if (validUserData) { @@ -98,16 +92,15 @@ bool WebCore::HistoryItem::restoreState(QDataStream& in, int version) QDataStream& WebCore::HistoryItem::saveState(QDataStream& out, int version) const { + // we only support version 1 for now. + if (version != 1) + return out; + out << urlString() << title() << alternateTitle() << lastVisitedTime(); out << originalURLString() << referrer() << target() << parent(); out << lastVisitWasHTTPNonGet() << lastVisitWasFailure() << isTargetItem(); out << visitCount() << documentState() << scrollPoint(); out << dailyVisitCounts() << weeklyVisitCounts(); - - // Since version 2 - Q_ASSERT_X(version > 1, "HistoryItem::saveState()", "Stream version should be greater than 1"); - out << documentSequenceNumber(); - /*if (m_formData) { out << true; out << formContentType(); diff --git a/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp index 6a214ab..4c5a93e 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp @@ -740,7 +740,11 @@ void HTMLInputElement::aboutToUnload() bool HTMLInputElement::shouldUseInputMethod() const { - return m_type == TEXT || m_type == SEARCH || m_type == ISINDEX; + // The reason IME's are disabled for the password field is because IMEs + // can access the underlying password and display it in clear text -- + // e.g. you can use it to access the stored password for any site + // with only trivial effort. + return isTextField() && inputType() != PASSWORD; } void HTMLInputElement::handleFocusEvent() diff --git a/src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp index cf667ca..6c49323 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp @@ -63,9 +63,15 @@ void HTMLMetaElement::insertedIntoDocument() void HTMLMetaElement::process() { + if (!inDocument() || m_content.isNull()) + return; + + if (equalIgnoringCase(name(), "viewport")) + document()->processViewport(m_content); + // Get the document to process the tag, but only if we're actually part of DOM tree (changing a meta tag while // it's not in the tree shouldn't have any effect on the document) - if (inDocument() && !m_equiv.isNull() && !m_content.isNull()) + if (!m_equiv.isNull()) document()->processHttpEquiv(m_equiv, m_content); } diff --git a/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp b/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp index 0323e97..316caab 100644 --- a/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp +++ b/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp @@ -1274,7 +1274,11 @@ bool FrameLoader::requestObject(RenderEmbeddedObject* renderer, const String& ur bool useFallback; if (shouldUsePlugin(completedURL, mimeType, renderer->hasFallbackContent(), useFallback)) { Settings* settings = m_frame->settings(); - if (!allowPlugins(AboutToInstantiatePlugin) + if ((!allowPlugins(AboutToInstantiatePlugin) + // Application plugins are plugins implemented by the user agent, for example Qt plugins, + // as opposed to third-party code such as flash. The user agent decides whether or not they are + // permitted, rather than WebKit. + && !MIMETypeRegistry::isApplicationPluginMIMEType(mimeType)) || (!settings->isJavaEnabled() && MIMETypeRegistry::isJavaAppletMIMEType(mimeType))) return false; if (isDocumentSandboxed(SandboxPlugins)) diff --git a/src/3rdparty/webkit/WebCore/page/ChromeClient.h b/src/3rdparty/webkit/WebCore/page/ChromeClient.h index 34e2893..0bfdbaf 100644 --- a/src/3rdparty/webkit/WebCore/page/ChromeClient.h +++ b/src/3rdparty/webkit/WebCore/page/ChromeClient.h @@ -56,6 +56,7 @@ namespace WebCore { class Widget; struct FrameLoadRequest; + struct ViewportArguments; struct WindowFeatures; #if USE(ACCELERATED_COMPOSITING) @@ -145,6 +146,8 @@ namespace WebCore { virtual void setToolTip(const String&, TextDirection) = 0; + virtual void didReceiveViewportArguments(Frame*, const ViewportArguments&) const { } + virtual void print(Frame*) = 0; #if ENABLE(DATABASE) @@ -211,6 +214,9 @@ namespace WebCore { // Sets a flag to specify that the view needs to be updated, so we need // to do an eager layout before the drawing. virtual void scheduleCompositingLayerSync() = 0; + // Returns whether or not the client can render the composited layer, + // regardless of the settings. + virtual bool allowsAcceleratedCompositing() const { return true; } #endif virtual bool supportsFullscreenForNode(const Node*) { return false; } @@ -231,10 +237,11 @@ namespace WebCore { #endif #if ENABLE(WIDGETS_10_SUPPORT) - virtual bool isDocked() { return false; } + virtual bool isWindowed() { return false; } virtual bool isFloating() { return false; } - virtual bool isApplication() { return false; } virtual bool isFullscreen() { return false; } + virtual bool isMaximized() { return false; } + virtual bool isMinimized() { return false; } #endif protected: diff --git a/src/3rdparty/webkit/WebCore/page/FocusController.cpp b/src/3rdparty/webkit/WebCore/page/FocusController.cpp index 089fb8f..6c2a956 100644 --- a/src/3rdparty/webkit/WebCore/page/FocusController.cpp +++ b/src/3rdparty/webkit/WebCore/page/FocusController.cpp @@ -304,7 +304,7 @@ bool FocusController::advanceFocusDirectionally(FocusDirection direction, Keyboa frame = frame->tree()->top(); FocusCandidate focusCandidate; - findFocusableNodeInDirection(frame->document(), focusedNode, direction, event, focusCandidate); + findFocusableNodeInDirection(frame->document()->firstChild(), focusedNode, direction, event, focusCandidate); Node* node = focusCandidate.node; if (!node || !node->isElementNode()) { @@ -341,80 +341,143 @@ bool FocusController::advanceFocusDirectionally(FocusDirection direction, Keyboa return true; } -static void updateFocusCandidateIfCloser(Node* focusedNode, Node* candidate, long long distance, FocusCandidate& closestFocusCandidate) +// FIXME: Make this method more modular, and simpler to understand and maintain. +static void updateFocusCandidateIfCloser(Node* focusedNode, const FocusCandidate& candidate, FocusCandidate& closest) { - // Bail out if |distance| is bigger than the current closest candidate. - if (distance >= closestFocusCandidate.distance) + bool sameDocument = candidate.document() == closest.document(); + if (sameDocument) { + if (closest.alignment > candidate.alignment + || (closest.parentAlignment && candidate.alignment > closest.parentAlignment)) + return; + } else if (closest.alignment > candidate.alignment + && (closest.parentAlignment && candidate.alignment > closest.parentAlignment)) return; - // If |focusedNode| and |candidate| are in the same document AND - // current |closestFocusCandidadte| is not in an {i}frame that is - // preferable to get focused. - if (focusedNode->document() == candidate->document() - && distance < closestFocusCandidate.parentDistance) { - closestFocusCandidate.node = candidate; - closestFocusCandidate.distance = distance; - closestFocusCandidate.parentDistance = maxDistance(); - } else if (focusedNode->document() != candidate->document()) { - // If the |focusedNode| is in an inner document and the |candidate| is - // in a different document, we only consider to change focus if there is - // not another already good focusable candidate in the same document as - // |focusedNode|. - if (!((isInRootDocument(candidate) && !isInRootDocument(focusedNode)) - && focusedNode->document() == closestFocusCandidate.document())) { - closestFocusCandidate.node = candidate; - closestFocusCandidate.distance = distance; - } + if (candidate.alignment != None + || (closest.parentAlignment >= candidate.alignment + && closest.document() == candidate.document())) { + + // If we are now in an higher precedent case, lets reset the current closest's + // distance so we force it to be bigger than any result we will get from + // spatialDistance(). + if (closest.alignment < candidate.alignment + && closest.parentAlignment < candidate.alignment) + closest.distance = maxDistance(); + + closest.alignment = candidate.alignment; + } + + // Bail out if candidate's distance is larger than that of the closest candidate. + if (candidate.distance >= closest.distance) + return; + + if (closest.isNull()) { + closest = candidate; + return; + } + + // If the focused node and the candadate are in the same document and current + // closest candidate is not in an {i}frame that is preferable to get focused ... + if (focusedNode->document() == candidate.document() + && candidate.distance < closest.parentDistance) + closest = candidate; + else if (focusedNode->document() != candidate.document()) { + // If the focusedNode is in an inner document and candidate is in a + // different document, we only consider to change focus if there is not + // another already good focusable candidate in the same document as focusedNode. + if (!((isInRootDocument(candidate.node) && !isInRootDocument(focusedNode)) + && focusedNode->document() == closest.document())) + closest = candidate; } } -void FocusController::findFocusableNodeInDirection(Document* document, Node* focusedNode, FocusDirection direction, KeyboardEvent* event, FocusCandidate& closestFocusCandidate) +void FocusController::findFocusableNodeInDirection(Node* outer, Node* focusedNode, + FocusDirection direction, KeyboardEvent* event, + FocusCandidate& closestFocusCandidate, + const FocusCandidate& candidateParent) { - ASSERT(document); - - // Walk all the child nodes and update focusCandidate if we find a nearer node. - for (Node* candidate = document->firstChild(); candidate; candidate = candidate->traverseNextNode()) { + ASSERT(outer); + ASSERT(candidateParent.isNull() + || candidateParent.node->hasTagName(frameTag) + || candidateParent.node->hasTagName(iframeTag)); + + // Walk all the child nodes and update closestFocusCandidate if we find a nearer node. + Node* candidate = outer; + while (candidate) { // Inner documents case. + if (candidate->isFrameOwnerElement()) - deepFindFocusableNodeInDirection(focusedNode, candidate, direction, event, closestFocusCandidate); + deepFindFocusableNodeInDirection(candidate, focusedNode, direction, event, closestFocusCandidate); else if (candidate != focusedNode && candidate->isKeyboardFocusable(event)) { - long long distance = distanceInDirection(focusedNode, candidate, - direction, closestFocusCandidate); - updateFocusCandidateIfCloser(focusedNode, candidate, distance, closestFocusCandidate); + FocusCandidate currentFocusCandidate(candidate); + + // Get distance and alignment from current candidate. + distanceDataForNode(direction, focusedNode, currentFocusCandidate); + + // Bail out if distance is maximum. + if (currentFocusCandidate.distance == maxDistance()) { + candidate = candidate->traverseNextNode(outer->parent()); + continue; + } + + // If candidateParent is not null, it means that we are in a recursive call + // from deepFineFocusableNodeInDirection (i.e. processing an element in an iframe), + // and holds the distance and alignment data of the iframe element itself. + if (!candidateParent.isNull()) { + currentFocusCandidate.parentAlignment = candidateParent.alignment; + currentFocusCandidate.parentDistance = candidateParent.distance; + } + + updateFocusCandidateIfCloser(focusedNode, currentFocusCandidate, closestFocusCandidate); } + + candidate = candidate->traverseNextNode(outer->parent()); } } -void FocusController::deepFindFocusableNodeInDirection(Node* focusedNode, Node* candidate, FocusDirection direction, KeyboardEvent* event, FocusCandidate& closestFocusCandidate) +void FocusController::deepFindFocusableNodeInDirection(Node* container, Node* focusedNode, + FocusDirection direction, KeyboardEvent* event, + FocusCandidate& closestFocusCandidate) { - HTMLFrameOwnerElement* owner = static_cast<HTMLFrameOwnerElement*>(candidate); - if (!owner->contentFrame()) + ASSERT(container->hasTagName(frameTag) || container->hasTagName(iframeTag)); + + // Track if focusedNode is a descendant of the current container node being processed. + bool descendantOfContainer = false; + Node* firstChild = 0; + + // Iframe or Frame. + if (container->hasTagName(frameTag) || container->hasTagName(iframeTag)) { + + HTMLFrameOwnerElement* owner = static_cast<HTMLFrameOwnerElement*>(container); + if (!owner->contentFrame()) + return; + + Document* innerDocument = owner->contentFrame()->document(); + if (!innerDocument) + return; + + descendantOfContainer = innerDocument == focusedNode->document(); + firstChild = innerDocument->firstChild(); + + } + + if (descendantOfContainer) { + findFocusableNodeInDirection(firstChild, focusedNode, direction, event, closestFocusCandidate); return; + } - Document* innerDocument = owner->contentFrame()->document(); - if (!innerDocument) + // Check if the current container element itself is a good candidate + // to move focus to. If it is, then we traverse its inner nodes. + FocusCandidate candidateParent = FocusCandidate(container); + distanceDataForNode(direction, focusedNode, candidateParent); + + // Bail out if distance is maximum. + if (candidateParent.distance == maxDistance()) return; - if (innerDocument == focusedNode->document()) - findFocusableNodeInDirection(innerDocument, focusedNode, direction, event, closestFocusCandidate); - else { - // Check if the current {i}frame element itself is a good candidate - // to move focus to. If it is, then we traverse its inner nodes. - // Lets pass a copy of the best candidate, to not get fooled by a - // frame without focusable elements. - FocusCandidate focusCandidateCopy = closestFocusCandidate; - long long distance = distanceInDirection(focusedNode, candidate, direction, focusCandidateCopy); - if (distance < focusCandidateCopy.distance) { - focusCandidateCopy.parentAlignment = focusCandidateCopy.alignment; - focusCandidateCopy.parentDistance = distance; - - findFocusableNodeInDirection(innerDocument, focusedNode, direction, event, focusCandidateCopy); - - // If we really have an inner closer focus candidate node, take it. - if (closestFocusCandidate.node != focusCandidateCopy.node) - closestFocusCandidate = focusCandidateCopy; - } - } + // FIXME: Consider alignment? + if (candidateParent.distance < closestFocusCandidate.distance) + findFocusableNodeInDirection(firstChild, focusedNode, direction, event, closestFocusCandidate, candidateParent); } static bool relinquishesEditingFocus(Node *node) diff --git a/src/3rdparty/webkit/WebCore/page/FocusController.h b/src/3rdparty/webkit/WebCore/page/FocusController.h index 75591c7..4410833 100644 --- a/src/3rdparty/webkit/WebCore/page/FocusController.h +++ b/src/3rdparty/webkit/WebCore/page/FocusController.h @@ -27,6 +27,7 @@ #define FocusController_h #include "FocusDirection.h" +#include "SpatialNavigation.h" #include <wtf/Forward.h> #include <wtf/Noncopyable.h> #include <wtf/RefPtr.h> @@ -38,7 +39,6 @@ class Frame; class KeyboardEvent; class Node; class Page; -struct FocusCandidate; class FocusController : public Noncopyable { public: @@ -63,8 +63,10 @@ private: bool advanceFocusDirectionally(FocusDirection, KeyboardEvent*); bool advanceFocusInDocumentOrder(FocusDirection, KeyboardEvent*, bool initialFocus); - void findFocusableNodeInDirection(Document*, Node*, FocusDirection, KeyboardEvent*, FocusCandidate&); - void deepFindFocusableNodeInDirection(Node*, Node*, FocusDirection, KeyboardEvent*, FocusCandidate&); + void findFocusableNodeInDirection(Node* outter, Node*, FocusDirection, KeyboardEvent*, + FocusCandidate& closestFocusCandidate, + const FocusCandidate& parentCandidate = FocusCandidate()); + void deepFindFocusableNodeInDirection(Node* container, Node* focused, FocusDirection, KeyboardEvent*, FocusCandidate&); Page* m_page; RefPtr<Frame> m_focusedFrame; diff --git a/src/3rdparty/webkit/WebCore/page/FrameView.cpp b/src/3rdparty/webkit/WebCore/page/FrameView.cpp index 45764de..39c92de 100644 --- a/src/3rdparty/webkit/WebCore/page/FrameView.cpp +++ b/src/3rdparty/webkit/WebCore/page/FrameView.cpp @@ -1067,6 +1067,7 @@ void FrameView::scrollPositionChanged() if (!m_nestedLayoutCount) { if (RenderView* root = m_frame->contentRenderer()) { root->updateWidgetPositions(); + root->layer()->updateRepaintRectsAfterScroll(); #if USE(ACCELERATED_COMPOSITING) if (root->usesCompositing()) root->compositor()->updateCompositingLayers(CompositingUpdateOnScroll); diff --git a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp index 86c9c5d..890eacd 100644 --- a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp +++ b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp @@ -46,16 +46,21 @@ static bool areRectsFullyAligned(FocusDirection, const IntRect&, const IntRect&) static bool areRectsPartiallyAligned(FocusDirection, const IntRect&, const IntRect&); static bool isRectInDirection(FocusDirection, const IntRect&, const IntRect&); static void deflateIfOverlapped(IntRect&, IntRect&); +static bool checkNegativeCoordsForNode(Node*, const IntRect&); -long long distanceInDirection(Node* start, Node* dest, FocusDirection direction, FocusCandidate& candidate) +void distanceDataForNode(FocusDirection direction, Node* start, FocusCandidate& candidate) { RenderObject* startRender = start->renderer(); - if (!startRender) - return maxDistance(); + if (!startRender) { + candidate.distance = maxDistance(); + return; + } - RenderObject* destRender = dest->renderer(); - if (!destRender) - return maxDistance(); + RenderObject* destRender = candidate.node->renderer(); + if (!destRender) { + candidate.distance = maxDistance(); + return; + } IntRect curRect = renderRectRelativeToRootDocument(startRender); IntRect targetRect = renderRectRelativeToRootDocument(destRender); @@ -64,40 +69,34 @@ long long distanceInDirection(Node* start, Node* dest, FocusDirection direction, // deflate both. deflateIfOverlapped(curRect, targetRect); + // If empty rects or negative width or height, bail out. if (curRect.isEmpty() || targetRect.isEmpty() - || targetRect.x() < 0 || targetRect.y() < 0) - return maxDistance(); + || targetRect.width() <= 0 || targetRect.height() <= 0) { + candidate.distance = maxDistance(); + return; + } - if (!isRectInDirection(direction, curRect, targetRect)) - return maxDistance(); + // Negative coordinates can be used if node is scrolled up offscreen. + if (!checkNegativeCoordsForNode(start, curRect)) { + candidate.distance = maxDistance(); + return; + } + + if (!checkNegativeCoordsForNode(candidate.node, targetRect)) { + candidate.distance = maxDistance(); + return; + } + + if (!isRectInDirection(direction, curRect, targetRect)) { + candidate.distance = maxDistance(); + return; + } // The distance between two nodes is not to be considered alone when evaluating/looking // for the best focus candidate node. Alignment of rects can be also a good point to be // considered in order to make the algorithm to behavior in a more intuitive way. - RectsAlignment alignment = alignmentForRects(direction, curRect, targetRect); - - bool sameDocument = dest->document() == candidate.document(); - if (sameDocument) { - if (candidate.alignment > alignment || (candidate.parentAlignment && alignment > candidate.parentAlignment)) - return maxDistance(); - } else if (candidate.alignment > alignment && (candidate.parentAlignment && alignment > candidate.parentAlignment)) - return maxDistance(); - - // FIXME_tonikitoo: simplify the logic here ! - if (alignment != None - || (!candidate.isNull() && candidate.parentAlignment >= alignment - && candidate.document() == dest->document())) { - - // If we are now in an higher precedent case, lets reset the current |candidate|'s - // |distance| so we force it to be bigger than the result we will get from - // |spatialDistance| (see below). - if (candidate.alignment < alignment && candidate.parentAlignment < alignment) - candidate.distance = maxDistance(); - - candidate.alignment = alignment; - } - - return spatialDistance(direction, curRect, targetRect); + candidate.alignment = alignmentForRects(direction, curRect, targetRect); + candidate.distance = spatialDistance(direction, curRect, targetRect); } // FIXME: This function does not behave correctly with transformed frames. @@ -107,6 +106,11 @@ static IntRect renderRectRelativeToRootDocument(RenderObject* render) IntRect rect(render->absoluteClippedOverflowRect()); + if (rect.isEmpty()) { + Element* e = static_cast<Element*>(render->node()); + rect = e->getRect(); + } + // In cases when the |render|'s associated node is in a scrollable inner // document, we only consider its scrollOffset if it is not offscreen. Node* node = render->node(); @@ -432,6 +436,9 @@ bool hasOffscreenRect(Node* node) return true; IntRect rect(render->absoluteClippedOverflowRect()); + if (rect.isEmpty()) + return true; + return !containerViewportRect.intersects(rect); } @@ -500,4 +507,24 @@ static void deflateIfOverlapped(IntRect& a, IntRect& b) b.inflate(fudgeFactor); } +static bool checkNegativeCoordsForNode(Node* node, const IntRect& curRect) +{ + ASSERT(node || node->renderer()); + + if (curRect.x() > 0 && curRect.y() > 0) + return true; + + bool canBeScrolled = false; + + RenderObject* renderer = node->renderer(); + for (; renderer; renderer = renderer->parent()) { + if (renderer->isBox() && toRenderBox(renderer)->canBeScrolledAndHasScrollableArea()) { + canBeScrolled = true; + break; + } + } + + return canBeScrolled; +} + } // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.h b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.h index 7c183df..90ff1cf 100644 --- a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.h +++ b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.h @@ -118,7 +118,7 @@ struct FocusCandidate { RectsAlignment parentAlignment; }; -long long distanceInDirection(Node*, Node*, FocusDirection, FocusCandidate&); +void distanceDataForNode(FocusDirection direction, Node* start, FocusCandidate& candidate); bool scrollInDirection(Frame*, FocusDirection); void scrollIntoView(Element*); bool hasOffscreenRect(Node*); diff --git a/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp b/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp index 2fcce5b..5b24eae 100644 --- a/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp +++ b/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp @@ -51,7 +51,7 @@ #include "NotImplemented.h" QT_BEGIN_NAMESPACE -Q_DECL_IMPORT extern bool qt_tab_all_widgets; // from qapplication.cpp +Q_GUI_EXPORT extern bool qt_tab_all_widgets; // from qapplication.cpp QT_END_NAMESPACE namespace WebCore { diff --git a/src/3rdparty/webkit/WebCore/platform/Arena.h b/src/3rdparty/webkit/WebCore/platform/Arena.h index b6f6931..bc49307 100644 --- a/src/3rdparty/webkit/WebCore/platform/Arena.h +++ b/src/3rdparty/webkit/WebCore/platform/Arena.h @@ -44,7 +44,7 @@ namespace WebCore { -typedef unsigned long uword; +typedef uintptr_t uword; struct Arena { Arena* next; // next arena diff --git a/src/3rdparty/webkit/WebCore/platform/FileSystem.h b/src/3rdparty/webkit/WebCore/platform/FileSystem.h index 856d5bb..c236831 100644 --- a/src/3rdparty/webkit/WebCore/platform/FileSystem.h +++ b/src/3rdparty/webkit/WebCore/platform/FileSystem.h @@ -69,9 +69,11 @@ typedef HMODULE PlatformModule; #elif PLATFORM(QT) #if defined(Q_WS_MAC) typedef CFBundleRef PlatformModule; -#else +#elif !defined(QT_NO_LIBRARY) typedef QLibrary* PlatformModule; -#endif // defined(Q_WS_MAC) +#else +typedef void* PlatformModule; +#endif #elif PLATFORM(GTK) typedef GModule* PlatformModule; #elif PLATFORM(CF) diff --git a/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h b/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h index 8801ac1..27c2c3a 100644 --- a/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h +++ b/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h @@ -67,6 +67,10 @@ public: // Check to see if a mime type is a valid Java applet mime type static bool isJavaAppletMIMEType(const String& mimeType); + // Check to see if a mime type is a plugin implemented by the + // browser (e.g. a Qt Plugin). + static bool isApplicationPluginMIMEType(const String& mimeType); + static HashSet<String>& getSupportedImageMIMETypes(); static HashSet<String>& getSupportedImageResourceMIMETypes(); static HashSet<String>& getSupportedImageMIMETypesForEncoding(); diff --git a/src/3rdparty/webkit/WebCore/platform/StaticConstructors.h b/src/3rdparty/webkit/WebCore/platform/StaticConstructors.h index c0a9a53..0d817a4df 100644 --- a/src/3rdparty/webkit/WebCore/platform/StaticConstructors.h +++ b/src/3rdparty/webkit/WebCore/platform/StaticConstructors.h @@ -51,7 +51,7 @@ #ifndef SKIP_STATIC_CONSTRUCTORS_ON_GCC // Define an global in the normal way. -#if COMPILER(MSVC7) +#if COMPILER(MSVC7_OR_LOWER) #define DEFINE_GLOBAL(type, name) \ const type name; #elif COMPILER(WINSCW) @@ -65,7 +65,7 @@ #else // Define an correctly-sized array of pointers to avoid static initialization. // Use an array of pointers instead of an array of char in case there is some alignment issue. -#if COMPILER(MSVC7) +#if COMPILER(MSVC7_OR_LOWER) #define DEFINE_GLOBAL(type, name) \ void * name[(sizeof(type) + sizeof(void *) - 1) / sizeof(void *)]; #elif COMPILER(WINSCW) diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp index 1fdc1e5..035d1c5 100644 --- a/src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp +++ b/src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp @@ -50,7 +50,8 @@ #elif PLATFORM(GTK) #include "MediaPlayerPrivateGStreamer.h" #elif PLATFORM(QT) -#if QT_VERSION < 0x040700 +// QtMultimedia support is disabled currently. +#if 1 || (QT_VERSION < 0x040700) #include "MediaPlayerPrivatePhonon.h" #else #include "MediaPlayerPrivateQt.h" diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp index 0a1075f..0565deb 100644 --- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp @@ -58,6 +58,9 @@ FontPlatformData::FontPlatformData(const FontDescription& description, const Ato font.setLetterSpacing(QFont::AbsoluteSpacing, letterSpacing); const bool smallCaps = description.smallCaps(); font.setCapitalization(smallCaps ? QFont::SmallCaps : QFont::MixedCase); +#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) + font.setStyleStrategy(QFont::ForceIntegerMetrics); +#endif m_data->bold = font.bold(); m_data->size = font.pointSizeF(); diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp index fd75e34..1e92dcc 100644 --- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp @@ -180,9 +180,7 @@ float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFon String sanitized = Font::normalizeSpaces(String(run.characters(), run.length())); QString string = fromRawDataWithoutRef(sanitized); - QTextLayout layout(string, font()); - QTextLine line = setupLayout(&layout, run); - int w = int(line.naturalTextWidth()); + int w = QFontMetrics(font()).width(string); // WebKit expects us to ignore word spacing on the first character (as opposed to what Qt does) if (treatAsSpace(run[0])) w -= m_wordSpacing; diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp index 2913eef..1c4c275 100644 --- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp @@ -32,15 +32,13 @@ #include <QtCore/qmetaobject.h> #include <QtCore/qset.h> #include <QtCore/qtimer.h> -#include <QtGui/qbitmap.h> #include <QtGui/qcolor.h> #include <QtGui/qgraphicseffect.h> #include <QtGui/qgraphicsitem.h> #include <QtGui/qgraphicsscene.h> -#include <QtGui/qmatrix4x4.h> #include <QtGui/qpainter.h> -#include <QtGui/qpalette.h> #include <QtGui/qpixmap.h> +#include <QtGui/qpixmapcache.h> #include <QtGui/qstyleoption.h> namespace WebCore { @@ -134,6 +132,8 @@ public: // the compositor lets us special-case images and colors, so we try to do so enum StaticContentType { HTMLContentType, PixmapContentType, ColorContentType, MediaContentType}; + const GraphicsLayerQtImpl* rootLayer() const; + GraphicsLayerQtImpl(GraphicsLayerQt* newLayer); virtual ~GraphicsLayerQtImpl(); @@ -142,28 +142,25 @@ public: virtual QRectF boundingRect() const; virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); - // we manage transforms ourselves because transform-origin acts differently in webkit and in Qt + // We manage transforms ourselves because transform-origin acts differently in webkit and in Qt, and we need it as a fallback in case we encounter an un-invertible matrix void setBaseTransform(const TransformationMatrix&); - QTransform computeTransform(const TransformationMatrix& baseTransform) const; void updateTransform(); // let the compositor-API tell us which properties were changed void notifyChange(ChangeMask); + // actual rendering of the web-content into a QPixmap + // We prefer to use our own caching because it gives us a higher level of granularity than QGraphicsItem cache modes - + // sometimes we need to cache the contents even `though the item needs to be updated, e.g. when the background-color is changed. + // TODO: investigate if QGraphicsItem caching can be improved to support that out of the box. + QPixmap recache(const QRegion&); + // called when the compositor is ready for us to show the changes on screen // this is called indirectly from ChromeClientQt::setNeedsOneShotDrawingSynchronization // (meaning the sync would happen together with the next draw) // or ChromeClientQt::scheduleCompositingLayerSync (meaning the sync will happen ASAP) void flushChanges(bool recursive = true, bool forceTransformUpdate = false); - // optimization: when we have an animation running on an element with no contents, that has child-elements with contents, - // ALL of them have to have ItemCoordinateCache and not DeviceCoordinateCache - void adjustCachingRecursively(bool animationIsRunning); - - // optimization: returns true if this or an ancestor has a transform animation running. - // this enables us to use ItemCoordinatesCache while the animation is running, otherwise we have to recache for every frame - bool isTransformAnimationRunning() const; - public slots: // we need to notify the client (aka the layer compositor) when the animation actually starts void notifyAnimationStarted(); @@ -179,6 +176,7 @@ public: GraphicsLayerQt* m_layer; TransformationMatrix m_baseTransform; + TransformationMatrix m_transformRelativeToRootLayer; bool m_transformAnimationRunning; bool m_opacityAnimationRunning; QWeakPointer<MaskEffectQt> m_maskEffect; @@ -207,6 +205,7 @@ public: int m_changeMask; QSizeF m_size; + QPixmapCache::Key m_backingStoreKey; #ifndef QT_NO_ANIMATION QList<QWeakPointer<QAbstractAnimation> > m_animations; #endif @@ -259,9 +258,6 @@ GraphicsLayerQtImpl::GraphicsLayerQtImpl(GraphicsLayerQt* newLayer) // they are ignored and passed to the item below. setEnabled(true); - // we'll set the cache when we know what's going on - setCacheMode(NoCache); - connect(this, SIGNAL(notifyAnimationStartedAsync()), this, SLOT(notifyAnimationStarted()), Qt::QueuedConnection); } @@ -287,80 +283,138 @@ GraphicsLayerQtImpl::~GraphicsLayerQtImpl() #endif } -void GraphicsLayerQtImpl::adjustCachingRecursively(bool animationIsRunning) +const GraphicsLayerQtImpl* GraphicsLayerQtImpl::rootLayer() const { - // optimization: we make sure all our children have ItemCoordinateCache - - // otherwise we end up re-rendering them during the animation - const QList<QGraphicsItem*> children = childItems(); - - for (QList<QGraphicsItem*>::const_iterator it = children.begin(); it != children.end(); ++it) { - if (QGraphicsItem* item = *it) - if (GraphicsLayerQtImpl* layer = qobject_cast<GraphicsLayerQtImpl*>(item->toGraphicsObject())) { - if (layer->m_layer->drawsContent() && layer->m_currentContent.contentType == HTMLContentType) - layer->setCacheMode(animationIsRunning ? QGraphicsItem::ItemCoordinateCache : QGraphicsItem::DeviceCoordinateCache); - } - } + if (const GraphicsLayerQtImpl* parent = qobject_cast<const GraphicsLayerQtImpl*>(parentObject())) + return parent->rootLayer(); + return this; } -void GraphicsLayerQtImpl::updateTransform() -{ - setBaseTransform(isTransformAnimationRunning() ? m_baseTransform : m_layer->transform()); -} -void GraphicsLayerQtImpl::setBaseTransform(const TransformationMatrix& baseTransform) -{ - m_baseTransform = baseTransform; - setTransform(computeTransform(baseTransform)); -} -QTransform GraphicsLayerQtImpl::computeTransform(const TransformationMatrix& baseTransform) const +QPixmap GraphicsLayerQtImpl::recache(const QRegion& regionToUpdate) { - if (!m_layer) - return baseTransform; + if (!m_layer->drawsContent()) + return QPixmap(); - TransformationMatrix computedTransform; + QRegion region = regionToUpdate; + QPixmap pixmap; - // The origin for childrenTransform is always the center of the ancestor which contains the childrenTransform. - // this has to do with how WebCore implements -webkit-perspective and -webkit-perspective-origin, which are the CSS - // attribute that call setChildrenTransform - QPointF offset = -pos() - boundingRect().bottomRight() / 2; + // We might be drawing into an existing cache. + if (!QPixmapCache::find(m_backingStoreKey, &pixmap)) + region = QRegion(QRect(0, 0, m_size.width(), m_size.height())); - for (const GraphicsLayerQtImpl* ancestor = this; (ancestor = qobject_cast<GraphicsLayerQtImpl*>(ancestor->parentObject())); ) { - if (!ancestor->m_state.childrenTransform.isIdentity()) { - const QPointF offset = mapFromItem(ancestor, QPointF(ancestor->m_size.width() / 2, ancestor->m_size.height() / 2)); - computedTransform - .translate(offset.x(), offset.y()) - .multLeft(ancestor->m_state.childrenTransform) - .translate(-offset.x(), -offset.y()); - break; - } + if (m_size != pixmap.size()) { + pixmap = QPixmap(m_size.toSize()); + if (!m_layer->contentsOpaque()) + pixmap.fill(Qt::transparent); + m_pendingContent.regionToUpdate = QRegion(QRect(QPoint(0, 0), m_size.toSize())); } + QPainter painter(&pixmap); + GraphicsContext gc(&painter); + + // Clear the area in cache that we're drawing into + painter.setCompositionMode(QPainter::CompositionMode_Clear); + painter.fillRect(region.boundingRect(), Qt::transparent); + + // Render the actual contents into the cache + painter.setCompositionMode(QPainter::CompositionMode_SourceOver); + m_layer->paintGraphicsLayerContents(gc, region.boundingRect()); + + m_backingStoreKey = QPixmapCache::insert(pixmap); + return pixmap; +} + +void GraphicsLayerQtImpl::updateTransform() +{ + if (!m_transformAnimationRunning) + m_baseTransform = m_layer->transform(); + + TransformationMatrix localTransform; + + GraphicsLayerQtImpl* parent = qobject_cast<GraphicsLayerQtImpl*>(parentObject()); + // webkit has relative-to-size originPoint, graphics-view has a pixel originPoint, here we convert // we have to manage this ourselves because QGraphicsView's transformOrigin is incompatible const qreal originX = m_state.anchorPoint.x() * m_size.width(); const qreal originY = m_state.anchorPoint.y() * m_size.height(); - computedTransform - .translate3d(originX, originY, m_state.anchorPoint.z()) - .multLeft(baseTransform) + + // We ignore QGraphicsItem::pos completely, and use only transforms - because we have to maintain that ourselves for 3D. + localTransform + .translate3d(originX + m_state.pos.x(), originY + m_state.pos.y(), m_state.anchorPoint.z()) + .multLeft(m_baseTransform) .translate3d(-originX, -originY, -m_state.anchorPoint.z()); - // now we project to 2D - return QTransform(computedTransform); + // This is the actual 3D transform of this item, with the ancestors' transform baked in. + m_transformRelativeToRootLayer = TransformationMatrix(parent ? parent->m_transformRelativeToRootLayer : TransformationMatrix()) + .multLeft(localTransform); + + // Now we have enough information to determine if the layer is facing backwards. + if (!m_state.backfaceVisibility && m_transformRelativeToRootLayer.inverse().m33() < 0) { + setVisible(false); + // No point in making extra calculations for invisible elements. + return; + } + + // Simplistic depth test - we stack the item behind its parent if its computed z is lower than the parent's computed z at the item's center point. + if (parent) { + const QPointF centerPointMappedToRoot = rootLayer()->mapFromItem(this, m_size.width() / 2, m_size.height() / 2); + setFlag(ItemStacksBehindParent, + m_transformRelativeToRootLayer.mapPoint(FloatPoint3D(centerPointMappedToRoot.x(), centerPointMappedToRoot.y(), 0)).z() < + parent->m_transformRelativeToRootLayer.mapPoint(FloatPoint3D(centerPointMappedToRoot.x(), centerPointMappedToRoot.y(), 0)).z()); + } + + // The item is front-facing or backface-visibility is on. + setVisible(true); + + // Flatten to 2D-space of this item if it doesn't preserve 3D. + if (!m_state.preserves3D) { + m_transformRelativeToRootLayer.setM13(0); + m_transformRelativeToRootLayer.setM23(0); + m_transformRelativeToRootLayer.setM31(0); + m_transformRelativeToRootLayer.setM32(0); + m_transformRelativeToRootLayer.setM33(1); + m_transformRelativeToRootLayer.setM34(0); + m_transformRelativeToRootLayer.setM43(0); + } + + // Apply perspective for the use of this item's children. Perspective is always applied from the item's center. + if (!m_state.childrenTransform.isIdentity()) + m_transformRelativeToRootLayer + .translate(m_size.width() / 2, m_size.height() /2) + .multLeft(m_state.childrenTransform) + .translate(-m_size.width() / 2, -m_size.height() /2); + + bool inverseOk = true; + // Use QTransform::inverse to extrapolate the relative transform of this item, based on the parent's transform relative to + // the root layer and the desired transform for this item relative to the root layer. + const QTransform parentTransform = parent ? parent->itemTransform(rootLayer()) : QTransform(); + const QTransform transform2D = QTransform(m_transformRelativeToRootLayer) * parentTransform.inverted(&inverseOk); + + // In rare cases the transformation cannot be inversed - in that case we don't apply the transformation at all, otherwise we'd flicker. + // FIXME: This should be amended when Qt moves to a real 3D scene-graph. + if (!inverseOk) + return; + + setTransform(transform2D); + + const QList<QGraphicsItem*> children = childItems(); + for (QList<QGraphicsItem*>::const_iterator it = children.begin(); it != children.end(); ++it) + if (GraphicsLayerQtImpl* layer= qobject_cast<GraphicsLayerQtImpl*>((*it)->toGraphicsObject())) + layer->updateTransform(); } -bool GraphicsLayerQtImpl::isTransformAnimationRunning() const +void GraphicsLayerQtImpl::setBaseTransform(const TransformationMatrix& baseTransform) { - if (m_transformAnimationRunning) - return true; - if (GraphicsLayerQtImpl* parent = qobject_cast<GraphicsLayerQtImpl*>(parentObject())) - return parent->isTransformAnimationRunning(); - return false; + m_baseTransform = baseTransform; + updateTransform(); } QPainterPath GraphicsLayerQtImpl::opaqueArea() const { QPainterPath painterPath; + // we try out best to return the opaque area, maybe it will help graphics-view render less items if (m_currentContent.backgroundColor.isValid() && m_currentContent.backgroundColor.alpha() == 0xff) painterPath.addRect(boundingRect()); @@ -384,14 +438,16 @@ QRectF GraphicsLayerQtImpl::boundingRect() const void GraphicsLayerQtImpl::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { if (m_currentContent.backgroundColor.isValid()) - painter->fillRect(option->exposedRect, QColor(m_currentContent.backgroundColor)); + painter->fillRect(option->rect, QColor(m_currentContent.backgroundColor)); switch (m_currentContent.contentType) { case HTMLContentType: if (m_state.drawsContent) { - // this is the expensive bit. we try to minimize calls to this area by proper caching - GraphicsContext gc(painter); - m_layer->paintGraphicsLayerContents(gc, option->exposedRect.toAlignedRect()); + QPixmap backingStore; + // We might need to recache, in case we try to paint and the cache was purged (e.g. if it was full). + if (!QPixmapCache::find(m_backingStoreKey, &backingStore) || backingStore.size() != m_size.toSize()) + backingStore = recache(QRegion(m_state.contentsRect)); + painter->drawPixmap(0, 0, backingStore); } break; case PixmapContentType: @@ -471,15 +527,11 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform if (m_layer->maskLayer()) { if (GraphicsLayerQtImpl* mask = qobject_cast<GraphicsLayerQtImpl*>(m_layer->maskLayer()->platformLayer()->toGraphicsObject())) { mask->m_maskEffect = new MaskEffectQt(this, mask); - mask->setCacheMode(NoCache); setGraphicsEffect(mask->m_maskEffect.data()); } } } - if ((m_changeMask & PositionChange) && (m_layer->position() != m_state.pos)) - setPos(m_layer->position().x(), m_layer->position().y()); - if (m_changeMask & SizeChange) { if (m_layer->size() != m_state.size) { prepareGeometryChange(); @@ -489,9 +541,10 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform // FIXME: this is a hack, due to a probable QGraphicsScene bug when rapidly modifying the perspective // but without this line we get graphic artifacts if ((m_changeMask & ChildrenTransformChange) && m_state.childrenTransform != m_layer->childrenTransform()) - scene()->update(); + if (scene()) + scene()->update(); - if (m_changeMask & (ChildrenTransformChange | Preserves3DChange | TransformChange | AnchorPointChange | SizeChange)) { + if (m_changeMask & (ChildrenTransformChange | Preserves3DChange | TransformChange | AnchorPointChange | SizeChange | BackfaceVisibilityChange | PositionChange)) { // due to the differences between the way WebCore handles transforms and the way Qt handles transforms, // all these elements affect the transforms of all the descendants. forceUpdateTransform = true; @@ -510,8 +563,6 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform break; case ColorContentType: - // no point in caching a solid-color rectangle - setCacheMode(m_layer->maskLayer() ? QGraphicsItem::DeviceCoordinateCache : QGraphicsItem::NoCache); if (m_pendingContent.contentType != m_currentContent.contentType || m_pendingContent.contentsBackgroundColor != m_currentContent.contentsBackgroundColor) update(); m_state.drawsContent = false; @@ -526,14 +577,6 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform update(); if (!m_state.drawsContent && m_layer->drawsContent()) update(); - if (m_layer->drawsContent() && !m_maskEffect) { - setCacheMode(isTransformAnimationRunning() ? ItemCoordinateCache : DeviceCoordinateCache); - - // HTML content: we want to use exposedRect so we don't use WebCore rendering if we don't have to - setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, true); - } - else - setCacheMode(NoCache); setFlag(ItemHasNoContents, !m_layer->drawsContent()); break; @@ -563,15 +606,16 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform if (m_maskEffect) m_maskEffect.data()->update(); - else if (m_changeMask & DisplayChange) + else if (m_changeMask & DisplayChange) { + // Recache now: all the content is ready and we don't want to wait until the paint event. + recache(m_pendingContent.regionToUpdate); update(m_pendingContent.regionToUpdate.boundingRect()); + m_pendingContent.regionToUpdate = QRegion(); + } if ((m_changeMask & BackgroundColorChange) && (m_pendingContent.backgroundColor != m_currentContent.backgroundColor)) update(); - // FIXME: the following flags are currently not handled, as they don't have a clear test or are in low priority - // GeometryOrientationChange, ContentsOrientationChange, BackfaceVisibilityChange, ChildrenTransformChange, Preserves3DChange - m_state.maskLayer = m_layer->maskLayer(); m_state.pos = m_layer->position(); m_state.anchorPoint = m_layer->anchorPoint(); @@ -591,7 +635,6 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform m_currentContent.contentType = m_pendingContent.contentType; m_currentContent.mediaLayer = m_pendingContent.mediaLayer; m_currentContent.backgroundColor = m_pendingContent.backgroundColor; - m_currentContent.regionToUpdate |= m_pendingContent.regionToUpdate; m_currentContent.contentsBackgroundColor = m_pendingContent.contentsBackgroundColor; m_pendingContent.regionToUpdate = QRegion(); m_changeMask = NoChanges; @@ -1014,6 +1057,7 @@ public: , m_webkitPropertyID(values.property()) , m_webkitAnimation(anim) , m_keyframesName(name) + , m_fillsForwards(false) { } @@ -1037,6 +1081,7 @@ public: // we might need this in case the same animation is added again (i.e. resumed by WebCore) const Animation* m_webkitAnimation; QString m_keyframesName; + bool m_fillsForwards; }; // we'd rather have a templatized QAbstractAnimation than QPropertyAnimation / QVariantAnimation; @@ -1121,10 +1166,8 @@ public: ~TransformAnimationQt() { - // this came up during the compositing/animation LayoutTests - // when the animation dies, the transform has to go back to default - if (m_layer) - m_layer.data()->updateTransform(); + if (m_fillsForwards) + setCurrentTime(1); } // the idea is that we let WebCore manage the transform-operations @@ -1135,34 +1178,28 @@ public: { TransformationMatrix transformMatrix; - // sometimes the animation values from WebCore are misleading and we have to use the actual matrix as source - // The Mac implementation simply doesn't try to accelerate those (e.g. 360deg rotation), but we do. - if (progress == 1 || !targetOperations.size() || sourceOperations == targetOperations) { - TransformationMatrix sourceMatrix; - sourceOperations.apply(m_boxSize, sourceMatrix); - transformMatrix = m_sourceMatrix; - transformMatrix.blend(sourceMatrix, 1 - progress); - } else { - bool validTransformLists = true; - const int sourceOperationCount = sourceOperations.size(); - if (sourceOperationCount) { - if (targetOperations.size() != sourceOperationCount) - validTransformLists = false; - else - for (size_t j = 0; j < sourceOperationCount && validTransformLists; ++j) - if (!sourceOperations.operations()[j]->isSameType(*targetOperations.operations()[j])) - validTransformLists = false; - } + bool validTransformLists = true; + const int sourceOperationCount = sourceOperations.size(); + if (sourceOperationCount) { + if (targetOperations.size() != sourceOperationCount) + validTransformLists = false; + else + for (size_t j = 0; j < sourceOperationCount && validTransformLists; ++j) + if (!sourceOperations.operations()[j]->isSameType(*targetOperations.operations()[j])) + validTransformLists = false; + } - if (validTransformLists) { - for (size_t i = 0; i < targetOperations.size(); ++i) - targetOperations.operations()[i]->blend(sourceOperations.at(i), progress)->apply(transformMatrix, m_boxSize); - } else { - targetOperations.apply(m_boxSize, transformMatrix); - transformMatrix.blend(m_sourceMatrix, progress); - } + if (validTransformLists) { + for (size_t i = 0; i < targetOperations.size(); ++i) + targetOperations.operations()[i]->blend(sourceOperations.at(i), progress)->apply(transformMatrix, m_boxSize); + } else { + targetOperations.apply(m_boxSize, transformMatrix); + transformMatrix.blend(m_sourceMatrix, progress); } + m_layer.data()->setBaseTransform(transformMatrix); + if (m_fillsForwards) + m_layer.data()->m_layer->setTransform(m_layer.data()->m_baseTransform); } virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) @@ -1177,10 +1214,11 @@ public: if (newState == QAbstractAnimation::Running) { m_sourceMatrix = m_layer.data()->m_layer->transform(); m_layer.data()->m_transformAnimationRunning = true; - m_layer.data()->adjustCachingRecursively(true); } else if (newState == QAbstractAnimation::Stopped) { + // We update the transform back to the default. This already takes fill-modes into account. m_layer.data()->m_transformAnimationRunning = false; - m_layer.data()->adjustCachingRecursively(false); + if (m_layer && m_layer.data()->m_layer) + m_layer.data()->setBaseTransform(m_layer.data()->m_layer->transform()); } } @@ -1194,6 +1232,11 @@ public: { } + ~OpacityAnimationQt() + { + if (m_fillsForwards) + setCurrentTime(1); + } virtual void applyFrame(const qreal& fromValue, const qreal& toValue, qreal progress) { qreal opacity = qBound(qreal(0), fromValue + (toValue-fromValue)*progress, qreal(1)); @@ -1204,6 +1247,8 @@ public: m_layer.data()->scene()->update(); m_layer.data()->setOpacity(opacity); + if (m_fillsForwards) + m_layer.data()->m_layer->setOpacity(opacity); } virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) @@ -1212,6 +1257,12 @@ public: if (m_layer) m_layer.data()->m_opacityAnimationRunning = (newState == QAbstractAnimation::Running); + + // If stopped, we update the opacity back to the default. This already takes fill-modes into account. + if (newState == Stopped) + if (m_layer && m_layer.data()->m_layer) + m_layer.data()->setOpacity(m_layer.data()->m_layer->opacity()); + } }; @@ -1220,7 +1271,7 @@ bool GraphicsLayerQt::addAnimation(const KeyframeValueList& values, const IntSiz if (!anim->duration() || !anim->iterationCount()) return false; - QAbstractAnimation* newAnim = 0; + AnimationQtBase* newAnim = 0; // fixed: we might already have the Qt animation object associated with this WebCore::Animation object for (QList<QWeakPointer<QAbstractAnimation> >::iterator it = m_impl->m_animations.begin(); it != m_impl->m_animations.end(); ++it) { @@ -1245,6 +1296,7 @@ bool GraphicsLayerQt::addAnimation(const KeyframeValueList& values, const IntSiz // we make sure WebCore::Animation and QAnimation are on the same terms newAnim->setLoopCount(anim->iterationCount()); + newAnim->m_fillsForwards = anim->fillsForwards(); m_impl->m_animations.append(QWeakPointer<QAbstractAnimation>(newAnim)); QObject::connect(&m_impl->m_suspendTimer, SIGNAL(timeout()), newAnim, SLOT(resume())); } @@ -1252,6 +1304,10 @@ bool GraphicsLayerQt::addAnimation(const KeyframeValueList& values, const IntSiz // flush now or flicker... m_impl->flushChanges(false); + // when fill-mode is backwards/both, we set the value to 0 before the delay takes place + if (anim->fillsBackwards()) + newAnim->setCurrentTime(0); + if (anim->delay()) QTimer::singleShot(anim->delay() * 1000, newAnim, SLOT(start())); else @@ -1272,6 +1328,8 @@ void GraphicsLayerQt::removeAnimationsForProperty(AnimatedPropertyID id) if (*it) { AnimationQtBase* anim = static_cast<AnimationQtBase*>(it->data()); if (anim && anim->m_webkitPropertyID == id) { + // We need to stop the animation right away, or it might flicker before it's deleted. + anim->stop(); anim->deleteLater(); it = m_impl->m_animations.erase(it); --it; @@ -1286,7 +1344,9 @@ void GraphicsLayerQt::removeAnimationsForKeyframes(const String& name) if (*it) { AnimationQtBase* anim = static_cast<AnimationQtBase*>((*it).data()); if (anim && anim->m_keyframesName == QString(name)) { - (*it).data()->deleteLater(); + // We need to stop the animation right away, or it might flicker before it's deleted. + anim->stop(); + anim->deleteLater(); it = m_impl->m_animations.erase(it); --it; } diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h b/src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h index cdf101d..96b4baa 100644 --- a/src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h +++ b/src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h @@ -47,7 +47,7 @@ #endif #if PLATFORM(WIN) || (PLATFORM(QT) && OS(WINDOWS)) || (PLATFORM(WX) && OS(WINDOWS)) -#if COMPILER(MINGW) +#if COMPILER(MINGW) && !COMPILER(MINGW64) typedef struct _XFORM XFORM; #else typedef struct tagXFORM XFORM; diff --git a/src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm b/src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm index 7d43505..82348e0 100644 --- a/src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm +++ b/src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm @@ -56,4 +56,9 @@ String MIMETypeRegistry::getPreferredExtensionForMIMEType(const String& type) return wkGetPreferredExtensionForMIMEType(type); } +bool MIMETypeRegistry::isApplicationPluginMIMEType(const String&) +{ + return false; +} + } diff --git a/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp index 4237fca..403718f 100644 --- a/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp +++ b/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp @@ -41,8 +41,9 @@ // What type of connection should be used for the signals of the // QNetworkReply? This depends on if Qt has a bugfix for this or not. -// It is fixed in Qt 4.6.1. See https://bugs.webkit.org/show_bug.cgi?id=32113 -#if QT_VERSION > QT_VERSION_CHECK(4, 6, 0) +// It is fixed in Qt 4.6.3. See https://bugs.webkit.org/show_bug.cgi?id=32113 +// and https://bugs.webkit.org/show_bug.cgi?id=36755 +#if QT_VERSION > QT_VERSION_CHECK(4, 6, 2) #define SIGNAL_CONN Qt::DirectConnection #else #define SIGNAL_CONN Qt::QueuedConnection diff --git a/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp b/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp index 341e6ae..fea64a0 100644 --- a/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp @@ -32,12 +32,14 @@ namespace WebCore { // To achieve the best result we want WebKit to schedule the jobs so we // are using the limit as found in Qt. To allow Qt to fill its queue // and prepare jobs we will schedule two more downloads. +// Per TCP connection there is 1 current processed, 3 possibly pipelined +// and 2 ready to re-fill the pipeline. unsigned initializeMaximumHTTPConnectionCountPerHost() { #ifdef Q_OS_SYMBIAN - return 3 + 2; + return 3 * (1 + 3 + 2); #else - return 6 + 2; + return 6 * (1 + 3 + 2); #endif } diff --git a/src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp index 4093fad..f9ced98 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp @@ -154,11 +154,12 @@ bool unloadModule(PlatformModule module) return ::FreeLibrary(module); #else +#ifndef QT_NO_LIBRARY if (module->unload()) { delete module; return true; } - +#endif return false; #endif } diff --git a/src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp index 22cee6f..4161f81 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp @@ -82,4 +82,10 @@ String MIMETypeRegistry::getMIMETypeForExtension(const String &ext) return "application/octet-stream"; } +bool MIMETypeRegistry::isApplicationPluginMIMEType(const String& mimeType) +{ + return mimeType.startsWith("application/x-qt-plugin", false) + || mimeType.startsWith("application/x-qt-styled-widget", false); +} + } diff --git a/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h b/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h index f03ff08..467941f 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h +++ b/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h @@ -55,6 +55,7 @@ public: // if scheduleSync is true, we schedule a sync ourselves. otherwise, // we wait for the next update and sync the layers then. virtual void markForSync(bool scheduleSync = false) {} + virtual bool allowsAcceleratedCompositing() const { return false; } #endif #if QT_VERSION >= 0x040600 diff --git a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp index 0163adc..577903b 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp @@ -42,7 +42,7 @@ #include "HTMLInputElement.h" #include "HTMLMediaElement.h" #include "HTMLNames.h" -#ifdef Q_WS_MAEMO_5 +#if USE(QT_MOBILE_THEME) #include "Maemo5Webstyle.h" #endif #include "NotImplemented.h" @@ -153,7 +153,7 @@ RenderThemeQt::RenderThemeQt(Page* page) m_buttonFontPixelSize = fontInfo.pixelSize(); #endif -#ifdef Q_WS_MAEMO_5 +#if USE(QT_MOBILE_THEME) m_fallbackStyle = new Maemo5WebStyle; #else m_fallbackStyle = QStyleFactory::create(QLatin1String("windows")); @@ -166,7 +166,7 @@ RenderThemeQt::~RenderThemeQt() delete m_lineEdit; } -#ifdef Q_WS_MAEMO_5 +#if USE(QT_MOBILE_THEME) bool RenderThemeQt::isControlStyled(const RenderStyle* style, const BorderData& border, const FillLayer& fill, const Color& backgroundColor) const { switch (style->appearance()) { @@ -198,7 +198,7 @@ QStyle* RenderThemeQt::fallbackStyle() const QStyle* RenderThemeQt::qStyle() const { -#ifdef Q_WS_MAEMO_5 +#if USE(QT_MOBILE_THEME) return fallbackStyle(); #endif @@ -218,7 +218,7 @@ String RenderThemeQt::extraDefaultStyleSheet() #if ENABLE(NO_LISTBOX_RENDERING) result += String(themeQtNoListboxesUserAgentStyleSheet, sizeof(themeQtNoListboxesUserAgentStyleSheet)); #endif -#ifdef Q_WS_MAEMO_5 +#if USE(QT_MOBILE_THEME) result += String(themeQtMaemo5UserAgentStyleSheet, sizeof(themeQtMaemo5UserAgentStyleSheet)); #endif return result; @@ -648,7 +648,9 @@ bool RenderThemeQt::paintMenuList(RenderObject* o, const RenderObject::PaintInfo void RenderThemeQt::adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle* style, Element*) const { -#ifndef Q_WS_MAEMO_5 +#if USE(QT_MOBILE_THEME) + // Mobile theme uses border radius. +#else // WORKAROUND because html.css specifies -webkit-border-radius for <select> so we override it here // see also http://bugs.webkit.org/show_bug.cgi?id=18399 style->resetBorderRadius(); @@ -870,7 +872,7 @@ bool RenderThemeQt::supportsFocus(ControlPart appearance) const void RenderThemeQt::setPaletteFromPageClientIfExists(QPalette& palette) const { -#ifdef Q_WS_MAEMO_5 +#if USE(QT_MOBILE_THEME) static QPalette lightGrayPalette(Qt::lightGray); palette = lightGrayPalette; return; @@ -932,7 +934,7 @@ ControlPart RenderThemeQt::initializeCommonQStyleOptions(QStyleOption& option, R case SearchFieldCancelButtonPart: { if (isPressed(o)) option.state |= QStyle::State_Sunken; - else if (result == PushButtonPart) + else if (result == PushButtonPart || result == ButtonPart) option.state |= QStyle::State_Raised; break; } diff --git a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h index b16918a..591dd27 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h +++ b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h @@ -75,7 +75,7 @@ public: virtual double caretBlinkInterval() const; -#ifdef Q_WS_MAEMO_5 +#if USE(QT_MOBILE_THEME) virtual bool isControlStyled(const RenderStyle*, const BorderData&, const FillLayer&, const Color& backgroundColor) const; virtual int popupInternalPaddingBottom(RenderStyle*) const; #endif diff --git a/src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp index e9bcaee..7c0fd05 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp @@ -40,6 +40,8 @@ namespace WebCore { class SharedTimerQt : public QObject { + Q_OBJECT + friend void setSharedTimerFiredFunction(void (*f)()); public: static SharedTimerQt* inst(); @@ -50,15 +52,18 @@ public: protected: void timerEvent(QTimerEvent* ev); +private slots: + void destroy(); + private: - SharedTimerQt(QObject* parent); + SharedTimerQt(); ~SharedTimerQt(); QBasicTimer m_timer; void (*m_timerFunction)(); }; -SharedTimerQt::SharedTimerQt(QObject* parent) - : QObject(parent) +SharedTimerQt::SharedTimerQt() + : QObject() , m_timerFunction(0) {} @@ -68,11 +73,18 @@ SharedTimerQt::~SharedTimerQt() (m_timerFunction)(); } +void SharedTimerQt::destroy() +{ + delete this; +} + SharedTimerQt* SharedTimerQt::inst() { static QPointer<SharedTimerQt> timer; - if (!timer) - timer = new SharedTimerQt(QCoreApplication::instance()); + if (!timer) { + timer = new SharedTimerQt(); + timer->connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), SLOT(destroy())); + } return timer; } @@ -129,6 +141,8 @@ void stopSharedTimer() SharedTimerQt::inst()->stop(); } +#include "SharedTimerQt.moc" + } // vim: ts=4 sw=4 et diff --git a/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp b/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp index ab73891..eed17a5 100644 --- a/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp +++ b/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp @@ -108,7 +108,7 @@ String TextStream::release() return String::adopt(m_text); } -#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC) +#if OS(WINDOWS) && CPU(X86_64) TextStream& TextStream::operator<<(__int64 i) { char buffer[printBufferSize]; diff --git a/src/3rdparty/webkit/WebCore/platform/text/TextStream.h b/src/3rdparty/webkit/WebCore/platform/text/TextStream.h index 1225505..522da53 100644 --- a/src/3rdparty/webkit/WebCore/platform/text/TextStream.h +++ b/src/3rdparty/webkit/WebCore/platform/text/TextStream.h @@ -45,7 +45,7 @@ public: TextStream& operator<<(const char*); TextStream& operator<<(void*); TextStream& operator<<(const String&); -#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC) +#if OS(WINDOWS) && CPU(X86_64) TextStream& operator<<(unsigned __int64); TextStream& operator<<(__int64); #endif diff --git a/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp b/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp index 38acdd9..df9a29b 100644 --- a/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp +++ b/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp @@ -345,7 +345,7 @@ void PluginView::stop() WNDPROC currentWndProc = (WNDPROC)GetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC); if (currentWndProc == PluginViewWndProc) - SetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC, (LONG)m_pluginWndProc); + SetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC, (LONG_PTR)m_pluginWndProc); #endif } #endif // XP_WIN @@ -1296,9 +1296,7 @@ void PluginView::keepAlive(NPP instance) view->keepAlive(); } -#endif -#if ENABLE(NETSCAPE_PLUGIN_API) NPError PluginView::getValueStatic(NPNVariable variable, void* value) { LOG(Plugins, "PluginView::getValueStatic(%s)", prettyNameForNPNVariable(variable).data()); @@ -1309,7 +1307,6 @@ NPError PluginView::getValueStatic(NPNVariable variable, void* value) return NPERR_GENERIC_ERROR; } -#endif NPError PluginView::getValue(NPNVariable variable, void* value) { @@ -1319,13 +1316,10 @@ NPError PluginView::getValue(NPNVariable variable, void* value) if (platformGetValue(variable, value, &result)) return result; -#if ENABLE(NETSCAPE_PLUGIN_API) if (platformGetValueStatic(variable, value, &result)) return result; -#endif switch (variable) { -#if ENABLE(NETSCAPE_PLUGIN_API) case NPNVWindowNPObject: { if (m_isJavaScriptPaused) return NPERR_GENERIC_ERROR; @@ -1360,7 +1354,6 @@ NPError PluginView::getValue(NPNVariable variable, void* value) return NPERR_NO_ERROR; } -#endif case NPNVprivateModeBool: { Page* page = m_parentFrame->page(); @@ -1374,6 +1367,7 @@ NPError PluginView::getValue(NPNVariable variable, void* value) return NPERR_GENERIC_ERROR; } } +#endif void PluginView::privateBrowsingStateChanged(bool privateBrowsingEnabled) { diff --git a/src/3rdparty/webkit/WebCore/plugins/PluginView.h b/src/3rdparty/webkit/WebCore/plugins/PluginView.h index 21a25f6..51b2127 100644 --- a/src/3rdparty/webkit/WebCore/plugins/PluginView.h +++ b/src/3rdparty/webkit/WebCore/plugins/PluginView.h @@ -139,8 +139,9 @@ namespace WebCore { static const char* userAgentStatic(); #endif void status(const char* message); - NPError getValue(NPNVariable variable, void* value); + #if ENABLE(NETSCAPE_PLUGIN_API) + NPError getValue(NPNVariable variable, void* value); static NPError getValueStatic(NPNVariable variable, void* value); #endif NPError setValue(NPPVariable variable, void* value); diff --git a/src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp b/src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp index ed5ad1b..bd51a98 100644 --- a/src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp +++ b/src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp @@ -67,12 +67,12 @@ NPError PluginView::handlePostReadFile(Vector<char>&, uint32, const char*) return 0; } +#if ENABLE(NETSCAPE_PLUGIN_API) bool PluginView::platformGetValue(NPNVariable, void*, NPError*) { return false; } -#if ENABLE(NETSCAPE_PLUGIN_API) bool PluginView::platformGetValueStatic(NPNVariable, void*, NPError*) { return false; @@ -126,4 +126,14 @@ void PluginView::keepAlive(NPP) } #endif +#if PLATFORM(MAC) || PLATFORM(CHROMIUM) || PLATFORM(EFL) +void PluginView::privateBrowsingStateChanged(bool) +{ +} + +void PluginView::setJavaScriptPaused(bool) +{ +} +#endif + } // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp b/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp index bae3b7f..108fcca 100644 --- a/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp +++ b/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp @@ -414,11 +414,11 @@ bool PluginView::platformStart() void PluginView::platformDestroy() { - QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient(); - if (client && qobject_cast<QGraphicsWebView*>(client->pluginParent())) - delete static_cast<PluginContainerSymbian*>(platformPluginWidget())->proxy(); - else - delete platformPluginWidget(); + if (platformPluginWidget()) { + PluginContainerSymbian* container = static_cast<PluginContainerSymbian*>(platformPluginWidget()); + delete container->proxy(); + delete container; + } } void PluginView::halt() diff --git a/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp b/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp index 9d869ab..e37714a 100644 --- a/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp +++ b/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp @@ -544,7 +544,7 @@ void PluginView::paintIntoTransformedContext(HDC hdc) NPEvent npEvent; npEvent.event = WM_WINDOWPOSCHANGED; - npEvent.lParam = reinterpret_cast<uint32>(&windowpos); + npEvent.lParam = reinterpret_cast<uintptr_t>(&windowpos); npEvent.wParam = 0; dispatchNPEvent(npEvent); @@ -552,7 +552,7 @@ void PluginView::paintIntoTransformedContext(HDC hdc) setNPWindowRect(frameRect()); npEvent.event = WM_PAINT; - npEvent.wParam = reinterpret_cast<uint32>(hdc); + npEvent.wParam = reinterpret_cast<uintptr_t>(hdc); // This is supposed to be a pointer to the dirty rect, but it seems that the Flash plugin // ignores it so we just pass null. @@ -829,7 +829,7 @@ void PluginView::setNPWindowRect(const IntRect& rect) #else WNDPROC currentWndProc = (WNDPROC)GetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC); if (currentWndProc != PluginViewWndProc) - m_pluginWndProc = (WNDPROC)SetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC, (LONG)PluginViewWndProc); + m_pluginWndProc = (WNDPROC)SetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC, (LONG_PTR)PluginViewWndProc); #endif } } @@ -978,7 +978,7 @@ bool PluginView::platformStart() // Calling SetWindowLongPtrA here makes the window proc ASCII, which is required by at least // the Shockwave Director plug-in. -#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC) +#if OS(WINDOWS) && CPU(X86_64) ::SetWindowLongPtrA(platformPluginWidget(), GWLP_WNDPROC, (LONG_PTR)DefWindowProcA); #elif OS(WINCE) ::SetWindowLong(platformPluginWidget(), GWL_WNDPROC, (LONG)DefWindowProc); diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp index 1c0e837..c6818f8 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp @@ -1179,10 +1179,9 @@ void RenderBox::computeRectForRepaint(RenderBoxModelObject* repaintContainer, In IntPoint topLeft = rect.location(); topLeft.move(x(), y()); - if (style()->position() == FixedPosition) - fixed = true; + EPosition position = style()->position(); - if (o->isBlockFlow() && style()->position() != AbsolutePosition && style()->position() != FixedPosition) { + if (o->isBlockFlow() && position != AbsolutePosition && position != FixedPosition) { RenderBlock* cb = toRenderBlock(o); if (cb->hasColumns()) { IntRect repaintRect(topLeft, rect.size()); @@ -1195,16 +1194,17 @@ void RenderBox::computeRectForRepaint(RenderBoxModelObject* repaintContainer, In // We are now in our parent container's coordinate space. Apply our transform to obtain a bounding box // in the parent's coordinate space that encloses us. if (layer() && layer()->transform()) { - fixed = false; + fixed = position == FixedPosition; rect = layer()->transform()->mapRect(rect); // FIXME: this clobbers topLeft adjustment done for multicol above topLeft = rect.location(); topLeft.move(x(), y()); - } + } else if (position == FixedPosition) + fixed = true; - if (style()->position() == AbsolutePosition && o->isRelPositioned() && o->isRenderInline()) + if (position == AbsolutePosition && o->isRelPositioned() && o->isRenderInline()) topLeft += toRenderInline(o)->relativePositionedInlineOffset(this); - else if (style()->position() == RelativePosition && layer()) { + else if (position == RelativePosition && layer()) { // Apply the relative position offset when invalidating a rectangle. The layer // is translated, but the render box isn't, so we need to do this to get the // right dirty rect. Since this is called from RenderObject::setStyle, the relative position diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp index 15ffb64..3314772 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp @@ -332,6 +332,22 @@ void RenderLayer::computeRepaintRects() m_outlineBox = renderer()->outlineBoundsForRepaint(repaintContainer); } +void RenderLayer::updateRepaintRectsAfterScroll(bool fixed) +{ + if (fixed || renderer()->style()->position() == FixedPosition) { + computeRepaintRects(); + fixed = true; + } else if (renderer()->hasTransform()) { + // Transforms act as fixed position containers, so nothing inside a + // transformed element can be fixed relative to the viewport if the + // transformed element is not fixed itself or child of a fixed element. + return; + } + + for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) + child->updateRepaintRectsAfterScroll(fixed); +} + void RenderLayer::updateTransform() { // hasTransform() on the renderer is also true when there is transform-style: preserve-3d or perspective set, diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.h b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.h index 9210e95..81a66e1 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.h +++ b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.h @@ -395,6 +395,7 @@ public: // Return a cached repaint rect, computed relative to the layer renderer's containerForRepaint. IntRect repaintRect() const { return m_repaintRect; } void computeRepaintRects(); + void updateRepaintRectsAfterScroll(bool fixed = false); void setNeedsFullRepaint(bool f = true) { m_needsFullRepaint = f; } int staticX() const { return m_staticX; } diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp index 93af664..c295a2c 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp @@ -128,6 +128,15 @@ void RenderLayerCompositor::cacheAcceleratedCompositingFlags() showRepaintCounter = settings->showRepaintCounter(); } + // We allow the chrome to override the settings, in case the page is rendered + // on a chrome that doesn't allow accelerated compositing. + if (hasAcceleratedCompositing) { + Frame* frame = m_renderView->frameView()->frame(); + Page* page = frame ? frame->page() : 0; + if (page) + hasAcceleratedCompositing = page->chrome()->client()->allowsAcceleratedCompositing(); + } + if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter) setCompositingLayersNeedRebuild(); diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp index ad66750..0c13e43 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp @@ -122,6 +122,9 @@ public: virtual void setRootGraphicsLayer(QGraphicsItem* layer); virtual void markForSync(bool scheduleSync); void updateCompositingScrollPosition(); + + // QGraphicsWebView can render composited layers + virtual bool allowsAcceleratedCompositing() const { return true; } #endif void updateResizesToContentsForPage(); @@ -289,6 +292,7 @@ void QGraphicsWebViewPrivate::update(const QRect & dirtyRect) if (overlay) overlay->update(QRectF(dirtyRect)); #if USE(ACCELERATED_COMPOSITING) + updateCompositingScrollPosition(); syncLayers(); #endif } @@ -424,7 +428,9 @@ QRectF QGraphicsWebViewPrivate::graphicsItemVisibleRect() const return QRectF(); QList<QGraphicsView*> views = q->scene()->views(); if (views.size() > 1) { +#ifndef QT_NO_DEBUG_STREAM qDebug() << "QGraphicsWebView is in more than one graphics views, unable to compute the visible rect"; +#endif return QRectF(); } if (views.size() < 1) diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp index 61ec9d2..d852012 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp @@ -33,7 +33,7 @@ enum { InitialHistoryVersion = 1, - DefaultHistoryVersion = 2 + DefaultHistoryVersion = InitialHistoryVersion }; /*! @@ -524,7 +524,7 @@ QDataStream& operator>>(QDataStream& source, QWebHistory& history) source >> version; - if (version <= 2) { + if (version == 1) { int count; int currentIndex; source >> count >> currentIndex; diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h index f0fbef0..de79dd1 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h @@ -17,7 +17,7 @@ Boston, MA 02110-1301, USA. */ -#include <qstring.h> +#include <QtCore/qstring.h> #ifndef qwebkitversion_h #define qwebkitversion_h diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp index 007aeac..b8b50b7 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp @@ -1492,7 +1492,7 @@ QVariant QWebPage::inputMethodQuery(Qt::InputMethodQuery property) const // We can't access absoluteCaretBounds() while the view needs to layout. return QVariant(); } - return QVariant(frame->selection()->absoluteCaretBounds()); + return QVariant(view->contentsToWindow(frame->selection()->absoluteCaretBounds())); } case Qt::ImFont: { if (renderTextControl) { @@ -2048,9 +2048,9 @@ QWebPage *QWebPage::createWindow(WebWindowType type) } /*! - This function is called whenever WebKit encounters a HTML object element with type "application/x-qt-plugin". - The \a classid, \a url, \a paramNames and \a paramValues correspond to the HTML object element attributes and - child elements to configure the embeddable object. + This function is called whenever WebKit encounters a HTML object element with type "application/x-qt-plugin". It is + called regardless of the value of QWebSettings::PluginsEnabled. The \a classid, \a url, \a paramNames and \a paramValues + correspond to the HTML object element attributes and child elements to configure the embeddable object. */ QObject *QWebPage::createPlugin(const QString &classid, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues) { @@ -2208,7 +2208,6 @@ void QWebPage::setViewportSize(const QSize &size) const if (frame->d->frame && frame->d->frame->view()) { WebCore::FrameView* view = frame->d->frame->view(); view->setFrameRect(QRect(QPoint(0, 0), size)); - view->forceLayout(); view->adjustViewSize(); } } @@ -3192,233 +3191,255 @@ QWebPluginFactory *QWebPage::pluginFactory() const \o %AppVersion% expands to QCoreApplication::applicationName()/QCoreApplication::applicationVersion() if they're set; otherwise defaulting to Qt and the current Qt version. \endlist */ -QString QWebPage::userAgentForUrl(const QUrl& url) const +QString QWebPage::userAgentForUrl(const QUrl&) const { - Q_UNUSED(url) - QString ua = QLatin1String("Mozilla/5.0 (" + // splitting the string in three and user QStringBuilder is better than using QString::arg() + static QString firstPart; + static QString secondPart; + static QString thirdPart; + + if (firstPart.isNull() || secondPart.isNull() || thirdPart.isNull()) { + QString firstPartTemp; + firstPartTemp.reserve(150); + firstPartTemp += QString::fromLatin1("Mozilla/5.0 (" // Platform #ifdef Q_WS_MAC - "Macintosh" + "Macintosh" #elif defined Q_WS_QWS - "QtEmbedded" + "QtEmbedded" #elif defined Q_WS_WIN - "Windows" + "Windows" #elif defined Q_WS_X11 - "X11" + "X11" #elif defined Q_OS_SYMBIAN - "SymbianOS" + "SymbianOS" #else - "Unknown" + "Unknown" #endif - // Placeholder for Platform Version - "%1; " + ); + + firstPartTemp += QString::fromLatin1("; "); - // Placeholder for security strength (N or U) - "%2; " + // SSL support +#if !defined(QT_NO_OPENSSL) + // we could check QSslSocket::supportsSsl() here, but this makes + // OpenSSL, certificates etc being loaded in all cases were QWebPage + // is used. This loading is not needed for non-https. + firstPartTemp += QString::fromLatin1("U; "); + // this may lead to a false positive: We indicate SSL since it is + // compiled in even though supportsSsl() might return false +#else + firstPartTemp += QString::fromLatin1("N; "); +#endif - // Subplatform" + // Operating system #ifdef Q_OS_AIX - "AIX" + firstPartTemp += QString::fromLatin1("AIX"); #elif defined Q_OS_WIN32 - "%3" + + switch (QSysInfo::WindowsVersion) { + case QSysInfo::WV_32s: + firstPartTemp += QString::fromLatin1("Windows 3.1"); + break; + case QSysInfo::WV_95: + firstPartTemp += QString::fromLatin1("Windows 95"); + break; + case QSysInfo::WV_98: + firstPartTemp += QString::fromLatin1("Windows 98"); + break; + case QSysInfo::WV_Me: + firstPartTemp += QString::fromLatin1("Windows 98; Win 9x 4.90"); + break; + case QSysInfo::WV_NT: + firstPartTemp += QString::fromLatin1("WinNT4.0"); + break; + case QSysInfo::WV_2000: + firstPartTemp += QString::fromLatin1("Windows NT 5.0"); + break; + case QSysInfo::WV_XP: + firstPartTemp += QString::fromLatin1("Windows NT 5.1"); + break; + case QSysInfo::WV_2003: + firstPartTemp += QString::fromLatin1("Windows NT 5.2"); + break; + case QSysInfo::WV_VISTA: + firstPartTemp += QString::fromLatin1("Windows NT 6.0"); + break; + case QSysInfo::WV_WINDOWS7: + firstPartTemp += QString::fromLatin1("Windows NT 6.1"); + break; + case QSysInfo::WV_CE: + firstPartTemp += QString::fromLatin1("Windows CE"); + break; + case QSysInfo::WV_CENET: + firstPartTemp += QString::fromLatin1("Windows CE .NET"); + break; + case QSysInfo::WV_CE_5: + firstPartTemp += QString::fromLatin1("Windows CE 5.x"); + break; + case QSysInfo::WV_CE_6: + firstPartTemp += QString::fromLatin1("Windows CE 6.x"); + break; + } + #elif defined Q_OS_DARWIN #ifdef __i386__ || __x86_64__ - "Intel Mac OS X" + firstPartTemp += QString::fromLatin1("Intel Mac OS X"); #else - "PPC Mac OS X" + firstPartTemp += QString::fromLatin1("PPC Mac OS X"); #endif #elif defined Q_OS_BSDI - "BSD" + firstPartTemp += QString::fromLatin1("BSD"); #elif defined Q_OS_BSD4 - "BSD Four" + firstPartTemp += QString::fromLatin1("BSD Four"); #elif defined Q_OS_CYGWIN - "Cygwin" + firstPartTemp += QString::fromLatin1("Cygwin"); #elif defined Q_OS_DGUX - "DG/UX" + firstPartTemp += QString::fromLatin1("DG/UX"); #elif defined Q_OS_DYNIX - "DYNIX/ptx" + firstPartTemp += QString::fromLatin1("DYNIX/ptx"); #elif defined Q_OS_FREEBSD - "FreeBSD" + firstPartTemp += QString::fromLatin1("FreeBSD"); #elif defined Q_OS_HPUX - "HP-UX" + firstPartTemp += QString::fromLatin1("HP-UX"); #elif defined Q_OS_HURD - "GNU Hurd" + firstPartTemp += QString::fromLatin1("GNU Hurd"); #elif defined Q_OS_IRIX - "SGI Irix" + firstPartTemp += QString::fromLatin1("SGI Irix"); #elif defined Q_OS_LINUX - "Linux" + +#if defined(__x86_64__) + firstPartTemp += QString::fromLatin1("Linux x86_64"); +#elif defined(__i386__) + firstPartTemp += QString::fromLatin1("Linux i686"); +#else + firstPartTemp += QString::fromLatin1("Linux"); +#endif + #elif defined Q_OS_LYNX - "LynxOS" + firstPartTemp += QString::fromLatin1("LynxOS"); #elif defined Q_OS_NETBSD - "NetBSD" + firstPartTemp += QString::fromLatin1("NetBSD"); #elif defined Q_OS_OS2 - "OS/2" + firstPartTemp += QString::fromLatin1("OS/2"); #elif defined Q_OS_OPENBSD - "OpenBSD" + firstPartTemp += QString::fromLatin1("OpenBSD"); #elif defined Q_OS_OS2EMX - "OS/2" + firstPartTemp += QString::fromLatin1("OS/2"); #elif defined Q_OS_OSF - "HP Tru64 UNIX" + firstPartTemp += QString::fromLatin1("HP Tru64 UNIX"); #elif defined Q_OS_QNX6 - "QNX RTP Six" + firstPartTemp += QString::fromLatin1("QNX RTP Six"); #elif defined Q_OS_QNX - "QNX" + firstPartTemp += QString::fromLatin1("QNX"); #elif defined Q_OS_RELIANT - "Reliant UNIX" + firstPartTemp += QString::fromLatin1("Reliant UNIX"); #elif defined Q_OS_SCO - "SCO OpenServer" + firstPartTemp += QString::fromLatin1("SCO OpenServer"); #elif defined Q_OS_SOLARIS - "Sun Solaris" + firstPartTemp += QString::fromLatin1("Sun Solaris"); #elif defined Q_OS_ULTRIX - "DEC Ultrix" -#elif defined Q_WS_S60 - "Series60" -#elif defined Q_OS_UNIX - "UNIX BSD/SYSV system" -#elif defined Q_OS_UNIXWARE - "UnixWare Seven, Open UNIX Eight" -#else - "Unknown" -#endif - // Placeholder for SubPlatform Version - "%4; "); - - // Platform Version - QString osVer; -#ifdef Q_OS_SYMBIAN - QSysInfo::SymbianVersion symbianVersion = QSysInfo::symbianVersion(); - switch (symbianVersion) { - case QSysInfo::SV_9_2: - osVer = "/9.2"; - break; - case QSysInfo::SV_9_3: - osVer = "/9.3"; - break; - case QSysInfo::SV_9_4: - osVer = "/9.4"; - break; - default: - osVer = "Unknown"; - } -#endif - ua = ua.arg(osVer); - - QChar securityStrength(QLatin1Char('N')); -#if !defined(QT_NO_OPENSSL) - // we could check QSslSocket::supportsSsl() here, but this makes - // OpenSSL, certificates etc being loaded in all cases were QWebPage - // is used. This loading is not needed for non-https. - securityStrength = QLatin1Char('U'); - // this may lead to a false positive: We indicate SSL since it is - // compiled in even though supportsSsl() might return false -#endif - ua = ua.arg(securityStrength); - -#if defined Q_OS_WIN32 - QString ver; - switch (QSysInfo::WindowsVersion) { - case QSysInfo::WV_32s: - ver = "Windows 3.1"; - break; - case QSysInfo::WV_95: - ver = "Windows 95"; - break; - case QSysInfo::WV_98: - ver = "Windows 98"; - break; - case QSysInfo::WV_Me: - ver = "Windows 98; Win 9x 4.90"; - break; - case QSysInfo::WV_NT: - ver = "WinNT4.0"; + firstPartTemp += QString::fromLatin1("DEC Ultrix"); +#elif defined Q_OS_SYMBIAN + firstPartTemp += QString::fromLatin1("SymbianOS"); + QSysInfo::SymbianVersion symbianVersion = QSysInfo::symbianVersion(); + switch (symbianVersion) { + case QSysInfo::SV_9_2: + firstPartTemp += QString::fromLatin1("/9.2"); break; - case QSysInfo::WV_2000: - ver = "Windows NT 5.0"; + case QSysInfo::SV_9_3: + firstPartTemp += QString::fromLatin1("/9.3"); break; - case QSysInfo::WV_XP: - ver = "Windows NT 5.1"; + case QSysInfo::SV_9_4: + firstPartTemp += QString::fromLatin1("/9.4"); break; - case QSysInfo::WV_2003: - ver = "Windows NT 5.2"; + default: + firstPartTemp += QString::fromLatin1("/Unknown"); + } + +#if defined Q_WS_S60 + firstPartTemp += QLatin1Char(' '); + firstPartTemp += QString::fromLatin1("Series60"); + QSysInfo::S60Version s60Version = QSysInfo::s60Version(); + switch (s60Version) { + case QSysInfo::SV_S60_3_1: + firstPartTemp += QString::fromLatin1("/3.1"); break; - case QSysInfo::WV_VISTA: - ver = "Windows NT 6.0"; + case QSysInfo::SV_S60_3_2: + firstPartTemp += QString::fromLatin1("/3.2"); break; -#if QT_VERSION > 0x040500 - case QSysInfo::WV_WINDOWS7: - ver = "Windows NT 6.1"; + case QSysInfo::SV_S60_5_0: + firstPartTemp += QString::fromLatin1("/5.0"); break; + default: + firstPartTemp += QString::fromLatin1("/Unknown"); + } #endif - case QSysInfo::WV_CE: - ver = "Windows CE"; - break; - case QSysInfo::WV_CENET: - ver = "Windows CE .NET"; - break; - case QSysInfo::WV_CE_5: - ver = "Windows CE 5.x"; - break; - case QSysInfo::WV_CE_6: - ver = "Windows CE 6.x"; - break; - } - ua = QString(ua).arg(ver); + +#elif defined Q_OS_UNIX + firstPartTemp += QString::fromLatin1("UNIX BSD/SYSV system"); +#elif defined Q_OS_UNIXWARE + firstPartTemp += QString::fromLatin1("UnixWare Seven, Open UNIX Eight"); +#else + firstPartTemp += QString::fromLatin1("Unknown"); #endif - // SubPlatform Version - QString subPlatformVer; -#ifdef Q_OS_SYMBIAN - QSysInfo::S60Version s60Version = QSysInfo::s60Version(); - switch (s60Version) { - case QSysInfo::SV_S60_3_1: - subPlatformVer = "/3.1"; - break; - case QSysInfo::SV_S60_3_2: - subPlatformVer = "/3.2"; - break; - case QSysInfo::SV_S60_5_0: - subPlatformVer = "/5.0"; - break; - default: - subPlatformVer = " Unknown"; - } + // language is the split + firstPartTemp += QString::fromLatin1("; "); + firstPartTemp.squeeze(); + firstPart = firstPartTemp; + + QString secondPartTemp; + secondPartTemp.reserve(150); + secondPartTemp += QString::fromLatin1(") "); + + // webkit/qt version + secondPartTemp += QString::fromLatin1("AppleWebKit/"); + secondPartTemp += qWebKitVersion(); + secondPartTemp += QString::fromLatin1(" (KHTML, like Gecko) "); + + + // Application name split the third part + secondPartTemp.squeeze(); + secondPart = secondPartTemp; + + QString thirdPartTemp; + thirdPartTemp.reserve(150); +#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) + thirdPartTemp + QLatin1String(" Mobile Safari/"); +#else + thirdPartTemp += QLatin1String(" Safari/"); #endif - ua = ua.arg(subPlatformVer); + thirdPartTemp += qWebKitVersion(); + thirdPartTemp.squeeze(); + thirdPart = thirdPartTemp; + Q_ASSERT(!firstPart.isNull()); + Q_ASSERT(!secondPart.isNull()); + Q_ASSERT(!thirdPart.isNull()); + } // Language - QLocale locale; + QString languageName; if (d->client && d->client->ownerWidget()) - locale = d->client->ownerWidget()->locale(); - QString name = locale.name(); - name[2] = QLatin1Char('-'); - ua.append(name); - ua.append(QLatin1String(") ")); - - // webkit/qt version - ua.append(QString(QLatin1String("AppleWebKit/%1 (KHTML, like Gecko) ")) - .arg(QString(qWebKitVersion()))); + languageName = d->client->ownerWidget()->locale().name(); + else + languageName = QLocale().name(); + languageName[2] = QLatin1Char('-'); // Application name/version QString appName = QCoreApplication::applicationName(); if (!appName.isEmpty()) { - ua.append(appName); QString appVer = QCoreApplication::applicationVersion(); if (!appVer.isEmpty()) - ua.append(QLatin1Char('/') + appVer); + appName.append(QLatin1Char('/') + appVer); } else { // Qt version - ua.append(QLatin1String("Qt/")); - ua.append(QLatin1String(qVersion())); + appName = QString::fromLatin1("Qt/") + QString::fromLatin1(qVersion()); } -#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) - ua.append(QString(QLatin1String(" Mobile Safari/%1")).arg(qWebKitVersion())); -#else - ua.append(QString(QLatin1String(" Safari/%1")).arg(qWebKitVersion())); -#endif - return ua; + return firstPart + languageName + secondPart + appName + thirdPart; } diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp index c759445..ae7f6a8 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp @@ -298,7 +298,9 @@ QWebSettings* QWebSettings::globalSettings() Support for browser plugins can enabled by setting the \l{QWebSettings::PluginsEnabled}{PluginsEnabled} attribute. For many applications, this attribute is enabled for all pages by setting it on the - \l{globalSettings()}{global settings object}. + \l{globalSettings()}{global settings object}. QtWebKit will always ignore this setting + \when processing Qt plugins. The decision to allow a Qt plugin is made by the client + \in its reimplementation of QWebPage::createPlugin. \section1 Web Application Support @@ -366,7 +368,8 @@ QWebSettings* QWebSettings::globalSettings() programs. \value JavaEnabled Enables or disables Java applets. Currently Java applets are not supported. - \value PluginsEnabled Enables or disables plugins in Web pages. + \value PluginsEnabled Enables or disables plugins in Web pages. Qt plugins + with a mimetype such as "application/x-qt-plugin" are not affected by this setting. \value PrivateBrowsingEnabled Private browsing prevents WebKit from recording visited pages in the history and storing web page icons. \value JavascriptCanOpenWindows Specifies whether JavaScript programs @@ -451,7 +454,6 @@ QWebSettings::QWebSettings() d->attributes.insert(QWebSettings::LocalContentCanAccessRemoteUrls, false); d->attributes.insert(QWebSettings::LocalContentCanAccessFileUrls, true); d->attributes.insert(QWebSettings::AcceleratedCompositingEnabled, true); - d->attributes.insert(QWebSettings::WebGLEnabled, false); d->attributes.insert(QWebSettings::TiledBackingStoreEnabled, false); d->attributes.insert(QWebSettings::FrameFlatteningEnabled, false); d->offlineStorageDefaultQuota = 5 * 1024 * 1024; @@ -1050,8 +1052,9 @@ void QWebSettings::enablePersistentStorage(const QString& path) QString storagePath; if (path.isEmpty()) { +#ifndef QT_NO_DESKTOPSERVICES storagePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation); - +#endif if (storagePath.isEmpty()) storagePath = WebCore::pathByAppendingComponent(QDir::homePath(), QCoreApplication::applicationName()); } else diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h index caba0d5..d2e536e 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h @@ -70,7 +70,6 @@ public: DnsPrefetchEnabled, XSSAuditorEnabled, AcceleratedCompositingEnabled, - WebGLEnabled, SpatialNavigationEnabled, LocalContentCanAccessFileUrls, TiledBackingStoreEnabled, diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp index fcd1f4b..3ba1678 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp @@ -415,9 +415,6 @@ void QWebView::setPage(QWebPage* page) this, SLOT(updateMicroFocus())); connect(d->page, SIGNAL(destroyed()), this, SLOT(_q_pageDestroyed())); -#if USE(ACCELERATED_COMPOSITING) - d->page->d->page->settings()->setAcceleratedCompositingEnabled(false); -#endif } setAttribute(Qt::WA_OpaquePaintEvent, d->page); update(); diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index 5e550f9..555b14d 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,325 @@ +2010-04-09 Tasuku Suzuki <tasuku.suzuki@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt]Fix compile error with QT_NO_IM + https://bugs.webkit.org/show_bug.cgi?id=36533 + + * WebCoreSupport/QtFallbackWebPopup.cpp: + (WebCore::QtFallbackWebPopupCombo::hidePopup): + +2010-04-02 Tasuku Suzuki <tasuku.suzuki@nokia.com> + + Reviewed by Eric Seidel. + + [Qt]Fix compile error with QT_NO_SETTINGS + https://bugs.webkit.org/show_bug.cgi?id=36533 + + If QT_NO_SETTINGS is defined, QSettings is not available. + + * WebCoreSupport/InspectorClientQt.cpp: + (WebCore::InspectorClientQt::populateSetting): + (WebCore::InspectorClientQt::storeSetting): + +2010-03-25 Tasuku Suzuki <tasuku.suzuki@nokia.com> + + Reviewed by Eric Seidel. + + [Qt]Fix compile error with QT_NO_DESKTOPSERVICES + https://bugs.webkit.org/show_bug.cgi?id=36533 + + * Api/qwebsettings.cpp: + (QWebSettings::enablePersistentStorage): + +2010-03-25 Tasuku Suzuki <tasuku.suzuki@nokia.com> + + Reviewed by Eric Seidel. + + [Qt]Fix compile error with QT_NO_DEBUG_STREAM + https://bugs.webkit.org/show_bug.cgi?id=36533 + + * Api/qgraphicswebview.cpp: + (QGraphicsWebViewPrivate::graphicsItemVisibleRect): + +2010-04-29 Janne Koskinen <janne.p.koskinen@digia.com> + + Reviewed by Simon Hausmann. + + [Qt] QtWebKit versioning added + https://bugs.webkit.org/show_bug.cgi?id=37207 + + QtWebkit releases separated from Qt release cycle. + + * qtwebkit_version.pri: Added. + +2010-05-02 Benjamin Poulain <benjamin.poulain@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] QWebPage::userAgentForUrl is terrible API + https://bugs.webkit.org/show_bug.cgi?id=33875 + + Simplify the creation of the user agent string to avoid some + overhead for each loaded url. + + The static part of the user agent is cached so it only have + to be made once. + This creation has been made in order to simplify the code. + + The two variable: application name and current language are + set dynamically when needed. + The default locale is non longer created if the widget locale + is used. + + * Api/qwebpage.cpp: + (QWebPage::userAgentForUrl): + * tests/qwebpage/tst_qwebpage.cpp: + (tst_QWebPage::userAgentApplicationName): + (tst_QWebPage::userAgentLocaleChange): + +2010-05-02 Noam Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] GraphicsLayer: animation incorrect when scrolling + https://bugs.webkit.org/show_bug.cgi?id=38371 + + This is a regression introduced with the invalidate-on-scroll code path, that uses QGraphicsWebViewPrivate::update() + instead of QGraphicsWebViewPrivate::scroll(). The patch makes sure that the scrolling position is correct on + each content update - this shouldn't have a performance impact - the only overhead is an additional value-test on each update. + + Tested by http://www.the-art-of-web.com/css/css-animation/ + + * Api/qgraphicswebview.cpp: + (QGraphicsWebViewPrivate::update): + +2010-04-29 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Simon Hausmann. + + Remove unnecessary call to FrameView::forceLayout() in setViewportSize() + This prevents a double relayout on resize. + + https://bugs.webkit.org/show_bug.cgi?id=38179 + + Thanks to Nate Whetsell <nathan.whetsell@gmail.com> for spotting this. + + * Api/qwebpage.cpp: + (QWebPage::setViewportSize): + +2010-04-29 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] REGRESSION(r57982): tst_qwebpage::showModalDialog() crashes + https://bugs.webkit.org/show_bug.cgi?id=38314 + + Make sure that there's always a main frame when returning from createWindow() + to the caller in WebCore. + + * WebCoreSupport/ChromeClientQt.cpp: + (WebCore::ChromeClientQt::createWindow): + +2010-04-28 Janne Koskinen <janne.p.koskinen@digia.com> + + Reviewed by Simon Hausmann <simon.hausmann@nokia.com> + + [Qt] WINS DEF file freeze + + Updated WINSCW def file with added and removed symbols. + + * symbian/bwins/QtWebKitu.def: + +2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Remove translatable strings from the hybridPixmap test. + https://bugs.webkit.org/show_bug.cgi?id=37867 + + * tests/hybridPixmap/widget.ui: + +2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Fix autotests .qrc file paths when built in Qt. + + Compiling auto-tests from qt/tests/auto/qweb* produced + failing tests since these .pro files include the + ones in WebKit/qt/tests and the .qrc file was + not added to RESOURCES + + * tests/benchmarks/loading/loading.pro: + * tests/benchmarks/painting/painting.pro: + * tests/qgraphicswebview/qgraphicswebview.pro: + * tests/qwebelement/qwebelement.pro: + * tests/qwebframe/qwebframe.pro: + * tests/qwebhistory/qwebhistory.pro: + * tests/qwebhistoryinterface/qwebhistoryinterface.pro: + * tests/qwebinspector/qwebinspector.pro: + * tests/qwebpage/qwebpage.pro: + * tests/qwebplugindatabase/qwebplugindatabase.pro: + * tests/qwebview/qwebview.pro: + * tests/tests.pri: + +2010-04-26 Bruno Schmidt <bruno.schmidt@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Exposing an QVariantMap containing QObjectStar to Javascript + causes Segmentation Fault + https://bugs.webkit.org/show_bug.cgi?id=34729 + + If an QVariantMap containing QObjectStar is added to the to QtWebkit + Javascript, it's use causes Segmentation Fault. + It happens because, in the case QMetaType::QVariantMap, the "root" + object that is inside of a PassRefPtr is passed recursively inside a + loop to recover the content of the map, but the PassRefPtr semantics + prohibit its use inside a loop, so the "root" object mus be passed + using the method "PassRefPtr::get" in order to keep the current + reference. + + * tests/qwebframe/tst_qwebframe.cpp: + (MyQObject::MyQObject): new property variantMapProperty + (MyQObject::variantMapProperty): read variantMapProperty + (MyQObject::setVariantMapProperty): write variantMapProperty + +2010-04-26 Thiago Macieira <thiago.macieira@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fix the include header <qstring.h> -> <QtCore/qstring.h> + + The module/header.h style inclusion removes the need to have -I$QTDIR/include/depending-module + in the include search path for the application. + + * Api/qwebkitversion.h: + +2010-04-21 Yi Shen <yi.4.shen@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Check the request empty or not in ChromeClientQt::createWindow() + https://bugs.webkit.org/show_bug.cgi?id=37821 + + * WebCoreSupport/ChromeClientQt.cpp: + (WebCore::ChromeClientQt::createWindow): + +2010-04-22 John Pavan <john.pavan@nokia.com> + + Reviewed by Laszlo Gombos. + + [Qt] inputMethodQuery returns coordinates in web page coordinates rather than in item coordinates. + https://bugs.webkit.org/show_bug.cgi?id=37163 + + + QWebPage::inputMethodQuery is modified so that it + returns coordinates in the widget's coordinate system. + Tests are added for QGraphicsWebView and QWebView + to verify that this behavior is correct after the webpage + has been scrolled. + + * Api/qwebpage.cpp: + (QWebPage::inputMethodQuery): + * tests/qgraphicswebview/tst_qgraphicswebview.cpp: + (tst_QGraphicsWebView::microFocusCoordinates): + * tests/qwebview/tst_qwebview.cpp: + (tst_QWebView::microFocusCoordinates): + +2010-04-21 No'am Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Simon Fraser. + + [Qt] Fix or remove the runtime flag for accelerated compositing. + https://bugs.webkit.org/show_bug.cgi?id=37313 + + This lets the QWebPageClient "veto" the settings value for accelerated compositing. + In this case we allow accelerated compositing only on QGraphicsWebView. + + * Api/qgraphicswebview.cpp: + (QGraphicsWebViewPrivate::allowsAcceleratedCompositing): + * WebCoreSupport/ChromeClientQt.cpp: + (WebCore::ChromeClientQt::allowsAcceleratedCompositing): + * WebCoreSupport/ChromeClientQt.h: + +2010-04-22 Robert Hogan <robert@webkit.org> + + Reviewed by Simon Hausmann. + + [Qt] Fix createPlugin() tests in tst_qwebpage to match behaviour of Qt plugins + when PluginsEnabled is false. + + tst_qwebpage should have been updated as part of r56662. + (See https://bugs.webkit.org/show_bug.cgi?id=32196) + + Updated documentation of QWebPage::createPlugin and QWebSetting::pluginsEnabled + to match the new behaviour. + + * Api/qwebpage.cpp: Update docs. + * Api/qwebsettings.cpp: Update docs. + * tests/qwebpage/tst_qwebpage.cpp: + (createPlugin): + (tst_QWebPage::createPluginWithPluginsEnabled): + (tst_QWebPage::createPluginWithPluginsDisabled): + +2010-04-09 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Kenneth Christiansen and Tor Arne Vestbø. + + REGRESSION(r56552): Broken scrollbars size + https://bugs.webkit.org/show_bug.cgi?id=36853 + + The regression was caused by r56552, which introduced a fix to bug + webkit.org/b/21300. The bug solved an issue with the resize handle on mac, + but did it in a way that affected all Qt platforms and thus broke the behavior + on non-mac platforms. + + This patch makes the mac specific change ifdef'ed and only applied for the mac + platform. + + * WebCoreSupport/ChromeClientQt.cpp: + (WebCore::ChromeClientQt::windowResizerRect): + +2010-04-19 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Fix compilation against namespaced Qt. + + * WebCoreSupport/ChromeClientQt.h: + * WebCoreSupport/QtFallbackWebPopup.h: + +2010-04-14 Luiz Agostini <luiz.agostini@openbossa.org> + + Reviewed by Kenneth Rohde Christiansen. + + Changing view mode names due to specification changes + https://bugs.webkit.org/show_bug.cgi?id=37615 + + test: fast/media/media-feature-wgt-view-mode.html + + specification: http://dev.w3.org/2006/waf/widgets-vmmf/ + + * WebCoreSupport/ChromeClientQt.cpp: + (WebCore::ChromeClientQt::isWindowed): + (WebCore::ChromeClientQt::isFullscreen): + (WebCore::ChromeClientQt::isMaximized): + (WebCore::ChromeClientQt::isMinimized): + * WebCoreSupport/ChromeClientQt.h: + +2010-04-14 Andreas Kling <andreas.kling@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Rendering artifacts on Qt plugins when scrolling the page + https://bugs.webkit.org/show_bug.cgi?id=37152 + + Because we no longer repaint the entire viewport on scroll, + we must trigger a repaint of QtPluginWidgets when their geometry changes. + + * WebCoreSupport/FrameLoaderClientQt.cpp: + 2010-04-09 Yi Shen <yi.4.shen@nokia.com> Reviewed by Kenneth Rohde Christiansen. @@ -10,6 +332,38 @@ * tests/qwebframe/tst_qwebframe.cpp: +2010-04-15 Bruno Schmidt <bruno.schmidt@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Null QObjects properties cause Segmentation Fault + https://bugs.webkit.org/show_bug.cgi?id=34730 + + QObjects exported to the QWebkit javascript with properties that are + a null "QObject*" cause Segmentation Fault. + + If an QObject is added to the javascript context and it contains + properties of the type QObject* with NULL value, calling the property + causes Segmentation Fault. + + Follow the tests for the corrections done over WebCore. + + * tests/qwebframe/tst_qwebframe.cpp: + (MyQObject::MyQObject): init the field m_objectStar + (MyQObject::objectStarProperty): read the Object* prop + (MyQObject::setObjectStarProperty): write the Object* prop + (tst_QWebFrame::getSetStaticProperty): new tests for the new prop + +2010-04-15 Kent Hansen <kent.hansen@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Mark QWebFrame::overloadedSlots autotest as expected failure + + https://bugs.webkit.org/show_bug.cgi?id=37319 + + * tests/qwebframe/tst_qwebframe.cpp: + 2010-04-09 Tasuku Suzuki <tasuku.suzuki@nokia.com> Reviewed by Simon Hausmann. diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp index 45986b3..9eb10d6 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp @@ -165,7 +165,13 @@ Page* ChromeClientQt::createWindow(Frame*, const FrameLoadRequest& request, cons QWebPage *newPage = m_webPage->createWindow(features.dialog ? QWebPage::WebModalDialog : QWebPage::WebBrowserWindow); if (!newPage) return 0; - newPage->mainFrame()->load(request.resourceRequest().url()); + + // A call to QWebPage::mainFrame() implicitly creates the main frame. + // Make sure it exists, as WebCore expects it when returning from this call. + QWebFrame* mainFrame = newPage->mainFrame(); + + if (!request.isEmpty()) + mainFrame->load(request.resourceRequest().url()); return newPage->d->page; } @@ -330,6 +336,7 @@ bool ChromeClientQt::tabsToLinks() const IntRect ChromeClientQt::windowResizerRect() const { +#if defined(Q_WS_MAC) if (!m_webPage) return IntRect(); @@ -359,6 +366,9 @@ IntRect ChromeClientQt::windowResizerRect() const QRect resizeCornerRect = QRect(resizeCornerTopLeft, QSize(scollbarThickness, scollbarThickness)); return resizeCornerRect.intersected(pageClient->geometryRelativeToOwnerWidget()); +#else + return IntRect(); +#endif } void ChromeClientQt::invalidateWindow(const IntRect&, bool) @@ -542,6 +552,12 @@ void ChromeClientQt::scheduleCompositingLayerSync() if (platformPageClient()) platformPageClient()->markForSync(true); } + +bool ChromeClientQt::allowsAcceleratedCompositing() const +{ + return (platformPageClient() && platformPageClient()->allowsAcceleratedCompositing()); +} + #endif QtAbstractWebPopup* ChromeClientQt::createSelectPopup() @@ -554,9 +570,9 @@ QtAbstractWebPopup* ChromeClientQt::createSelectPopup() } #if ENABLE(WIDGETS_10_SUPPORT) -bool ChromeClientQt::isDocked() +bool ChromeClientQt::isWindowed() { - return m_webPage->d->viewMode == "mini"; + return m_webPage->d->viewMode == "windowed"; } bool ChromeClientQt::isFloating() @@ -564,14 +580,19 @@ bool ChromeClientQt::isFloating() return m_webPage->d->viewMode == "floating"; } -bool ChromeClientQt::isApplication() +bool ChromeClientQt::isFullscreen() { - return m_webPage->d->viewMode == "application"; + return m_webPage->d->viewMode == "fullscreen"; } -bool ChromeClientQt::isFullscreen() +bool ChromeClientQt::isMaximized() { - return m_webPage->d->viewMode == "fullscreen"; + return m_webPage->d->viewMode == "maximized"; +} + +bool ChromeClientQt::isMinimized() +{ + return m_webPage->d->viewMode == "minimized"; } #endif diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h index f8f217b..f0a7c8c 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h @@ -137,6 +137,7 @@ namespace WebCore { virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*); virtual void setNeedsOneShotDrawingSynchronization(); virtual void scheduleCompositingLayerSync(); + virtual bool allowsAcceleratedCompositing() const; #endif #if ENABLE(TOUCH_EVENTS) @@ -158,10 +159,11 @@ namespace WebCore { virtual void cancelGeolocationPermissionRequestForFrame(Frame*) { } #if ENABLE(WIDGETS_10_SUPPORT) - virtual bool isDocked(); + virtual bool isWindowed(); virtual bool isFloating(); - virtual bool isApplication(); virtual bool isFullscreen(); + virtual bool isMaximized(); + virtual bool isMinimized(); #endif QtAbstractWebPopup* createSelectPopup(); diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp index 5b1dd30..4ad008b 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp @@ -1176,6 +1176,8 @@ public: platformWidget()->setMask(clipRegion); handleVisibility(); + + platformWidget()->update(); } virtual void show() diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp index c0c78ba..7fabbda 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp @@ -110,6 +110,11 @@ void InspectorClientQt::hideHighlight() void InspectorClientQt::populateSetting(const String& key, String* setting) { +#ifdef QT_NO_SETTINGS + Q_UNUSED(key) + Q_UNUSED(setting) + qWarning("QWebInspector: QSettings is not supported by Qt."); +#else QSettings qsettings; if (qsettings.status() == QSettings::AccessError) { // QCoreApplication::setOrganizationName and QCoreApplication::setApplicationName haven't been called @@ -123,10 +128,16 @@ void InspectorClientQt::populateSetting(const String& key, String* setting) QVariant storedValue = qsettings.value(settingKey); storedValue.convert(QVariant::nameToType(storedValueType.toAscii().data())); *setting = variantToSetting(storedValue); +#endif // QT_NO_SETTINGS } void InspectorClientQt::storeSetting(const String& key, const String& setting) { +#ifdef QT_NO_SETTINGS + Q_UNUSED(key) + Q_UNUSED(setting) + qWarning("QWebInspector: QSettings is not supported by Qt."); +#else QSettings qsettings; if (qsettings.status() == QSettings::AccessError) { qWarning("QWebInspector: QSettings couldn't persist configuration setting [%s].", @@ -138,6 +149,7 @@ void InspectorClientQt::storeSetting(const String& key, const String& setting) QString settingKey(settingStoragePrefix + QString(key)); qsettings.setValue(settingKey, valueToStore); qsettings.setValue(settingKey + settingStorageTypeSuffix, QVariant::typeToName(valueToStore.type())); +#endif // QT_NO_SETTINGS } static String variantToSetting(const QVariant& qvariant) diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp index 65a28fe..7514077 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp @@ -55,6 +55,7 @@ void QtFallbackWebPopupCombo::showPopup() void QtFallbackWebPopupCombo::hidePopup() { +#ifndef QT_NO_IM QWidget* activeFocus = QApplication::focusWidget(); if (activeFocus && activeFocus == QComboBox::view() && activeFocus->testAttribute(Qt::WA_InputMethodEnabled)) { @@ -64,6 +65,7 @@ void QtFallbackWebPopupCombo::hidePopup() qic->setFocusWidget(0); } } +#endif // QT_NO_IM QComboBox::hidePopup(); diff --git a/src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri new file mode 100644 index 0000000..ffd192c --- /dev/null +++ b/src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri @@ -0,0 +1,4 @@ +QT_WEBKIT_VERSION = 4.7.0 +QT_WEBKIT_MAJOR_VERSION = 4 +QT_WEBKIT_MINOR_VERSION = 7 +QT_WEBKIT_PATCH_VERSION = 0 diff --git a/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/loading/loading.pro b/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/loading/loading.pro index 258930c..99c64a5 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/loading/loading.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/loading/loading.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/painting.pro b/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/painting.pro index 258930c..99c64a5 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/painting.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/painting.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui b/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui index ae5e0b5..272d6a7 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui +++ b/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui @@ -18,7 +18,7 @@ <widget class="WebView" name="webView" native="true"> <property name="url" stdset="0"> <url> - <string>about:blank</string> + <string notr="true">about:blank</string> </url> </property> </widget> diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro b/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro index 6777615..e915d60 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp index 657e09f..14f5820 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp @@ -31,6 +31,7 @@ class tst_QGraphicsWebView : public QObject private slots: void qgraphicswebview(); void crashOnViewlessWebPages(); + void microFocusCoordinates(); }; void tst_QGraphicsWebView::qgraphicswebview() @@ -102,6 +103,40 @@ void tst_QGraphicsWebView::crashOnViewlessWebPages() QVERIFY(waitForSignal(page, SIGNAL(loadFinished(bool)))); } +void tst_QGraphicsWebView::microFocusCoordinates() +{ + QWebPage* page = new QWebPage; + QGraphicsWebView* webView = new QGraphicsWebView; + webView->setPage( page ); + QGraphicsView* view = new QGraphicsView; + QGraphicsScene* scene = new QGraphicsScene(view); + view->setScene(scene); + scene->addItem(webView); + view->setGeometry(QRect(0,0,500,500)); + + page->mainFrame()->setHtml("<html><body>" \ + "<input type='text' id='input1' style='font--family: serif' value='' maxlength='20'/><br>" \ + "<canvas id='canvas1' width='500' height='500'/>" \ + "<input type='password'/><br>" \ + "<canvas id='canvas2' width='500' height='500'/>" \ + "</body></html>"); + + page->mainFrame()->setFocus(); + + QVariant initialMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus); + QVERIFY(initialMicroFocus.isValid()); + + page->mainFrame()->scroll(0,300); + + QVariant currentMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus); + QVERIFY(currentMicroFocus.isValid()); + + QCOMPARE(initialMicroFocus.toRect().translated(QPoint(0,-300)), currentMicroFocus.toRect()); + + delete view; +} + + QTEST_MAIN(tst_QGraphicsWebView) #include "tst_qgraphicswebview.moc" diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro index 6777615..e915d60 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro index 6777615..e915d60 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp index ca14f6c..bea7a67 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp @@ -57,6 +57,7 @@ class MyQObject : public QObject Q_PROPERTY(int intProperty READ intProperty WRITE setIntProperty) Q_PROPERTY(QVariant variantProperty READ variantProperty WRITE setVariantProperty) Q_PROPERTY(QVariantList variantListProperty READ variantListProperty WRITE setVariantListProperty) + Q_PROPERTY(QVariantMap variantMapProperty READ variantMapProperty WRITE setVariantMapProperty) Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty) Q_PROPERTY(QStringList stringListProperty READ stringListProperty WRITE setStringListProperty) Q_PROPERTY(QByteArray byteArrayProperty READ byteArrayProperty WRITE setByteArrayProperty) @@ -67,6 +68,7 @@ class MyQObject : public QObject Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut) Q_PROPERTY(CustomType propWithCustomType READ propWithCustomType WRITE setPropWithCustomType) Q_PROPERTY(QWebElement webElementProperty READ webElementProperty WRITE setWebElementProperty) + Q_PROPERTY(QObject* objectStarProperty READ objectStarProperty WRITE setObjectStarProperty) Q_ENUMS(Policy Strategy) Q_FLAGS(Ability) @@ -104,7 +106,13 @@ public: m_hiddenValue(456.0), m_writeOnlyValue(789), m_readOnlyValue(987), - m_qtFunctionInvoked(-1) { } + m_objectStar(0), + m_qtFunctionInvoked(-1) + { + m_variantMapValue.insert("a", QVariant(123)); + m_variantMapValue.insert("b", QVariant(QLatin1String("foo"))); + m_variantMapValue.insert("c", QVariant::fromValue<QObject*>(this)); + } ~MyQObject() { } @@ -129,6 +137,13 @@ public: m_variantListValue = value; } + QVariantMap variantMapProperty() const { + return m_variantMapValue; + } + void setVariantMapProperty(const QVariantMap &value) { + m_variantMapValue = value; + } + QString stringProperty() const { return m_stringValue; } @@ -197,6 +212,15 @@ public: m_customType = c; } + QObject* objectStarProperty() const { + return m_objectStar; + } + + void setObjectStarProperty(QObject* object) { + m_objectStar = object; + } + + int qtFunctionInvoked() const { return m_qtFunctionInvoked; } @@ -472,6 +496,7 @@ private: int m_intValue; QVariant m_variantValue; QVariantList m_variantListValue; + QVariantMap m_variantMapValue; QString m_stringValue; QStringList m_stringListValue; QByteArray m_byteArrayValue; @@ -482,6 +507,7 @@ private: QKeySequence m_shortcut; QWebElement m_webElement; CustomType m_customType; + QObject* m_objectStar; int m_qtFunctionInvoked; QVariantList m_actuals; }; @@ -747,6 +773,21 @@ void tst_QWebFrame::getSetStaticProperty() { QString type; + QVariant ret = evalJSV("myObject.variantMapProperty", type); + QCOMPARE(type, sObject); + QCOMPARE(ret.type(), QVariant::Map); + QVariantMap vm = ret.value<QVariantMap>(); + QCOMPARE(vm.size(), 3); + QCOMPARE(vm.value("a").toInt(), 123); + QCOMPARE(vm.value("b").toString(), QLatin1String("foo")); + QCOMPARE(vm.value("c").value<QObject*>(), m_myObject); + } + QCOMPARE(evalJS("myObject.variantMapProperty.a === 123"), sTrue); + QCOMPARE(evalJS("myObject.variantMapProperty.b === 'foo'"), sTrue); + QCOMPARE(evalJS("myObject.variantMapProperty.c.variantMapProperty.b === 'foo'"), sTrue); + + { + QString type; QVariant ret = evalJSV("myObject.stringListProperty", type); QCOMPARE(type, sArray); QCOMPARE(ret.type(), QVariant::List); @@ -878,6 +919,21 @@ void tst_QWebFrame::getSetStaticProperty() QCOMPARE(evalJS("myObject.readOnlyProperty = 654;" "myObject.readOnlyProperty == 987"), sTrue); QCOMPARE(m_myObject->readOnlyProperty(), 987); + + // QObject* property + m_myObject->setObjectStarProperty(0); + QCOMPARE(m_myObject->objectStarProperty(), (QObject*)0); + QCOMPARE(evalJS("myObject.objectStarProperty == null"), sTrue); + QCOMPARE(evalJS("typeof myObject.objectStarProperty"), sObject); + QCOMPARE(evalJS("Boolean(myObject.objectStarProperty)"), sFalse); + QCOMPARE(evalJS("String(myObject.objectStarProperty) == 'null'"), sTrue); + QCOMPARE(evalJS("myObject.objectStarProperty.objectStarProperty"), + sUndefined); + m_myObject->setObjectStarProperty(this); + QCOMPARE(evalJS("myObject.objectStarProperty != null"), sTrue); + QCOMPARE(evalJS("typeof myObject.objectStarProperty"), sObject); + QCOMPARE(evalJS("Boolean(myObject.objectStarProperty)"), sTrue); + QCOMPARE(evalJS("String(myObject.objectStarProperty) != 'null'"), sTrue); } void tst_QWebFrame::getSetDynamicProperty() @@ -2841,7 +2897,7 @@ void tst_QWebFrame::evaluateWillCauseRepaint() #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) QTest::qWaitForWindowShown(&view); #else - QTest::qWait(2000); + QTest::qWait(2000); #endif view.page()->mainFrame()->evaluateJavaScript( diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebhistory/qwebhistory.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebhistory/qwebhistory.pro index 6777615..e915d60 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebhistory/qwebhistory.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebhistory/qwebhistory.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro index 6777615..e915d60 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebinspector/qwebinspector.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebinspector/qwebinspector.pro index 6777615..e915d60 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebinspector/qwebinspector.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebinspector/qwebinspector.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro index 6777615..e915d60 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp index 1f97e69..f7eddd5 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp @@ -23,6 +23,7 @@ #include <QDir> #include <QGraphicsWidget> #include <QLineEdit> +#include <QLocale> #include <QMenu> #include <QPushButton> #include <QtTest/QtTest> @@ -80,7 +81,8 @@ private slots: void modified(); void contextMenuCrash(); void database(); - void createPlugin(); + void createPluginWithPluginsEnabled(); + void createPluginWithPluginsDisabled(); void destroyPlugin_data(); void destroyPlugin(); void createViewlessPlugin_data(); @@ -105,6 +107,8 @@ private slots: void errorPageExtension(); void errorPageExtensionInIFrames(); void errorPageExtensionInFrameset(); + void userAgentApplicationName(); + void userAgentLocaleChange(); void crashTests_LazyInitializationOfMainFrame(); @@ -518,27 +522,20 @@ protected: } }; -void tst_QWebPage::createPlugin() +static void createPlugin(QWebView *view) { - QSignalSpy loadSpy(m_view, SIGNAL(loadFinished(bool))); + QSignalSpy loadSpy(view, SIGNAL(loadFinished(bool))); - PluginPage* newPage = new PluginPage(m_view); - m_view->setPage(newPage); + PluginPage* newPage = new PluginPage(view); + view->setPage(newPage); - // plugins not enabled by default, so the plugin shouldn't be loaded - m_view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>")); + // type has to be application/x-qt-plugin + view->setHtml(QString("<html><body><object type='application/x-foobarbaz' classid='pushbutton' id='mybutton'/></body></html>")); QTRY_COMPARE(loadSpy.count(), 1); QCOMPARE(newPage->calls.count(), 0); - m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, true); - - // type has to be application/x-qt-plugin - m_view->setHtml(QString("<html><body><object type='application/x-foobarbaz' classid='pushbutton' id='mybutton'/></body></html>")); + view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>")); QTRY_COMPARE(loadSpy.count(), 2); - QCOMPARE(newPage->calls.count(), 0); - - m_view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>")); - QTRY_COMPARE(loadSpy.count(), 3); QCOMPARE(newPage->calls.count(), 1); { PluginPage::CallInfo ci = newPage->calls.takeFirst(); @@ -569,11 +566,11 @@ void tst_QWebPage::createPlugin() QCOMPARE(newPage->mainFrame()->evaluateJavaScript("mybutton.clicked.toString()").toString(), QString::fromLatin1("function clicked() {\n [native code]\n}")); - m_view->setHtml(QString("<html><body><table>" + view->setHtml(QString("<html><body><table>" "<tr><object type='application/x-qt-plugin' classid='lineedit' id='myedit'/></tr>" "<tr><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></tr>" "</table></body></html>"), QUrl("http://foo.bar.baz")); - QTRY_COMPARE(loadSpy.count(), 4); + QTRY_COMPARE(loadSpy.count(), 3); QCOMPARE(newPage->calls.count(), 2); { PluginPage::CallInfo ci = newPage->calls.takeFirst(); @@ -605,14 +602,22 @@ void tst_QWebPage::createPlugin() QVERIFY(ci.returnValue != 0); QVERIFY(ci.returnValue->inherits("QPushButton")); } +} - m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, false); - - m_view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>")); - QTRY_COMPARE(loadSpy.count(), 5); - QCOMPARE(newPage->calls.count(), 0); +void tst_QWebPage::createPluginWithPluginsEnabled() +{ + m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, true); + createPlugin(m_view); } +void tst_QWebPage::createPluginWithPluginsDisabled() +{ + // Qt Plugins should be loaded by QtWebKit even when PluginsEnabled is + // false. The client decides whether a Qt plugin is enabled or not when + // it decides whether or not to instantiate it. + m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, false); + createPlugin(m_view); +} // Standard base class for template PluginTracerPage. In tests it is used as interface. class PluginCounterPage : public QWebPage { @@ -1746,6 +1751,38 @@ void tst_QWebPage::errorPageExtensionInFrameset() m_view->setPage(0); } +class FriendlyWebPage : public QWebPage +{ +public: + friend class tst_QWebPage; +}; + +void tst_QWebPage::userAgentApplicationName() +{ + const QString oldApplicationName = QCoreApplication::applicationName(); + FriendlyWebPage page; + + const QString applicationNameMarker = QString::fromUtf8("StrangeName\342\210\236"); + QCoreApplication::setApplicationName(applicationNameMarker); + QVERIFY(page.userAgentForUrl(QUrl()).contains(applicationNameMarker)); + + QCoreApplication::setApplicationName(oldApplicationName); +} + +void tst_QWebPage::userAgentLocaleChange() +{ + FriendlyWebPage page; + m_view->setPage(&page); + + const QString markerString = QString::fromLatin1(" nn-NO)"); + + if (page.userAgentForUrl(QUrl()).contains(markerString)) + QSKIP("marker string already present", SkipSingle); + + m_view->setLocale(QLocale(QString::fromLatin1("nn_NO"))); + QVERIFY(page.userAgentForUrl(QUrl()).contains(markerString)); +} + void tst_QWebPage::crashTests_LazyInitializationOfMainFrame() { { diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebplugindatabase/qwebplugindatabase.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebplugindatabase/qwebplugindatabase.pro index 6777615..e915d60 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebplugindatabase/qwebplugindatabase.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebplugindatabase/qwebplugindatabase.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro index 6777615..e915d60 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro @@ -1,3 +1,3 @@ isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../.. -exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp index ebcf4bb..100399e 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp @@ -48,6 +48,7 @@ private slots: void reusePage_data(); void reusePage(); + void microFocusCoordinates(); void crashTests(); }; @@ -203,6 +204,31 @@ void tst_QWebView::crashTests() QTRY_VERIFY(tester.m_executed); // If fail it means that the test wasn't executed. } +void tst_QWebView::microFocusCoordinates() +{ + QWebPage* page = new QWebPage; + QWebView* webView = new QWebView; + webView->setPage( page ); + + page->mainFrame()->setHtml("<html><body>" \ + "<input type='text' id='input1' style='font--family: serif' value='' maxlength='20'/><br>" \ + "<canvas id='canvas1' width='500' height='500'/>" \ + "<input type='password'/><br>" \ + "<canvas id='canvas2' width='500' height='500'/>" \ + "</body></html>"); + + page->mainFrame()->setFocus(); + + QVariant initialMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus); + QVERIFY(initialMicroFocus.isValid()); + + page->mainFrame()->scroll(0,50); + + QVariant currentMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus); + QVERIFY(currentMicroFocus.isValid()); + + QCOMPARE(initialMicroFocus.toRect().translated(QPoint(0,-50)), currentMicroFocus.toRect()); +} QTEST_MAIN(tst_QWebView) #include "tst_qwebview.moc" diff --git a/src/3rdparty/webkit/WebKit/qt/tests/tests.pri b/src/3rdparty/webkit/WebKit/qt/tests/tests.pri index 0a8f98c..525e662 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/tests.pri +++ b/src/3rdparty/webkit/WebKit/qt/tests/tests.pri @@ -2,6 +2,7 @@ TEMPLATE = app CONFIG -= app_bundle VPATH += $$_PRO_FILE_PWD_ +# Add the tst_ prefix, In QTDIR_build it's done by qttest_p4.prf !CONFIG(QTDIR_build):TARGET = tst_$$TARGET SOURCES += $${TARGET}.cpp INCLUDEPATH += \ diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp index 0fcdf96..44a0a01 100644 --- a/src/corelib/codecs/qiconvcodec.cpp +++ b/src/corelib/codecs/qiconvcodec.cpp @@ -168,7 +168,7 @@ Q_GLOBAL_STATIC(QThreadStorage<QIconvCodec::IconvState *>, toUnicodeState) QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState *convState) const { if (utf16Codec == reinterpret_cast<QTextCodec *>(~0)) - return QString::fromAscii(chars, len); + return QString::fromLatin1(chars, len); int invalidCount = 0; int remainingCount = 0; @@ -207,9 +207,9 @@ QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState static int reported = 0; if (!reported++) { fprintf(stderr, - "QIconvCodec::convertToUnicode: using ASCII for conversion, iconv_open failed\n"); + "QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed\n"); } - return QString::fromAscii(chars, len); + return QString::fromLatin1(chars, len); } *pstate = new IconvState(cd); @@ -273,14 +273,14 @@ QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState // some other error // note, cannot use qWarning() since we are implementing the codecForLocale :) - perror("QIconvCodec::convertToUnicode: using ASCII for conversion, iconv failed"); + perror("QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv failed"); if (!convState) { // reset state iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft); } - return QString::fromAscii(chars, len); + return QString::fromLatin1(chars, len); } } while (inBytesLeft != 0); @@ -353,12 +353,12 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt state = new IconvState(QIconvCodec::createIconv_t(0, UTF16)); if (state->cd == reinterpret_cast<iconv_t>(-1)) { if (!setByteOrder(state->cd)) { - perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed for BOM"); + perror("QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed for BOM"); iconv_close(state->cd); state->cd = reinterpret_cast<iconv_t>(-1); - return QString(uc, len).toAscii(); + return QString(uc, len).toLatin1(); } } } @@ -366,9 +366,9 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt static int reported = 0; if (!reported++) { fprintf(stderr, - "QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv_open failed\n"); + "QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed\n"); } - return QString(uc, len).toAscii(); + return QString(uc, len).toLatin1(); } size_t outBytesLeft = len; @@ -425,12 +425,12 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt default: { // note, cannot use qWarning() since we are implementing the codecForLocale :) - perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed"); + perror("QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed"); // reset to initial state iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft); - return QString(uc, len).toAscii(); + return QString(uc, len).toLatin1(); } } } diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index 59a601e..c9fbec8 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -105,7 +105,7 @@ QT_BEGIN_NAMESPACE -#ifndef QT_NO_TEXTCODECPLUGIN +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_TEXTCODECPLUGIN) Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QTextCodecFactoryInterface_iid, QLatin1String("/codecs"))) #endif @@ -149,7 +149,7 @@ static bool nameMatch(const QByteArray &name, const QByteArray &test) static QTextCodec *createForName(const QByteArray &name) { -#ifndef QT_NO_TEXTCODECPLUGIN +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_TEXTCODECPLUGIN) QFactoryLoader *l = loader(); QStringList keys = l->keys(); for (int i = 0; i < keys.size(); ++i) { @@ -1141,7 +1141,7 @@ QList<QByteArray> QTextCodec::availableCodecs() locker.unlock(); #endif -#ifndef QT_NO_TEXTCODECPLUGIN +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_TEXTCODECPLUGIN) QFactoryLoader *l = loader(); QStringList keys = l->keys(); for (int i = 0; i < keys.size(); ++i) { @@ -1181,7 +1181,7 @@ QList<int> QTextCodec::availableMibs() locker.unlock(); #endif -#ifndef QT_NO_TEXTCODECPLUGIN +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_TEXTCODECPLUGIN) QFactoryLoader *l = loader(); QStringList keys = l->keys(); for (int i = 0; i < keys.size(); ++i) { diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index dfa2c17..373c0b4 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -2079,7 +2079,28 @@ static void mac_default_handler(const char *msg) } #endif // Q_CC_MWERKS && Q_OS_MACX - +#if !defined(Q_OS_WIN) && !defined(QT_NO_THREAD) && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX) && \ + defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L +namespace { + // There are two incompatible versions of strerror_r: + // a) the XSI/POSIX.1 version, which returns an int, + // indicating success or not + // b) the GNU version, which returns a char*, which may or may not + // be the beginning of the buffer we used + // The GNU libc manpage for strerror_r says you should use the the XSI + // version in portable code. However, it's impossible to do that if + // _GNU_SOURCE is defined so we use C++ overloading to decide what to do + // depending on the return type + static inline QString fromstrerror_helper(int, const QByteArray &buf) + { + return QString::fromLocal8Bit(buf); + } + static inline QString fromstrerror_helper(const char *str, const QByteArray &) + { + return QString::fromLocal8Bit(str); + } +} +#endif QString qt_error_string(int errorCode) { @@ -2122,12 +2143,9 @@ QString qt_error_string(int errorCode) if (ret.isEmpty() && errorCode == ERROR_MOD_NOT_FOUND) ret = QString::fromLatin1("The specified module could not be found."); - #elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX) - QByteArray buf(1024, '\0'); - strerror_r(errorCode, buf.data(), buf.size()); - ret = QString::fromLocal8Bit(buf.constData()); + ret = fromstrerror_helper(strerror_r(errorCode, buf.data(), buf.size()), buf); #else ret = QString::fromLocal8Bit(strerror(errorCode)); #endif diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp index f2cef4e1..223df9b 100644 --- a/src/corelib/io/qiodevice.cpp +++ b/src/corelib/io/qiodevice.cpp @@ -755,7 +755,6 @@ qint64 QIODevice::bytesToWrite() const qint64 QIODevice::read(char *data, qint64 maxSize) { Q_D(QIODevice); - CHECK_READABLE(read, qint64(-1)); #if defined QIODEVICE_DEBUG printf("%p QIODevice::read(%p, %d), d->pos = %d, d->buffer.size() = %d\n", @@ -786,13 +785,13 @@ qint64 QIODevice::read(char *data, qint64 maxSize) do { // Try reading from the buffer. int lastReadChunkSize = d->buffer.read(data, maxSize); - *d->pPos += lastReadChunkSize; - readSoFar += lastReadChunkSize; - // fast exit when satisfied by buffer - if (lastReadChunkSize == maxSize && !(d->openMode & Text)) - return readSoFar; - if (lastReadChunkSize > 0) { + *d->pPos += lastReadChunkSize; + readSoFar += lastReadChunkSize; + // fast exit when satisfied by buffer + if (lastReadChunkSize == maxSize && !(d->openMode & Text)) + return readSoFar; + data += lastReadChunkSize; maxSize -= lastReadChunkSize; #if defined QIODEVICE_DEBUG @@ -811,6 +810,9 @@ qint64 QIODevice::read(char *data, qint64 maxSize) } } + if (!maxSize) + return readSoFar; + if ((d->openMode & Unbuffered) == 0 && maxSize < QIODEVICE_BUFFERSIZE) { // In buffered mode, we try to fill up the QIODevice buffer before // we do anything else. diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index a60f206..4e580dd 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -2997,7 +2997,9 @@ bool qt_check_std3rules(const QChar *uc, int len) // only LDH is present if (c == '-' || (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') - || (c >= 'a' && c <= 'z')) + || (c >= 'a' && c <= 'z') + //underscore is not supposed to be allowed, but other browser accept it (QTBUG-7434) + || c == '_') continue; return false; diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index bf2e2e4..609e6b3 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -514,7 +514,7 @@ QCoreApplication::QCoreApplication(int &argc, char **argv) { init(); QCoreApplicationPrivate::eventDispatcher->startingUp(); -#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_LIBRARY) // Refresh factoryloader, as text codecs are requested during lib path // resolving process and won't be therefore properly loaded. // Unknown if this is symbian specific issue. @@ -2189,7 +2189,7 @@ QString QCoreApplication::applicationVersion() return coreappdata()->applicationVersion; } -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QMutex, libraryPathMutex, (QMutex::Recursive)) @@ -2291,13 +2291,11 @@ QStringList QCoreApplication::libraryPaths() */ void QCoreApplication::setLibraryPaths(const QStringList &paths) { -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) QMutexLocker locker(libraryPathMutex()); if (!coreappdata()->app_libpaths) coreappdata()->app_libpaths = new QStringList; *(coreappdata()->app_libpaths) = paths; QFactoryLoader::refreshAll(); -#endif } /*! @@ -2318,7 +2316,6 @@ void QCoreApplication::setLibraryPaths(const QStringList &paths) */ void QCoreApplication::addLibraryPath(const QString &path) { -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) if (path.isEmpty()) return; @@ -2333,7 +2330,6 @@ void QCoreApplication::addLibraryPath(const QString &path) coreappdata()->app_libpaths->prepend(canonicalPath); QFactoryLoader::refreshAll(); } -#endif } /*! @@ -2344,7 +2340,6 @@ void QCoreApplication::addLibraryPath(const QString &path) */ void QCoreApplication::removeLibraryPath(const QString &path) { -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) if (path.isEmpty()) return; @@ -2356,7 +2351,6 @@ void QCoreApplication::removeLibraryPath(const QString &path) QString canonicalPath = QDir(path).canonicalPath(); coreappdata()->app_libpaths->removeAll(canonicalPath); QFactoryLoader::refreshAll(); -#endif } #endif //QT_NO_LIBRARY diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index 3b86e89..a6d486e 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -43,7 +43,6 @@ #include <private/qthread_p.h> #include <qcoreapplication.h> #include <private/qcoreapplication_p.h> -#include <qdatetime.h> #include <unistd.h> #include <errno.h> @@ -636,6 +635,74 @@ void QSocketActiveObject::deleteLater() } } +#ifdef QT_SYMBIAN_PRIORITY_DROP +class QIdleDetectorThread +{ +public: + QIdleDetectorThread() + : m_state(STATE_RUN), m_stop(false) + { + qt_symbian_throwIfError(m_lock.CreateLocal(0)); + TInt err = m_idleDetectorThread.Create(KNullDesC(), &idleDetectorThreadFunc, 1024, NULL, this); + if (err != KErrNone) + m_lock.Close(); + qt_symbian_throwIfError(err); + m_idleDetectorThread.SetPriority(EPriorityAbsoluteBackgroundNormal); + m_idleDetectorThread.Resume(); + } + + ~QIdleDetectorThread() + { + // close down the idle thread because if corelib is loaded temporarily, this would leak threads into the host process + m_stop = true; + m_lock.Signal(); + m_idleDetectorThread.SetPriority(EPriorityNormal); + TRequestStatus s; + m_idleDetectorThread.Logon(s); + User::WaitForRequest(s); + m_idleDetectorThread.Close(); + m_lock.Close(); + } + + void kick() + { + m_state = STATE_KICKED; + m_lock.Signal(); + } + + bool hasRun() + { + return m_state == STATE_RUN; + } + +private: + static TInt idleDetectorThreadFunc(TAny* self) + { + static_cast<QIdleDetectorThread*>(self)->IdleLoop(); + return KErrNone; + } + + void IdleLoop() + { + while (!m_stop) { + m_lock.Wait(); + m_state = STATE_RUN; + } + } + +private: + enum IdleStates {STATE_KICKED, STATE_RUN} m_state; + bool m_stop; + RThread m_idleDetectorThread; + RSemaphore m_lock; +}; + +Q_GLOBAL_STATIC(QIdleDetectorThread, idleDetectorThread); + +const int maxBusyTime = 2000; // maximum time we allow idle detector to be blocked before worrying, in milliseconds +const int baseDelay = 1000; // minimum delay time used when backing off to allow idling, in microseconds +#endif + QEventDispatcherSymbian::QEventDispatcherSymbian(QObject *parent) : QAbstractEventDispatcher(parent), m_selectThread(0), @@ -647,11 +714,15 @@ QEventDispatcherSymbian::QEventDispatcherSymbian(QObject *parent) m_iterationCount(0), m_noSocketEvents(false) { +#ifdef QT_SYMBIAN_PRIORITY_DROP + m_delay = baseDelay; + m_avgEventTime = 0; + idleDetectorThread(); +#endif } QEventDispatcherSymbian::~QEventDispatcherSymbian() { - m_processHandle.Close(); } void QEventDispatcherSymbian::startingUp() @@ -720,23 +791,7 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla m_interrupt = false; #ifdef QT_SYMBIAN_PRIORITY_DROP - /* - * This QTime variable is used to measure the time it takes to finish - * the event loop. If we take too long in the loop, other processes - * may be starved and killed. After the first event has completed, we - * take the current time, and if the remaining events take longer than - * a preset time, we temporarily lower the priority to force a context - * switch. For applications that do not take unecessarily long in the - * event loop, the priority will not be altered. - */ - QTime time; - enum { - FirstRun, - SubsequentRun, - TimeStarted - } timeState = FirstRun; - - TProcessPriority priority; + QTime eventTimer; #endif while (1) { @@ -752,10 +807,18 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla } #ifdef QT_SYMBIAN_PRIORITY_DROP - if (timeState == SubsequentRun) { - time.start(); - timeState = TimeStarted; + if (idleDetectorThread()->hasRun()) { + if (m_delay > baseDelay) + m_delay -= baseDelay; + m_lastIdleRequestTimer.start(); + idleDetectorThread()->kick(); + } else if (m_lastIdleRequestTimer.elapsed() > maxBusyTime) { + User::AfterHighRes(m_delay); + // allow delay to be up to 1/4 of execution time + if (!idleDetectorThread()->hasRun() && m_delay*3 < m_avgEventTime) + m_delay += baseDelay; } + eventTimer.start(); #endif TInt error; @@ -765,6 +828,12 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla CActiveScheduler::Current()->Error(error); } +#ifdef QT_SYMBIAN_PRIORITY_DROP + int eventDur = eventTimer.elapsed()*1000; + // average is calcualted as a 5% decaying exponential average + m_avgEventTime = (m_avgEventTime * 95 + eventDur * 5) / 100; +#endif + if (!handledSymbianEvent) { qFatal("QEventDispatcherSymbian::processEvents(): Caught Symbian stray signal"); } @@ -773,20 +842,6 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla break; } block = false; -#ifdef QT_SYMBIAN_PRIORITY_DROP - if (timeState == TimeStarted && time.elapsed() > 100) { - priority = m_processHandle.Priority(); - m_processHandle.SetPriority(EPriorityBackground); - time.start(); - // Slight chance of race condition in the next lines, but nothing fatal - // will happen, just wrong priority. - if (m_processHandle.Priority() == EPriorityBackground) { - m_processHandle.SetPriority(priority); - } - } - if (timeState == FirstRun) - timeState = SubsequentRun; -#endif }; emit awake(); diff --git a/src/corelib/kernel/qeventdispatcher_symbian_p.h b/src/corelib/kernel/qeventdispatcher_symbian_p.h index 5281199..05758ca 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian_p.h +++ b/src/corelib/kernel/qeventdispatcher_symbian_p.h @@ -62,6 +62,7 @@ #include <qmutex.h> #include <qwaitcondition.h> #include <qsocketnotifier.h> +#include <qdatetime.h> #include <e32base.h> @@ -280,7 +281,9 @@ private: QList<QActiveObject *> m_deferredActiveObjects; - RProcess m_processHandle; + int m_delay; + int m_avgEventTime; + QTime m_lastIdleRequestTimer; }; #ifdef QT_DEBUG diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp index 87decc6..62d565a 100644 --- a/src/corelib/plugin/qfactoryloader.cpp +++ b/src/corelib/plugin/qfactoryloader.cpp @@ -41,7 +41,7 @@ #include "qfactoryloader_p.h" -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY #include "qfactoryinterface.h" #include "qmap.h" #include <qdir.h> diff --git a/src/corelib/plugin/qfactoryloader_p.h b/src/corelib/plugin/qfactoryloader_p.h index 51426ba..10e6e2a 100644 --- a/src/corelib/plugin/qfactoryloader_p.h +++ b/src/corelib/plugin/qfactoryloader_p.h @@ -57,7 +57,7 @@ #include "QtCore/qstringlist.h" #include "private/qlibrary_p.h" -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QT_BEGIN_NAMESPACE diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp index c5f70b0..29a7263 100644 --- a/src/corelib/tools/qbytearray.cpp +++ b/src/corelib/tools/qbytearray.cpp @@ -3814,7 +3814,7 @@ QByteArray QByteArray::number(double n, char f, int prec) accepting a \c{const char *} expected to be '\\0'-terminated will fail. - \sa data(), constData() + \sa setRawData(), data(), constData() */ QByteArray QByteArray::fromRawData(const char *data, int size) @@ -3834,6 +3834,37 @@ QByteArray QByteArray::fromRawData(const char *data, int size) } /*! + \since 4.7 + + Resets the QByteArray to use the first \a size bytes of the + \a data array. The bytes are \e not copied. The QByteArray will + contain the \a data pointer. The caller guarantees that \a data + will not be deleted or modified as long as this QByteArray and any + copies of it exist that have not been modified. + + This function can be used instead of fromRawData() to re-use + existings QByteArray objects to save memory re-allocations. + + \sa fromRawData(), data(), constData() +*/ +QByteArray &QByteArray::setRawData(const char *data, uint size) +{ + if (d->ref != 1 || d->alloc) { + *this = fromRawData(data, size); + } else { + if (data) { + d->data = const_cast<char *>(data); + } else { + d->data = d->array; + size = 0; + } + d->alloc = d->size = size; + *d->array = '\0'; + } + return *this; +} + +/*! Returns a decoded copy of the Base64 array \a base64. Input is not checked for validity; invalid characters in the input are skipped, enabling the decoding process to continue with subsequent characters. @@ -4228,12 +4259,6 @@ QByteArray QByteArray::toPercentEncoding(const QByteArray &exclude, const QByteA */ /*! - \fn QByteArray& QByteArray::setRawData(const char *a, uint n) - - Use fromRawData() instead. -*/ - -/*! \fn void QByteArray::resetRawData(const char *data, uint n) Use clear() instead. diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h index 0b77512..a3fe3f5 100644 --- a/src/corelib/tools/qbytearray.h +++ b/src/corelib/tools/qbytearray.h @@ -299,6 +299,7 @@ public: QByteArray &setNum(qulonglong, int base = 10); QByteArray &setNum(float, char f = 'g', int prec = 6); QByteArray &setNum(double, char f = 'g', int prec = 6); + QByteArray &setRawData(const char *a, uint n); // ### Qt 5: use an int static QByteArray number(int, int base = 10); static QByteArray number(uint, int base = 10); @@ -343,8 +344,6 @@ public: inline QT3_SUPPORT QByteArray& duplicate(const QByteArray& a) { *this = a; return *this; } inline QT3_SUPPORT QByteArray& duplicate(const char *a, uint n) { *this = QByteArray(a, n); return *this; } - inline QT3_SUPPORT QByteArray& setRawData(const char *a, uint n) - { *this = fromRawData(a, n); return *this; } inline QT3_SUPPORT void resetRawData(const char *, uint) { clear(); } inline QT3_SUPPORT QByteArray lower() const { return toLower(); } inline QT3_SUPPORT QByteArray upper() const { return toUpper(); } diff --git a/src/corelib/tools/qbytedata_p.h b/src/corelib/tools/qbytedata_p.h index c48bb33..08249e0 100644 --- a/src/corelib/tools/qbytedata_p.h +++ b/src/corelib/tools/qbytedata_p.h @@ -84,7 +84,7 @@ public: } - inline void append(QByteArray& bd) + inline void append(const QByteArray& bd) { if (bd.isEmpty()) return; diff --git a/src/corelib/tools/qlist.cpp b/src/corelib/tools/qlist.cpp index 6f5bb9b..6cc6fc1 100644 --- a/src/corelib/tools/qlist.cpp +++ b/src/corelib/tools/qlist.cpp @@ -853,9 +853,7 @@ void **QListData::erase(void **xi) same as takeAt(0). This function assumes the list is not empty. To avoid failure, call isEmpty() before calling this function. - This operation is very fast (\l{constant time}), because QList - preallocates extra space on both sides of its internal buffer to - allow for fast growth at both ends of the list. + This operation takes \l{constant time}. If you don't use the return value, removeFirst() is more efficient. @@ -870,9 +868,7 @@ void **QListData::erase(void **xi) not empty. To avoid failure, call isEmpty() before calling this function. - This operation is very fast (\l{constant time}), because QList - preallocates extra space on both sides of its internal buffer to - allow for fast growth at both ends of the list. + This operation takes \l{constant time}. If you don't use the return value, removeLast() is more efficient. diff --git a/src/corelib/tools/qscopedpointer.cpp b/src/corelib/tools/qscopedpointer.cpp index e7dd769..b06112d 100644 --- a/src/corelib/tools/qscopedpointer.cpp +++ b/src/corelib/tools/qscopedpointer.cpp @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE called resource acquisition is initialization(RAII). QScopedPointer guarantees that the object pointed to will get deleted when - the current scope dissapears. + the current scope disappears. Consider this function which does heap allocations, and have various exit points: @@ -227,7 +227,7 @@ QT_BEGIN_NAMESPACE /*! \class QScopedArrayPointer - + \brief The QScopedArrayPointer class stores a pointer to a dynamically allocated array of objects, and deletes it upon destruction. diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 2f12b80..0169b20 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -7056,7 +7056,7 @@ void QString::updateProperties() const '\\0'-terminated string (although utf16() does, at the cost of copying the raw data). - \sa fromUtf16() + \sa fromUtf16(), setRawData() */ QString QString::fromRawData(const QChar *unicode, int size) { @@ -7075,6 +7075,44 @@ QString QString::fromRawData(const QChar *unicode, int size) return QString(x, 0); } +/*! + \since 4.7 + + Resets the QString to use the first \a size Unicode characters + in the array \a unicode. The data in \a unicode is \e not + copied. The caller must be able to guarantee that \a unicode will + not be deleted or modified as long as the QString (or an + unmodified copy of it) exists. + + This function can be used instead of fromRawData() to re-use + existings QString objects to save memory re-allocations. + + \sa fromRawData() +*/ +QString &QString::setRawData(const QChar *unicode, int size) +{ + if (d->ref != 1 || d->alloc) { + *this = fromRawData(unicode, size); + } else { +#ifdef QT3_SUPPORT + if (d->asciiCache) { + Q_ASSERT(asciiCache); + asciiCache->remove(d); + } +#endif + if (unicode) { + d->data = (ushort *)unicode; + } else { + d->data = d->array; + size = 0; + } + d->alloc = d->size = size; + *d->array = '\0'; + d->clean = d->asciiCache = d->simpletext = d->righttoleft = d->capacity = 0; + } + return *this; +} + /*! \class QLatin1String \brief The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal. diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h index ea12c2f..a1c4e77 100644 --- a/src/corelib/tools/qstring.h +++ b/src/corelib/tools/qstring.h @@ -343,6 +343,7 @@ public: int toWCharArray(wchar_t *array) const; static QString fromWCharArray(const wchar_t *, int size = -1); + QString &setRawData(const QChar *unicode, int size); QString &setUnicode(const QChar *unicode, int size); inline QString &setUtf16(const ushort *utf16, int size); diff --git a/src/corelib/xml/qxmlstream.g b/src/corelib/xml/qxmlstream.g index 1b882e0..e91408f 100644 --- a/src/corelib/xml/qxmlstream.g +++ b/src/corelib/xml/qxmlstream.g @@ -748,7 +748,7 @@ bool QXmlStreamReaderPrivate::parse() state_stack[tos] = 0; return true; } else if (act > 0) { - if (++tos == stack_size) + if (++tos == stack_size-1) reallocateStack(); Value &val = sym_stack[tos]; diff --git a/src/corelib/xml/qxmlstream_p.h b/src/corelib/xml/qxmlstream_p.h index ac421cf..f6ab3a1 100644 --- a/src/corelib/xml/qxmlstream_p.h +++ b/src/corelib/xml/qxmlstream_p.h @@ -61,7 +61,7 @@ class QXmlStreamReader_Table { public: - enum { + enum VariousConstants { EOF_SYMBOL = 0, AMPERSAND = 5, ANY = 41, @@ -1242,7 +1242,7 @@ bool QXmlStreamReaderPrivate::parse() state_stack[tos] = 0; return true; } else if (act > 0) { - if (++tos == stack_size) + if (++tos == stack_size-1) reallocateStack(); Value &val = sym_stack[tos]; diff --git a/src/dbus/qdbusinterface.cpp b/src/dbus/qdbusinterface.cpp index 7cc43ed..b989cab 100644 --- a/src/dbus/qdbusinterface.cpp +++ b/src/dbus/qdbusinterface.cpp @@ -260,7 +260,7 @@ void *QDBusInterface::qt_metacast(const char *_clname) int QDBusInterface::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QDBusAbstractInterface::qt_metacall(_c, _id, _a); - if (_id < 0 || !d_func()->isValid) + if (_id < 0 || !d_func()->isValid || !d_func()->metaObject) return _id; return d_func()->metacall(_c, _id, _a); } diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp index bc0c65e..096e4bf 100644 --- a/src/declarative/graphicsitems/qdeclarativeitem.cpp +++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp @@ -1268,11 +1268,6 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec */ /*! - \property QDeclarativeItem::effect - \internal -*/ - -/*! \property QDeclarativeItem::focus \internal */ diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp index a55a061..0921bdb 100644 --- a/src/gui/accessible/qaccessible.cpp +++ b/src/gui/accessible/qaccessible.cpp @@ -389,7 +389,7 @@ QT_BEGIN_NAMESPACE \internal */ -#if !defined(QT_NO_LIBRARY) && (!defined(QT_NO_SETTINGS) || !defined(Q_OS_WIN)) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QAccessibleFactoryInterface_iid, QLatin1String("/accessible"))) #endif @@ -532,7 +532,7 @@ QAccessibleInterface *QAccessible::queryAccessibleInterface(QObject *object) if (iface) return iface; } -#if !defined(QT_NO_LIBRARY) && (!defined(QT_NO_SETTINGS) || !defined(Q_OS_WIN)) +#ifndef QT_NO_LIBRARY QAccessibleFactoryInterface *factory = qobject_cast<QAccessibleFactoryInterface*>(loader()->instance(cn)); if (factory) { iface = factory->create(cn, object); diff --git a/src/gui/dialogs/qfiledialog.h b/src/gui/dialogs/qfiledialog.h index 97fac4e..16cb317 100644 --- a/src/gui/dialogs/qfiledialog.h +++ b/src/gui/dialogs/qfiledialog.h @@ -67,6 +67,7 @@ class Q_GUI_EXPORT QFileDialog : public QDialog { Q_OBJECT Q_ENUMS(ViewMode FileMode AcceptMode Option) + Q_FLAGS(Options) Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode) Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode) Q_PROPERTY(AcceptMode acceptMode READ acceptMode WRITE setAcceptMode) diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp index ce4ce6a..5e4e49e 100644 --- a/src/gui/effects/qgraphicseffect.cpp +++ b/src/gui/effects/qgraphicseffect.cpp @@ -326,7 +326,7 @@ QPixmap QGraphicsEffectSource::pixmap(Qt::CoordinateSystem system, QPoint *offse } QPixmap pm; - if (d->m_cachedSystem == system && d->m_cachedMode == mode) + if (item && d->m_cachedSystem == system && d->m_cachedMode == mode) QPixmapCache::find(d->m_cacheKey, &pm); if (pm.isNull()) { diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h index 6c562ef..4fc1338 100644 --- a/src/gui/egl/qegl_p.h +++ b/src/gui/egl/qegl_p.h @@ -154,7 +154,13 @@ QT_BEGIN_NAMESPACE // Declare/define the bits of EGL_KHR_image_base we need: #if !defined(EGL_KHR_image) && !defined(EGL_KHR_image_base) +#ifdef Q_OS_SYMBIAN +//symbian version of eglext.h differs from the khronos reference +typedef int EGLImageKHR; +#else typedef void *EGLImageKHR; +#endif + #define EGL_NO_IMAGE_KHR ((EGLImageKHR)0) #define EGL_IMAGE_PRESERVED_KHR 0x30D2 #define EGL_KHR_image_base diff --git a/src/gui/egl/qegl_qws.cpp b/src/gui/egl/qegl_qws.cpp index 56383a5..50db397 100644 --- a/src/gui/egl/qegl_qws.cpp +++ b/src/gui/egl/qegl_qws.cpp @@ -94,7 +94,7 @@ void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev) EGLNativeDisplayType QEgl::nativeDisplay() { - return EGL_DEFAULT_DISPLAY; + return EGLNativeDisplayType(EGL_DEFAULT_DISPLAY); } EGLNativeWindowType QEgl::nativeWindow(QWidget* widget) diff --git a/src/gui/egl/qegl_stub.cpp b/src/gui/egl/qegl_stub.cpp index 0bd3451..86a7aab 100644 --- a/src/gui/egl/qegl_stub.cpp +++ b/src/gui/egl/qegl_stub.cpp @@ -183,14 +183,6 @@ int QEglContext::configAttrib(int name) const return 0; } -typedef EGLImageKHR (EGLAPIENTRY *_eglCreateImageKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, const EGLint*); -typedef EGLBoolean (EGLAPIENTRY *_eglDestroyImageKHR)(EGLDisplay, EGLImageKHR); - -// Defined in qegl.cpp: -static _eglCreateImageKHR qt_eglCreateImageKHR = 0; -static _eglDestroyImageKHR qt_eglDestroyImageKHR = 0; - - EGLDisplay QEgl::display() { NOEGL diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 326f130..65edb2a 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -1812,7 +1812,7 @@ void QGraphicsItem::setFlags(GraphicsItemFlags flags) const quint32 geomChangeFlagsMask = (ItemClipsChildrenToShape | ItemClipsToShape | ItemIgnoresTransformations | ItemIsSelectable); bool fullUpdate = (quint32(flags) & geomChangeFlagsMask) != (d_ptr->flags & geomChangeFlagsMask); if (fullUpdate) - d_ptr->paintedViewBoundingRectsNeedRepaint = 1; + d_ptr->updatePaintedViewBoundingRects(/*children=*/true); // Keep the old flags to compare the diff. GraphicsItemFlags oldFlags = GraphicsItemFlags(d_ptr->flags); @@ -5432,6 +5432,24 @@ void QGraphicsItemPrivate::removeExtraItemCache() unsetExtra(ExtraCacheData); } +void QGraphicsItemPrivate::updatePaintedViewBoundingRects(bool updateChildren) +{ + if (!scene) + return; + + for (int i = 0; i < scene->d_func()->views.size(); ++i) { + QGraphicsViewPrivate *viewPrivate = scene->d_func()->views.at(i)->d_func(); + QRect rect = paintedViewBoundingRects.value(viewPrivate->viewport); + rect.translate(viewPrivate->dirtyScrollOffset); + viewPrivate->updateRect(rect); + } + + if (updateChildren) { + for (int i = 0; i < children.size(); ++i) + children.at(i)->d_ptr->updatePaintedViewBoundingRects(true); + } +} + // Traverses all the ancestors up to the top-level and updates the pointer to // always point to the top-most item that has a dirty scene transform. // It then backtracks to the top-most dirty item and start calculating the @@ -5635,8 +5653,9 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect) // Adjust with 2 pixel margin. Notice the loss of precision // when converting to QRect. int adjust = 2; + QRectF scrollRect = !rect.isNull() ? rect : boundingRect(); QRectF br = boundingRect().adjusted(-adjust, -adjust, adjust, adjust); - QRect irect = rect.toRect().translated(-br.x(), -br.y()); + QRect irect = scrollRect.toRect().translated(-br.x(), -br.y()); pix.scroll(dx, dy, irect); @@ -5644,11 +5663,11 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect) // Translate the existing expose. foreach (QRectF exposedRect, c->exposed) - c->exposed += exposedRect.translated(dx, dy) & rect; + c->exposed += exposedRect.translated(dx, dy) & scrollRect; // Calculate exposure. QRegion exposed; - QRect r = rect.toRect(); + QRect r = scrollRect.toRect(); exposed += r; exposed -= r.translated(dx, dy); foreach (QRect rect, exposed.rects()) @@ -7131,7 +7150,11 @@ void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) // calculate their diff by mapping viewport coordinates // directly to parent coordinates. // COMBINE - QTransform viewToParentTransform = (item->d_func()->transformData->computedFullTransform().translate(item->d_ptr->pos.x(), item->d_ptr->pos.y())) + QTransform itemTransform; + if (item->d_ptr->transformData) + itemTransform = item->d_ptr->transformData->computedFullTransform(); + itemTransform.translate(item->d_ptr->pos.x(), item->d_ptr->pos.y()); + QTransform viewToParentTransform = itemTransform * (item->sceneTransform() * view->viewportTransform()).inverted(); currentParentPos = viewToParentTransform.map(QPointF(view->mapFromGlobal(event->screenPos()))); buttonDownParentPos = viewToParentTransform.map(QPointF(view->mapFromGlobal(event->buttonDownScreenPos(Qt::LeftButton)))); diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index 6b22607..e812f29 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -377,6 +377,7 @@ public: QGraphicsItemCache *extraItemCache() const; void removeExtraItemCache(); + void updatePaintedViewBoundingRects(bool updateChildren); void ensureSceneTransformRecursive(QGraphicsItem **topMostDirtyItem); inline void ensureSceneTransform() { @@ -845,6 +846,13 @@ inline bool QGraphicsItemPrivate::insertionOrder(QGraphicsItem *a, QGraphicsItem inline void QGraphicsItemPrivate::markParentDirty(bool updateBoundingRect) { QGraphicsItemPrivate *parentp = this; +#ifndef QT_NO_GRAPHICSEFFECT + if (updateBoundingRect && parentp->graphicsEffect && !parentp->inSetPosHelper) { + parentp->notifyInvalidated = 1; + static_cast<QGraphicsItemEffectSourcePrivate *>(parentp->graphicsEffect->d_func() + ->source->d_func())->invalidateCache(); + } +#endif while (parentp->parent) { parentp = parentp->parent->d_ptr.data(); parentp->dirtyChildren = 1; diff --git a/src/gui/graphicsview/qgraphicsproxywidget.cpp b/src/gui/graphicsview/qgraphicsproxywidget.cpp index 1f89714..320395e 100644 --- a/src/gui/graphicsview/qgraphicsproxywidget.cpp +++ b/src/gui/graphicsview/qgraphicsproxywidget.cpp @@ -975,6 +975,7 @@ bool QGraphicsProxyWidget::eventFilter(QObject *object, QEvent *event) d->styleChangeMode = QGraphicsProxyWidgetPrivate::NoMode; } break; +#ifndef QT_NO_TOOLTIP case QEvent::ToolTipChange: // Propagate tooltip change to the proxy. if (!d->tooltipChangeMode) { @@ -983,6 +984,7 @@ bool QGraphicsProxyWidget::eventFilter(QObject *object, QEvent *event) d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::NoMode; } break; +#endif default: break; } diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index bd0f0d8..dfba7c9 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -290,13 +290,20 @@ QGraphicsScenePrivate::QGraphicsScenePrivate() updateAll(false), calledEmitUpdated(false), processDirtyItemsEmitted(false), - selectionChanging(0), needSortTopLevelItems(true), holesInTopLevelSiblingIndex(false), topLevelSequentialOrdering(true), scenePosDescendantsUpdatePending(false), stickyFocus(false), hasFocus(false), + lastMouseGrabberItemHasImplicitMouseGrab(false), + allItemsIgnoreHoverEvents(true), + allItemsUseDefaultCursor(true), + painterStateProtection(true), + sortCacheEnabled(false), + allItemsIgnoreTouchEvents(true), + selectionChanging(0), + rectAdjust(2), focusItem(0), lastFocusItem(0), tabFocusFirst(0), @@ -305,16 +312,10 @@ QGraphicsScenePrivate::QGraphicsScenePrivate() activationRefCount(0), childExplicitActivation(0), lastMouseGrabberItem(0), - lastMouseGrabberItemHasImplicitMouseGrab(false), dragDropItem(0), enterWidget(0), lastDropAction(Qt::IgnoreAction), - allItemsIgnoreHoverEvents(true), - allItemsUseDefaultCursor(true), - painterStateProtection(true), - sortCacheEnabled(false), - style(0), - allItemsIgnoreTouchEvents(true) + style(0) { } @@ -820,13 +821,13 @@ void QGraphicsScenePrivate::setFocusItemHelper(QGraphicsItem *item, #endif //QT_NO_IM } - if (item) { + if (item) focusItem = item; + updateInputMethodSensitivityInViews(); + if (item) { QFocusEvent event(QEvent::FocusIn, focusReason); sendEvent(item, &event); } - - updateInputMethodSensitivityInViews(); } /*! @@ -3217,7 +3218,10 @@ void QGraphicsScene::update(const QRectF &rect) // Update all views. for (int i = 0; i < d->views.size(); ++i) { QGraphicsView *view = d->views.at(i); - view->d_func()->updateRegion(QRegion(view->mapFromScene(rect).boundingRect())); + if (view->isTransformed()) + view->d_func()->updateRectF(view->viewportTransform().mapRect(rect)); + else + view->d_func()->updateRectF(rect); } } else { d->updatedRects << rect; @@ -4701,11 +4705,11 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter * if (drawItem) { const QRectF brect = adjustedItemEffectiveBoundingRect(item); ENSURE_TRANSFORM_PTR - QRect viewBoundingRect = translateOnlyTransform ? brect.translated(transformPtr->dx(), transformPtr->dy()).toRect() - : transformPtr->mapRect(brect).toRect(); + QRect viewBoundingRect = translateOnlyTransform ? brect.translated(transformPtr->dx(), transformPtr->dy()).toAlignedRect() + : transformPtr->mapRect(brect).toAlignedRect(); + viewBoundingRect.adjust(-rectAdjust, -rectAdjust, rectAdjust, rectAdjust); if (widget) item->d_ptr->paintedViewBoundingRects.insert(widget, viewBoundingRect); - viewBoundingRect.adjust(-1, -1, 1, 1); drawItem = exposedRegion ? exposedRegion->intersects(viewBoundingRect) : !viewBoundingRect.normalized().isEmpty(); if (!drawItem) { @@ -4954,34 +4958,29 @@ static inline bool updateHelper(QGraphicsViewPrivate *view, QGraphicsItemPrivate if (itemIsUntransformable) { const QTransform xform = itemq->deviceTransform(viewq->viewportTransform()); if (!item->hasBoundingRegionGranularity) - return view->updateRect(xform.mapRect(rect).toRect()); - return view->updateRegion(xform.map(QRegion(rect.toRect()))); + return view->updateRectF(xform.mapRect(rect)); + return view->updateRegion(rect, xform); } if (item->sceneTransformTranslateOnly && view->identityMatrix) { const qreal dx = item->sceneTransform.dx(); const qreal dy = item->sceneTransform.dy(); - if (!item->hasBoundingRegionGranularity) { - QRectF r(rect); - r.translate(dx - view->horizontalScroll(), dy - view->verticalScroll()); - return view->updateRect(r.toRect()); - } - QRegion r(rect.toRect()); - r.translate(qRound(dx) - view->horizontalScroll(), qRound(dy) - view->verticalScroll()); - return view->updateRegion(r); + QRectF r(rect); + r.translate(dx - view->horizontalScroll(), dy - view->verticalScroll()); + return view->updateRectF(r); } if (!viewq->isTransformed()) { if (!item->hasBoundingRegionGranularity) - return view->updateRect(item->sceneTransform.mapRect(rect).toRect()); - return view->updateRegion(item->sceneTransform.map(QRegion(rect.toRect()))); + return view->updateRectF(item->sceneTransform.mapRect(rect)); + return view->updateRegion(rect, item->sceneTransform); } QTransform xform = item->sceneTransform; xform *= viewq->viewportTransform(); if (!item->hasBoundingRegionGranularity) - return view->updateRect(xform.mapRect(rect).toRect()); - return view->updateRegion(xform.map(QRegion(rect.toRect()))); + return view->updateRectF(xform.mapRect(rect)); + return view->updateRegion(rect, xform); } void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool dirtyAncestorContainsChildren, @@ -5117,9 +5116,15 @@ void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool // Process children. if (itemHasChildren && item->d_ptr->dirtyChildren) { + const bool itemClipsChildrenToShape = item->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape; + if (itemClipsChildrenToShape) { + // Make sure child updates are clipped to the item's bounding rect. + for (int i = 0; i < views.size(); ++i) + views.at(i)->d_func()->setUpdateClip(item); + } if (!dirtyAncestorContainsChildren) { dirtyAncestorContainsChildren = item->d_ptr->fullUpdatePending - && (item->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape); + && itemClipsChildrenToShape; } const bool allChildrenDirty = item->d_ptr->allChildrenDirty; const bool parentIgnoresVisible = item->d_ptr->ignoreVisible; @@ -5142,6 +5147,12 @@ void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool } processDirtyItemsRecursive(child, dirtyAncestorContainsChildren, opacity); } + + if (itemClipsChildrenToShape) { + // Reset updateClip. + for (int i = 0; i < views.size(); ++i) + views.at(i)->d_func()->setUpdateClip(0); + } } else if (wasDirtyParentSceneTransform) { item->d_ptr->invalidateChildrenSceneTransform(); } @@ -5197,8 +5208,14 @@ void QGraphicsScene::drawItems(QPainter *painter, // Determine view, expose and flags. QGraphicsView *view = widget ? qobject_cast<QGraphicsView *>(widget->parentWidget()) : 0; QRegion *expose = 0; - if (view) + const quint32 oldRectAdjust = d->rectAdjust; + if (view) { expose = &view->d_func()->exposedRegion; + if (view->d_func()->optimizationFlags & QGraphicsView::DontAdjustForAntialiasing) + d->rectAdjust = 1; + else + d->rectAdjust = 2; + } // Find all toplevels, they are already sorted. QList<QGraphicsItem *> topLevelItems; @@ -5211,6 +5228,7 @@ void QGraphicsScene::drawItems(QPainter *painter, } } + d->rectAdjust = oldRectAdjust; // Reset discovery bits. for (int i = 0; i < topLevelItems.size(); ++i) topLevelItems.at(i)->d_ptr->itemDiscovered = 0; diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h index 11e250e..77bf450 100644 --- a/src/gui/graphicsview/qgraphicsscene_p.h +++ b/src/gui/graphicsview/qgraphicsscene_p.h @@ -97,24 +97,36 @@ public: int lastItemCount; QRectF sceneRect; - bool hasSceneRect; - bool dirtyGrowingItemsBoundingRect; + + quint32 hasSceneRect : 1; + quint32 dirtyGrowingItemsBoundingRect : 1; + quint32 updateAll : 1; + quint32 calledEmitUpdated : 1; + quint32 processDirtyItemsEmitted : 1; + quint32 needSortTopLevelItems : 1; + quint32 holesInTopLevelSiblingIndex : 1; + quint32 topLevelSequentialOrdering : 1; + quint32 scenePosDescendantsUpdatePending : 1; + quint32 stickyFocus : 1; + quint32 hasFocus : 1; + quint32 lastMouseGrabberItemHasImplicitMouseGrab : 1; + quint32 allItemsIgnoreHoverEvents : 1; + quint32 allItemsUseDefaultCursor : 1; + quint32 painterStateProtection : 1; + quint32 sortCacheEnabled : 1; // for compatibility + quint32 allItemsIgnoreTouchEvents : 1; + quint32 padding : 15; + QRectF growingItemsBoundingRect; void _q_emitUpdated(); QList<QRectF> updatedRects; - bool updateAll; - bool calledEmitUpdated; - bool processDirtyItemsEmitted; QPainterPath selectionArea; int selectionChanging; QSet<QGraphicsItem *> selectedItems; QVector<QGraphicsItem *> unpolishedItems; QList<QGraphicsItem *> topLevelItems; - bool needSortTopLevelItems; - bool holesInTopLevelSiblingIndex; - bool topLevelSequentialOrdering; QMap<QGraphicsItem *, QPointF> movingItemsInitialPositions; void registerTopLevelItem(QGraphicsItem *item); @@ -125,7 +137,6 @@ public: void _q_processDirtyItems(); QSet<QGraphicsItem *> scenePosItems; - bool scenePosDescendantsUpdatePending; void setScenePosItemEnabled(QGraphicsItem *item, bool enabled); void registerScenePosItem(QGraphicsItem *item); void unregisterScenePosItem(QGraphicsItem *item); @@ -136,8 +147,7 @@ public: QBrush backgroundBrush; QBrush foregroundBrush; - bool stickyFocus; - bool hasFocus; + quint32 rectAdjust; QGraphicsItem *focusItem; QGraphicsItem *lastFocusItem; QGraphicsWidget *tabFocusFirst; @@ -153,7 +163,6 @@ public: void removePopup(QGraphicsWidget *widget, bool itemIsDying = false); QGraphicsItem *lastMouseGrabberItem; - bool lastMouseGrabberItemHasImplicitMouseGrab; QList<QGraphicsItem *> mouseGrabberItems; void grabMouse(QGraphicsItem *item, bool implicit = false); void ungrabMouse(QGraphicsItem *item, bool itemIsDying = false); @@ -170,8 +179,6 @@ public: QList<QGraphicsItem *> cachedItemsUnderMouse; QList<QGraphicsItem *> hoverItems; QPointF lastSceneMousePos; - bool allItemsIgnoreHoverEvents; - bool allItemsUseDefaultCursor; void enableMouseTrackingOnViews(); QMap<Qt::MouseButton, QPointF> mouseGrabberButtonDownPos; QMap<Qt::MouseButton, QPointF> mouseGrabberButtonDownScenePos; @@ -185,8 +192,6 @@ public: void addView(QGraphicsView *view); void removeView(QGraphicsView *view); - bool painterStateProtection; - QMultiMap<QGraphicsItem *, QGraphicsItem *> sceneEventFilters; void installSceneEventFilter(QGraphicsItem *watched, QGraphicsItem *filter); void removeSceneEventFilter(QGraphicsItem *watched, QGraphicsItem *filter); @@ -208,8 +213,6 @@ public: void mousePressEventHandler(QGraphicsSceneMouseEvent *mouseEvent); QGraphicsWidget *windowForItem(const QGraphicsItem *item) const; - bool sortCacheEnabled; // for compatibility - void drawItemHelper(QGraphicsItem *item, QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget, bool painterStateProtection); @@ -293,7 +296,6 @@ public: int findClosestTouchPointId(const QPointF &scenePos); void touchEventHandler(QTouchEvent *touchEvent); bool sendTouchBeginEvent(QGraphicsItem *item, QTouchEvent *touchEvent); - bool allItemsIgnoreTouchEvents; void enableTouchEventsOnViews(); QList<QGraphicsObject *> cachedTargetItems; diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index c951dce..0f951ef 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -327,16 +327,21 @@ QGraphicsViewPrivate::QGraphicsViewPrivate() dragMode(QGraphicsView::NoDrag), sceneInteractionAllowed(true), hasSceneRect(false), connectedToScene(false), - mousePressButton(Qt::NoButton), + useLastMouseEvent(false), identityMatrix(true), dirtyScroll(true), accelerateScrolling(true), + keepLastCenterPoint(true), + transforming(false), + handScrolling(false), + mustAllocateStyleOptions(false), + mustResizeBackgroundPixmap(true), + fullUpdatePending(true), + hasUpdateClip(false), + mousePressButton(Qt::NoButton), leftIndent(0), topIndent(0), lastMouseEvent(QEvent::None, QPoint(), Qt::NoButton, 0, 0), - useLastMouseEvent(false), - keepLastCenterPoint(true), alignment(Qt::AlignCenter), - transforming(false), transformationAnchor(QGraphicsView::AnchorViewCenter), resizeAnchor(QGraphicsView::NoAnchor), viewportUpdateMode(QGraphicsView::MinimalViewportUpdate), optimizationFlags(0), @@ -345,14 +350,11 @@ QGraphicsViewPrivate::QGraphicsViewPrivate() rubberBanding(false), rubberBandSelectionMode(Qt::IntersectsItemShape), #endif - handScrolling(false), handScrollMotions(0), cacheMode(0), - mustAllocateStyleOptions(false), - mustResizeBackgroundPixmap(true), + handScrollMotions(0), cacheMode(0), #ifndef QT_NO_CURSOR hasStoredOriginalCursor(false), #endif lastDragDropEvent(0), - fullUpdatePending(true), updateSceneSlotReimplementedChecked(false) { styleOptions.reserve(QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS); @@ -854,10 +856,7 @@ void QGraphicsViewPrivate::processPendingUpdates() if (fullUpdatePending) { viewport->update(); } else if (viewportUpdateMode == QGraphicsView::BoundingRectViewportUpdate) { - if (optimizationFlags & QGraphicsView::DontAdjustForAntialiasing) - viewport->update(dirtyBoundingRect.adjusted(-1, -1, 1, 1)); - else - viewport->update(dirtyBoundingRect.adjusted(-2, -2, 2, 2)); + viewport->update(dirtyBoundingRect); } else { viewport->update(dirtyRegion); // Already adjusted in updateRect/Region. } @@ -882,46 +881,92 @@ static inline void QRect_unite(QRect *rect, const QRect &other) } } -bool QGraphicsViewPrivate::updateRegion(const QRegion &r) +/* + Calling this function results in update rects being clipped to the item's + bounding rect. Note that updates prior to this function call is not clipped. + The clip is removed by passing 0. +*/ +void QGraphicsViewPrivate::setUpdateClip(QGraphicsItem *item) { - if (fullUpdatePending || viewportUpdateMode == QGraphicsView::NoViewportUpdate || r.isEmpty()) - return false; + Q_Q(QGraphicsView); + // We simply ignore the request if the update mode is either FullViewportUpdate + // or NoViewportUpdate; in that case there's no point in clipping anything. + if (!item || viewportUpdateMode == QGraphicsView::NoViewportUpdate + || viewportUpdateMode == QGraphicsView::FullViewportUpdate) { + hasUpdateClip = false; + return; + } - const QRect boundingRect = r.boundingRect(); - if (!intersectsViewport(boundingRect, viewport->width(), viewport->height())) - return false; // Update region outside viewport. + // Calculate the clip (item's bounding rect in view coordinates). + // Optimized version of: + // QRect clip = item->deviceTransform(q->viewportTransform()) + // .mapRect(item->boundingRect()).toAlignedRect(); + QRect clip; + if (item->d_ptr->itemIsUntransformable()) { + QTransform xform = item->deviceTransform(q->viewportTransform()); + clip = xform.mapRect(item->boundingRect()).toAlignedRect(); + } else if (item->d_ptr->sceneTransformTranslateOnly && identityMatrix) { + QRectF r(item->boundingRect()); + r.translate(item->d_ptr->sceneTransform.dx() - horizontalScroll(), + item->d_ptr->sceneTransform.dy() - verticalScroll()); + clip = r.toAlignedRect(); + } else if (!q->isTransformed()) { + clip = item->d_ptr->sceneTransform.mapRect(item->boundingRect()).toAlignedRect(); + } else { + QTransform xform = item->d_ptr->sceneTransform; + xform *= q->viewportTransform(); + clip = xform.mapRect(item->boundingRect()).toAlignedRect(); + } - switch (viewportUpdateMode) { - case QGraphicsView::FullViewportUpdate: - fullUpdatePending = true; - viewport->update(); - break; - case QGraphicsView::BoundingRectViewportUpdate: - QRect_unite(&dirtyBoundingRect, boundingRect); - if (containsViewport(dirtyBoundingRect, viewport->width(), viewport->height())) { - fullUpdatePending = true; - viewport->update(); - } - break; - case QGraphicsView::SmartViewportUpdate: // ### DEPRECATE - case QGraphicsView::MinimalViewportUpdate: - { - const QVector<QRect> &rects = r.rects(); - for (int i = 0; i < rects.size(); ++i) { - if (optimizationFlags & QGraphicsView::DontAdjustForAntialiasing) - dirtyRegion += rects.at(i).adjusted(-1, -1, 1, 1); - else - dirtyRegion += rects.at(i).adjusted(-2, -2, 2, 2); - } - break; + if (hasUpdateClip) { + // Intersect with old clip. + updateClip &= clip; + } else { + updateClip = clip; + hasUpdateClip = true; } - default: - break; +} + +bool QGraphicsViewPrivate::updateRegion(const QRectF &rect, const QTransform &xform) +{ + if (rect.isEmpty()) + return false; + + if (viewportUpdateMode != QGraphicsView::MinimalViewportUpdate + && viewportUpdateMode != QGraphicsView::SmartViewportUpdate) { + // No point in updating with QRegion granularity; use the rect instead. + return updateRectF(xform.mapRect(rect)); + } + + // Update mode is either Minimal or Smart, so we have to do a potentially slow operation, + // which is clearly documented here: QGraphicsItem::setBoundingRegionGranularity. + const QRegion region = xform.map(QRegion(rect.toAlignedRect())); + QRect viewRect = region.boundingRect(); + const bool dontAdjustForAntialiasing = optimizationFlags & QGraphicsView::DontAdjustForAntialiasing; + if (dontAdjustForAntialiasing) + viewRect.adjust(-1, -1, 1, 1); + else + viewRect.adjust(-2, -2, 2, 2); + if (!intersectsViewport(viewRect, viewport->width(), viewport->height())) + return false; // Update region for sure outside viewport. + + const QVector<QRect> &rects = region.rects(); + for (int i = 0; i < rects.size(); ++i) { + viewRect = rects.at(i); + if (dontAdjustForAntialiasing) + viewRect.adjust(-1, -1, 1, 1); + else + viewRect.adjust(-2, -2, 2, 2); + if (hasUpdateClip) + viewRect &= updateClip; + dirtyRegion += viewRect; } return true; } +// NB! Assumes the rect 'r' is already aligned and adjusted for antialiasing. +// For QRectF use updateRectF(const QRectF &) to ensure proper adjustments. bool QGraphicsViewPrivate::updateRect(const QRect &r) { if (fullUpdatePending || viewportUpdateMode == QGraphicsView::NoViewportUpdate @@ -935,7 +980,10 @@ bool QGraphicsViewPrivate::updateRect(const QRect &r) viewport->update(); break; case QGraphicsView::BoundingRectViewportUpdate: - QRect_unite(&dirtyBoundingRect, r); + if (hasUpdateClip) + QRect_unite(&dirtyBoundingRect, r & updateClip); + else + QRect_unite(&dirtyBoundingRect, r); if (containsViewport(dirtyBoundingRect, viewport->width(), viewport->height())) { fullUpdatePending = true; viewport->update(); @@ -943,10 +991,10 @@ bool QGraphicsViewPrivate::updateRect(const QRect &r) break; case QGraphicsView::SmartViewportUpdate: // ### DEPRECATE case QGraphicsView::MinimalViewportUpdate: - if (optimizationFlags & QGraphicsView::DontAdjustForAntialiasing) - dirtyRegion += r.adjusted(-1, -1, 1, 1); + if (hasUpdateClip) + dirtyRegion += r & updateClip; else - dirtyRegion += r.adjusted(-2, -2, 2, 2); + dirtyRegion += r; break; default: break; @@ -3403,8 +3451,14 @@ void QGraphicsView::paintEvent(QPaintEvent *event) // Items if (!(d->optimizationFlags & IndirectPainting)) { + const quint32 oldRectAdjust = d->scene->d_func()->rectAdjust; + if (d->optimizationFlags & QGraphicsView::DontAdjustForAntialiasing) + d->scene->d_func()->rectAdjust = 1; + else + d->scene->d_func()->rectAdjust = 2; d->scene->d_func()->drawItems(&painter, viewTransformed ? &viewTransform : 0, &d->exposedRegion, viewport()); + d->scene->d_func()->rectAdjust = oldRectAdjust; // Make sure the painter's world transform is restored correctly when // drawing without painter state protection (DontSavePainterState). // We only change the worldTransform() so there's no need to do a full-blown diff --git a/src/gui/graphicsview/qgraphicsview_p.h b/src/gui/graphicsview/qgraphicsview_p.h index 729837a..7bd9ecb 100644 --- a/src/gui/graphicsview/qgraphicsview_p.h +++ b/src/gui/graphicsview/qgraphicsview_p.h @@ -77,11 +77,25 @@ public: QPainter::RenderHints renderHints; QGraphicsView::DragMode dragMode; - bool sceneInteractionAllowed; + + quint32 sceneInteractionAllowed : 1; + quint32 hasSceneRect : 1; + quint32 connectedToScene : 1; + quint32 useLastMouseEvent : 1; + quint32 identityMatrix : 1; + quint32 dirtyScroll : 1; + quint32 accelerateScrolling : 1; + quint32 keepLastCenterPoint : 1; + quint32 transforming : 1; + quint32 handScrolling : 1; + quint32 mustAllocateStyleOptions : 1; + quint32 mustResizeBackgroundPixmap : 1; + quint32 fullUpdatePending : 1; + quint32 hasUpdateClip : 1; + quint32 padding : 18; + QRectF sceneRect; - bool hasSceneRect; void updateLastCenterPoint(); - bool connectedToScene; qint64 horizontalScroll() const; qint64 verticalScroll() const; @@ -89,6 +103,7 @@ public: QRectF mapRectToScene(const QRect &rect) const; QRectF mapRectFromScene(const QRectF &rect) const; + QRect updateClip; QPointF mousePressItemPoint; QPointF mousePressScenePoint; QPoint mousePressViewPoint; @@ -98,26 +113,20 @@ public: QPoint dirtyScrollOffset; Qt::MouseButton mousePressButton; QTransform matrix; - bool identityMatrix; qint64 scrollX, scrollY; - bool dirtyScroll; void updateScroll(); - bool accelerateScrolling; qreal leftIndent; qreal topIndent; // Replaying mouse events QMouseEvent lastMouseEvent; - bool useLastMouseEvent; void replayLastMouseEvent(); void storeMouseEvent(QMouseEvent *event); void mouseMoveEventHandler(QMouseEvent *event); QPointF lastCenterPoint; - bool keepLastCenterPoint; Qt::Alignment alignment; - bool transforming; QGraphicsView::ViewportAnchor transformationAnchor; QGraphicsView::ViewportAnchor resizeAnchor; @@ -131,20 +140,17 @@ public: bool rubberBanding; Qt::ItemSelectionMode rubberBandSelectionMode; #endif - bool handScrolling; int handScrollMotions; QGraphicsView::CacheMode cacheMode; QVector<QStyleOptionGraphicsItem> styleOptions; - bool mustAllocateStyleOptions; QStyleOptionGraphicsItem *allocStyleOptionsArray(int numItems); void freeStyleOptionsArray(QStyleOptionGraphicsItem *array); QBrush backgroundBrush; QBrush foregroundBrush; QPixmap backgroundPixmap; - bool mustResizeBackgroundPixmap; QRegion backgroundPixmapExposed; #ifndef QT_NO_CURSOR @@ -161,7 +167,6 @@ public: QRect mapToViewRect(const QGraphicsItem *item, const QRectF &rect) const; QRegion mapToViewRegion(const QGraphicsItem *item, const QRectF &rect) const; - bool fullUpdatePending; QRegion dirtyRegion; QRect dirtyBoundingRect; void processPendingUpdates(); @@ -183,13 +188,28 @@ public: else QCoreApplication::sendPostedEvents(viewport->window(), QEvent::UpdateRequest); #else - QCoreApplication::processEvents(QEventLoop::AllEvents | QEventLoop::ExcludeSocketNotifiers - | QEventLoop::ExcludeUserInputEvents); + // At this point either HIViewSetNeedsDisplay (Carbon) or setNeedsDisplay: YES (Cocoa) + // is called, which means there's a pending update request. We want to dispatch it + // now because otherwise graphics view updates would require two + // round-trips in the event loop before the item is painted. + extern void qt_mac_dispatchPendingUpdateRequests(QWidget *); + qt_mac_dispatchPendingUpdateRequests(viewport->window()); #endif } + void setUpdateClip(QGraphicsItem *); + + inline bool updateRectF(const QRectF &rect) + { + if (rect.isEmpty()) + return false; + if (optimizationFlags & QGraphicsView::DontAdjustForAntialiasing) + return updateRect(rect.toAlignedRect().adjusted(-1, -1, 1, 1)); + return updateRect(rect.toAlignedRect().adjusted(-2, -2, 2, 2)); + } + bool updateRect(const QRect &rect); - bool updateRegion(const QRegion ®ion); + bool updateRegion(const QRectF &rect, const QTransform &xform); bool updateSceneSlotReimplementedChecked; QRegion exposedRegion; diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp index bc8ccb01..06a44b7 100644 --- a/src/gui/graphicsview/qgraphicswidget.cpp +++ b/src/gui/graphicsview/qgraphicswidget.cpp @@ -324,11 +324,9 @@ void QGraphicsWidget::resize(const QSizeF &size) */ /*! - \fn QGraphicsWidget::geometryChanged() - This signal gets emitted whenever the geometry of the item changes - \internal + This signal gets emitted whenever the geometry is changed in setGeometry(). */ /*! @@ -408,12 +406,6 @@ void QGraphicsWidget::setGeometry(const QRectF &rect) } /*! - \fn QGraphicsWidget::geometryChanged() - - This signal gets emitted whenever the geometry is changed in setGeometry(). -*/ - -/*! \fn QRectF QGraphicsWidget::rect() const Returns the item's local rect as a QRectF. This function is equivalent diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp index bc52e99..891b1db 100644 --- a/src/gui/image/qicon.cpp +++ b/src/gui/image/qicon.cpp @@ -441,7 +441,7 @@ void QPixmapIconEngine::virtual_hook(int id, void *data) } } -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QIconEngineFactoryInterface_iid, QLatin1String("/iconengines"), Qt::CaseInsensitive)) Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loaderV2, diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp index 27f9627..93d5cd3 100644 --- a/src/gui/image/qimagereader.cpp +++ b/src/gui/image/qimagereader.cpp @@ -144,7 +144,7 @@ QT_BEGIN_NAMESPACE -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QImageIOHandlerFactoryInterface_iid, QLatin1String("/imageformats"))) #endif @@ -205,7 +205,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device, QByteArray form = format.toLower(); QImageIOHandler *handler = 0; -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY // check if we have plugins that support the image format QFactoryLoader *l = loader(); QStringList keys = l->keys(); @@ -217,7 +217,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device, << keys.size() << "plugins available: " << keys; #endif -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY int suffixPluginIndex = -1; if (device && format.isEmpty() && autoDetectImageFormat && !ignoresFormatAndExtension) { // if there's no format, see if \a device is a file, and if so, find @@ -246,7 +246,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device, if (ignoresFormatAndExtension) testFormat = QByteArray(); -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY if (suffixPluginIndex != -1) { // check if the plugin that claims support for this format can load // from this device with this format. @@ -331,7 +331,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device, #endif } -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY if (!handler && (autoDetectImageFormat || ignoresFormatAndExtension)) { // check if any of our plugins recognize the file from its contents. const qint64 pos = device ? device->pos() : 0; @@ -350,7 +350,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device, if (device && !device->isSequential()) device->seek(pos); } -#endif +#endif // QT_NO_LIBRARY if (!handler && (autoDetectImageFormat || ignoresFormatAndExtension)) { // check if any of our built-in handlers recognize the file from its @@ -1414,7 +1414,7 @@ QList<QByteArray> QImageReader::supportedImageFormats() for (int i = 0; i < _qt_NumFormats; ++i) formats << _qt_BuiltInFormats[i].extension; -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QFactoryLoader *l = loader(); QStringList keys = l->keys(); diff --git a/src/gui/image/qimagewriter.cpp b/src/gui/image/qimagewriter.cpp index 503a1b2..552729f 100644 --- a/src/gui/image/qimagewriter.cpp +++ b/src/gui/image/qimagewriter.cpp @@ -117,7 +117,7 @@ QT_BEGIN_NAMESPACE -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QImageIOHandlerFactoryInterface_iid, QLatin1String("/imageformats"))) #endif @@ -129,7 +129,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device, QByteArray suffix; QImageIOHandler *handler = 0; -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY // check if any plugins can write the image QFactoryLoader *l = loader(); QStringList keys = l->keys(); @@ -142,7 +142,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device, // this allows plugins to override our built-in handlers. if (QFile *file = qobject_cast<QFile *>(device)) { if (!(suffix = QFileInfo(file->fileName()).suffix().toLower().toLatin1()).isEmpty()) { -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY int index = keys.indexOf(QString::fromLatin1(suffix)); if (index != -1) suffixPluginIndex = index; @@ -153,7 +153,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device, QByteArray testFormat = !form.isEmpty() ? form : suffix; -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY if (suffixPluginIndex != -1) { // when format is missing, check if we can find a plugin for the // suffix. @@ -161,7 +161,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device, if (plugin && (plugin->capabilities(device, suffix) & QImageIOPlugin::CanWrite)) handler = plugin->create(device, suffix); } -#endif // Q_NO_LIBRARY +#endif // QT_NO_LIBRARY // check if any built-in handlers can write the image if (!handler && !testFormat.isEmpty()) { @@ -192,7 +192,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device, } } -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY if (!testFormat.isEmpty()) { for (int i = 0; i < keys.size(); ++i) { QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(keys.at(i))); @@ -203,7 +203,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device, } } } -#endif +#endif // QT_NO_LIBRARY if (!handler) return 0; @@ -670,7 +670,7 @@ QList<QByteArray> QImageWriter::supportedImageFormats() formats << "png"; #endif -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QFactoryLoader *l = loader(); QStringList keys = l->keys(); for (int i = 0; i < keys.count(); ++i) { diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index b42e0ab..610ac3c 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -87,7 +87,7 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent) m_fepState->SetDefaultInputMode( EAknEditorTextInputMode ); m_fepState->SetPermittedInputModes( EAknEditorAllInputModes ); m_fepState->SetDefaultCase( EAknEditorLowerCase ); - m_fepState->SetPermittedCases( EAknEditorLowerCase|EAknEditorUpperCase ); + m_fepState->SetPermittedCases( EAknEditorAllCaseModes ); m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG); m_fepState->SetNumericKeymap( EAknEditorStandardNumberModeKeymap ); } diff --git a/src/gui/inputmethod/qinputcontextfactory.cpp b/src/gui/inputmethod/qinputcontextfactory.cpp index d47e343..ec8d8e2 100644 --- a/src/gui/inputmethod/qinputcontextfactory.cpp +++ b/src/gui/inputmethod/qinputcontextfactory.cpp @@ -81,7 +81,7 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QInputContextFactoryInterface_iid, QLatin1String("/inputmethods"))) #endif @@ -153,7 +153,7 @@ QInputContext *QInputContextFactory::create( const QString& key, QObject *parent result = new QCoeFepInputContext; } #endif -#if defined(QT_NO_LIBRARY) || defined(QT_NO_SETTINGS) +#ifdef QT_NO_LIBRARY Q_UNUSED(key); #else if (QInputContextFactoryInterface *factory = @@ -193,7 +193,7 @@ QStringList QInputContextFactory::keys() #if defined(Q_WS_S60) result << QLatin1String("coefep"); #endif -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY result += loader()->keys(); #endif // QT_NO_LIBRARY return result; diff --git a/src/gui/itemviews/qsortfilterproxymodel.cpp b/src/gui/itemviews/qsortfilterproxymodel.cpp index dce5c6a..b12cd45 100644 --- a/src/gui/itemviews/qsortfilterproxymodel.cpp +++ b/src/gui/itemviews/qsortfilterproxymodel.cpp @@ -1099,7 +1099,7 @@ void QSortFilterProxyModelPrivate::_q_sourceDataChanged(const QModelIndex &sourc if (!source_top_left.isValid() || !source_bottom_right.isValid()) return; QModelIndex source_parent = source_top_left.parent(); - IndexMap::const_iterator it = create_mapping(source_parent); + IndexMap::const_iterator it = source_index_mapping.find(source_parent); if (it == source_index_mapping.constEnd()) { // Don't care, since we don't have mapping for this index return; diff --git a/src/gui/itemviews/qtableview.cpp b/src/gui/itemviews/qtableview.cpp index 80334a6..4492e53 100644 --- a/src/gui/itemviews/qtableview.cpp +++ b/src/gui/itemviews/qtableview.cpp @@ -2145,8 +2145,8 @@ int QTableView::sizeHintForRow(int row) const ensurePolished(); - int left = qMax(0, columnAt(0)); - int right = columnAt(d->viewport->width()); + int left = qMax(0, d->horizontalHeader->visualIndexAt(0)); + int right = d->horizontalHeader->visualIndexAt(d->viewport->width()); if (right == -1) // the table don't have enough columns to fill the viewport right = d->model->columnCount(d->root) - 1; @@ -2204,8 +2204,8 @@ int QTableView::sizeHintForColumn(int column) const ensurePolished(); - int top = qMax(0, rowAt(0)); - int bottom = rowAt(d->viewport->height()); + int top = qMax(0, d->verticalHeader->visualIndexAt(0)); + int bottom = d->verticalHeader->visualIndexAt(d->viewport->height()); if (!isVisible() || bottom == -1) // the table don't have enough rows to fill the viewport bottom = d->model->rowCount(d->root) - 1; diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index c735d1f..f4c7304 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -73,6 +73,7 @@ # endif # include <private/qs60mainapplication_p.h> # include <centralrepository.h> +# include "qs60mainappui.h" #endif #include "private/qstylesheetstyle_p.h" @@ -439,7 +440,7 @@ void QSymbianControl::translateAdvancedPointerEvent(const TAdvancedPointerEvent state |= Qt::TouchPointPrimary; touchPoint.setState(state); - QPointF screenPos = QPointF(event->iPosition.iX, event->iPosition.iY); + QPointF screenPos = qwidget->mapToGlobal(QPoint(event->iPosition.iX, event->iPosition.iY)); touchPoint.setScreenPos(screenPos); touchPoint.setNormalizedPos(QPointF(screenPos.x() / screenGeometry.width(), screenPos.y() / screenGeometry.height())); @@ -539,6 +540,14 @@ void QSymbianControl::HandlePointerEvent(const TPointerEvent& pEvent) sendMouseEvent(receiver, type, globalPos, button, modifiers); } +#ifdef Q_WS_S60 +void QSymbianControl::HandleStatusPaneSizeChange() +{ + QS60MainAppUi *s60AppUi = static_cast<QS60MainAppUi *>(S60->appUi()); + s60AppUi->HandleStatusPaneSizeChange(); +} +#endif + void QSymbianControl::sendMouseEvent( QWidget *receiver, QEvent::Type type, @@ -982,15 +991,6 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */) const TBool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen; const TBool cbaVisibilityHint = qwidget->windowFlags() & Qt::WindowSoftkeysVisibleHint; buttonGroup->MakeVisible(visible || (isFullscreen && cbaVisibilityHint)); - - // Responsiviness - CEikCba *cba = static_cast<CEikCba *>( buttonGroup->ButtonGroup() ); // downcast from MEikButtonGroup - TUint cbaFlags = cba->ButtonGroupFlags(); - if(qwidget->windowFlags() & Qt::WindowSoftkeysRespondHint) - cbaFlags |= EAknCBAFlagRespondWhenInvisible; - else - cbaFlags &= ~EAknCBAFlagRespondWhenInvisible; - cba->SetButtonGroupFlags(cbaFlags); } #endif } else if (QApplication::activeWindow() == qwidget->window()) { diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h index e94d247..8652816 100644 --- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h +++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h @@ -363,3 +363,57 @@ QT_END_NAMESPACE } [super displayIfNeeded]; } + +// This is a hack and it should be removed once we find the real cause for +// the painting problems. +// We have a static variable that signals if we have been called before or not. +static bool firstDrawingInvocation = true; + +// The method below exists only as a workaround to draw/not draw the baseline +// in the title bar. This is to support unifiedToolbar look. + +// This method is very special. To begin with, it is a +// method that will get called only if we enable documentMode. +// Furthermore, it won't get called as a normal method, we swap +// this method with the normal implementation of drawRect in +// _NSThemeFrame. When this method is active, its mission is to +// first call the original drawRect implementation so the widget +// gets proper painting. After that, it needs to detect if there +// is a toolbar or not, in order to decide how to handle the unified +// look. The distinction is important since the presence and +// visibility of a toolbar change the way we enter into unified mode. +// When there is a toolbar and that toolbar is visible, the problem +// is as simple as to tell the toolbar not to draw its baseline. +// However when there is not toolbar or the toolbar is not visible, +// we need to draw a line on top of the baseline, because the baseline +// in that case will belong to the title. For this case we need to draw +// a line on top of the baseline. +// As usual, there is a special case. When we first are called, we might +// need to repaint ourselves one more time. We only need that if we +// didn't get the activation, i.e. when we are launched via the command +// line. And this only if the toolbar is visible from the beginning, +// so we have a special flag that signals if we need to repaint or not. +- (void)drawRectSpecial:(NSRect)rect +{ + // Call the original drawing method. + [self drawRectOriginal:rect]; + NSWindow *window = [self window]; + NSToolbar *toolbar = [window toolbar]; + if(!toolbar) { + // There is no toolbar, we have to draw a line on top of the line drawn by Cocoa. + macDrawRectOnTop((void *)window); + } else { + if([toolbar isVisible]) { + // We tell Cocoa to avoid drawing the line at the end. + if(firstDrawingInvocation) { + firstDrawingInvocation = false; + macSyncDrawingOnFirstInvocation((void *)window); + } else + [toolbar setShowsBaselineSeparator:NO]; + } else { + // There is a toolbar but it is not visible so + // we have to draw a line on top of the line drawn by Cocoa. + macDrawRectOnTop((void *)window); + } + } +} diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index dd12f65..4953c48 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -1554,7 +1554,8 @@ Qt::DropAction QDragManager::drag(QDrag *o) qt_button_down = 0; [dndParams.view release]; [image release]; - dragPrivate()->executed_action = Qt::IgnoreAction; + if (dragPrivate()) + dragPrivate()->executed_action = Qt::IgnoreAction; object = 0; Qt::DropAction performedAction(qt_mac_mapNSDragOperation(qMacDnDParams()->performedAction)); // do post drag processing, if required. diff --git a/src/gui/kernel/qguiplatformplugin.cpp b/src/gui/kernel/qguiplatformplugin.cpp index c4119af..2dd251b 100644 --- a/src/gui/kernel/qguiplatformplugin.cpp +++ b/src/gui/kernel/qguiplatformplugin.cpp @@ -81,7 +81,7 @@ QGuiPlatformPlugin *qt_guiPlatformPlugin() static QGuiPlatformPlugin *plugin; if (!plugin) { -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QString key = QString::fromLocal8Bit(qgetenv("QT_PLATFORM_PLUGIN")); #ifdef Q_WS_X11 diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp index 6e8c90e..98e8f66 100644 --- a/src/gui/kernel/qpalette.cpp +++ b/src/gui/kernel/qpalette.cpp @@ -795,7 +795,7 @@ const QBrush &QPalette::brush(ColorGroup gr, ColorRole cr) const /*! \fn void QPalette::setColor(ColorGroup group, ColorRole role, const QColor &color) - Sets the brush in the specified color \a group, used for the given + Sets the color in the specified color \a group, used for the given color \a role, to the specified solid \a color. \sa setBrush() color() ColorRole diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp index e4990b1..6325d95 100644 --- a/src/gui/kernel/qsoftkeymanager_s60.cpp +++ b/src/gui/kernel/qsoftkeymanager_s60.cpp @@ -79,6 +79,8 @@ bool QSoftKeyManagerPrivateS60::skipCbaUpdate() // Note: Cannot use IsDisplayingMenuOrDialog since CBA update can be triggered before // menu/dialog CBA is actually displayed i.e. it is being costructed. CEikButtonGroupContainer *appUiCba = S60->buttonGroupContainer(); + if (!appUiCba) + return true; // CEikButtonGroupContainer::Current returns 0 if CBA is not visible at all CEikButtonGroupContainer *currentCba = CEikButtonGroupContainer::Current(); // Check if softkey need to be update even they are not visible diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index a05c7d5..8cef03c 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -1163,15 +1163,81 @@ void qt_mac_updateContentBorderMetricts(void * /*OSWindowRef */window, const ::H #endif } +#if QT_MAC_USE_COCOA +void qt_mac_replaceDrawRect(void * /*OSWindowRef */window, QWidgetPrivate *widget) +{ + QMacCocoaAutoReleasePool pool; + OSWindowRef theWindow = static_cast<OSWindowRef>(window); + if(!theWindow) + return; + id theClass = [[[theWindow contentView] superview] class]; + // What we do here is basically to add a new selector to NSThemeFrame called + // "drawRectOriginal:" which will contain the original implementation of + // "drawRect:". After that we get the new implementation from QCocoaWindow + // and exchange them. The new implementation is called drawRectSpecial. + // We cannot just add the method because it might have been added before and since + // we cannot remove a method once it has been added we need to ask QCocoaWindow if + // we did the swap or not. + if(!widget->drawRectOriginalAdded) { + Method m2 = class_getInstanceMethod(theClass, @selector(drawRect:)); + if(!m2) { + // This case is pretty extreme, no drawRect means no drawing! + return; + } + class_addMethod(theClass, @selector(drawRectOriginal:), method_getImplementation(m2), method_getTypeEncoding(m2)); + widget->drawRectOriginalAdded = true; + } + if(widget->originalDrawMethod) { + Method m0 = class_getInstanceMethod([theWindow class], @selector(drawRectSpecial:)); + if(!m0) { + // Ok, this means the methods were never swapped. Just ignore + return; + } + Method m1 = class_getInstanceMethod(theClass, @selector(drawRect:)); + if(!m1) { + // Ok, this means the methods were never swapped. Just ignore + return; + } + // We have the original method here. Proceed and swap the methods. + method_exchangeImplementations(m1, m0); + widget->originalDrawMethod = false; + [window display]; + } +} + +void qt_mac_replaceDrawRectOriginal(void * /*OSWindowRef */window, QWidgetPrivate *widget) +{ + QMacCocoaAutoReleasePool pool; + OSWindowRef theWindow = static_cast<OSWindowRef>(window); + id theClass = [[[theWindow contentView] superview] class]; + // Now we need to revert the methods to their original state. + // We cannot remove the method, so we just keep track of it in QCocoaWindow. + Method m0 = class_getInstanceMethod([theWindow class], @selector(drawRectSpecial:)); + if(!m0) { + // Ok, this means the methods were never swapped. Just ignore + return; + } + Method m1 = class_getInstanceMethod(theClass, @selector(drawRect:)); + if(!m1) { + // Ok, this means the methods were never swapped. Just ignore + return; + } + method_exchangeImplementations(m1, m0); + widget->originalDrawMethod = true; + [window display]; +} +#endif // QT_MAC_USE_COCOA + void qt_mac_showBaseLineSeparator(void * /*OSWindowRef */window, bool show) { + if(!window) + return; #if QT_MAC_USE_COCOA QMacCocoaAutoReleasePool pool; OSWindowRef theWindow = static_cast<OSWindowRef>(window); NSToolbar *macToolbar = [theWindow toolbar]; - if (macToolbar) - [macToolbar setShowsBaselineSeparator: show]; -#endif + [macToolbar setShowsBaselineSeparator:show]; +#endif // QT_MAC_USE_COCOA } QStringList qt_mac_NSArrayToQStringList(void *nsarray) @@ -1233,6 +1299,17 @@ CGContextRef qt_mac_graphicsContextFor(QWidget *widget) return context; } +void qt_mac_dispatchPendingUpdateRequests(QWidget *widget) +{ + if (!widget) + return; +#ifndef QT_MAC_USE_COCOA + HIViewRender(qt_mac_nativeview_for(widget)); +#else + [qt_mac_nativeview_for(widget) displayIfNeeded]; +#endif +} + CGFloat qt_mac_get_scalefactor() { #ifndef QT_MAC_USE_COCOA @@ -1403,4 +1480,52 @@ void qt_mac_post_retranslateAppMenu() #endif } +#ifdef QT_MAC_USE_COCOA +// This method implements the magic for the drawRectSpecial method. +// We draw a line at the upper edge of the content view in order to +// override the title baseline. +void macDrawRectOnTop(void * /*OSWindowRef */window) +{ + OSWindowRef theWindow = static_cast<OSWindowRef>(window); + NSView *contentView = [theWindow contentView]; + if(!contentView) + return; + // Get coordinates of the content view + NSRect contentRect = [contentView frame]; + // Draw a line on top of the already drawn line. + // We need to check if we are active or not to use the proper color. + if([window isKeyWindow] || [window isMainWindow]) { + [[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0] set]; + } else { + [[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0] set]; + } + NSPoint origin = NSMakePoint(0, contentRect.size.height); + NSPoint end = NSMakePoint(contentRect.size.width, contentRect.size.height); + [NSBezierPath strokeLineFromPoint:origin toPoint:end]; +} + +// This method will (or at least should) get called only once. +// Its mission is to find out if we are active or not. If we are active +// we assume that we were launched via finder, otherwise we assume +// we were called from the command line. The distinction is important, +// since in the first case we don't need to trigger a paintEvent, while +// in the second case we do. +void macSyncDrawingOnFirstInvocation(void * /*OSWindowRef */window) +{ + OSWindowRef theWindow = static_cast<OSWindowRef>(window); + NSApplication *application = [NSApplication sharedApplication]; + NSToolbar *toolbar = [window toolbar]; + if([application isActive]) { + // Launched from finder + [toolbar setShowsBaselineSeparator:NO]; + } else { + // Launched from commandline + [toolbar setVisible:false]; + [toolbar setShowsBaselineSeparator:NO]; + [toolbar setVisible:true]; + [theWindow display]; + } +} +#endif // QT_MAC_USE_COCOA + QT_END_NAMESPACE diff --git a/src/gui/kernel/qt_cocoa_helpers_mac_p.h b/src/gui/kernel/qt_cocoa_helpers_mac_p.h index 3fd62a4..5db121a 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h +++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h @@ -131,6 +131,8 @@ void macWindowSetHasShadow( void * /*OSWindowRef*/ window, bool hasShadow ); void macWindowFlush(void * /*OSWindowRef*/ window); void macSendToolbarChangeEvent(QWidget *widget); void qt_mac_updateContentBorderMetricts(void * /*OSWindowRef */window, const ::HIContentBorderMetrics &metrics); +void qt_mac_replaceDrawRect(void * /*OSWindowRef */window, QWidgetPrivate *widget); +void qt_mac_replaceDrawRectOriginal(void * /*OSWindowRef */window, QWidgetPrivate *widget); void qt_mac_showBaseLineSeparator(void * /*OSWindowRef */window, bool show); void * /*NSImage */qt_mac_create_nsimage(const QPixmap &pm); void qt_mac_update_mouseTracking(QWidget *widget); @@ -140,6 +142,9 @@ void qt_dispatchTabletProximityEvent(void * /*NSEvent * */ tabletEvent); #ifdef QT_MAC_USE_COCOA bool qt_dispatchKeyEventWithCocoa(void * /*NSEvent * */ keyEvent, QWidget *widgetToGetEvent); void qt_cocoaChangeOverrideCursor(const QCursor &cursor); +// These methods exists only for supporting unified mode. +void macDrawRectOnTop(void * /*OSWindowRef */ window); +void macSyncDrawingOnFirstInvocation(void * /*OSWindowRef */window); #endif void qt_mac_menu_collapseSeparators(void * /*NSMenu */ menu, bool collapse); bool qt_dispatchKeyEvent(void * /*NSEvent * */ keyEvent, QWidget *widgetToGetEvent); diff --git a/src/gui/kernel/qt_mac_p.h b/src/gui/kernel/qt_mac_p.h index 7bfb257..3341ce1 100644 --- a/src/gui/kernel/qt_mac_p.h +++ b/src/gui/kernel/qt_mac_p.h @@ -57,6 +57,7 @@ #ifdef __OBJC__ #include <Cocoa/Cocoa.h> +#include <objc/runtime.h> #endif #include <CoreServices/CoreServices.h> diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index a714221..58da302 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -155,7 +155,7 @@ class QLongTapTimer; class QSymbianControl : public CCoeControl, public QAbstractLongTapObserver #ifdef Q_WS_S60 -, public MAknFadedComponent +, public MAknFadedComponent, public MEikStatusPaneObserver #endif { public: @@ -183,6 +183,7 @@ public: #ifdef Q_WS_S60 void FadeBehindPopup(bool fade){ popupFader.FadeBehindPopup( this, this, fade); } + void HandleStatusPaneSizeChange(); protected: // from MAknFadedComponent TInt CountFadedComponents() {return 1;} diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index b59824c..c058280 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -220,6 +220,11 @@ QWidgetPrivate::QWidgetPrivate(int version) isWidget = true; memset(high_attributes, 0, sizeof(high_attributes)); +#if QT_MAC_USE_COCOA + drawRectOriginalAdded = false; + originalDrawMethod = true; + changeMethods = false; +#endif // QT_MAC_USE_COCOA #ifdef QWIDGET_EXTRA_DEBUG static int count = 0; qDebug() << "widgets" << ++count; @@ -2530,7 +2535,7 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool Q_Q(QWidget); QStyle *oldStyle = q->style(); #ifndef QT_NO_STYLE_STYLESHEET - QStyle *origStyle = 0; + QWeakPointer<QStyle> origStyle; #endif #ifdef Q_WS_MAC @@ -2544,7 +2549,7 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool createExtra(); #ifndef QT_NO_STYLE_STYLESHEET - origStyle = extra->style; + origStyle = extra->style.data(); #endif extra->style = newStyle; } @@ -2573,23 +2578,23 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool } } - QEvent e(QEvent::StyleChange); - QApplication::sendEvent(q, &e); -#ifdef QT3_SUPPORT - q->styleChange(*oldStyle); -#endif - #ifndef QT_NO_STYLE_STYLESHEET if (!qobject_cast<QStyleSheetStyle*>(newStyle)) { - if (const QStyleSheetStyle* cssStyle = qobject_cast<QStyleSheetStyle*>(origStyle)) { + if (const QStyleSheetStyle* cssStyle = qobject_cast<QStyleSheetStyle*>(origStyle.data())) { cssStyle->clearWidgetFont(q); } } #endif + QEvent e(QEvent::StyleChange); + QApplication::sendEvent(q, &e); +#ifdef QT3_SUPPORT + q->styleChange(*oldStyle); +#endif + #ifndef QT_NO_STYLE_STYLESHEET // dereference the old stylesheet style - if (QStyleSheetStyle *proxy = qobject_cast<QStyleSheetStyle *>(origStyle)) + if (QStyleSheetStyle *proxy = qobject_cast<QStyleSheetStyle *>(origStyle.data())) proxy->deref(); #endif } @@ -5578,52 +5583,23 @@ QPixmap QWidgetEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QPoint * pixmapOffset = painterTransform.map(pixmapOffset); } - QRect effectRect; - if (mode == QGraphicsEffect::PadToEffectiveBoundingRect) { + if (mode == QGraphicsEffect::PadToEffectiveBoundingRect) effectRect = m_widget->graphicsEffect()->boundingRectFor(sourceRect).toAlignedRect(); - - } else if (mode == QGraphicsEffect::PadToTransparentBorder) { + else if (mode == QGraphicsEffect::PadToTransparentBorder) effectRect = sourceRect.adjusted(-1, -1, 1, 1).toAlignedRect(); - - } else { + else effectRect = sourceRect.toAlignedRect(); - } - if (offset) *offset = effectRect.topLeft(); - if (deviceCoordinates) { - // Clip to device rect. - int left, top, right, bottom; - effectRect.getCoords(&left, &top, &right, &bottom); - if (left < 0) { - if (offset) - offset->rx() += -left; - effectRect.setX(0); - } - if (top < 0) { - if (offset) - offset->ry() += -top; - effectRect.setY(0); - } - // NB! We use +-1 for historical reasons (see QRect documentation). - QPaintDevice *device = context->painter->device(); - const int deviceWidth = device->width(); - const int deviceHeight = device->height(); - if (right + 1 > deviceWidth) - effectRect.setRight(deviceWidth - 1); - if (bottom + 1 > deviceHeight) - effectRect.setBottom(deviceHeight -1); - } - pixmapOffset -= effectRect.topLeft(); QPixmap pixmap(effectRect.size()); pixmap.fill(Qt::transparent); - m_widget->render(&pixmap, pixmapOffset); + m_widget->render(&pixmap, pixmapOffset, QRegion(), QWidget::DrawChildren); return pixmap; } #endif //QT_NO_GRAPHICSEFFECT @@ -12292,6 +12268,28 @@ void QWidgetPrivate::_q_delayedDestroy(WId winId) } #endif +#if QT_MAC_USE_COCOA +void QWidgetPrivate::syncUnifiedMode() { + // The whole purpose of this method is to keep the unifiedToolbar in sync. + // That means making sure we either exchange the drawing methods or we let + // the toolbar know that it does not require to draw the baseline. + Q_Q(QWidget); + // This function makes sense only if this is a top level + if(!q->isWindow()) + return; + OSWindowRef window = qt_mac_window_for(q); + if(changeMethods) { + // Ok, we are in documentMode. + if(originalDrawMethod) + qt_mac_replaceDrawRect(window, this); + } else { + if(!originalDrawMethod) + qt_mac_replaceDrawRectOriginal(window, this); + } +} + +#endif // QT_MAC_USE_COCOA + QT_END_NAMESPACE #include "moc_qwidget.cpp" diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index d7cd2eb..e29b755 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2300,6 +2300,12 @@ void QWidgetPrivate::finishCreateWindow_sys_Cocoa(void * /*NSWindow * */ voidWin if (q->testAttribute(Qt::WA_DropSiteRegistered)) registerDropSite(true); transferChildren(); + + // Tell Cocoa explicit that we wan't the view to receive key events + // (regardless of focus policy) because this is how it works on other + // platforms (and in the carbon port): + if (!qApp->focusWidget()) + [windowRef makeFirstResponder:nsview]; } if (topExtra->posFromMove) { diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 89ea256..cad60b5 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -773,6 +773,13 @@ public: void finishCreateWindow_sys_Cocoa(void * /*NSWindow * */ windowRef); void syncCocoaMask(); void finishCocoaMaskSetup(); + void syncUnifiedMode(); + // Did we add the drawRectOriginal method? + bool drawRectOriginalAdded; + // Is the original drawRect method available? + bool originalDrawMethod; + // Do we need to change the methods? + bool changeMethods; #endif void determineWindowClass(); void transferChildren(); diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index bfa7050..a0429d3 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -387,16 +387,7 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de | EPointerFilterMove | EPointerFilterDrag, 0); drawableWindow->EnableVisibilityChangeEvents(); - if (!isOpaque) { - RWindow *const window = static_cast<RWindow *>(drawableWindow); -#ifdef Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE - window->SetSurfaceTransparency(true); -#else - const TDisplayMode displayMode = static_cast<TDisplayMode>(window->SetRequiredDisplayMode(EColor16MA)); - if (window->SetTransparencyAlphaChannel() == KErrNone) - window->SetBackgroundColor(TRgb(255, 255, 255, 0)); -#endif - } + s60UpdateIsOpaque(); } q->setAttribute(Qt::WA_WState_Created); @@ -488,6 +479,47 @@ void QWidgetPrivate::show_sys() QSymbianControl *id = static_cast<QSymbianControl *>(q->internalWinId()); +#ifdef Q_WS_S60 + // Lazily initialize the S60 screen furniture when the first window is shown. + if (!QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) + && !S60->buttonGroupContainer() && !S60->statusPane()) { + + bool isFullscreen = q->windowState() & Qt::WindowFullScreen; + bool cbaRequested = q->windowFlags() & Qt::WindowSoftkeysVisibleHint; + + // If the window is fullscreen and has not explicitly requested that the CBA be visible + // we delay the creation even more. + if ((!isFullscreen || cbaRequested) && !q->testAttribute(Qt::WA_DontShowOnScreen)) { + + // Create the status pane and CBA here + CEikAppUi *ui = static_cast<CEikAppUi *>(S60->appUi()); + MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory(); + TRAP_IGNORE(factory->ReadAppInfoResourceL(0, ui)); + if (S60->buttonGroupContainer()) + S60->buttonGroupContainer()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); + + if (S60->statusPane()) { + // Use QDesktopWidget as the status pane observer to proxy for the AppUi. + // Can't use AppUi directly because it privately inherits from MEikStatusPaneObserver. + QSymbianControl *desktopControl = static_cast<QSymbianControl *>(QApplication::desktop()->winId()); + S60->statusPane()->SetObserver(desktopControl); + + // Hide the status pane if fullscreen OR + // Fill client area if maximized OR + // Put window below status pane unless the window has an explicit position. + if (isFullscreen) { + S60->statusPane()->MakeVisible(false); + } else if (q->windowState() & Qt::WindowMaximized) { + TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect(); + id->SetExtent(r.iTl, r.Size()); + } else if (!q->testAttribute(Qt::WA_Moved)) { + id->SetPosition(static_cast<CEikAppUi*>(S60->appUi())->ClientRect().iTl); + } + } + } + } +#endif + id->MakeVisible(true); if(q->isWindow()) @@ -1063,6 +1095,9 @@ void QWidget::setWindowState(Qt::WindowStates newstate) return; if (isWindow()) { + createWinId(); + Q_ASSERT(testAttribute(Qt::WA_WState_Created)); + const bool wasResized = testAttribute(Qt::WA_Resized); const bool wasMoved = testAttribute(Qt::WA_Moved); @@ -1088,35 +1123,35 @@ void QWidget::setWindowState(Qt::WindowStates newstate) if (buttonGroup) { // Visibility buttonGroup->MakeVisible(visible || (isFullscreen && cbaRequested)); - - // Responsiviness - CEikCba *cba = static_cast<CEikCba *>( buttonGroup->ButtonGroup() ); // downcast from MEikButtonGroup - TUint cbaFlags = cba->ButtonGroupFlags(); - if(windowFlags() & Qt::WindowSoftkeysRespondHint) - cbaFlags |= EAknCBAFlagRespondWhenInvisible; - else - cbaFlags &= ~EAknCBAFlagRespondWhenInvisible; - cba->SetButtonGroupFlags(cbaFlags); } #endif // Q_WS_S60 - createWinId(); - Q_ASSERT(testAttribute(Qt::WA_WState_Created)); // Ensure the initial size is valid, since we store it as normalGeometry below. if (!wasResized && !isVisible()) adjustSize(); QTLWExtra *top = d->topData(); - const QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry; - + QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry; const bool cbaVisibilityHint = windowFlags() & Qt::WindowSoftkeysVisibleHint; - if (newstate & Qt::WindowFullScreen && !cbaVisibilityHint) - setGeometry(qApp->desktop()->screenGeometry(this)); - else if (newstate & Qt::WindowMaximized || ((newstate & Qt::WindowFullScreen) && cbaVisibilityHint)) - setGeometry(qApp->desktop()->availableGeometry(this)); - else + if (newstate & Qt::WindowFullScreen && !cbaVisibilityHint) { + window->SetExtentToWholeScreen(); + } else if (newstate & Qt::WindowMaximized || ((newstate & Qt::WindowFullScreen) && cbaVisibilityHint)) { + TRect maxExtent = qt_QRect2TRect(qApp->desktop()->availableGeometry(this)); + window->SetExtent(maxExtent.iTl, maxExtent.Size()); + } else { +#ifdef Q_WS_S60 + // With delayed creation of S60 app panes, the normalGeometry calculated above is not + // accurate because it did not consider the status pane. This means that when returning + // normal mode after showing the status pane, the geometry would overlap so we should + // move it if it never had an explicit position. + if (!wasMoved && statusPane && visible) { + TPoint tl = static_cast<CEikAppUi*>(S60->appUi())->ClientRect().iTl; + normalGeometry.setTopLeft(QPoint(tl.iX, tl.iY)); + } +#endif setGeometry(normalGeometry); + } //restore normal geometry top->normalGeometry = normalGeometry; diff --git a/src/gui/painting/qgraphicssystemfactory.cpp b/src/gui/painting/qgraphicssystemfactory.cpp index 29f24a3..3c09894 100644 --- a/src/gui/painting/qgraphicssystemfactory.cpp +++ b/src/gui/painting/qgraphicssystemfactory.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QGraphicsSystemFactoryInterface_iid, QLatin1String("/graphicssystems"), Qt::CaseInsensitive)) #endif @@ -79,7 +79,7 @@ QGraphicsSystem *QGraphicsSystemFactory::create(const QString& key) else if (system.isEmpty() || system == QLatin1String("native")) return 0; -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY if (!ret) { if (QGraphicsSystemFactoryInterface *factory = qobject_cast<QGraphicsSystemFactoryInterface*>(loader()->instance(system))) ret = factory->create(system); @@ -100,7 +100,7 @@ QGraphicsSystem *QGraphicsSystemFactory::create(const QString& key) */ QStringList QGraphicsSystemFactory::keys() { -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QStringList list = loader()->keys(); #else QStringList list; diff --git a/src/gui/painting/qpaintengine_mac.cpp b/src/gui/painting/qpaintengine_mac.cpp index ac2fcf4..14ba94e 100644 --- a/src/gui/painting/qpaintengine_mac.cpp +++ b/src/gui/painting/qpaintengine_mac.cpp @@ -118,9 +118,10 @@ QMacCGContext::QMacCGContext(QPainter *p) QRegion clip = p->paintEngine()->systemClip(); QTransform native = p->deviceTransform(); QTransform logical = p->combinedTransform(); + if (p->hasClipping()) { QRegion r = p->clipRegion(); - r.translate(native.dx() - logical.dx(), native.dy() - logical.dy()); + r.translate(native.dx(), native.dy()); if (clip.isEmpty()) clip = r; else @@ -128,10 +129,7 @@ QMacCGContext::QMacCGContext(QPainter *p) } qt_mac_clip_cg(context, clip, 0); - QPainterState *state = static_cast<QPainterState *>(pe->state); - Q_ASSERT(state); - if (!state->redirectionMatrix.isIdentity()) - CGContextTranslateCTM(context, state->redirectionMatrix.dx(), state->redirectionMatrix.dy()); + CGContextTranslateCTM(context, native.dx(), native.dy()); } } CGContextRetain(context); diff --git a/src/gui/painting/qprintengine_ps.cpp b/src/gui/painting/qprintengine_ps.cpp index ac94de3..28e9a7a 100644 --- a/src/gui/painting/qprintengine_ps.cpp +++ b/src/gui/painting/qprintengine_ps.cpp @@ -485,7 +485,6 @@ void QPSPrintEnginePrivate::emitHeader(bool finished) QByteArray header; QPdf::ByteStream s(&header); - s << "%!PS-Adobe-1.0"; qreal scale = 72. / ((qreal) q->metric(QPaintDevice::PdmDpiY)); QRect pageRect = this->pageRect(); @@ -497,28 +496,32 @@ void QPSPrintEnginePrivate::emitHeader(bool finished) int width = pageRect.width(); int height = pageRect.height(); if (finished && pageCount == 1 && copies == 1 && - ((fullPage && qt_gen_epsf) || (outputFileName.endsWith(QLatin1String(".eps")))) - ) { + ((fullPage && qt_gen_epsf) || (outputFileName.endsWith(QLatin1String(".eps"))))) + { + // According to the EPSF 3.0 spec it is required that the PS + // version is PS-Adobe-3.0 + s << "%!PS-Adobe-3.0"; if (!boundingBox.isValid()) boundingBox.setRect(0, 0, width, height); if (orientation == QPrinter::Landscape) { if (!fullPage) boundingBox.translate(-mleft, -mtop); s << " EPSF-3.0\n%%BoundingBox: " - << (int)(printer->height() - boundingBox.bottom())*scale // llx - << (int)(printer->width() - boundingBox.right())*scale - 1 // lly - << (int)(printer->height() - boundingBox.top())*scale + 1 // urx - << (int)(printer->width() - boundingBox.left())*scale; // ury + << int((printer->height() - boundingBox.bottom())*scale) // llx + << int((printer->width() - boundingBox.right())*scale - 1) // lly + << int((printer->height() - boundingBox.top())*scale + 1) // urx + << int((printer->width() - boundingBox.left())*scale); // ury } else { if (!fullPage) boundingBox.translate(mleft, -mtop); s << " EPSF-3.0\n%%BoundingBox: " - << (int)(boundingBox.left())*scale - << (int)(printer->height() - boundingBox.bottom())*scale - 1 - << (int)(boundingBox.right())*scale + 1 - << (int)(printer->height() - boundingBox.top())*scale; + << int((boundingBox.left())*scale) + << int((printer->height() - boundingBox.bottom())*scale - 1) + << int((boundingBox.right())*scale + 1) + << int((printer->height() - boundingBox.top())*scale); } } else { + s << "%!PS-Adobe-1.0"; int w = width + (fullPage ? 0 : mleft + mright); int h = height + (fullPage ? 0 : mtop + mbottom); w = (int)(w*scale); diff --git a/src/gui/painting/qprintengine_win.cpp b/src/gui/painting/qprintengine_win.cpp index ea9dc5d..dd4de99 100644 --- a/src/gui/painting/qprintengine_win.cpp +++ b/src/gui/painting/qprintengine_win.cpp @@ -965,12 +965,13 @@ void QWin32PrintEnginePrivate::queryDefault() return; QStringList info = output.split(QLatin1Char(',')); - if (info.size() > 0) { + int infoSize = info.size(); + if (infoSize > 0) { if (name.isEmpty()) name = info.at(0); - if (program.isEmpty()) + if (program.isEmpty() && infoSize > 1) program = info.at(1); - if (port.isEmpty()) + if (port.isEmpty() && infoSize > 2) port = info.at(2); } } diff --git a/src/gui/painting/qtextureglyphcache_p.h b/src/gui/painting/qtextureglyphcache_p.h index 390fe51..a818978 100644 --- a/src/gui/painting/qtextureglyphcache_p.h +++ b/src/gui/painting/qtextureglyphcache_p.h @@ -125,7 +125,7 @@ protected: }; -class QImageTextureGlyphCache : public QTextureGlyphCache +class Q_GUI_EXPORT QImageTextureGlyphCache : public QTextureGlyphCache { public: QImageTextureGlyphCache(QFontEngineGlyphCache::Type type, const QTransform &matrix) diff --git a/src/gui/s60framework/qs60mainappui.cpp b/src/gui/s60framework/qs60mainappui.cpp index 3b5b9d3..feffc9f 100644 --- a/src/gui/s60framework/qs60mainappui.cpp +++ b/src/gui/s60framework/qs60mainappui.cpp @@ -112,16 +112,10 @@ void QS60MainAppUi::ConstructL() // ENoAppResourceFile and ENonStandardResourceFile makes UI to work without // resource files in most SDKs. S60 3rd FP1 public seems to require resource file // even these flags are defined - TInt flags = CAknAppUi::EAknEnableSkin; - if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)) { - flags |= CAknAppUi::ENoScreenFurniture | CAknAppUi::ENonStandardResourceFile; - } + TInt flags = CAknAppUi::EAknEnableSkin + | CAknAppUi::ENoScreenFurniture + | CAknAppUi::ENonStandardResourceFile; BaseConstructL(flags); - - if (!QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)) { - CEikButtonGroupContainer* nativeContainer = Cba(); - nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS); - } } /*! diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 7587343..20297ae 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -92,10 +92,10 @@ static const qreal goldenRatio = 1.618; const layoutHeader QS60StylePrivate::m_layoutHeaders[] = { // *** generated layout data *** -{240,320,1,17,"QVGA Landscape"}, -{320,240,1,17,"QVGA Portrait"}, -{360,640,1,17,"NHD Landscape"}, -{640,360,1,17,"NHD Portrait"}, +{240,320,1,18,"QVGA Landscape"}, +{320,240,1,18,"QVGA Portrait"}, +{360,640,1,18,"NHD Landscape"}, +{640,360,1,18,"NHD Portrait"}, {352,800,1,12,"E90 Landscape"} // *** End of generated data *** }; @@ -104,11 +104,11 @@ const int QS60StylePrivate::m_numberOfLayouts = const short QS60StylePrivate::data[][MAX_PIXELMETRICS] = { // *** generated pixel metrics *** -{5,0,-909,0,0,2,0,0,-1,7,12,19,13,13,6,200,-909,-909,-909,20,13,2,0,0,21,7,18,0,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1, 106}, -{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,0,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1, 106}, -{7,0,-909,0,0,2,0,0,-1,25,69,28,19,19,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,0,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,13,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135}, -{7,0,-909,0,0,2,0,0,-1,25,68,28,19,19,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,0,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,12,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135}, -{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,0,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1, 106} +{5,0,-909,0,0,2,0,0,-1,7,12,19,13,13,6,200,-909,-909,-909,20,13,2,0,0,21,7,18,30,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1, 106}, +{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,28,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1, 106}, +{7,0,-909,0,0,2,0,0,-1,25,69,28,19,19,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,44,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,13,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135}, +{7,0,-909,0,0,2,0,0,-1,25,68,28,19,19,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,52,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,12,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135}, +{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,30,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1, 106} // *** End of generated data *** }; @@ -651,6 +651,8 @@ void QS60StylePrivate::setFont(QWidget *widget) const fontCategory = QS60StyleEnums::FC_Title; } else if (qobject_cast<QMessageBox *>(widget)){ fontCategory = QS60StyleEnums::FC_Primary; + } else if (qobject_cast<QMenu *>(widget)){ + fontCategory = QS60StyleEnums::FC_Primary; } if (fontCategory != QS60StyleEnums::FC_Undefined) { const bool resolveFontSize = widget->testAttribute(Qt::WA_SetFont) @@ -1544,18 +1546,35 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth); const int tabOverlap = QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap) - borderThickness; - - if (skinElement==QS60StylePrivate::SE_TabBarTabEastInactive|| - skinElement==QS60StylePrivate::SE_TabBarTabEastActive|| - skinElement==QS60StylePrivate::SE_TabBarTabWestInactive|| - skinElement==QS60StylePrivate::SE_TabBarTabWestActive){ - optionTabAdj.rect.adjust(0, 0, 0, tabOverlap); - } else { - if (directionMirrored) - optionTabAdj.rect.adjust(-tabOverlap, 0, 0, 0); + const bool usesScrollButtons = + (widget) ? (qobject_cast<const QTabBar*>(widget))->usesScrollButtons() : false; + const int roomForScrollButton = + usesScrollButtons ? QS60StylePrivate::pixelMetric(PM_TabBarScrollButtonWidth) : 0; + + // adjust for overlapping tabs and scrollbuttons, if necessary + if (skinElement == QS60StylePrivate::SE_TabBarTabEastInactive || + skinElement == QS60StylePrivate::SE_TabBarTabEastActive || + skinElement == QS60StylePrivate::SE_TabBarTabWestInactive || + skinElement == QS60StylePrivate::SE_TabBarTabWestActive){ + if (optionTabAdj.position == QStyleOptionTabV3::Beginning) + optionTabAdj.rect.adjust(0, roomForScrollButton, 0, tabOverlap); + else if (optionTabAdj.position == QStyleOptionTabV3::End) + optionTabAdj.rect.adjust(0, 0, 0, tabOverlap); else - optionTabAdj.rect.adjust(0, 0, tabOverlap, 0); + optionTabAdj.rect.adjust(0, 0, 0, tabOverlap); + } else { + if (directionMirrored) { + if (optionTabAdj.position == QStyleOptionTabV3::Beginning) + optionTabAdj.rect.adjust(-tabOverlap, 0, -roomForScrollButton, 0); + else + optionTabAdj.rect.adjust(-tabOverlap, 0, 0, 0); + } else { + if (optionTabAdj.position == QStyleOptionTabV3::Beginning) + optionTabAdj.rect.adjust(roomForScrollButton, 0, tabOverlap, 0); + else + optionTabAdj.rect.adjust(0, 0, tabOverlap, 0); } + } } QS60StylePrivate::drawSkinElement(skinElement, painter, optionTabAdj.rect, flags); } @@ -1568,7 +1587,10 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, const int borderThickness = QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth); const int tabOverlap = QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap) - borderThickness; - const QRect windowRect = painter->window(); + const bool usesScrollButtons = + (widget) ? (qobject_cast<const QTabBar*>(widget))->usesScrollButtons() : false; + const int roomForScrollButton = + usesScrollButtons ? QS60StylePrivate::pixelMetric(PM_TabBarScrollButtonWidth) : 0; switch (tab->shape) { case QTabBar::TriangularWest: @@ -1603,6 +1625,17 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, || optionTab.shape == QTabBar::TriangularEast || optionTab.shape == QTabBar::TriangularWest; + //make room for scrollbuttons + if (!verticalTabs) { + if ((tab->position == QStyleOptionTabV3::Beginning && !directionMirrored)) + tr.adjust(roomForScrollButton, 0, 0, 0); + else if ((tab->position == QStyleOptionTabV3::Beginning && directionMirrored)) + tr.adjust(0, 0, -roomForScrollButton, 0); + } else { + if (tab->position == QStyleOptionTabV3::Beginning) + tr.adjust(0, roomForScrollButton, 0, 0); + } + if (verticalTabs) { painter->save(); int newX, newY, newRotation; @@ -1634,9 +1667,10 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, alignment |= Qt::TextHideMnemonic; if (!optionTab.icon.isNull()) { QSize iconSize = optionTab.iconSize; - int iconExtent = pixelMetric(PM_TabBarIconSize); - if (iconSize.height() > iconExtent || iconSize.width() > iconExtent) + if (!iconSize.isValid()) { + const int iconExtent = pixelMetric(PM_TabBarIconSize); iconSize = QSize(iconExtent, iconExtent); + } QPixmap tabIcon = optionTab.icon.pixmap(iconSize, (optionTab.state & State_Enabled) ? QIcon::Normal : QIcon::Disabled); if (tab->text.isEmpty()) @@ -1744,6 +1778,9 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, optionCheckBox.QStyleOptionMenuItem::operator=(*menuItem); optionCheckBox.rect.setWidth(pixelMetric(PM_IndicatorWidth)); optionCheckBox.rect.setHeight(pixelMetric(PM_IndicatorHeight)); + optionCheckBox.rect.moveCenter(QPoint( + optionCheckBox.rect.center().x(), + menuItem->rect.center().y())); const int moveByX = optionCheckBox.rect.width() + vSpacing; if (optionMenuItem.direction == Qt::LeftToRight) { textRect.translate(moveByX, 0); @@ -2424,6 +2461,10 @@ int QS60Style::pixelMetric(PixelMetric metric, const QStyleOption *option, const if (metricValue == KNotFound) metricValue = QCommonStyle::pixelMetric(metric, option, widget); + // Menu scrollers should be set to zero height for combobox popups + if (metric == PM_MenuScrollerHeight && !qobject_cast<const QMenu *>(widget)) + metricValue = 0; + //if layout direction is mirrored, switch left and right border margins if (option && option->direction == Qt::RightToLeft) { if (metric == PM_LayoutLeftMargin) @@ -2481,9 +2522,29 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt, sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget); if (naviPaneSize.height() > sz.height()) sz.setHeight(naviPaneSize.height()); + // Adjust beginning tabbar item size, if scrollbuttons are used. This is to ensure that the + // tabbar item content fits, since scrollbuttons are making beginning tabbar item smaller. + int scrollButtonSize = 0; + if (const QTabBar *tabBar = qobject_cast<const QTabBar *>(widget)) + scrollButtonSize = tabBar->usesScrollButtons() ? pixelMetric(PM_TabBarScrollButtonWidth) : 0; + if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(opt)) { + const bool verticalTabs = tab->shape == QTabBar::RoundedEast + || tab->shape == QTabBar::RoundedWest + || tab->shape == QTabBar::TriangularEast + || tab->shape == QTabBar::TriangularWest; + if (tab->position == QStyleOptionTab::Beginning) + sz += QSize(verticalTabs ? 0 : scrollButtonSize, !verticalTabs ? 0 : scrollButtonSize); + } } break; + case CT_MenuItem: case CT_ItemViewItem: + if (const QStyleOptionMenuItem *menuItem = qstyleoption_cast<const QStyleOptionMenuItem *>(opt)) { + if (menuItem->menuItemType == QStyleOptionMenuItem::Separator) { + sz = QSize(); + break; + } + } sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget); if (QS60StylePrivate::isTouchSupported()) //Make itemview easier to use in touch devices @@ -2564,6 +2625,9 @@ int QS60Style::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w case SH_Menu_SelectionWrap: retValue = true; break; + case SH_Menu_MouseTracking: + retValue = true; + break; case SH_ItemView_ShowDecorationSelected: retValue = true; break; @@ -3150,6 +3214,12 @@ bool QS60Style::event(QEvent *e) #ifdef QT_KEYPAD_NAVIGATION case QEvent::FocusIn: if (QWidget *focusWidget = QApplication::focusWidget()) { + + // Menus and combobox popups do not draw focus frame around them + if (qobject_cast<QComboBoxListView *>(focusWidget) || + qobject_cast<QMenu *>(focusWidget)) + break; + if (!d->m_focusFrame) d->m_focusFrame = new QFocusFrame(focusWidget); d->m_focusFrame->setWidget(focusWidget); diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 58a7159..55aa6b0 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -310,7 +310,7 @@ const partMapEntry QS60StyleModeSpecifics::m_partMap[] = { /* SP_QsnFrPopupSideB */ {KAknsIIDQsnFrPopupSideB, ENoDraw, ES60_All, -1,-1}, /* SP_QsnFrPopupSideL */ {KAknsIIDQsnFrPopupSideL, ENoDraw, ES60_All, -1,-1}, /* SP_QsnFrPopupSideR */ {KAknsIIDQsnFrPopupSideR, ENoDraw, ES60_All, -1,-1}, - /* SP_QsnFrPopupCenter */ {KAknsIIDQsnFrPopupCenter, ENoDraw, ES60_All, -1,-1}, + /* SP_QsnFrPopupCenter */ {KAknsIIDQsnFrPopupCenterSubmenu, ENoDraw, ES60_All, -1,-1}, // ToolTip graphics different in 3.1 vs. 3.2+. /* SP_QsnFrPopupPreviewCornerTl */ {KAknsIIDQsnFrPopupCornerTl, ENoDraw, ES60_3_1, EAknsMajorSkin, 0x19c5}, /* KAknsIIDQsnFrPopupPreviewCornerTl */ @@ -919,7 +919,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX(QS60StylePrivate::SkinFr result = fromFbsBitmap(frame, NULL, flags, targetSize); } } else { - TDisplayMode maskDepth = EGray2; + TDisplayMode maskDepth = EGray256; // Query the skin item for possible frame graphics mask details. if (skinInstance) { CAknsMaskedBitmapItemData* skinMaskedBmp = static_cast<CAknsMaskedBitmapItemData*>( @@ -983,6 +983,10 @@ void QS60StyleModeSpecifics::frameIdAndCenterId(QS60StylePrivate::SkinFrameEleme frameId.Set(KAknsIIDQsnFrPopupSub); } break; + case QS60StylePrivate::SF_PopupBackground: + centerId.Set(KAknsIIDQsnFrPopupCenterSubmenu); + frameId.Set(KAknsIIDQsnFrPopupSub); + break; case QS60StylePrivate::SF_PanelBackground: // remove center piece for panel graphics, so that only border is drawn centerId.Set(KAknsIIDNone); diff --git a/src/gui/styles/qstylefactory.cpp b/src/gui/styles/qstylefactory.cpp index 0dbb21f..9009878 100644 --- a/src/gui/styles/qstylefactory.cpp +++ b/src/gui/styles/qstylefactory.cpp @@ -81,7 +81,7 @@ QT_BEGIN_INCLUDE_NAMESPACE QT_END_INCLUDE_NAMESPACE #endif -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QStyleFactoryInterface_iid, QLatin1String("/styles"), Qt::CaseInsensitive)) #endif diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp index 81b923b..515b6c7 100644 --- a/src/gui/styles/qstylesheetstyle.cpp +++ b/src/gui/styles/qstylesheetstyle.cpp @@ -1539,7 +1539,9 @@ QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const QHash<const void *, StyleSheet>::const_iterator defaultCacheIt = styleSheetCache->constFind(baseStyle()); if (defaultCacheIt == styleSheetCache->constEnd()) { defaultSs = getDefaultStyleSheet(); - styleSheetCache->insert(baseStyle(), defaultSs); + QStyle *bs = baseStyle(); + styleSheetCache->insert(bs, defaultSs); + QObject::connect(bs, SIGNAL(destroyed(QObject*)), this, SLOT(styleDestroyed(QObject*)), Qt::UniqueConnection); } else { defaultSs = defaultCacheIt.value(); } @@ -2666,6 +2668,11 @@ void QStyleSheetStyle::widgetDestroyed(QObject *o) autoFillDisabledWidgets->remove((const QWidget *)o); } +void QStyleSheetStyle::styleDestroyed(QObject *o) +{ + styleSheetCache->remove(o); +} + /*! * Make sure that the cache will be clean by connecting destroyed if needed. * return false if the widget is not stylable; diff --git a/src/gui/styles/qstylesheetstyle_p.h b/src/gui/styles/qstylesheetstyle_p.h index 50abef9..fd81437 100644 --- a/src/gui/styles/qstylesheetstyle_p.h +++ b/src/gui/styles/qstylesheetstyle_p.h @@ -147,6 +147,7 @@ protected: private Q_SLOTS: void widgetDestroyed(QObject *); + void styleDestroyed(QObject *); private: int refcount; diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 24887b5..21a31a3 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -2616,10 +2616,8 @@ void QFontCache::cleanup() } QT_CATCH (const std::bad_alloc &) { // no cache - just ignore } - if (cache && cache->hasLocalData()) { - cache->localData()->clear(); + if (cache && cache->hasLocalData()) cache->setLocalData(0); - } } #endif // QT_NO_THREAD @@ -2631,6 +2629,7 @@ QFontCache::QFontCache() QFontCache::~QFontCache() { + clear(); { EngineDataCache::ConstIterator it = engineDataCache.constBegin(), end = engineDataCache.constEnd(); diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index ae5e9ca..ff29462 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -598,10 +598,10 @@ static QList<QFontDatabase::WritingSystem> determineWritingSystemsFromTrueTypeBi #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) // class with virtual destructor, derived in qfontdatabase_s60.cpp -class QFontDatabaseS60Store +class QSymbianFontDatabaseExtras { public: - virtual ~QFontDatabaseS60Store() {} + virtual ~QSymbianFontDatabaseExtras() {} }; #endif @@ -614,7 +614,7 @@ public: , stream(0) #endif #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) - , s60Store(0) + , symbianExtras(0) #endif { } ~QFontDatabasePrivate() { @@ -628,9 +628,9 @@ public: families = 0; count = 0; #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) - if (s60Store) { - delete s60Store; - s60Store = 0; + if (symbianExtras) { + delete symbianExtras; + symbianExtras = 0; } #endif // don't clear the memory fonts! @@ -675,7 +675,7 @@ public: QDataStream *stream; QStringList fallbackFamilies; #elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) - const QFontDatabaseS60Store *s60Store; + const QSymbianFontDatabaseExtras *symbianExtras; #endif }; diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp index ef5e0c4..95774f9 100644 --- a/src/gui/text/qfontdatabase_s60.cpp +++ b/src/gui/text/qfontdatabase_s60.cpp @@ -92,24 +92,32 @@ QFileInfoList alternativeFilePaths(const QString &path, const QStringList &nameF } #if defined(QT_NO_FREETYPE) -class QFontDatabaseS60StoreImplementation : public QFontDatabaseS60Store +class QSymbianFontDatabaseExtrasImplementation : public QSymbianFontDatabaseExtras { public: - QFontDatabaseS60StoreImplementation(); - ~QFontDatabaseS60StoreImplementation(); + QSymbianFontDatabaseExtrasImplementation(); + ~QSymbianFontDatabaseExtrasImplementation(); - const QFontEngineS60Extensions *extension(const QString &typeface) const; + const QSymbianTypeFaceExtras *extras(const QString &typeface, bool bold, bool italic) const; private: RHeap* m_heap; CFontStore *m_store; COpenFontRasterizer *m_rasterizer; - mutable QHash<QString, const QFontEngineS60Extensions *> m_extensions; + mutable QList<const QSymbianTypeFaceExtras *> m_extras; + mutable QHash<QString, const QSymbianTypeFaceExtras *> m_extrasHash; }; -QFontDatabaseS60StoreImplementation::QFontDatabaseS60StoreImplementation() +QSymbianFontDatabaseExtrasImplementation::QSymbianFontDatabaseExtrasImplementation() { - m_heap = User::ChunkHeap(NULL, 0x1000, 0x100000); + QStringList filters; + filters.append(QLatin1String("*.ttf")); + filters.append(QLatin1String("*.ccc")); + const QFileInfoList fontFiles = alternativeFilePaths(QLatin1String("resource\\Fonts"), filters); + + const TInt heapMinLength = 0x1000; + const TInt heapMaxLength = qMax(0x20000 * fontFiles.count(), heapMinLength); + m_heap = User::ChunkHeap(NULL, heapMinLength, heapMaxLength); QT_TRAP_THROWING( m_store = CFontStore::NewL(m_heap); m_rasterizer = COpenFontRasterizer::NewL(TUid::Uid(0x101F7F5E)); @@ -117,20 +125,17 @@ QFontDatabaseS60StoreImplementation::QFontDatabaseS60StoreImplementation() m_store->InstallRasterizerL(m_rasterizer); CleanupStack::Pop(m_rasterizer);); - QStringList filters; - filters.append(QString::fromLatin1("*.ttf")); - filters.append(QString::fromLatin1("*.ccc")); - const QFileInfoList fontFiles = alternativeFilePaths(QString::fromLatin1("resource\\Fonts"), filters); foreach (const QFileInfo &fontFileInfo, fontFiles) { const QString fontFile = QDir::toNativeSeparators(fontFileInfo.absoluteFilePath()); TPtrC fontFilePtr(qt_QString2TPtrC(fontFile)); QT_TRAP_THROWING(m_store->AddFileL(fontFilePtr)); } } -QFontDatabaseS60StoreImplementation::~QFontDatabaseS60StoreImplementation() + +QSymbianFontDatabaseExtrasImplementation::~QSymbianFontDatabaseExtrasImplementation() { - typedef QHash<QString, const QFontEngineS60Extensions *>::iterator iterator; - for (iterator p = m_extensions.begin(); p != m_extensions.end(); ++p) { + typedef QList<const QSymbianTypeFaceExtras *>::iterator iterator; + for (iterator p = m_extras.begin(); p != m_extras.end(); ++p) { m_store->ReleaseFont((*p)->fontOwner()); delete *p; } @@ -156,13 +161,18 @@ COpenFont* OpenFontFromBitmapFont(const CBitmapFont* aBitmapFont) } #endif // FNTSTORE_H_INLINES_SUPPORT_FMM -const QFontEngineS60Extensions *QFontDatabaseS60StoreImplementation::extension(const QString &typeface) const +const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(const QString &typeface, + bool bold, bool italic) const { - if (!m_extensions.contains(typeface)) { + const QString searchKey = typeface + QString::number(int(bold)) + QString::number(int(italic)); + if (!m_extrasHash.contains(searchKey)) { CFont* font = NULL; - TFontSpec spec(qt_QString2TPtrC(typeface), 1); - spec.iHeight = 1; - const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, spec); + TFontSpec searchSpec(qt_QString2TPtrC(typeface), 1); + if (bold) + searchSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold); + if (italic) + searchSpec.iFontStyle.SetPosture(EPostureItalic); + const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, searchSpec); Q_ASSERT(err == KErrNone && font); const CBitmapFont *bitmapFont = static_cast<CBitmapFont*>(font); COpenFont *openFont = @@ -171,9 +181,20 @@ const QFontEngineS60Extensions *QFontDatabaseS60StoreImplementation::extension(c #else OpenFontFromBitmapFont(bitmapFont); #endif // FNTSTORE_H_INLINES_SUPPORT_FMM - m_extensions.insert(typeface, new QFontEngineS60Extensions(font, openFont)); + const TOpenFontFaceAttrib* const attrib = openFont->FaceAttrib(); + const QString foundKey = + QString((const QChar*)attrib->FullName().Ptr(), attrib->FullName().Length()); + if (!m_extrasHash.contains(foundKey)) { + QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font, openFont); + m_extras.append(extras); + m_extrasHash.insert(searchKey, extras); + m_extrasHash.insert(foundKey, extras); + } else { + m_store->ReleaseFont(font); + m_extrasHash.insert(searchKey, m_extrasHash.value(foundKey)); + } } - return m_extensions.value(typeface); + return m_extrasHash.value(searchKey); } #else class QFontEngineFTS60 : public QFontEngineFT @@ -240,14 +261,14 @@ static void initializeDb() return; #if defined(QT_NO_FREETYPE) - if (!db->s60Store) - db->s60Store = new QFontDatabaseS60StoreImplementation; + if (!db->symbianExtras) + db->symbianExtras = new QSymbianFontDatabaseExtrasImplementation; QSymbianFbsHeapLock lock(QSymbianFbsHeapLock::Unlock); const int numTypeFaces = QS60Data::screenDevice()->NumTypefaces(); - const QFontDatabaseS60StoreImplementation *store = - static_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store); + const QSymbianFontDatabaseExtrasImplementation *dbExtras = + static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras); bool fontAdded = false; for (int i = 0; i < numTypeFaces; i++) { TTypefaceSupport typefaceSupport; @@ -273,8 +294,9 @@ static void initializeDb() style->smoothScalable = typefaceSupport.iIsScalable; style->pixelSize(0, true); - const QFontEngineS60Extensions *extension = store->extension(familyName); - const QByteArray os2Table = extension->getSfntTable(MAKE_TAG('O', 'S', '/', '2')); + const QSymbianTypeFaceExtras *typeFaceExtras = + dbExtras->extras(familyName, faceAttrib.IsBold(), faceAttrib.IsItalic()); + const QByteArray os2Table = typeFaceExtras->getSfntTable(MAKE_TAG('O', 'S', '/', '2')); const unsigned char* data = reinterpret_cast<const unsigned char*>(os2Table.constData()); const unsigned char* ulUnicodeRange = data + 42; quint32 unicodeRange[4] = { @@ -394,10 +416,11 @@ QFontEngine *QFontDatabase::findFont(int script, const QFontPrivate *, const QFo QFontDef request = req; request.family = fontFamily; #if defined(QT_NO_FREETYPE) - const QFontDatabaseS60StoreImplementation *store = - static_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store); - const QFontEngineS60Extensions *extension = store->extension(fontFamily); - fe = new QFontEngineS60(request, extension); + const QSymbianFontDatabaseExtrasImplementation *dbExtras = + static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras); + const QSymbianTypeFaceExtras *typeFaceExtras = + dbExtras->extras(fontFamily, request.weight > QFont::Normal, request.style != QFont::StyleNormal); + fe = new QFontEngineS60(request, typeFaceExtras); #else QFontEngine::FaceId faceId; const QtFontFamily * const reqQtFontFamily = db->family(fontFamily); diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index c9ff661..93f02ff 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -53,22 +53,19 @@ QT_BEGIN_NAMESPACE -QFontEngineS60Extensions::QFontEngineS60Extensions(CFont* fontOwner, COpenFont *font) +QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font) : m_font(font) , m_cmap(0) , m_symbolCMap(false) , m_fontOwner(fontOwner) { - TAny *shapingExtension = NULL; - m_font->ExtendedInterface(KUidOpenFontShapingExtension, shapingExtension); - m_shapingExtension = static_cast<MOpenFontShapingExtension*>(shapingExtension); TAny *trueTypeExtension = NULL; m_font->ExtendedInterface(KUidOpenFontTrueTypeExtension, trueTypeExtension); m_trueTypeExtension = static_cast<MOpenFontTrueTypeExtension*>(trueTypeExtension); - Q_ASSERT(m_shapingExtension && m_trueTypeExtension); + Q_ASSERT(m_trueTypeExtension); } -QByteArray QFontEngineS60Extensions::getSfntTable(uint tag) const +QByteArray QSymbianTypeFaceExtras::getSfntTable(uint tag) const { Q_ASSERT(m_trueTypeExtension->HasTrueTypeTable(tag)); TInt error = KErrNone; @@ -79,7 +76,7 @@ QByteArray QFontEngineS60Extensions::getSfntTable(uint tag) const return result; } -bool QFontEngineS60Extensions::getSfntTableData(uint tag, uchar *buffer, uint *length) const +bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *length) const { if (!m_trueTypeExtension->HasTrueTypeTable(tag)) return false; @@ -104,7 +101,7 @@ bool QFontEngineS60Extensions::getSfntTableData(uint tag, uchar *buffer, uint *l return result; } -const unsigned char *QFontEngineS60Extensions::cmap() const +const unsigned char *QSymbianTypeFaceExtras::cmap() const { if (!m_cmap) { m_cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p')); @@ -114,27 +111,7 @@ const unsigned char *QFontEngineS60Extensions::cmap() const return m_cmap; } -QPainterPath QFontEngineS60Extensions::glyphOutline(glyph_t glyph) const -{ - QPainterPath result; - QPolygonF polygon; - TInt glyphIndex = glyph; - TInt pointNumber = 0; - TInt x, y; - while (m_shapingExtension->GlyphPointInFontUnits(glyphIndex, pointNumber++, x, y)) { - const QPointF point(qreal(x) / 0xffff, qreal(y) / 0xffff); - if (polygon.contains(point)) { - result.addPolygon(polygon); - result.closeSubpath(); - polygon.clear(); - } else { - polygon.append(point); - } - } - return result; -} - -CFont *QFontEngineS60Extensions::fontOwner() const +CFont *QSymbianTypeFaceExtras::fontOwner() const { return m_fontOwner; } @@ -192,8 +169,8 @@ void QFontEngineS60::releaseFont(CFont *&font) } } -QFontEngineS60::QFontEngineS60(const QFontDef &request, const QFontEngineS60Extensions *extensions) - : m_extensions(extensions) +QFontEngineS60::QFontEngineS60(const QFontDef &request, const QSymbianTypeFaceExtras *extras) + : m_extras(extras) , m_originalFont(0) , m_originalFontSizeInPixels((request.pixelSize >= 0)? request.pixelSize:pointsToPixels(request.pointSize)) @@ -220,10 +197,12 @@ bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout } HB_Glyph *g = glyphs->glyphs; - const unsigned char* cmap = m_extensions->cmap(); + const unsigned char* cmap = m_extras->cmap(); + const bool isRtl = (flags & QTextEngine::RightToLeft); for (int i = 0; i < len; ++i) { const unsigned int uc = getChar(characters, i, len); - *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap, uc); + *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap, + isRtl ? QChar::mirroredChar(uc) : uc); } glyphs->numGlyphs = g - glyphs->glyphs; @@ -241,8 +220,8 @@ void QFontEngineS60::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFla Q_UNUSED(flags); for (int i = 0; i < glyphs->numGlyphs; i++) { const glyph_metrics_t bbox = boundingBox_const(glyphs->glyphs[i]); - glyphs->advances_x[i] = glyphs->offsets[i].x = bbox.xoff; - glyphs->advances_y[i] = glyphs->offsets[i].y = bbox.yoff; + glyphs->advances_x[i] = bbox.xoff; + glyphs->advances_y[i] = bbox.yoff; } } @@ -337,7 +316,7 @@ const char *QFontEngineS60::name() const bool QFontEngineS60::canRender(const QChar *string, int len) { - const unsigned char *cmap = m_extensions->cmap(); + const unsigned char *cmap = m_extras->cmap(); for (int i = 0; i < len; ++i) { const unsigned int uc = getChar(string, i, len); if (QFontEngine::getTrueTypeGlyphIndex(cmap, uc) == 0) @@ -348,12 +327,12 @@ bool QFontEngineS60::canRender(const QChar *string, int len) QByteArray QFontEngineS60::getSfntTable(uint tag) const { - return m_extensions->getSfntTable(tag); + return m_extras->getSfntTable(tag); } bool QFontEngineS60::getSfntTableData(uint tag, uchar *buffer, uint *length) const { - return m_extensions->getSfntTableData(tag, buffer, length); + return m_extras->getSfntTableData(tag, buffer, length); } QFontEngine::Type QFontEngineS60::type() const diff --git a/src/gui/text/qfontengine_s60_p.h b/src/gui/text/qfontengine_s60_p.h index a80af4d..6883730 100644 --- a/src/gui/text/qfontengine_s60_p.h +++ b/src/gui/text/qfontengine_s60_p.h @@ -62,21 +62,19 @@ class CFont; QT_BEGIN_NAMESPACE -// ..gives us access to truetype tables, UTF-16<->GlyphID mapping, and glyph outlines -class QFontEngineS60Extensions +// ..gives us access to truetype tables +class QSymbianTypeFaceExtras { public: - QFontEngineS60Extensions(CFont* fontOwner, COpenFont *font); + QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font); QByteArray getSfntTable(uint tag) const; bool getSfntTableData(uint tag, uchar *buffer, uint *length) const; const unsigned char *cmap() const; - QPainterPath glyphOutline(glyph_t glyph) const; CFont *fontOwner() const; private: COpenFont *m_font; - const MOpenFontShapingExtension *m_shapingExtension; mutable MOpenFontTrueTypeExtension *m_trueTypeExtension; mutable const unsigned char *m_cmap; mutable bool m_symbolCMap; @@ -87,7 +85,7 @@ private: class QFontEngineS60 : public QFontEngine { public: - QFontEngineS60(const QFontDef &fontDef, const QFontEngineS60Extensions *extensions); + QFontEngineS60(const QFontDef &fontDef, const QSymbianTypeFaceExtras *extras); ~QFontEngineS60(); bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const; @@ -128,7 +126,7 @@ private: CFont *fontWithSize(qreal size) const; static void releaseFont(CFont *&font); - const QFontEngineS60Extensions *m_extensions; + const QSymbianTypeFaceExtras *m_extras; CFont* m_originalFont; const qreal m_originalFontSizeInPixels; CFont* m_scaledFont; diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 3e556a7..afba678 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -1704,7 +1704,7 @@ void QTextDocument::print(QPrinter *printer) const return; const QTextDocument *doc = this; - QTextDocument *clonedDoc = 0; + QScopedPointer<QTextDocument> clonedDoc; (void)doc->documentLayout(); // make sure that there is a layout QRectF body = QRectF(QPointF(0, 0), d->pageSize); @@ -1737,7 +1737,7 @@ void QTextDocument::print(QPrinter *printer) const printerPageSize.height() / scaledPageSize.height()); } else { doc = clone(const_cast<QTextDocument *>(this)); - clonedDoc = const_cast<QTextDocument *>(doc); + clonedDoc.reset(const_cast<QTextDocument *>(doc)); for (QTextBlock srcBlock = firstBlock(), dstBlock = clonedDoc->firstBlock(); srcBlock.isValid() && dstBlock.isValid(); @@ -1812,7 +1812,7 @@ void QTextDocument::print(QPrinter *printer) const for (int j = 0; j < pageCopies; ++j) { if (printer->printerState() == QPrinter::Aborted || printer->printerState() == QPrinter::Error) - goto UserCanceled; + return; printPage(page, &p, doc, body, pageNumberPos); if (j < pageCopies - 1) printer->newPage(); @@ -1832,9 +1832,6 @@ void QTextDocument::print(QPrinter *printer) const if ( i < docCopies - 1) printer->newPage(); } - -UserCanceled: - delete clonedDoc; } #endif diff --git a/src/gui/widgets/qcombobox_p.h b/src/gui/widgets/qcombobox_p.h index 92d85cc..29a628c 100644 --- a/src/gui/widgets/qcombobox_p.h +++ b/src/gui/widgets/qcombobox_p.h @@ -200,7 +200,9 @@ protected: menuOpt.menuItemType = QStyleOptionMenuItem::Scroller; if (sliderAction == QAbstractSlider::SliderSingleStepAdd) menuOpt.state |= QStyle::State_DownArrow; +#ifndef Q_WS_S60 p.eraseRect(rect()); +#endif style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p); } diff --git a/src/gui/widgets/qdockarealayout.cpp b/src/gui/widgets/qdockarealayout.cpp index 806654c..171000b 100644 --- a/src/gui/widgets/qdockarealayout.cpp +++ b/src/gui/widgets/qdockarealayout.cpp @@ -225,7 +225,7 @@ static const int zero = 0; QDockAreaLayoutInfo::QDockAreaLayoutInfo() : sep(&zero), dockPos(QInternal::LeftDock), o(Qt::Horizontal), mainWindow(0) #ifndef QT_NO_TABBAR - , tabbed(false), tabBar(0), tabBarShape(QTabBar::RoundedSouth), tabBarVisible(false) + , tabbed(false), tabBar(0), tabBarShape(QTabBar::RoundedSouth) #endif { } @@ -235,7 +235,7 @@ QDockAreaLayoutInfo::QDockAreaLayoutInfo(const int *_sep, QInternal::DockPositio QMainWindow *window) : sep(_sep), dockPos(_dockPos), o(_o), mainWindow(window) #ifndef QT_NO_TABBAR - , tabbed(false), tabBar(0), tabBarShape(static_cast<QTabBar::Shape>(tbshape)), tabBarVisible(false) + , tabbed(false), tabBar(0), tabBarShape(static_cast<QTabBar::Shape>(tbshape)) #endif { #ifdef QT_NO_TABBAR @@ -296,8 +296,8 @@ QSize QDockAreaLayoutInfo::minimumSize() const rperp(o, result) = b; #ifndef QT_NO_TABBAR - if (tabbed) { - QSize tbm = tabBarMinimumSize(); + QSize tbm = tabBarMinimumSize(); + if (!tbm.isNull()) { switch (tabBarShape) { case QTabBar::RoundedNorth: case QTabBar::RoundedSouth: @@ -369,8 +369,8 @@ QSize QDockAreaLayoutInfo::maximumSize() const rperp(o, result) = b; #ifndef QT_NO_TABBAR - if (tabbed) { - QSize tbh = tabBarSizeHint(); + QSize tbh = tabBarSizeHint(); + if (!tbh.isNull()) { switch (tabBarShape) { case QTabBar::RoundedNorth: case QTabBar::RoundedSouth: @@ -1500,7 +1500,7 @@ void QDockAreaLayoutInfo::apply(bool animate) QRect tab_rect; QSize tbh = tabBarSizeHint(); - if (tabBarVisible) { + if (!tbh.isNull()) { switch (tabBarShape) { case QTabBar::RoundedNorth: case QTabBar::TriangularNorth: @@ -2079,10 +2079,11 @@ void QDockAreaLayoutInfo::updateSeparatorWidgets() const #endif //QT_NO_TABBAR #ifndef QT_NO_TABBAR -void QDockAreaLayoutInfo::updateTabBar() const +//returns whether the tabbar is visible or not +bool QDockAreaLayoutInfo::updateTabBar() const { if (!tabbed) - return; + return false; QDockAreaLayoutInfo *that = const_cast<QDockAreaLayoutInfo*>(this); @@ -2150,12 +2151,8 @@ void QDockAreaLayoutInfo::updateTabBar() const tabBar->blockSignals(blocked); - that->tabBarVisible = ( (gap ? 1 : 0) + tabBar->count()) > 1; - - if (changed || !tabBarMin.isValid() | !tabBarHint.isValid()) { - that->tabBarMin = tabBar->minimumSizeHint(); - that->tabBarHint = tabBar->sizeHint(); - } + //returns if the tabbar is visible or not + return ( (gap ? 1 : 0) + tabBar->count()) > 1; } void QDockAreaLayoutInfo::setTabBarShape(int shape) @@ -2163,11 +2160,8 @@ void QDockAreaLayoutInfo::setTabBarShape(int shape) if (shape == tabBarShape) return; tabBarShape = shape; - if (tabBar != 0) { + if (tabBar != 0) tabBar->setShape(static_cast<QTabBar::Shape>(shape)); - tabBarMin = QSize(); - tabBarHint = QSize(); - } for (int i = 0; i < item_list.count(); ++i) { QDockAreaLayoutItem &item = item_list[i]; @@ -2178,22 +2172,18 @@ void QDockAreaLayoutInfo::setTabBarShape(int shape) QSize QDockAreaLayoutInfo::tabBarMinimumSize() const { - if (!tabbed) + if (!updateTabBar()) return QSize(0, 0); - updateTabBar(); - - return tabBarMin; + return tabBar->minimumSizeHint(); } QSize QDockAreaLayoutInfo::tabBarSizeHint() const { - if (!tabbed) + if (!updateTabBar()) return QSize(0, 0); - updateTabBar(); - - return tabBarHint; + return tabBar->sizeHint(); } QSet<QTabBar*> QDockAreaLayoutInfo::usedTabBars() const @@ -2240,7 +2230,7 @@ QRect QDockAreaLayoutInfo::tabContentRect() const QRect result = rect; QSize tbh = tabBarSizeHint(); - if (tabBarVisible) { + if (!tbh.isNull()) { switch (tabBarShape) { case QTabBar::RoundedNorth: case QTabBar::TriangularNorth: diff --git a/src/gui/widgets/qdockarealayout_p.h b/src/gui/widgets/qdockarealayout_p.h index 0088f00..9cb77ba 100644 --- a/src/gui/widgets/qdockarealayout_p.h +++ b/src/gui/widgets/qdockarealayout_p.h @@ -208,11 +208,9 @@ public: QRect tabContentRect() const; bool tabbed; QTabBar *tabBar; - QSize tabBarMin, tabBarHint; int tabBarShape; - bool tabBarVisible; - void updateTabBar() const; + bool updateTabBar() const; void setTabBarShape(int shape); QSize tabBarMinimumSize() const; QSize tabBarSizeHint() const; diff --git a/src/gui/widgets/qdockwidget.cpp b/src/gui/widgets/qdockwidget.cpp index 54189de..ae00710 100644 --- a/src/gui/widgets/qdockwidget.cpp +++ b/src/gui/widgets/qdockwidget.cpp @@ -1270,11 +1270,7 @@ void QDockWidget::setFloating(bool floating) d->setWindowState(floating, false, floating ? r : QRect()); if (floating && r.isNull()) { - QDockWidgetLayout *layout = qobject_cast<QDockWidgetLayout*>(this->layout()); - QRect titleArea = layout->titleArea(); - int h = layout->verticalTitleBar ? titleArea.width() : titleArea.height(); - QPoint p = mapToGlobal(QPoint(h, h)); - move(p); + setAttribute(Qt::WA_Moved, false); //we want it at the default position } } diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp index 655fc61..c1c4abf 100644 --- a/src/gui/widgets/qlineedit.cpp +++ b/src/gui/widgets/qlineedit.cpp @@ -740,8 +740,14 @@ bool QLineEdit::validateAndSet(const QString &newText, int newPos, setText(oldText); return false; } - setCursorPosition(newPos); - setSelection(qMin(newMarkAnchor, newMarkDrag), qAbs(newMarkAnchor - newMarkDrag)); + int selstart = qMin(newMarkAnchor, newMarkDrag); + int sellength = qAbs(newMarkAnchor - newMarkDrag); + if (selstart == newPos) { + selstart = qMax(newMarkAnchor, newMarkDrag); + sellength = -sellength; + } + //setSelection also set the position + setSelection(selstart, sellength); return true; } #endif //QT3_SUPPORT diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp index 907dd14..f84059d 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -2803,7 +2803,9 @@ void QMenu::mouseMoveEvent(QMouseEvent *e) QAction *action = d->actionAt(e->pos()); if (!action) { - if (d->hasHadMouse) + if (d->hasHadMouse + && (!d->currentAction + || !(d->currentAction->menu() && d->currentAction->menu()->isVisible()))) d->setCurrentAction(0); return; } else if(e->buttons()) { diff --git a/src/gui/widgets/qmenu_mac.mm b/src/gui/widgets/qmenu_mac.mm index e8400d6..aaa113b 100644 --- a/src/gui/widgets/qmenu_mac.mm +++ b/src/gui/widgets/qmenu_mac.mm @@ -2066,6 +2066,7 @@ bool QMenuBarPrivate::macUpdateMenuBarImmediatly() cancelAllMenuTracking(); QWidget *w = findWindowThatShouldDisplayMenubar(); QMenuBar *mb = findMenubarForWindow(w); + extern bool qt_mac_app_fullscreen; //qapplication_mac.mm // We need to see if we are in full screen mode, if so we need to // switch the full screen mode to be able to show or hide the menubar. @@ -2074,12 +2075,14 @@ bool QMenuBarPrivate::macUpdateMenuBarImmediatly() if(w->isFullScreen()) { // Ok, switch to showing the menubar when hovering over it. SetSystemUIMode(kUIModeAllHidden, kUIOptionAutoShowMenuBar); + qt_mac_app_fullscreen = true; } } else if(w) { // Removing a menubar if(w->isFullScreen()) { // Ok, switch to not showing the menubar when hovering on it SetSystemUIMode(kUIModeAllHidden, 0); + qt_mac_app_fullscreen = true; } } diff --git a/src/gui/widgets/qmenu_symbian.cpp b/src/gui/widgets/qmenu_symbian.cpp index 4a9cfed..ab2bdea 100644 --- a/src/gui/widgets/qmenu_symbian.cpp +++ b/src/gui/widgets/qmenu_symbian.cpp @@ -149,8 +149,12 @@ static void qt_symbian_insert_action(QSymbianMenuAction* action, QList<SymbianMe "Too many menu actions"); const int underlineShortCut = QApplication::style()->styleHint(QStyle::SH_UnderlineShortcut); - QString iconText = action->action->iconText(); - TPtrC menuItemText = qt_QString2TPtrC( underlineShortCut ? action->action->text() : iconText); + QString actionText; + if (underlineShortCut) + actionText = action->action->text().left(CEikMenuPaneItem::SData::ENominalTextLength); + else + actionText = action->action->iconText().left(CEikMenuPaneItem::SData::ENominalTextLength); + TPtrC menuItemText = qt_QString2TPtrC(actionText); if (action->action->menu()) { SymbianMenuItem* menuItem = new SymbianMenuItem(); menuItem->menuItemData.iCascadeId = action->command; diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp index d03a2f4..d692307 100644 --- a/src/gui/widgets/qtabbar.cpp +++ b/src/gui/widgets/qtabbar.cpp @@ -67,8 +67,13 @@ #include <private/qt_cocoa_helpers_mac_p.h> #endif +#ifndef QT_NO_STYLE_S60 +#include "qs60style.h" +#endif + QT_BEGIN_NAMESPACE + inline static bool verticalTabs(QTabBar::Shape shape) { return shape == QTabBar::RoundedWest @@ -95,9 +100,20 @@ void QTabBarPrivate::updateMacBorderMetrics() metrics.left = 0; metrics.right = 0; qt_mac_updateContentBorderMetricts(window, metrics); - - // hide the base line separator if the tabs have docuemnt mode enabled (Cocoa) - qt_mac_showBaseLineSeparator(window, !documentMode); +#if QT_MAC_USE_COCOA + // In Cocoa we need to keep track of the drawRect method. + // If documentMode is enabled we need to change it, unless + // a toolbar is present. + // Notice that all the information is kept in the window, + // that's why we get the private widget for it instead of + // the private widget for this widget. + QWidgetPrivate *privateWidget = qt_widget_private(q->window()); + if(privateWidget) + privateWidget->changeMethods = documentMode; + // Since in Cocoa there is no simple way to remove the baseline, so we just ask the + // top level to do the magic for us. + privateWidget->syncUnifiedMode(); +#endif // QT_MAC_USE_COCOA } #endif } @@ -478,6 +494,9 @@ void QTabBarPrivate::layoutTabs() if (useScrollButtons && tabList.count() && last > available) { int extra = extraWidth(); +#ifndef QT_NO_STYLE_S60 + QS60Style *s60Style = qobject_cast<QS60Style*>(QApplication::style()); +#endif if (!vertTabs) { Qt::LayoutDirection ld = q->layoutDirection(); QRect arrows = QStyle::visualRect(ld, q->rect(), @@ -485,25 +504,57 @@ void QTabBarPrivate::layoutTabs() int buttonOverlap = q->style()->pixelMetric(QStyle::PM_TabBar_ScrollButtonOverlap, 0, q); if (ld == Qt::LeftToRight) { +// In S60style, tab scroll buttons are layoutted separately, on the sides of the tabbar. +#ifndef QT_NO_STYLE_S60 + if (s60Style) { + rightB->setGeometry(arrows.left() + extra / 2, arrows.top(), extra / 2, arrows.height()); + leftB->setGeometry(0, arrows.top(), extra / 2, arrows.height()); + } else { +#endif leftB->setGeometry(arrows.left(), arrows.top(), extra/2, arrows.height()); rightB->setGeometry(arrows.right() - extra/2 + buttonOverlap, arrows.top(), extra/2, arrows.height()); +#ifndef QT_NO_STYLE_S60 + } +#endif leftB->setArrowType(Qt::LeftArrow); rightB->setArrowType(Qt::RightArrow); } else { +#ifndef QT_NO_STYLE_S60 + if (s60Style) { + rightB->setGeometry(arrows.left() + extra / 2, arrows.top(), extra / 2, arrows.height()); + leftB->setGeometry(0, arrows.top(), extra / 2, arrows.height()); + } else { +#endif rightB->setGeometry(arrows.left(), arrows.top(), extra/2, arrows.height()); leftB->setGeometry(arrows.right() - extra/2 + buttonOverlap, arrows.top(), extra/2, arrows.height()); +#ifndef QT_NO_STYLE_S60 + } +#endif rightB->setArrowType(Qt::LeftArrow); leftB->setArrowType(Qt::RightArrow); } } else { +#ifndef QT_NO_STYLE_S60 + if (s60Style) { + QRect arrows = QRect(0, 0, size.width(), available ); + leftB->setGeometry(arrows.left(), arrows.top(), arrows.width(), extra / 2); + leftB->setArrowType(Qt::UpArrow); + rightB->setGeometry(arrows.left(), arrows.bottom() - extra / 2 + 1, + arrows.width(), extra / 2); + rightB->setArrowType(Qt::DownArrow); + } else { +#endif QRect arrows = QRect(0, available - extra, size.width(), extra ); leftB->setGeometry(arrows.left(), arrows.top(), arrows.width(), extra/2); leftB->setArrowType(Qt::UpArrow); rightB->setGeometry(arrows.left(), arrows.bottom() - extra/2 + 1, arrows.width(), extra/2); rightB->setArrowType(Qt::DownArrow); +#ifndef QT_NO_STYLE_S60 + } +#endif } leftB->setEnabled(scrollOffset > 0); rightB->setEnabled(last - scrollOffset >= available - extra); @@ -2193,6 +2244,7 @@ bool QTabBar::documentMode() const void QTabBar::setDocumentMode(bool enabled) { Q_D(QTabBar); + d->documentMode = enabled; d->updateMacBorderMetrics(); } diff --git a/src/gui/widgets/qtabwidget.cpp b/src/gui/widgets/qtabwidget.cpp index 047a905..4a61935 100644 --- a/src/gui/widgets/qtabwidget.cpp +++ b/src/gui/widgets/qtabwidget.cpp @@ -542,6 +542,8 @@ void QTabWidget::setTabEnabled(int index, bool enable) { Q_D(QTabWidget); d->tabs->setTabEnabled(index, enable); + if (QWidget *widget = d->stack->widget(index)) + widget->setEnabled(enable); } /*! diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp index 896f9b7..a163b10 100644 --- a/src/imports/multimedia/qdeclarativeaudio.cpp +++ b/src/imports/multimedia/qdeclarativeaudio.cpp @@ -57,7 +57,21 @@ QT_BEGIN_NAMESPACE import Qt 4.7 import Qt.multimedia 4.7 - Audio { source: "audio/song.mp3" } + Text { + text: "Click Me!"; + font.pointSize: 24; + width: 150; height: 50; + + Audio { + id: playMusic + source: "music.wav" + } + MouseArea { + id: playArea + anchors.fill: parent + onPressed: { playMusic.play() } + } + } \endqml \sa Video diff --git a/src/imports/multimedia/qdeclarativevideo.cpp b/src/imports/multimedia/qdeclarativevideo.cpp index 9b02795..1b51e2c 100644 --- a/src/imports/multimedia/qdeclarativevideo.cpp +++ b/src/imports/multimedia/qdeclarativevideo.cpp @@ -79,7 +79,24 @@ void QDeclarativeVideo::_q_error(int errorCode, const QString &errorString) import Qt 4.7 import Qt.multimedia 4.7 - Video { source: "video/movie.mpg" } + Video { + id: video + width : 800 + height : 600 + source: "video.avi" + + MouseArea { + anchors.fill: parent + onClicked: { + video.play() + } + } + + focus: true + Keys.onSpacePressed: video.paused = !video.paused + Keys.onLeftPressed: video.position -= 5000 + Keys.onRightPressed: video.position += 5000 + } \endqml The Video item supports untransformed, stretched, and uniformly scaled video presentation. diff --git a/src/multimedia/mediaservices/effects/qsoundeffect.cpp b/src/multimedia/mediaservices/effects/qsoundeffect.cpp index 1992ee5..3537566 100644 --- a/src/multimedia/mediaservices/effects/qsoundeffect.cpp +++ b/src/multimedia/mediaservices/effects/qsoundeffect.cpp @@ -64,17 +64,19 @@ QT_BEGIN_NAMESPACE import Qt 4.7 import Qt.multimedia 4.7 - Item { + Text { + text: "Click Me!"; + font.pointSize: 24; + width: 150; height: 50; + SoundEffect { id: playSound - source: "test.wav" + source: "soundeffect.wav" } MouseArea { id: playArea anchors.fill: parent - onPressed: { - playSound.play() - } + onPressed: { playSound.play() } } } \endqml diff --git a/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp b/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp index 74add64..96545b4 100644 --- a/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp +++ b/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp @@ -67,7 +67,7 @@ QT_BEGIN_NAMESPACE -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QAudioEngineFactoryInterface_iid, QLatin1String("/audio"), Qt::CaseInsensitive)) #endif @@ -139,7 +139,7 @@ QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode) #endif #endif -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QFactoryLoader* l = loader(); foreach (QString const& key, l->keys()) { @@ -158,7 +158,7 @@ QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode) QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice() { -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default"))); if (plugin) { @@ -178,7 +178,7 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice() QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice() { -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default"))); if (plugin) { @@ -207,7 +207,7 @@ QAbstractAudioDeviceInfo* QAudioDeviceFactory::audioDeviceInfo(const QString &re #endif #endif -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(realm)); @@ -238,7 +238,7 @@ QAbstractAudioInput* QAudioDeviceFactory::createInputDevice(QAudioDeviceInfo con return new QAudioInputPrivate(deviceInfo.handle(), format); #endif #endif -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm())); @@ -260,7 +260,7 @@ QAbstractAudioOutput* QAudioDeviceFactory::createOutputDevice(QAudioDeviceInfo c #endif #endif -#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm())); diff --git a/src/multimedia/multimedia/audio/qaudioinput.cpp b/src/multimedia/multimedia/audio/qaudioinput.cpp index c99e870..3676f64 100644 --- a/src/multimedia/multimedia/audio/qaudioinput.cpp +++ b/src/multimedia/multimedia/audio/qaudioinput.cpp @@ -211,7 +211,7 @@ QAudioInput::~QAudioInput() If a problem occurs during this process the error() is set to QAudio::OpenError, state() is set to QAudio::StoppedState and stateChanged() signal is emitted. - \sa {Symbian Platform Security Requirements} + \l{QAudioInput#Symbian Platform Security Requirements} \sa QIODevice */ @@ -233,7 +233,7 @@ void QAudioInput::start(QIODevice* device) If a problem occurs during this process the error() is set to QAudio::OpenError, state() is set to QAudio::StoppedState and stateChanged() signal is emitted. - \sa {Symbian Platform Security Requirements} + \l{QAudioInput#Symbian Platform Security Requirements} \sa QIODevice */ diff --git a/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp index 6b15008..c9a8b71 100644 --- a/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp +++ b/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp @@ -58,8 +58,6 @@ QT_BEGIN_NAMESPACE //#define DEBUG_AUDIO 1 -static const int minimumIntervalTime = 50; - QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat): settings(audioFormat) { @@ -594,10 +592,7 @@ int QAudioInputPrivate::periodSize() const void QAudioInputPrivate::setNotifyInterval(int ms) { - if(ms >= minimumIntervalTime) - intervalTime = ms; - else - intervalTime = minimumIntervalTime; + intervalTime = qMax(0, ms); } int QAudioInputPrivate::notifyInterval() const @@ -649,7 +644,7 @@ bool QAudioInputPrivate::deviceReady() if(deviceState != QAudio::ActiveState) return true; - if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { + if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { emit notify(); elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; timeStamp.restart(); diff --git a/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp index b5d673e..14a1cf3 100644 --- a/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp +++ b/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp @@ -57,8 +57,6 @@ QT_BEGIN_NAMESPACE //#define DEBUG_AUDIO 1 -static const int minimumIntervalTime = 50; - QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat): settings(audioFormat) { @@ -74,16 +72,11 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFor pullMode = true; resuming = false; finished = false; - - connect(this,SIGNAL(processMore()),SLOT(deviceReady())); - - InitializeCriticalSection(&waveInCriticalSection); } QAudioInputPrivate::~QAudioInputPrivate() { stop(); - DeleteCriticalSection(&waveInCriticalSection); } void QT_WIN_CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg, @@ -98,20 +91,18 @@ void QT_WIN_CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg, if(!qAudio) return; + QMutexLocker(&qAudio->mutex); + switch(uMsg) { case WIM_OPEN: break; case WIM_DATA: - EnterCriticalSection(&qAudio->waveInCriticalSection); if(qAudio->waveFreeBlockCount > 0) qAudio->waveFreeBlockCount--; qAudio->feedback(); - LeaveCriticalSection(&qAudio->waveInCriticalSection); break; case WIM_CLOSE: - EnterCriticalSection(&qAudio->waveInCriticalSection); qAudio->finished = true; - LeaveCriticalSection(&qAudio->waveInCriticalSection); break; default: return; @@ -156,7 +147,7 @@ void QAudioInputPrivate::freeBlocks(WAVEHDR* blockArray) int count = buffer_size/period_size; for(int i = 0; i < count; i++) { - waveInUnprepareHeader(hWaveIn,&blocks[i], sizeof(WAVEHDR)); + waveInUnprepareHeader(hWaveIn,blocks, sizeof(WAVEHDR)); blocks+=sizeof(WAVEHDR); } HeapFree(GetProcessHeap(), 0, blockArray); @@ -283,9 +274,9 @@ bool QAudioInputPrivate::open() return false; } - EnterCriticalSection(&waveInCriticalSection); + mutex.lock(); waveFreeBlockCount = buffer_size/period_size; - LeaveCriticalSection(&waveInCriticalSection); + mutex.unlock(); waveCurrentBlock = 0; @@ -329,13 +320,11 @@ void QAudioInputPrivate::close() Sleep(10); } - EnterCriticalSection(&waveInCriticalSection); - for(int i=0; i<waveFreeBlockCount; i++) { - if(waveBlocks[i].dwFlags & WHDR_PREPARED) - waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR)); - } - LeaveCriticalSection(&waveInCriticalSection); + mutex.lock(); + for(int i=0; i<waveFreeBlockCount; i++) + waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR)); freeBlocks(waveBlocks); + mutex.unlock(); } int QAudioInputPrivate::bytesReady() const @@ -406,9 +395,10 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) waveInUnprepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR)); - EnterCriticalSection(&waveInCriticalSection); + mutex.lock(); waveFreeBlockCount++; - LeaveCriticalSection(&waveInCriticalSection); + mutex.unlock(); + waveBlocks[header].dwBytesRecorded=0; waveBlocks[header].dwFlags = 0L; result = waveInPrepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR)); @@ -416,18 +406,22 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) result = waveInPrepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR)); qWarning("QAudioInput: failed to prepare block %d,err=%d",header,result); errorState = QAudio::IOError; - EnterCriticalSection(&waveInCriticalSection); + + mutex.lock(); waveFreeBlockCount--; - LeaveCriticalSection(&waveInCriticalSection); + mutex.unlock(); + return 0; } result = waveInAddBuffer(hWaveIn, &waveBlocks[header], sizeof(WAVEHDR)); if(result != MMSYSERR_NOERROR) { qWarning("QAudioInput: failed to setup block %d,err=%d",header,result); errorState = QAudio::IOError; - EnterCriticalSection(&waveInCriticalSection); + + mutex.lock(); waveFreeBlockCount--; - LeaveCriticalSection(&waveInCriticalSection); + mutex.unlock(); + return 0; } header++; @@ -435,7 +429,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) header = 0; p+=l; - EnterCriticalSection(&waveInCriticalSection); + mutex.lock(); if(!pullMode) { if(l+period_size > len && waveFreeBlockCount == buffer_size/period_size) done = true; @@ -443,7 +437,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len) if(waveFreeBlockCount == buffer_size/period_size) done = true; } - LeaveCriticalSection(&waveInCriticalSection); + mutex.unlock(); written+=l; } @@ -467,9 +461,10 @@ void QAudioInputPrivate::resume() return; } } - EnterCriticalSection(&waveInCriticalSection); + + mutex.lock(); waveFreeBlockCount = buffer_size/period_size; - LeaveCriticalSection(&waveInCriticalSection); + mutex.unlock(); waveCurrentBlock = 0; header = 0; @@ -497,10 +492,7 @@ int QAudioInputPrivate::periodSize() const void QAudioInputPrivate::setNotifyInterval(int ms) { - if(ms >= minimumIntervalTime) - intervalTime = ms; - else - intervalTime = minimumIntervalTime; + intervalTime = qMax(0, ms); } int QAudioInputPrivate::notifyInterval() const @@ -534,14 +526,13 @@ void QAudioInputPrivate::feedback() QTime now(QTime::currentTime()); qDebug()<<now.second()<<"s "<<now.msec()<<"ms :feedback() INPUT "<<this; #endif - bytesAvailable = bytesReady(); - if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState)) - emit processMore(); + QMetaObject::invokeMethod(this, "deviceReady", Qt::QueuedConnection); } bool QAudioInputPrivate::deviceReady() { + bytesAvailable = bytesReady(); #ifdef DEBUG_AUDIO QTime now(QTime::currentTime()); qDebug()<<now.second()<<"s "<<now.msec()<<"ms :deviceReady() INPUT"; @@ -558,7 +549,7 @@ bool QAudioInputPrivate::deviceReady() a->trigger(); } - if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { + if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { emit notify(); elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; timeStamp.restart(); diff --git a/src/multimedia/multimedia/audio/qaudioinput_win32_p.h b/src/multimedia/multimedia/audio/qaudioinput_win32_p.h index 66c2535..8a9b02b 100644 --- a/src/multimedia/multimedia/audio/qaudioinput_win32_p.h +++ b/src/multimedia/multimedia/audio/qaudioinput_win32_p.h @@ -62,6 +62,7 @@ #include <QtCore/qstring.h> #include <QtCore/qstringlist.h> #include <QtCore/qdatetime.h> +#include <QtCore/qmutex.h> #include <QtMultimedia/qaudio.h> #include <QtMultimedia/qaudiodeviceinfo.h> @@ -122,7 +123,7 @@ private: volatile int waveFreeBlockCount; int waveCurrentBlock; - CRITICAL_SECTION waveInCriticalSection; + QMutex mutex; static void QT_WIN_CALLBACK waveInProc( HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 ); diff --git a/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp index cf3726b..49b32c0 100644 --- a/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp +++ b/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp @@ -58,8 +58,6 @@ QT_BEGIN_NAMESPACE //#define DEBUG_AUDIO 1 -static const int minimumIntervalTime = 50; - QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat): settings(audioFormat) { @@ -84,8 +82,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioF resuming = false; opened = false; - QStringList list1 = QString(QLatin1String(device)).split(QLatin1String(":")); - m_device = QByteArray(list1.at(0).toLocal8Bit().constData()); + m_device = device; timer = new QTimer(this); connect(timer,SIGNAL(timeout()),SLOT(userFeed())); @@ -282,11 +279,11 @@ bool QAudioOutputPrivate::open() int count=0; unsigned int freakuency=settings.frequency(); - QString dev = QLatin1String(m_device.constData()); + QString dev = QString(QLatin1String(m_device.constData())); QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput); if(dev.compare(QLatin1String("default")) == 0) { #if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - dev = QLatin1String(devices.first().constData()); + dev = QLatin1String(devices.first()); #else dev = QLatin1String("hw:0,0"); #endif @@ -574,10 +571,7 @@ int QAudioOutputPrivate::bufferSize() const void QAudioOutputPrivate::setNotifyInterval(int ms) { - if(ms >= minimumIntervalTime) - intervalTime = ms; - else - intervalTime = minimumIntervalTime; + intervalTime = qMax(0, ms); } int QAudioOutputPrivate::notifyInterval() const @@ -719,7 +713,7 @@ bool QAudioOutputPrivate::deviceReady() if(deviceState != QAudio::ActiveState) return true; - if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { + if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { emit notify(); elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; timeStamp.restart(); diff --git a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp index 13bce58..a8aeb41 100644 --- a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp +++ b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp @@ -56,8 +56,6 @@ QT_BEGIN_NAMESPACE -static const int minimumIntervalTime = 50; - QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat): settings(audioFormat) { @@ -73,17 +71,15 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioF audioSource = 0; pullMode = true; finished = false; - InitializeCriticalSection(&waveOutCriticalSection); } QAudioOutputPrivate::~QAudioOutputPrivate() { - EnterCriticalSection(&waveOutCriticalSection); + mutex.lock(); finished = true; - LeaveCriticalSection(&waveOutCriticalSection); + mutex.unlock(); close(); - DeleteCriticalSection(&waveOutCriticalSection); } void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg, @@ -98,6 +94,8 @@ void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg, if(!qAudio) return; + QMutexLocker(&qAudio->mutex); + switch(uMsg) { case WOM_OPEN: qAudio->feedback(); @@ -105,16 +103,13 @@ void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg, case WOM_CLOSE: return; case WOM_DONE: - EnterCriticalSection(&qAudio->waveOutCriticalSection); if(qAudio->finished || qAudio->buffer_size == 0 || qAudio->period_size == 0) { - LeaveCriticalSection(&qAudio->waveOutCriticalSection); return; } qAudio->waveFreeBlockCount++; if(qAudio->waveFreeBlockCount >= qAudio->buffer_size/qAudio->period_size) qAudio->waveFreeBlockCount = qAudio->buffer_size/qAudio->period_size; qAudio->feedback(); - LeaveCriticalSection(&qAudio->waveOutCriticalSection); break; default: return; @@ -150,7 +145,7 @@ void QAudioOutputPrivate::freeBlocks(WAVEHDR* blockArray) int count = buffer_size/period_size; for(int i = 0; i < count; i++) { - waveOutUnprepareHeader(hWaveOut,&blocks[i], sizeof(WAVEHDR)); + waveOutUnprepareHeader(hWaveOut,blocks, sizeof(WAVEHDR)); blocks+=sizeof(WAVEHDR); } HeapFree(GetProcessHeap(), 0, blockArray); @@ -225,9 +220,9 @@ bool QAudioOutputPrivate::open() } waveBlocks = allocateBlocks(period_size, buffer_size/period_size); - EnterCriticalSection(&waveOutCriticalSection); + mutex.lock(); waveFreeBlockCount = buffer_size/period_size; - LeaveCriticalSection(&waveOutCriticalSection); + mutex.unlock(); waveCurrentBlock = 0; @@ -333,10 +328,7 @@ int QAudioOutputPrivate::bufferSize() const void QAudioOutputPrivate::setNotifyInterval(int ms) { - if(ms >= minimumIntervalTime) - intervalTime = ms; - else - intervalTime = minimumIntervalTime; + intervalTime = qMax(0, ms); } int QAudioOutputPrivate::notifyInterval() const @@ -368,12 +360,12 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len ) int remain; current = &waveBlocks[waveCurrentBlock]; while(l > 0) { - EnterCriticalSection(&waveOutCriticalSection); + mutex.lock(); if(waveFreeBlockCount==0) { - LeaveCriticalSection(&waveOutCriticalSection); + mutex.unlock(); break; } - LeaveCriticalSection(&waveOutCriticalSection); + mutex.unlock(); if(current->dwFlags & WHDR_PREPARED) waveOutUnprepareHeader(hWaveOut, current, sizeof(WAVEHDR)); @@ -390,15 +382,13 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len ) waveOutPrepareHeader(hWaveOut, current, sizeof(WAVEHDR)); waveOutWrite(hWaveOut, current, sizeof(WAVEHDR)); - EnterCriticalSection(&waveOutCriticalSection); + mutex.lock(); waveFreeBlockCount--; - LeaveCriticalSection(&waveOutCriticalSection); #ifdef DEBUG_AUDIO - EnterCriticalSection(&waveOutCriticalSection); qDebug("write out l=%d, waveFreeBlockCount=%d", current->dwBufferLength,waveFreeBlockCount); - LeaveCriticalSection(&waveOutCriticalSection); #endif + mutex.unlock(); totalTimeValue += current->dwBufferLength; waveCurrentBlock++; waveCurrentBlock %= buffer_size/period_size; @@ -453,7 +443,7 @@ void QAudioOutputPrivate::feedback() bool QAudioOutputPrivate::deviceReady() { - if(deviceState == QAudio::StoppedState) + if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState) return false; if(pullMode) { @@ -467,14 +457,16 @@ bool QAudioOutputPrivate::deviceReady() startup = true; bool full=false; - EnterCriticalSection(&waveOutCriticalSection); + + mutex.lock(); if(waveFreeBlockCount==0) full = true; - LeaveCriticalSection(&waveOutCriticalSection); + mutex.unlock(); + if (full){ #ifdef DEBUG_AUDIO qDebug() << "Skipping data as unable to write"; #endif - if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime ) { + if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime ) { emit notify(); elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; timeStamp.restart(); @@ -504,12 +496,14 @@ bool QAudioOutputPrivate::deviceReady() bytesAvailable = bytesFree(); int check = 0; - EnterCriticalSection(&waveOutCriticalSection); + + mutex.lock(); check = waveFreeBlockCount; - LeaveCriticalSection(&waveOutCriticalSection); + mutex.unlock(); + if(check == buffer_size/period_size) { - errorState = QAudio::UnderrunError; if (deviceState != QAudio::IdleState) { + errorState = QAudio::UnderrunError; deviceState = QAudio::IdleState; emit stateChanged(deviceState); } @@ -521,19 +515,23 @@ bool QAudioOutputPrivate::deviceReady() } } else { int buffered; - EnterCriticalSection(&waveOutCriticalSection); + + mutex.lock(); buffered = waveFreeBlockCount; - LeaveCriticalSection(&waveOutCriticalSection); - errorState = QAudio::UnderrunError; + mutex.unlock(); + if (buffered >= buffer_size/period_size && deviceState == QAudio::ActiveState) { - deviceState = QAudio::IdleState; - emit stateChanged(deviceState); + if (deviceState != QAudio::IdleState) { + errorState = QAudio::UnderrunError; + deviceState = QAudio::IdleState; + emit stateChanged(deviceState); + } } } if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState) return true; - if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { + if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) { emit notify(); elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime; timeStamp.restart(); diff --git a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h index 68a40f7..2d19225 100644 --- a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h +++ b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h @@ -61,6 +61,7 @@ #include <QtCore/qstring.h> #include <QtCore/qstringlist.h> #include <QtCore/qdatetime.h> +#include <QtCore/qmutex.h> #include <QtMultimedia/qaudio.h> #include <QtMultimedia/qaudiodeviceinfo.h> @@ -119,7 +120,7 @@ private: static void QT_WIN_CALLBACK waveOutProc( HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 ); - CRITICAL_SECTION waveOutCriticalSection; + QMutex mutex; WAVEHDR* allocateBlocks(int size, int count); void freeBlocks(WAVEHDR* blockArray); diff --git a/src/network/access/qftp.cpp b/src/network/access/qftp.cpp index 7f6df0a..97219f4 100644 --- a/src/network/access/qftp.cpp +++ b/src/network/access/qftp.cpp @@ -2311,7 +2311,7 @@ void QFtpPrivate::_q_piError(int errorCode, const QString &text) Q_Q(QFtp); if (pending.isEmpty()) { - qWarning() << "QFtpPrivate::_q_piError was called without pending command!"; + qWarning("QFtpPrivate::_q_piError was called without pending command!"); return; } diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index a6322a3..559124f 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -489,7 +489,11 @@ void QHttpNetworkConnectionPrivate::fillPipeline(QAbstractSocket *socket) int i = indexOf(socket); - if (! (defaultPipelineLength - channels[i].alreadyPipelinedRequests.length() >= 2)) { + // return fast if there was no reply right now processed + if (channels[i].reply == 0) + return; + + if (! (defaultPipelineLength - channels[i].alreadyPipelinedRequests.length() >= defaultRePipelineLength)) { return; } diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index f9a6de8..3b7bc9e 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -317,6 +317,13 @@ void QHttpNetworkConnectionChannel::_q_receiveReply() return; } + // only run when the QHttpNetworkConnection is not currently being destructed, e.g. + // this function is called from _q_disconnected which is called because + // of ~QHttpNetworkConnectionPrivate + if (!qobject_cast<QHttpNetworkConnection*>(connection)) { + return; + } + qint64 bytes = 0; QAbstractSocket::SocketState socketState = socket->state(); @@ -384,7 +391,7 @@ void QHttpNetworkConnectionChannel::_q_receiveReply() if (!replyPrivate->expectContent()) { replyPrivate->state = QHttpNetworkReplyPrivate::AllDoneState; allDone(); - return; + break; } } break; diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index 7a48c2b..3154ed6 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -726,8 +726,7 @@ void QNetworkAccessHttpBackend::readFromHttp() QByteDataBuffer list; while (httpReply->bytesAvailable() != 0 && nextDownstreamBlockSize() != 0 && nextDownstreamBlockSize() > list.byteAmount()) { - QByteArray data = httpReply->readAny(); - list.append(data); + list.append(httpReply->readAny()); } if (!list.isEmpty()) diff --git a/src/network/access/qnetworkaccessmanager.h b/src/network/access/qnetworkaccessmanager.h index a0ffb07..95e45f0 100644 --- a/src/network/access/qnetworkaccessmanager.h +++ b/src/network/access/qnetworkaccessmanager.h @@ -62,7 +62,7 @@ class QNetworkReply; class QNetworkProxy; class QNetworkProxyFactory; class QSslError; -#ifndef QT_NO_BEARERMANAGEMENT +#if !defined(QT_NO_BEARERMANAGEMENT) && !defined(QT_MOBILITY_BEARER) class QNetworkConfiguration; #endif @@ -121,11 +121,13 @@ public: QNetworkReply *deleteResource(const QNetworkRequest &request); QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = 0); -#ifndef QT_NO_BEARERMANAGEMENT +#if !defined(QT_NO_BEARERMANAGEMENT) && !defined(QT_MOBILITY_BEARER) void setConfiguration(const QNetworkConfiguration &config); QNetworkConfiguration configuration() const; QNetworkConfiguration activeConfiguration() const; +#endif +#ifndef QT_NO_BEARERMANAGEMENT void setNetworkAccessible(NetworkAccessibility accessible); NetworkAccessibility networkAccessible() const; #endif @@ -140,9 +142,11 @@ Q_SIGNALS: void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors); #endif -#ifndef QT_NO_BEARERMANAGEMENT +#if !defined(QT_NO_BEARERMANAGEMENT) && !defined(QT_MOBILITY_BEARER) void networkSessionConnected(); +#endif +#ifndef QT_NO_BEARERMANAGEMENT void networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility accessible); #endif @@ -155,7 +159,7 @@ private: Q_DECLARE_PRIVATE(QNetworkAccessManager) Q_PRIVATE_SLOT(d_func(), void _q_replyFinished()) Q_PRIVATE_SLOT(d_func(), void _q_replySslErrors(QList<QSslError>)) -#ifndef QT_NO_BEARERMANAGEMENT +#if !defined(QT_NO_BEARERMANAGEMENT) && !defined(QT_MOBILITY_BEARER) Q_PRIVATE_SLOT(d_func(), void _q_networkSessionClosed()) Q_PRIVATE_SLOT(d_func(), void _q_networkSessionNewConfigurationActivated()) Q_PRIVATE_SLOT(d_func(), void _q_networkSessionPreferredConfigurationChanged(QNetworkConfiguration,bool)) diff --git a/src/network/access/qnetworkcookiejar.cpp b/src/network/access/qnetworkcookiejar.cpp index 8727095..0b3a918 100644 --- a/src/network/access/qnetworkcookiejar.cpp +++ b/src/network/access/qnetworkcookiejar.cpp @@ -269,6 +269,7 @@ QList<QNetworkCookie> QNetworkCookieJar::cookiesForUrl(const QUrl &url) const Q_D(const QNetworkCookieJar); QDateTime now = QDateTime::currentDateTime(); QList<QNetworkCookie> result; + bool isEncrypted = url.scheme().toLower() == QLatin1String("https"); // scan our cookies for something that matches QList<QNetworkCookie>::ConstIterator it = d->allCookies.constBegin(), @@ -280,6 +281,8 @@ QList<QNetworkCookie> QNetworkCookieJar::cookiesForUrl(const QUrl &url) const continue; if (!(*it).isSessionCookie() && (*it).expirationDate() < now) continue; + if ((*it).isSecure() && !isEncrypted) + continue; // insert this cookie into result, sorted by path QList<QNetworkCookie>::Iterator insertIt = result.begin(); diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index c3dc168..128d18f 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -478,6 +478,37 @@ qint64 QNetworkReplyImplPrivate::nextDownstreamBlockSize() const return qMax<qint64>(0, readBufferMaxSize - readBuffer.byteAmount()); } +void QNetworkReplyImplPrivate::initCacheSaveDevice() +{ + Q_Q(QNetworkReplyImpl); + + // save the meta data + QNetworkCacheMetaData metaData; + metaData.setUrl(url); + metaData = backend->fetchCacheMetaData(metaData); + + // save the redirect request also in the cache + QVariant redirectionTarget = q->attribute(QNetworkRequest::RedirectionTargetAttribute); + if (redirectionTarget.isValid()) { + QNetworkCacheMetaData::AttributesMap attributes = metaData.attributes(); + attributes.insert(QNetworkRequest::RedirectionTargetAttribute, redirectionTarget); + metaData.setAttributes(attributes); + } + + cacheSaveDevice = networkCache()->prepare(metaData); + + if (!cacheSaveDevice || (cacheSaveDevice && !cacheSaveDevice->isOpen())) { + if (cacheSaveDevice && !cacheSaveDevice->isOpen()) + qCritical("QNetworkReplyImpl: network cache returned a device that is not open -- " + "class %s probably needs to be fixed", + networkCache()->metaObject()->className()); + + networkCache()->remove(url); + cacheSaveDevice = 0; + cacheEnabled = false; + } +} + // we received downstream data and send this to the cache // and to our readBuffer (which in turn gets read by the user of QNetworkReply) void QNetworkReplyImplPrivate::appendDownstreamData(QByteDataBuffer &data) @@ -487,36 +518,12 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QByteDataBuffer &data) return; if (cacheEnabled && !cacheSaveDevice) { - // save the meta data - QNetworkCacheMetaData metaData; - metaData.setUrl(url); - metaData = backend->fetchCacheMetaData(metaData); - - // save the redirect request also in the cache - QVariant redirectionTarget = q->attribute(QNetworkRequest::RedirectionTargetAttribute); - if (redirectionTarget.isValid()) { - QNetworkCacheMetaData::AttributesMap attributes = metaData.attributes(); - attributes.insert(QNetworkRequest::RedirectionTargetAttribute, redirectionTarget); - metaData.setAttributes(attributes); - } - - cacheSaveDevice = networkCache()->prepare(metaData); - - if (!cacheSaveDevice || (cacheSaveDevice && !cacheSaveDevice->isOpen())) { - if (cacheSaveDevice && !cacheSaveDevice->isOpen()) - qCritical("QNetworkReplyImpl: network cache returned a device that is not open -- " - "class %s probably needs to be fixed", - networkCache()->metaObject()->className()); - - networkCache()->remove(url); - cacheSaveDevice = 0; - cacheEnabled = false; - } + initCacheSaveDevice(); } qint64 bytesWritten = 0; for (int i = 0; i < data.bufferCount(); i++) { - QByteArray item = data[i]; + QByteArray const &item = data[i]; if (cacheSaveDevice) cacheSaveDevice->write(item.constData(), item.size()); @@ -529,6 +536,13 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QByteDataBuffer &data) bytesDownloaded += bytesWritten; lastBytesDownloaded = bytesDownloaded; + appendDownstreamDataSignalEmissions(); +} + +void QNetworkReplyImplPrivate::appendDownstreamDataSignalEmissions() +{ + Q_Q(QNetworkReplyImpl); + QPointer<QNetworkReplyImpl> qq = q; QVariant totalSize = cookedHeaders.value(QNetworkRequest::ContentLengthHeader); @@ -572,6 +586,15 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QIODevice *data) _q_copyReadyRead(); } +void QNetworkReplyImplPrivate::appendDownstreamData(const QByteArray &data) +{ + // TODO implement + + // TODO call + + qFatal("QNetworkReplyImplPrivate::appendDownstreamData not implemented"); +} + void QNetworkReplyImplPrivate::finished() { Q_Q(QNetworkReplyImpl); @@ -689,8 +712,13 @@ QNetworkReplyImpl::QNetworkReplyImpl(QObject *parent) QNetworkReplyImpl::~QNetworkReplyImpl() { Q_D(QNetworkReplyImpl); + + // This code removes the data from the cache if it was prematurely aborted. + // See QNetworkReplyImplPrivate::completeCacheSave(), we disable caching there after the cache + // save had been properly finished. So if it is still enabled it means we got deleted/aborted. if (d->isCachingEnabled()) d->networkCache()->remove(url()); + if (d->outgoingDataBuffer) delete d->outgoingDataBuffer; } diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h index bc7e408..38084bd 100644 --- a/src/network/access/qnetworkreplyimpl_p.h +++ b/src/network/access/qnetworkreplyimpl_p.h @@ -156,8 +156,13 @@ public: void consume(qint64 count); void emitUploadProgress(qint64 bytesSent, qint64 bytesTotal); qint64 nextDownstreamBlockSize() const; + + void initCacheSaveDevice(); + void appendDownstreamDataSignalEmissions(); void appendDownstreamData(QByteDataBuffer &data); void appendDownstreamData(QIODevice *data); + void appendDownstreamData(const QByteArray &data); + void finished(); void error(QNetworkReply::NetworkError code, const QString &errorString); void metaDataChanged(); diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp index a7bd2d5..471927a 100644 --- a/src/network/bearer/qnetworkconfigmanager_p.cpp +++ b/src/network/bearer/qnetworkconfigmanager_p.cpp @@ -54,8 +54,10 @@ QT_BEGIN_NAMESPACE +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QBearerEngineFactoryInterface_iid, QLatin1String("/bearer"))) +#endif QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate() : pollTimer(0), mutex(QMutex::Recursive), forcedPolling(0), firstUpdate(true) @@ -354,6 +356,7 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() updating = false; +#ifndef QT_NO_LIBRARY QFactoryLoader *l = loader(); QBearerEngine *generic = 0; @@ -387,6 +390,7 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations() if (generic) sessionEngines.append(generic); +#endif // QT_NO_LIBRARY } QBearerEngine *engine = qobject_cast<QBearerEngine *>(sender()); diff --git a/src/network/socket/qlocalserver_win.cpp b/src/network/socket/qlocalserver_win.cpp index 5d2be72..07baf1e 100644 --- a/src/network/socket/qlocalserver_win.cpp +++ b/src/network/socket/qlocalserver_win.cpp @@ -167,8 +167,8 @@ void QLocalServerPrivate::_q_onNewConnection() q->incomingConnection((quintptr)handle); } else { if (GetLastError() != ERROR_IO_INCOMPLETE) { + q->close(); setError(QLatin1String("QLocalServerPrivate::_q_onNewConnection")); - closeServer(); return; } diff --git a/src/opengl/gl2paintengineex/qglengineshadersource_p.h b/src/opengl/gl2paintengineex/qglengineshadersource_p.h index 3379296..8dba951 100644 --- a/src/opengl/gl2paintengineex/qglengineshadersource_p.h +++ b/src/opengl/gl2paintengineex/qglengineshadersource_p.h @@ -282,7 +282,7 @@ static const char* const qglslPositionWithTextureBrushVertexShader = "\n\ uniform mediump vec2 halfViewportSize; \n\ uniform highp vec2 invertedTextureSize; \n\ uniform highp mat3 brushTransform; \n\ - varying highp vec2 textureCoords; \n\ + varying highp vec2 brushTextureCoords; \n\ void setPosition(void) \n\ { \n\ highp mat3 pmvMatrix = mat3(pmvMatrix1, pmvMatrix2, pmvMatrix3); \n\ @@ -292,7 +292,7 @@ static const char* const qglslPositionWithTextureBrushVertexShader = "\n\ mediump vec3 hTexCoords = brushTransform * vec3(viewportCoords, 1); \n\ mediump float invertedHTexCoordsZ = 1.0 / hTexCoords.z; \n\ gl_Position = vec4(gl_Position.xy * invertedHTexCoordsZ, 0.0, invertedHTexCoordsZ); \n\ - textureCoords.xy = (hTexCoords.xy * invertedTextureSize) * gl_Position.w; \n\ + brushTextureCoords.xy = (hTexCoords.xy * invertedTextureSize) * gl_Position.w; \n\ }\n"; static const char* const qglslAffinePositionWithTextureBrushVertexShader @@ -303,28 +303,28 @@ static const char* const qglslAffinePositionWithTextureBrushVertexShader // we emulate GL_REPEAT by only taking the fractional part of the texture coords. // TODO: Special case POT textures which don't need this emulation static const char* const qglslTextureBrushSrcFragmentShader = "\n\ - varying highp vec2 textureCoords; \n\ + varying highp vec2 brushTextureCoords; \n\ uniform lowp sampler2D brushTexture; \n\ lowp vec4 srcPixel() { \n\ - return texture2D(brushTexture, fract(textureCoords)); \n\ + return texture2D(brushTexture, fract(brushTextureCoords)); \n\ }\n"; #else static const char* const qglslTextureBrushSrcFragmentShader = "\n\ - varying highp vec2 textureCoords; \n\ + varying highp vec2 brushTextureCoords; \n\ uniform lowp sampler2D brushTexture; \n\ lowp vec4 srcPixel() \n\ { \n\ - return texture2D(brushTexture, textureCoords); \n\ + return texture2D(brushTexture, brushTextureCoords); \n\ }\n"; #endif static const char* const qglslTextureBrushSrcWithPatternFragmentShader = "\n\ - varying highp vec2 textureCoords; \n\ + varying highp vec2 brushTextureCoords; \n\ uniform lowp vec4 patternColor; \n\ uniform lowp sampler2D brushTexture; \n\ lowp vec4 srcPixel() \n\ { \n\ - return patternColor * (1.0 - texture2D(brushTexture, textureCoords).r); \n\ + return patternColor * (1.0 - texture2D(brushTexture, brushTextureCoords).r); \n\ }\n"; // Solid Fill Brush diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp index 994c1c9..452d37d 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp @@ -42,6 +42,10 @@ #include "qtextureglyphcache_gl_p.h" #include "qpaintengineex_opengl2_p.h" +#if defined QT_OPENGL_ES_2 && !defined(QT_NO_EGL) +#include "private/qeglcontext_p.h" +#endif + QT_BEGIN_NAMESPACE #ifdef Q_WS_WIN @@ -49,12 +53,27 @@ extern Q_GUI_EXPORT bool qt_cleartype_enabled; #endif QGLTextureGlyphCache::QGLTextureGlyphCache(QGLContext *context, QFontEngineGlyphCache::Type type, const QTransform &matrix) - : QTextureGlyphCache(type, matrix) + : QImageTextureGlyphCache(type, matrix) , ctx(context) , m_width(0) , m_height(0) + , m_broken_fbo_readback(false) { - glGenFramebuffers(1, &m_fbo); + // broken FBO readback is a bug in the SGX 1.3 and 1.4 drivers for the N900 where + // copying between FBO's is broken if the texture is either GL_ALPHA or POT. The + // workaround is to use a system-memory copy of the glyph cache for this device. + // Switching to NPOT and GL_RGBA would both cost a lot more graphics memory and + // be slower, so that is not desireable. +#if defined QT_OPENGL_ES_2 && !defined(QT_NO_EGL) + if (QByteArray((char*) glGetString(GL_RENDERER)).contains("SGX")) { + QGLContextPrivate *ctxd = context->d_func(); + m_broken_fbo_readback = QByteArray((char *) eglQueryString(ctxd->eglContext->display(), EGL_VERSION)).contains("1.3"); + } +#endif + + if (!m_broken_fbo_readback) + glGenFramebuffers(1, &m_fbo); + connect(QGLSignalProxy::instance(), SIGNAL(aboutToDestroyContext(const QGLContext*)), SLOT(contextDestroyed(const QGLContext*))); } @@ -63,7 +82,9 @@ QGLTextureGlyphCache::~QGLTextureGlyphCache() { if (ctx) { QGLShareContextScope scope(ctx); - glDeleteFramebuffers(1, &m_fbo); + + if (!m_broken_fbo_readback) + glDeleteFramebuffers(1, &m_fbo); if (m_width || m_height) glDeleteTextures(1, &m_texture); @@ -72,6 +93,12 @@ QGLTextureGlyphCache::~QGLTextureGlyphCache() void QGLTextureGlyphCache::createTextureData(int width, int height) { + // create in QImageTextureGlyphCache baseclass is meant to be called + // only to create the initial image and does not preserve the content, + // so we don't call when this function is called from resize. + if (m_broken_fbo_readback && image().isNull()) + QImageTextureGlyphCache::createTextureData(width, height); + glGenTextures(1, &m_texture); glBindTexture(GL_TEXTURE_2D, m_texture); @@ -93,14 +120,22 @@ void QGLTextureGlyphCache::createTextureData(int width, int height) void QGLTextureGlyphCache::resizeTextureData(int width, int height) { - // ### the QTextureGlyphCache API needs to be reworked to allow - // ### resizeTextureData to fail - int oldWidth = m_width; int oldHeight = m_height; GLuint oldTexture = m_texture; createTextureData(width, height); + + if (m_broken_fbo_readback) { + QImageTextureGlyphCache::resizeTextureData(width, height); + Q_ASSERT(image().depth() == 8); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, oldWidth, oldHeight, GL_ALPHA, GL_UNSIGNED_BYTE, image().constBits()); + glDeleteTextures(1, &oldTexture); + return; + } + + // ### the QTextureGlyphCache API needs to be reworked to allow + // ### resizeTextureData to fail glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_fbo); @@ -159,20 +194,7 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height) glBindTexture(GL_TEXTURE_2D, m_texture); -#ifdef QT_OPENGL_ES_2 - QDataBuffer<uchar> buffer(4*oldWidth*oldHeight); - buffer.resize(4*oldWidth*oldHeight); - glReadPixels(0, 0, oldWidth, oldHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer.data()); - - // do an in-place conversion from GL_RGBA to GL_ALPHA - for (int i=0; i<oldWidth*oldHeight; ++i) - buffer.data()[i] = buffer.at(4*i + 3); - - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, oldWidth, oldHeight, - GL_ALPHA, GL_UNSIGNED_BYTE, buffer.data()); -#else glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, oldWidth, oldHeight); -#endif glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, 0); @@ -187,6 +209,21 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height) void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph) { + if (m_broken_fbo_readback) { + QImageTextureGlyphCache::fillTexture(c, glyph); + + glBindTexture(GL_TEXTURE_2D, m_texture); + const QImage &texture = image(); + const uchar *bits = texture.constBits(); + bits += c.y * texture.bytesPerLine() + c.x; + for (int i=0; i<c.h; ++i) { + glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y + i, c.w, 1, GL_ALPHA, GL_UNSIGNED_BYTE, bits); + bits += texture.bytesPerLine(); + } + + return; + } + QImage mask = textureMapForGlyph(glyph); const int maskWidth = mask.width(); const int maskHeight = mask.height(); @@ -235,17 +272,6 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph) } } -int QGLTextureGlyphCache::glyphMargin() const -{ -#if defined(Q_WS_MAC) - return 2; -#elif defined (Q_WS_X11) - return 0; -#else - return m_type == QFontEngineGlyphCache::Raster_RGBMask ? 2 : 0; -#endif -} - int QGLTextureGlyphCache::glyphPadding() const { return 1; diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h index 75c2bb1..efb7435 100644 --- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h +++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE class QGL2PaintEngineExPrivate; -class Q_OPENGL_EXPORT QGLTextureGlyphCache : public QObject, public QTextureGlyphCache +class Q_OPENGL_EXPORT QGLTextureGlyphCache : public QObject, public QImageTextureGlyphCache { Q_OBJECT public: @@ -72,7 +72,6 @@ public: virtual void createTextureData(int width, int height); virtual void resizeTextureData(int width, int height); virtual void fillTexture(const Coord &c, glyph_t glyph); - virtual int glyphMargin() const; virtual int glyphPadding() const; inline GLuint texture() const { return m_texture; } @@ -116,6 +115,8 @@ private: int m_height; QGLShaderProgram *m_program; + + bool m_broken_fbo_readback; }; QT_END_NAMESPACE diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 52efea5..cfacf26 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1259,11 +1259,24 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co versionFlags |= QGLFormat::OpenGL_Version_3_2; case '1': versionFlags |= QGLFormat::OpenGL_Version_3_1; + case '0': + break; default: + versionFlags |= QGLFormat::OpenGL_Version_3_1 | + QGLFormat::OpenGL_Version_3_2; break; } } else { - qWarning("Unrecognised OpenGL version"); + versionFlags |= QGLFormat::OpenGL_Version_1_1 | + QGLFormat::OpenGL_Version_1_2 | + QGLFormat::OpenGL_Version_1_3 | + QGLFormat::OpenGL_Version_1_4 | + QGLFormat::OpenGL_Version_1_5 | + QGLFormat::OpenGL_Version_2_0 | + QGLFormat::OpenGL_Version_2_1 | + QGLFormat::OpenGL_Version_3_0 | + QGLFormat::OpenGL_Version_3_1 | + QGLFormat::OpenGL_Version_3_2; } } return versionFlags; @@ -1637,7 +1650,14 @@ static void convertFromGLImage(QImage &img, int w, int h, bool alpha_format, boo uint *q = (uint*)img.scanLine(y); for (int x=0; x < w; ++x) { const uint pixel = *q; - *q = ((pixel << 16) & 0xff0000) | ((pixel >> 16) & 0xff) | (pixel & 0xff00ff00); + if (alpha_format && include_alpha) { + *q = ((pixel << 16) & 0xff0000) | ((pixel >> 16) & 0xff) + | (pixel & 0xff00ff00); + } else { + *q = 0xff000000 | ((pixel << 16) & 0xff0000) + | ((pixel >> 16) & 0xff) | (pixel & 0x00ff00); + } + q++; } } @@ -1648,7 +1668,8 @@ static void convertFromGLImage(QImage &img, int w, int h, bool alpha_format, boo QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha) { - QImage img(size, alpha_format ? QImage::Format_ARGB32 : QImage::Format_RGB32); + QImage img(size, (alpha_format && include_alpha) ? QImage::Format_ARGB32 + : QImage::Format_RGB32); int w = size.width(); int h = size.height(); glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, img.bits()); @@ -5161,11 +5182,17 @@ Q_OPENGL_EXPORT void qt_set_gl_library_name(const QString& name) Q_OPENGL_EXPORT const QString qt_gl_library_name() { if (qt_gl_lib_name()->isNull()) { -#if defined(Q_WS_X11) || defined(Q_WS_QWS) - return QLatin1String("GL"); -#else // Q_WS_MAC +#ifdef Q_WS_MAC return QLatin1String("/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib"); -#endif +#else +# if defined(QT_OPENGL_ES_1) + return QLatin1String("GLES_CM"); +# elif defined(QT_OPENGL_ES_2) + return QLatin1String("GLESv2"); +# else + return QLatin1String("GL"); +# endif +#endif // defined Q_WS_MAC } return *qt_gl_lib_name(); } diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index 5ae69cd..f602c73 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -182,7 +182,6 @@ public: qreal penScale; // Pen scaling factor from "transform". QTransform pathTransform; // Calculated VG path transformation. - QTransform glyphTransform; // Calculated VG glyph transformation. QTransform imageTransform; // Calculated VG image transformation. bool pathTransformSet; // True if path transform set in the VG context. @@ -507,24 +506,15 @@ void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev) // | 1 0 0 | // | 0 -1 devh | // | 0 0 1 | - // The glyph transform uses a slightly different transformation: - // | 1 0 0 | | 1 0 0.5 | | 1 0 0.5 | - // | 0 -1 devh - 1 | * | 0 1 -0.5 | = | 0 -1 (devh - 0.5) | - // | 0 0 1 | | 0 0 1 | | 0 0 1 | // The full VG transform is effectively: // 1. Apply the user's transformation matrix. - // 2. Translate glyphs by an extra (0.5, -0.5). - // 3. Flip the co-ordinate system upside down. + // 2. Flip the co-ordinate system upside down. QTransform viewport(1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, devh, 1.0f); - QTransform gviewport(1.0f, 0.0f, 0.0f, - 0.0f, -1.0f, 0.0f, - 0.5f, devh - 0.5f, 1.0f); // Compute the path transform and determine if it is projective. pathTransform = transform * viewport; - glyphTransform = transform * gviewport; bool projective = (pathTransform.m13() != 0.0f || pathTransform.m23() != 0.0f || pathTransform.m33() != 1.0f); @@ -533,7 +523,6 @@ void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev) // so we will have to convert the co-ordinates ourselves. // Change the matrix to just the viewport transformation. pathTransform = viewport; - glyphTransform = gviewport; simpleTransform = false; } else { simpleTransform = true; @@ -3242,10 +3231,10 @@ void QVGFontGlyphCache::cacheGlyphs(QVGPaintEnginePrivate *d, vgImageSubData(vgImage, img.constBits(), img.bytesPerLine(), VG_sARGB_8888_PRE, 0, 0, img.width(), img.height()); } } - origin[0] = -metrics.x.toReal() + 0.5f; - origin[1] = -metrics.y.toReal() + 0.5f; - escapement[0] = metrics.xoff.toReal(); - escapement[1] = metrics.yoff.toReal(); + origin[0] = -metrics.x.toReal(); + origin[1] = -metrics.y.toReal(); + escapement[0] = 0; + escapement[1] = 0; vgSetGlyphToImage(font, glyph, vgImage, origin, escapement); vgDestroyImage(vgImage); // Reduce reference count. #else @@ -3261,8 +3250,8 @@ void QVGFontGlyphCache::cacheGlyphs(QVGPaintEnginePrivate *d, } origin[0] = 0; origin[1] = 0; - escapement[0] = metrics.xoff.toReal(); - escapement[1] = metrics.yoff.toReal(); + escapement[0] = 0; + escapement[1] = 0; vgSetGlyphToPath(font, glyph, vgPath, VG_FALSE, origin, escapement); vgDestroyPath(vgPath); // Reduce reference count. #endif // !defined(QVG_NO_IMAGE_GLYPHS) @@ -3287,12 +3276,10 @@ void QVGPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem) // Get the glyphs and positions associated with the text item. QVarLengthArray<QFixedPoint> positions; QVarLengthArray<glyph_t> glyphs; - QTransform matrix = d->transform; - matrix.translate(p.x(), p.y()); - ti.fontEngine->getGlyphPositions - (ti.glyphs, matrix, ti.flags, glyphs, positions); + QTransform matrix; + ti.fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions); - if (!drawCachedGlyphs(glyphs.size(), glyphs.data(), ti.font(), ti.fontEngine, p)) + if (!drawCachedGlyphs(glyphs.size(), glyphs.data(), ti.font(), ti.fontEngine, p, positions.data())) QPaintEngineEx::drawTextItem(p, textItem); #else // OpenGL 1.0 does not have support for VGFont and glyphs, @@ -3304,11 +3291,12 @@ void QVGPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem) void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem) { drawCachedGlyphs(textItem->numGlyphs, textItem->glyphs, textItem->font, textItem->fontEngine, - QPointF(0, 0)); + QPointF(0, 0), textItem->glyphPositions); } bool QVGPaintEngine::drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, const QFont &font, - QFontEngine *fontEngine, const QPointF &p) + QFontEngine *fontEngine, const QPointF &p, + const QFixedPoint *positions) { #if !defined(QVG_NO_DRAW_GLYPHS) Q_D(QVGPaintEngine); @@ -3334,7 +3322,7 @@ void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem) } // Set the transformation to use for drawing the current glyphs. - QTransform glyphTransform(d->glyphTransform); + QTransform glyphTransform(d->pathTransform); glyphTransform.translate(p.x(), p.y()); #if defined(QVG_NO_IMAGE_GLYPHS) glyphTransform.scale(glyphCache->scaleX, glyphCache->scaleY); @@ -3344,10 +3332,18 @@ void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem) // Add the glyphs from the text item into the glyph cache. glyphCache->cacheGlyphs(d, fontEngine, glyphs, numGlyphs); + // Create the array of adjustments between glyphs + QVarLengthArray<VGfloat> adjustments_x(numGlyphs); + QVarLengthArray<VGfloat> adjustments_y(numGlyphs); + for (int i = 1; i < numGlyphs; ++i) { + adjustments_x[i-1] = (positions[i].x - positions[i-1].x).toReal(); + adjustments_y[i-1] = (positions[i].y - positions[i-1].y).toReal(); + } + // Set the glyph drawing origin. VGfloat origin[2]; - origin[0] = 0; - origin[1] = 0; + origin[0] = positions[0].x.toReal(); + origin[1] = positions[0].y.toReal(); vgSetfv(VG_GLYPH_ORIGIN, 2, origin); // Fast anti-aliasing for paths, better for images. @@ -3362,8 +3358,7 @@ void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem) // the Qt pen, not the Qt brush. d->ensureBrush(state()->pen.brush()); vgDrawGlyphs(glyphCache->font, numGlyphs, (VGuint*)glyphs, - NULL, NULL, VG_FILL_PATH, VG_TRUE); - + adjustments_x.data(), adjustments_y.data(), VG_FILL_PATH, VG_TRUE); return true; #else Q_UNUSED(numGlyphs); @@ -3371,6 +3366,7 @@ void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem) Q_UNUSED(font); Q_UNUSED(fontEngine); Q_UNUSED(p); + Q_UNUSED(positions); return false; #endif } diff --git a/src/openvg/qpaintengine_vg_p.h b/src/openvg/qpaintengine_vg_p.h index 1e7e26c..33c49ba 100644 --- a/src/openvg/qpaintengine_vg_p.h +++ b/src/openvg/qpaintengine_vg_p.h @@ -58,6 +58,7 @@ QT_BEGIN_NAMESPACE +class QFixedPoint; class QVGPaintEnginePrivate; class QPixmapData; class QVGEGLWindowSurfacePrivate; @@ -143,7 +144,8 @@ public: void drawTextItem(const QPointF &p, const QTextItem &textItem); void drawStaticTextItem(QStaticTextItem *staticTextItem); bool drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, const QFont &font, - QFontEngine *fontEngine, const QPointF &p); + QFontEngine *fontEngine, const QPointF &p, + const QFixedPoint *positions); void setState(QPainterState *s); QVGPainterState *state() { return static_cast<QVGPainterState *>(QPaintEngineEx::state()); } diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp index daa827e..f39d538 100644 --- a/src/plugins/accessible/widgets/simplewidgets.cpp +++ b/src/plugins/accessible/widgets/simplewidgets.cpp @@ -605,7 +605,11 @@ int QAccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterfa /*! \reimp */ QString QAccessibleDisplay::imageDescription() { +#ifndef QT_NO_TOOLTIP return widget()->toolTip(); +#else + return QString::null; +#endif } /*! \reimp */ diff --git a/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp b/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp index 964fa53..9de2a34 100644 --- a/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp +++ b/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp @@ -259,7 +259,7 @@ int PvrEglScreen::transformation() const if (parent->classId() != QScreen::TransformedClass) return 0; return 90 * static_cast<const QTransformedScreen *>(parent) - ->transformation(); + ->transformOrientation(); } #else diff --git a/src/plugins/imageformats/jpeg/qjpeghandler.cpp b/src/plugins/imageformats/jpeg/qjpeghandler.cpp index 1c6a289..72dde15 100644 --- a/src/plugins/imageformats/jpeg/qjpeghandler.cpp +++ b/src/plugins/imageformats/jpeg/qjpeghandler.cpp @@ -121,8 +121,8 @@ static boolean qt_fill_input_buffer(j_decompress_ptr cinfo) { my_jpeg_source_mgr* src = (my_jpeg_source_mgr*)cinfo->src; if (src->memDevice) { - src->next_input_byte = (const JOCTET *)src->memDevice->data().constData(); - src->bytes_in_buffer = (size_t)src->memDevice->data().size(); + src->next_input_byte = (const JOCTET *)(src->memDevice->data().constData() + src->memDevice->pos()); + src->bytes_in_buffer = (size_t)(src->memDevice->data().size() - src->memDevice->pos()); return true; } src->next_input_byte = src->buffer; @@ -169,7 +169,13 @@ static void qt_term_source(j_decompress_ptr cinfo) { my_jpeg_source_mgr* src = (my_jpeg_source_mgr*)cinfo->src; if (!src->device->isSequential()) - src->device->seek(src->device->pos() - src->bytes_in_buffer); + { + // read() isn't used for memDevice, so seek past everything that was used + if (src->memDevice) + src->device->seek(src->device->pos() + (src->memDevice->data().size() - src->memDevice->pos() - src->bytes_in_buffer)); + else + src->device->seek(src->device->pos() - src->bytes_in_buffer); + } } #if defined(Q_C_CALLBACKS) diff --git a/src/plugins/imageformats/svg/qsvgiohandler.cpp b/src/plugins/imageformats/svg/qsvgiohandler.cpp index 8155569..7b8463d 100644 --- a/src/plugins/imageformats/svg/qsvgiohandler.cpp +++ b/src/plugins/imageformats/svg/qsvgiohandler.cpp @@ -82,15 +82,19 @@ bool QSvgIOHandlerPrivate::load(QIODevice *device) if (q->format().isEmpty()) q->canRead(); + // # The SVG renderer doesn't handle trailing, unrelated data, so we must + // assume that all available data in the device is to be read. bool res = false; QBuffer *buf = qobject_cast<QBuffer *>(device); if (buf) { - res = r.load(buf->data()); + const QByteArray &ba = buf->data(); + res = r.load(QByteArray::fromRawData(ba.constData() + buf->pos(), ba.size() - buf->pos())); + buf->seek(ba.size()); } else if (q->format() == "svgz") { - res = r.load(device->readAll()); // ### can't stream svgz + res = r.load(device->readAll()); } else { xmlReader.setDevice(device); - res = r.load(&xmlReader); //### doesn't leave pos() correctly + res = r.load(&xmlReader); } if (res) { diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.cpp index 150860f..23675fb 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.cpp +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.cpp @@ -118,7 +118,7 @@ bool DirectShowTimedSample::isReady(IReferenceClock *clock) const } DirectShowSampleScheduler::DirectShowSampleScheduler(IUnknown *pin, QObject *parent) - : QWinEventNotifier(parent) + : QObject(parent) , m_pin(pin) , m_clock(0) , m_allocator(0) @@ -131,13 +131,15 @@ DirectShowSampleScheduler::DirectShowSampleScheduler(IUnknown *pin, QObject *par { m_semaphore.release(m_maximumSamples); - setHandle(m_timeoutEvent); - setEnabled(true); + m_eventNotifier.setHandle(m_timeoutEvent); + m_eventNotifier.setEnabled(true); + + connect(&m_eventNotifier, SIGNAL(activated(HANDLE)), this, SIGNAL(sampleReady())); } DirectShowSampleScheduler::~DirectShowSampleScheduler() { - setEnabled(false); + m_eventNotifier.setEnabled(false); ::CloseHandle(m_timeoutEvent); @@ -398,17 +400,4 @@ bool DirectShowSampleScheduler::scheduleEndOfStream() } } -bool DirectShowSampleScheduler::event(QEvent *event) -{ - if (event->type() == QEvent::WinEventAct) { - QObject::event(event); - - emit sampleReady(); - - return true; - } else { - return QWinEventNotifier::event(event); - } -} - QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.h index 007fa99..21823c3 100644 --- a/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.h +++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE class DirectShowTimedSample; -class DirectShowSampleScheduler : public QWinEventNotifier, public IMemInputPin +class DirectShowSampleScheduler : public QObject, public IMemInputPin { Q_OBJECT public: @@ -101,8 +101,6 @@ public: IMediaSample *takeSample(bool *eos); - bool event(QEvent *event); - Q_SIGNALS: void sampleReady(); @@ -118,6 +116,7 @@ private: HANDLE m_timeoutEvent; QSemaphore m_semaphore; QMutex m_mutex; + QWinEventNotifier m_eventNotifier; }; QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/gstreamer/gstreamer.pro b/src/plugins/mediaservices/gstreamer/gstreamer.pro index 0273139..6e05120 100644 --- a/src/plugins/mediaservices/gstreamer/gstreamer.pro +++ b/src/plugins/mediaservices/gstreamer/gstreamer.pro @@ -9,39 +9,48 @@ unix:contains(QT_CONFIG, alsa) { } QMAKE_CXXFLAGS += $$QT_CFLAGS_GSTREAMER -LIBS += -lXv $$QT_LIBS_GSTREAMER -lgstinterfaces-0.10 -lgstvideo-0.10 -lgstbase-0.10 -lgstaudio-0.10 +LIBS += $$QT_LIBS_GSTREAMER -lgstinterfaces-0.10 -lgstvideo-0.10 -lgstbase-0.10 -lgstaudio-0.10 # Input HEADERS += \ qgstreamermessage.h \ qgstreamerbushelper.h \ qgstreamervideooutputcontrol.h \ - qgstreamervideorendererinterface.h \ - qgstreamervideowidget.h \ + qgstreamervideorendererinterface.h \ qgstreamerserviceplugin.h \ qgstreamervideoinputdevicecontrol.h \ - qgstreamervideooverlay.h \ qgstreamervideorenderer.h \ qgstvideobuffer.h \ - qvideosurfacegstsink.h \ - qx11videosurface.h \ - qgstxvimagebuffer.h + qvideosurfacegstsink.h SOURCES += \ qgstreamermessage.cpp \ qgstreamerbushelper.cpp \ qgstreamervideooutputcontrol.cpp \ - qgstreamervideorendererinterface.cpp \ - qgstreamervideowidget.cpp \ + qgstreamervideorendererinterface.cpp \ qgstreamerserviceplugin.cpp \ qgstreamervideoinputdevicecontrol.cpp \ - qgstreamervideooverlay.cpp \ qgstreamervideorenderer.cpp \ qgstvideobuffer.cpp \ - qvideosurfacegstsink.cpp \ - qx11videosurface.cpp \ - qgstxvimagebuffer.cpp + qvideosurfacegstsink.cpp + + +!win32:!embedded:!mac:!symbian { + LIBS += -lXv + + HEADERS += \ + qgstreamervideooverlay.h \ + qgstreamervideowidget.h \ + qx11videosurface.h \ + qgstxvimagebuffer.h + + SOURCES += \ + qgstreamervideooverlay.cpp \ + qgstreamervideowidget.cpp \ + qx11videosurface.cpp \ + qgstxvimagebuffer.cpp +} include(mediaplayer/mediaplayer.pri) diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.cpp index d5d7bd0..3228722 100644 --- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.cpp +++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.cpp @@ -63,7 +63,10 @@ QT_BEGIN_NAMESPACE QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent): - QMediaService(parent) + QMediaService(parent), + m_videoRenderer(0), + m_videoWindow(0), + m_videoWidget(0) { m_session = new QGstreamerPlayerSession(this); m_control = new QGstreamerPlayerControl(m_session, this); @@ -74,13 +77,22 @@ QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent): connect(m_videoOutput, SIGNAL(outputChanged(QVideoOutputControl::Output)), this, SLOT(videoOutputChanged(QVideoOutputControl::Output))); m_videoRenderer = new QGstreamerVideoRenderer(this); + +#ifdef Q_WS_X11 m_videoWindow = new QGstreamerVideoOverlay(this); m_videoWidget = new QGstreamerVideoWidgetControl(this); +#endif + + QList<QVideoOutputControl::Output> outputs; + + if (m_videoRenderer) + outputs << QVideoOutputControl::RendererOutput; + if (m_videoWidget) + outputs << QVideoOutputControl::WidgetOutput; + if (m_videoWindow) + outputs << QVideoOutputControl::WindowOutput; - m_videoOutput->setAvailableOutputs(QList<QVideoOutputControl::Output>() - << QVideoOutputControl::RendererOutput - << QVideoOutputControl::WindowOutput - << QVideoOutputControl::WidgetOutput); + m_videoOutput->setAvailableOutputs(outputs); } QGstreamerPlayerService::~QGstreamerPlayerService() diff --git a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp index 76d87ce..596e39d 100644 --- a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp +++ b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp @@ -44,12 +44,16 @@ #include <QtCore/qdebug.h> #include <QMap> #include <QThread> + +#include "qgstvideobuffer.h" + +#ifdef Q_WS_X11 #include <QtGui/qx11info_x11.h> +#include "qgstxvimagebuffer.h" +#endif #include "qvideosurfacegstsink.h" -#include "qgstvideobuffer.h" -#include "qgstxvimagebuffer.h" @@ -131,11 +135,13 @@ GstFlowReturn QVideoSurfaceGstDelegate::render(GstBuffer *buffer) QGstVideoBuffer *videoBuffer = 0; +#ifdef Q_WS_X11 if (G_TYPE_CHECK_INSTANCE_TYPE(buffer, QGstXvImageBuffer::get_type())) { QGstXvImageBuffer *xvBuffer = reinterpret_cast<QGstXvImageBuffer *>(buffer); QVariant handle = QVariant::fromValue(xvBuffer->xvImage); videoBuffer = new QGstVideoBuffer(buffer, m_bytesPerLine, XvHandleType, handle); } else +#endif videoBuffer = new QGstVideoBuffer(buffer, m_bytesPerLine); m_frame = QVideoFrame( @@ -387,7 +393,9 @@ void QVideoSurfaceGstSink::instance_init(GTypeInstance *instance, gpointer g_cla Q_UNUSED(g_class); sink->delegate = 0; +#ifdef Q_WS_X11 sink->pool = new QGstXvImageBufferPool(); +#endif sink->lastRequestedCaps = 0; sink->lastBufferCaps = 0; sink->lastSurfaceFormat = new QVideoSurfaceFormat; @@ -396,8 +404,11 @@ void QVideoSurfaceGstSink::instance_init(GTypeInstance *instance, gpointer g_cla void QVideoSurfaceGstSink::finalize(GObject *object) { VO_SINK(object); +#ifdef Q_WS_X11 delete sink->pool; sink->pool = 0; +#endif + delete sink->lastSurfaceFormat; sink->lastSurfaceFormat = 0; @@ -588,6 +599,8 @@ GstFlowReturn QVideoSurfaceGstSink::buffer_alloc( *buffer = 0; +#ifdef Q_WS_X11 + if (sink->lastRequestedCaps && gst_caps_is_equal(sink->lastRequestedCaps, caps)) { //qDebug() << "reusing last caps"; *buffer = GST_BUFFER(sink->pool->takeBuffer(*sink->lastSurfaceFormat, sink->lastBufferCaps)); @@ -649,6 +662,7 @@ GstFlowReturn QVideoSurfaceGstSink::buffer_alloc( *buffer = GST_BUFFER(sink->pool->takeBuffer(surfaceFormat, intersection)); +#endif return GST_FLOW_OK; } diff --git a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.h b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.h index f59a43c..75fa854 100644 --- a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.h +++ b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.h @@ -59,8 +59,10 @@ QT_BEGIN_NAMESPACE class QAbstractVideoSurface; +#ifdef Q_WS_X11 class QGstXvImageBuffer; class QGstXvImageBufferPool; +#endif class QVideoSurfaceGstDelegate : public QObject @@ -137,7 +139,11 @@ private: private: QVideoSurfaceGstDelegate *delegate; + +#ifdef Q_WS_X11 QGstXvImageBufferPool *pool; +#endif + GstCaps *lastRequestedCaps; GstCaps *lastBufferCaps; QVideoSurfaceFormat *lastSurfaceFormat; diff --git a/src/plugins/mediaservices/mediaservices.pro b/src/plugins/mediaservices/mediaservices.pro index 6a00a14..27f05bc 100644 --- a/src/plugins/mediaservices/mediaservices.pro +++ b/src/plugins/mediaservices/mediaservices.pro @@ -5,7 +5,9 @@ contains(QT_CONFIG, media-backend) { mac: SUBDIRS += qt7 - unix:!mac:!symbian:contains(QT_CONFIG, xvideo):contains(QT_CONFIG, gstreamer) { + unix:!mac:!symbian:contains(QT_CONFIG, gstreamer) { SUBDIRS += gstreamer } + + symbian:SUBDIRS += symbian } diff --git a/src/plugins/mediaservices/symbian/mediaplayer/mediaplayer.pri b/src/plugins/mediaservices/symbian/mediaplayer/mediaplayer.pri new file mode 100644 index 0000000..205e014 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/mediaplayer.pri @@ -0,0 +1,63 @@ +INCLUDEPATH += $$PWD +LIBS += -lmediaclientvideo \ + -lmediaclientaudio \ + -lws32 \ + -lfbscli \ + -lcone \ + -lmmfcontrollerframework \ + -lefsrv \ + -lbitgdi \ + -lapgrfx \ + -lapmime + + +# We are building Symbian backend with media player support +DEFINES += QMEDIA_MMF_PLAYER + + +HEADERS += \ + $$PWD/s60mediaplayercontrol.h \ + $$PWD/s60mediaplayerservice.h \ + $$PWD/s60mediaplayersession.h \ + $$PWD/s60videoplayersession.h \ + $$PWD/s60mediametadataprovider.h \ + $$PWD/s60videosurface.h \ + $$PWD/s60videooverlay.h \ + $$PWD/s60videorenderer.h \ + $$PWD/s60mediarecognizer.h \ + $$PWD/s60audioplayersession.h \ + $$PWD/ms60mediaplayerresolver.h \ + $$PWD/s60videowidget.h \ + $$PWD/s60mediaplayeraudioendpointselector.h + +SOURCES += \ + $$PWD/s60mediaplayercontrol.cpp \ + $$PWD/s60mediaplayerservice.cpp \ + $$PWD/s60mediaplayersession.cpp \ + $$PWD/s60videoplayersession.cpp \ + $$PWD/s60mediametadataprovider.cpp \ + $$PWD/s60videosurface.cpp \ + $$PWD/s60videooverlay.cpp \ + $$PWD/s60videorenderer.cpp \ + $$PWD/s60mediarecognizer.cpp \ + $$PWD/s60audioplayersession.cpp \ + $$PWD/s60videowidget.cpp \ + $$PWD/s60mediaplayeraudioendpointselector.cpp + +contains(S60_VERSION, 3.1) { + + #3.1 doesn't provide audio routing in videoplayer + DEFINES += HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER + + !exists($${EPOCROOT}epoc32\release\winscw\udeb\audiooutputrouting.lib) { + MMP_RULES += "$${LITERAL_HASH}ifdef WINSCW" \ + "MACRO HAS_NO_AUDIOROUTING" \ + "$${LITERAL_HASH}else" \ + "LIBRARY audiooutputrouting.lib" \ + "$${LITERAL_HASH}endif" + } + +} else { + LIBS += -laudiooutputrouting +} + diff --git a/src/plugins/mediaservices/symbian/mediaplayer/ms60mediaplayerresolver.h b/src/plugins/mediaservices/symbian/mediaplayer/ms60mediaplayerresolver.h new file mode 100644 index 0000000..b655a83 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/ms60mediaplayerresolver.h @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef MS60MEDIAPLAYERRESOLVER_H +#define MS60MEDIAPLAYERRESOLVER_H + +QT_BEGIN_NAMESPACE + +class S60MediaPlayerSession; + +class MS60MediaPlayerResolver +{ + public: + virtual S60MediaPlayerSession* PlayerSession() = 0; + virtual S60MediaPlayerSession* VideoPlayerSession() = 0; + virtual S60MediaPlayerSession* AudioPlayerSession() = 0; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.cpp new file mode 100644 index 0000000..1bebe0a --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.cpp @@ -0,0 +1,275 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "s60audioplayersession.h" +#include <QtCore/qdebug.h> +#include <QtCore/qvariant.h> + +#include <AudioOutput.h> +#include <MAudioOutputObserver.h> + +QT_BEGIN_NAMESPACE + +S60AudioPlayerSession::S60AudioPlayerSession(QObject *parent) + : S60MediaPlayerSession(parent) + , m_player(0) + , m_audioEndpoint("Default") +{ +#ifndef HAS_NO_AUDIOROUTING + m_audioOutput = 0; +#endif + QT_TRAP_THROWING(m_player = CAudioPlayer::NewL(*this, 0, EMdaPriorityPreferenceNone)); + m_player->RegisterForAudioLoadingNotification(*this); +} + +S60AudioPlayerSession::~S60AudioPlayerSession() +{ +#if !defined(HAS_NO_AUDIOROUTING) + if (m_audioOutput) + m_audioOutput->UnregisterObserver(*this); + delete m_audioOutput; +#endif + m_player->Close(); + delete m_player; +} + +void S60AudioPlayerSession::doLoadL(const TDesC &path) +{ +#ifndef HAS_NO_AUDIOROUTING + // m_audioOutput needs to be reinitialized after MapcInitComplete + if (m_audioOutput) + m_audioOutput->UnregisterObserver(*this); + delete m_audioOutput; + m_audioOutput = NULL; +#endif + + m_player->OpenFileL(path); +} + +qint64 S60AudioPlayerSession::doGetDurationL() const +{ + return m_player->Duration().Int64() / qint64(1000); +} + +qint64 S60AudioPlayerSession::doGetPositionL() const +{ + TTimeIntervalMicroSeconds ms = 0; + m_player->GetPosition(ms); + return ms.Int64() / qint64(1000); +} + +bool S60AudioPlayerSession::isVideoAvailable() const +{ + return false; +} +bool S60AudioPlayerSession::isAudioAvailable() const +{ + return true; // this is a bit happy scenario, but we do emit error that we can't play +} + +void S60AudioPlayerSession::MaloLoadingStarted() +{ + buffering(); +} + +void S60AudioPlayerSession::MaloLoadingComplete() +{ + buffered(); +} + +void S60AudioPlayerSession::doPlay() +{ +// For some reason loading progress callbalck are not called on emulator +#ifdef __WINSCW__ + buffering(); +#endif + m_player->Play(); +#ifdef __WINSCW__ + buffered(); +#endif + +} + +void S60AudioPlayerSession::doPauseL() +{ + m_player->Pause(); +} + +void S60AudioPlayerSession::doStop() +{ + m_player->Stop(); +} + +void S60AudioPlayerSession::doSetVolumeL(int volume) +{ + m_player->SetVolume((volume / 100.0) * m_player->MaxVolume()); +} + +void S60AudioPlayerSession::doSetPositionL(qint64 microSeconds) +{ + m_player->SetPosition(TTimeIntervalMicroSeconds(microSeconds)); +} + +void S60AudioPlayerSession::updateMetaDataEntriesL() +{ + metaDataEntries().clear(); + int numberOfMetaDataEntries = 0; + + m_player->GetNumberOfMetaDataEntries(numberOfMetaDataEntries); + + for (int i = 0; i < numberOfMetaDataEntries; i++) { + CMMFMetaDataEntry *entry = NULL; + entry = m_player->GetMetaDataEntryL(i); + metaDataEntries().insert(QString::fromUtf16(entry->Name().Ptr(), entry->Name().Length()), QString::fromUtf16(entry->Value().Ptr(), entry->Value().Length())); + delete entry; + } + emit metaDataChanged(); +} + +int S60AudioPlayerSession::doGetBufferStatusL() const +{ + int progress = 0; + m_player->GetAudioLoadingProgressL(progress); + return progress; +} + +void S60AudioPlayerSession::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration) +{ + Q_UNUSED(aDuration); + setError(aError); +#ifndef HAS_NO_AUDIOROUTING + TRAPD(err, + m_audioOutput = CAudioOutput::NewL(*m_player); + m_audioOutput->RegisterObserverL(*this); + ); + setActiveEndpoint(m_audioEndpoint); + setError(err); +#endif + loaded(); +} + +void S60AudioPlayerSession::MapcPlayComplete(TInt aError) +{ + setError(aError); + endOfMedia(); +} + +void S60AudioPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint) +{ + m_audioEndpoint = audioEndpoint; +} + +QString S60AudioPlayerSession::activeEndpoint() const +{ + QString outputName = QString("Default"); +#if !defined(HAS_NO_AUDIOROUTING) + if (m_audioOutput) { + CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput(); + outputName = qStringFromTAudioOutputPreference(output); + } +#endif + return outputName; +} + +QString S60AudioPlayerSession::defaultEndpoint() const +{ + QString outputName = QString("Default"); +#if !defined(HAS_NO_AUDIOROUTING) + if (m_audioOutput) { + CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput(); + outputName = qStringFromTAudioOutputPreference(output); + } +#endif + return outputName; +} + +void S60AudioPlayerSession::setActiveEndpoint(const QString& name) +{ +#if !defined(HAS_NO_AUDIOROUTING) + CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference; + + if (name == QString("Default")) + output = CAudioOutput::ENoPreference; + else if (name == QString("All")) + output = CAudioOutput::EAll; + else if (name == QString("None")) + output = CAudioOutput::ENoOutput; + else if (name == QString("Earphone")) + output = CAudioOutput::EPrivate; + else if (name == QString("Speaker")) + output = CAudioOutput::EPublic; + if (m_audioOutput) { + TRAPD(err, m_audioOutput->SetAudioOutputL(output)); + setError(err); + + if (m_audioEndpoint != name) { + m_audioEndpoint = name; + emit activeEndpointChanged(name); + } + } +#endif +} + +#if !defined(HAS_NO_AUDIOROUTING) +void S60AudioPlayerSession::DefaultAudioOutputChanged(CAudioOutput& aAudioOutput, + CAudioOutput::TAudioOutputPreference aNewDefault) +{ + // Emit already implemented in setActiveEndpoint function + Q_UNUSED(aAudioOutput) + Q_UNUSED(aNewDefault) +} + +QString S60AudioPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const +{ + if (output == CAudioOutput::ENoPreference) + return QString("Default"); + else if (output == CAudioOutput::EAll) + return QString("All"); + else if (output == CAudioOutput::ENoOutput) + return QString("None"); + else if (output == CAudioOutput::EPrivate) + return QString("Earphone"); + else if (output == CAudioOutput::EPublic) + return QString("Speaker"); + return QString("Default"); +} +#endif +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.h b/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.h new file mode 100644 index 0000000..d7259b9 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.h @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60AUDIOPLAYERSESSION_H +#define S60AUDIOPLAYERSESSION_H + +#include "s60mediaplayersession.h" + +#include <mdaaudiosampleplayer.h> +typedef CMdaAudioPlayerUtility CAudioPlayer; +typedef MMdaAudioPlayerCallback MAudioPlayerObserver; + +#ifndef HAS_NO_AUDIOROUTING +#include <AudioOutput.h> +#include <MAudioOutputObserver.h> +#endif + +QT_BEGIN_NAMESPACE + +class S60AudioPlayerSession : public S60MediaPlayerSession + , public MAudioPlayerObserver + , public MAudioLoadingObserver +#ifndef HAS_NO_AUDIOROUTING + , public MAudioOutputObserver +#endif +{ + Q_OBJECT + +public: + S60AudioPlayerSession(QObject *parent); + ~S60AudioPlayerSession(); + + //From S60MediaPlayerSession + bool isVideoAvailable() const; + bool isAudioAvailable() const; + + // From MAudioLoadingObserver + void MaloLoadingStarted(); + void MaloLoadingComplete(); + +#ifndef HAS_NO_AUDIOROUTING + // From MAudioOutputObserver + void DefaultAudioOutputChanged( CAudioOutput& aAudioOutput, + CAudioOutput::TAudioOutputPreference aNewDefault ); +#endif +public: + // From S60MediaPlayerAudioEndpointSelector + QString activeEndpoint() const; + QString defaultEndpoint() const; +public Q_SLOTS: + void setActiveEndpoint(const QString& name); +Q_SIGNALS: + void activeEndpointChanged(const QString & name); + +protected: + //From S60MediaPlayerSession + void doLoadL(const TDesC &path); + void doLoadUrlL(const TDesC &path){Q_UNUSED(path)/*empty implementation*/} + void doPlay(); + void doStop(); + void doPauseL(); + void doSetVolumeL(int volume); + qint64 doGetPositionL() const; + void doSetPositionL(qint64 microSeconds); + void updateMetaDataEntriesL(); + int doGetBufferStatusL() const; + qint64 doGetDurationL() const; + void doSetAudioEndpoint(const QString& audioEndpoint); + +private: + void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration); + void MapcPlayComplete(TInt aError); +#ifndef HAS_NO_AUDIOROUTING + QString qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const; +#endif +private: + CAudioPlayer *m_player; +#ifndef HAS_NO_AUDIOROUTING + CAudioOutput *m_audioOutput; +#endif + QString m_audioEndpoint; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.cpp new file mode 100644 index 0000000..e80c487 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.cpp @@ -0,0 +1,185 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "s60mediametadataprovider.h" +#include "s60mediaplayersession.h" +#include <QtCore/qdebug.h> + +QT_BEGIN_NAMESPACE + +S60MediaMetaDataProvider::S60MediaMetaDataProvider(MS60MediaPlayerResolver& mediaPlayerResolver, QObject *parent) + : QMetaDataControl(parent) + , m_mediaPlayerResolver(mediaPlayerResolver) + , m_session(NULL) +{ +} + +S60MediaMetaDataProvider::~S60MediaMetaDataProvider() +{ +} + +bool S60MediaMetaDataProvider::isMetaDataAvailable() const +{ + m_session = m_mediaPlayerResolver.PlayerSession(); + if (m_session) + return m_session->isMetadataAvailable(); + return false; +} + +bool S60MediaMetaDataProvider::isWritable() const +{ + return false; +} + +QVariant S60MediaMetaDataProvider::metaData(QtMediaServices::MetaData key) const +{ + m_session = m_mediaPlayerResolver.PlayerSession(); + if (m_session && m_session->isMetadataAvailable()) + return m_session->metaData(metaDataKeyAsString(key)); + return QVariant(); +} + +void S60MediaMetaDataProvider::setMetaData(QtMediaServices::MetaData key, QVariant const &value) +{ + Q_UNUSED(key); + Q_UNUSED(value); +} +QList<QtMediaServices::MetaData> S60MediaMetaDataProvider::availableMetaData() const +{ + m_session = m_mediaPlayerResolver.PlayerSession(); + QList<QtMediaServices::MetaData> metaDataTags; + if (m_session && m_session->isMetadataAvailable()) { + for (int i = QtMediaServices::Title; i <= QtMediaServices::DeviceSettingDescription; i++) { + QString metaData = metaDataKeyAsString((QtMediaServices::MetaData)i); + if (!metaData.isEmpty()) { + if (!m_session->metaData(metaData).toString().isEmpty()) { + metaDataTags.append((QtMediaServices::MetaData)i); + } + } + } + } + return metaDataTags; +} + +QVariant S60MediaMetaDataProvider::extendedMetaData(const QString &key) const +{ + m_session = m_mediaPlayerResolver.PlayerSession(); + if (m_session && m_session->isMetadataAvailable()) + return m_session->metaData(key); + return QVariant(); +} + +void S60MediaMetaDataProvider::setExtendedMetaData(const QString &key, QVariant const &value) +{ + Q_UNUSED(key); + Q_UNUSED(value); +} + +QStringList S60MediaMetaDataProvider::availableExtendedMetaData() const +{ + m_session = m_mediaPlayerResolver.PlayerSession(); + if (m_session && m_session->isMetadataAvailable()) + return m_session->availableMetaData().keys(); + return QStringList(); +} + +QString S60MediaMetaDataProvider::metaDataKeyAsString(QtMediaServices::MetaData key) const +{ + switch(key) { + case QtMediaServices::Title: return "title"; + case QtMediaServices::AlbumArtist: return "artist"; + case QtMediaServices::Comment: return "comment"; + case QtMediaServices::Genre: return "genre"; + case QtMediaServices::Year: return "year"; + case QtMediaServices::Copyright: return "copyright"; + case QtMediaServices::AlbumTitle: return "album"; + case QtMediaServices::Composer: return "composer"; + case QtMediaServices::TrackNumber: return "albumtrack"; + case QtMediaServices::AudioBitRate: return "audiobitrate"; + case QtMediaServices::VideoBitRate: return "videobitrate"; + case QtMediaServices::Duration: return "duration"; + case QtMediaServices::MediaType: return "contenttype"; + case QtMediaServices::SubTitle: // TODO: Find the matching metadata keys + case QtMediaServices::Description: + case QtMediaServices::Category: + case QtMediaServices::Date: + case QtMediaServices::UserRating: + case QtMediaServices::Keywords: + case QtMediaServices::Language: + case QtMediaServices::Publisher: + case QtMediaServices::ParentalRating: + case QtMediaServices::RatingOrganisation: + case QtMediaServices::Size: + case QtMediaServices::AudioCodec: + case QtMediaServices::AverageLevel: + case QtMediaServices::ChannelCount: + case QtMediaServices::PeakValue: + case QtMediaServices::SampleRate: + case QtMediaServices::Author: + case QtMediaServices::ContributingArtist: + case QtMediaServices::Conductor: + case QtMediaServices::Lyrics: + case QtMediaServices::Mood: + case QtMediaServices::TrackCount: + case QtMediaServices::CoverArtUrlSmall: + case QtMediaServices::CoverArtUrlLarge: + case QtMediaServices::Resolution: + case QtMediaServices::PixelAspectRatio: + case QtMediaServices::VideoFrameRate: + case QtMediaServices::VideoCodec: + case QtMediaServices::PosterUrl: + case QtMediaServices::ChapterNumber: + case QtMediaServices::Director: + case QtMediaServices::LeadPerformer: + case QtMediaServices::Writer: + case QtMediaServices::CameraManufacturer: + case QtMediaServices::CameraModel: + case QtMediaServices::Event: + case QtMediaServices::Subject: + default: + break; + } + + return QString(); +} + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.h new file mode 100644 index 0000000..07ae494 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60MEDIAMETADATAPROVIDER_H +#define S60MEDIAMETADATAPROVIDER_H + +#include <qmetadatacontrol.h> +#include "ms60mediaplayerresolver.h" + +QT_BEGIN_NAMESPACE + +class S60MediaPlayerSession; + +class S60MediaMetaDataProvider : public QMetaDataControl +{ + Q_OBJECT + +public: + S60MediaMetaDataProvider(MS60MediaPlayerResolver& mediaPlayerResolver, QObject *parent = 0); + ~S60MediaMetaDataProvider(); + + bool isMetaDataAvailable() const; + bool isWritable() const; + + QVariant metaData(QtMediaServices::MetaData key) const; + void setMetaData(QtMediaServices::MetaData key, const QVariant &value); + QList<QtMediaServices::MetaData> availableMetaData() const; + + QVariant extendedMetaData(const QString &key) const ; + void setExtendedMetaData(const QString &key, const QVariant &value); + QStringList availableExtendedMetaData() const; + +private: + QString metaDataKeyAsString(QtMediaServices::MetaData key) const; + +private: + MS60MediaPlayerResolver& m_mediaPlayerResolver; + mutable S60MediaPlayerSession *m_session; +}; + +QT_END_NAMESPACE + +#endif // S60VIDEOMETADATAPROVIDER_H diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.cpp new file mode 100644 index 0000000..dbeed90 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.cpp @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "s60mediaplayercontrol.h" +#include "s60mediaplayersession.h" +#include "s60mediaplayeraudioendpointselector.h" + +#include <QtGui/QIcon> +#include <QtCore/QDebug> + +QT_BEGIN_NAMESPACE + +S60MediaPlayerAudioEndpointSelector::S60MediaPlayerAudioEndpointSelector(QObject *control, QObject *parent) + :QMediaControl(parent) + , m_control(0) + , m_audioEndpointNames(0) +{ + m_control = qobject_cast<S60MediaPlayerControl*>(control); +} + +S60MediaPlayerAudioEndpointSelector::~S60MediaPlayerAudioEndpointSelector() +{ + delete m_audioEndpointNames; +} + +QList<QString> S60MediaPlayerAudioEndpointSelector::availableEndpoints() const +{ + if(m_audioEndpointNames->count() == 0) { + m_audioEndpointNames->append("Default"); + m_audioEndpointNames->append("All"); + m_audioEndpointNames->append("None"); + m_audioEndpointNames->append("Earphone"); + m_audioEndpointNames->append("Speaker"); + } + return *m_audioEndpointNames; +} + +QString S60MediaPlayerAudioEndpointSelector::endpointDescription(const QString& name) const +{ + if (name == QString("Default")) //ENoPreference + return QString("Used to indicate that the playing audio can be routed to" + "any speaker. This is the default value for audio."); + else if (name == QString("All")) //EAll + return QString("Used to indicate that the playing audio should be routed to all speakers."); + else if (name == QString("None")) //ENoOutput + return QString("Used to indicate that the playing audio should not be routed to any output."); + else if (name == QString("Earphone")) //EPrivate + return QString("Used to indicate that the playing audio should be routed to" + "the default private speaker. A private speaker is one that can only" + "be heard by one person."); + else if (name == QString("Speaker")) //EPublic + return QString("Used to indicate that the playing audio should be routed to" + "the default public speaker. A public speaker is one that can " + "be heard by multiple people."); + + return QString(); +} + +QString S60MediaPlayerAudioEndpointSelector::activeEndpoint() const +{ + if (m_control->session()) + return m_control->session()->activeEndpoint(); + else + return m_control->mediaControlSettings().audioEndpoint(); +} + +QString S60MediaPlayerAudioEndpointSelector::defaultEndpoint() const +{ + if (m_control->session()) + return m_control->session()->defaultEndpoint(); + else + return m_control->mediaControlSettings().audioEndpoint(); +} + +void S60MediaPlayerAudioEndpointSelector::setActiveEndpoint(const QString& name) +{ + QString oldEndpoint = m_control->mediaControlSettings().audioEndpoint(); + + if (name != oldEndpoint && (name == QString("Default") || name == QString("All") || + name == QString("None") || name == QString("Earphone") || name == QString("Speaker"))) { + + if (m_control->session()) { + m_control->session()->setActiveEndpoint(name); + } + m_control->setAudioEndpoint(name); + } +} + +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.h new file mode 100644 index 0000000..a110ae8 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60MEDIAPLAYERAUDIOENDPOINTSELECTOR_H +#define S60MEDIAPLAYERAUDIOENDPOINTSELECTOR_H + +#include <QStringList> + +#include <QtMediaServices/qmediacontrol.h> + +QT_BEGIN_NAMESPACE + +class S60MediaPlayerControl; +class S60MediaPlayerSession; + +class S60MediaPlayerAudioEndpointSelector : public QMediaControl +{ + +Q_OBJECT + +public: + S60MediaPlayerAudioEndpointSelector(QObject *control, QObject *parent = 0); + ~S60MediaPlayerAudioEndpointSelector(); + + QList<QString> availableEndpoints() const ; + QString endpointDescription(const QString& name) const; + QString defaultEndpoint() const; + QString activeEndpoint() const; + +public Q_SLOTS: + void setActiveEndpoint(const QString& name); + +private: + S60MediaPlayerControl* m_control; + QString m_audioInput; + QList<QString> *m_audioEndpointNames; +}; + +#define QAudioEndpointSelector_iid "com.nokia.Qt.QAudioEndpointSelector/1.0" + +QT_END_NAMESPACE + +#endif // S60MEDIAPLAYERAUDIOENDPOINTSELECTOR_H diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.cpp new file mode 100644 index 0000000..8e03afd --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.cpp @@ -0,0 +1,274 @@ + +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "s60mediaplayercontrol.h" +#include "s60mediaplayersession.h" + +#include <QtCore/qdir.h> +#include <QtCore/qurl.h> +#include <QtCore/qdebug.h> + +QT_BEGIN_NAMESPACE + +S60MediaPlayerControl::S60MediaPlayerControl(MS60MediaPlayerResolver& mediaPlayerResolver, QObject *parent) + : QMediaPlayerControl(parent), + m_mediaPlayerResolver(mediaPlayerResolver), + m_session(NULL), + m_stream(NULL) +{ +} + +S60MediaPlayerControl::~S60MediaPlayerControl() +{ +} + +qint64 S60MediaPlayerControl::position() const +{ + if (m_session) + return m_session->position(); + return 0; +} + +qint64 S60MediaPlayerControl::duration() const +{ + if (m_session) + return m_session->duration(); + return -1; +} + +QMediaPlayer::State S60MediaPlayerControl::state() const +{ + if (m_session) + return m_session->state(); + return QMediaPlayer::StoppedState; +} + +QMediaPlayer::MediaStatus S60MediaPlayerControl::mediaStatus() const +{ + if (m_session) + return m_session->mediaStatus(); + return m_mediaSettings.mediaStatus(); +} + +int S60MediaPlayerControl::bufferStatus() const +{ + if (m_session) + return m_session->bufferStatus(); + return 0; +} + +int S60MediaPlayerControl::volume() const +{ + if (m_session) + return m_session->volume(); + return m_mediaSettings.volume(); +} + +bool S60MediaPlayerControl::isMuted() const +{ + if (m_session) + return m_session->isMuted(); + return m_mediaSettings.isMuted(); +} + +bool S60MediaPlayerControl::isSeekable() const +{ + if (m_session) + return m_session->isSeekable(); + return false; +} + +QMediaTimeRange S60MediaPlayerControl::availablePlaybackRanges() const +{ + QMediaTimeRange ranges; + + if(m_session && m_session->isSeekable()) + ranges.addInterval(0, m_session->duration()); + + return ranges; +} + +qreal S60MediaPlayerControl::playbackRate() const +{ + //None of symbian players supports this. + return m_mediaSettings.playbackRate(); +} + +void S60MediaPlayerControl::setPlaybackRate(qreal rate) +{ + //None of symbian players supports this. + m_mediaSettings.setPlaybackRate(rate); + emit playbackRateChanged(playbackRate()); + +} + +void S60MediaPlayerControl::setPosition(qint64 pos) +{ + if (m_session) + m_session->setPosition(pos); +} + +void S60MediaPlayerControl::play() +{ + if (m_session) + m_session->play(); +} + +void S60MediaPlayerControl::pause() +{ + if (m_session) + m_session->pause(); +} + +void S60MediaPlayerControl::stop() +{ + if (m_session) + m_session->stop(); +} + +void S60MediaPlayerControl::setVolume(int volume) +{ + int boundVolume = qBound(0, volume, 100); + if (boundVolume == m_mediaSettings.volume()) + return; + + m_mediaSettings.setVolume(boundVolume); + if (m_session) + m_session->setVolume(boundVolume); + + emit volumeChanged(boundVolume); +} + +void S60MediaPlayerControl::setMuted(bool muted) +{ + if (m_mediaSettings.isMuted() == muted) + return; + + m_mediaSettings.setMuted(muted); + if (m_session) + m_session->setMuted(muted); + + emit mutedChanged(muted); +} + +QMediaContent S60MediaPlayerControl::media() const +{ + return m_currentResource; +} + +const QIODevice *S60MediaPlayerControl::mediaStream() const +{ + return m_stream; +} + +void S60MediaPlayerControl::setMedia(const QMediaContent &source, QIODevice *stream) +{ + Q_UNUSED(stream) + // we don't want to set & load media again when it is already loaded + if (m_session && m_currentResource == source) + return; + + // store to variable as session is created based on the content type. + m_currentResource = source; + S60MediaPlayerSession *newSession = m_mediaPlayerResolver.PlayerSession(); + m_mediaSettings.setMediaStatus(QMediaPlayer::UnknownMediaStatus); + + if (m_session) + m_session->reset(); + else { + emit mediaStatusChanged(QMediaPlayer::UnknownMediaStatus); + emit error(QMediaPlayer::NoError, QString()); + } + + m_session = newSession; + + if (m_session) + m_session->load(source.canonicalUrl()); + else { + QMediaPlayer::MediaStatus status = (source.isNull()) ? QMediaPlayer::NoMedia : QMediaPlayer::InvalidMedia; + m_mediaSettings.setMediaStatus(status); + emit stateChanged(QMediaPlayer::StoppedState); + emit error((source.isNull()) ? QMediaPlayer::NoError : QMediaPlayer::ResourceError, + (source.isNull()) ? "" : tr("Media couldn't be resolved")); + emit mediaStatusChanged(status); + } + emit mediaChanged(m_currentResource); + } + +S60MediaPlayerSession* S60MediaPlayerControl::session() +{ + return m_session; +} + +void S60MediaPlayerControl::setVideoOutput(QObject *output) +{ + S60MediaPlayerSession *session = NULL; + session = m_mediaPlayerResolver.VideoPlayerSession(); + session->setVideoRenderer(output); +} + +bool S60MediaPlayerControl::isAudioAvailable() const +{ + if (m_session) + return m_session->isAudioAvailable(); + return false; +} + +bool S60MediaPlayerControl::isVideoAvailable() const +{ + if (m_session) + return m_session->isVideoAvailable(); + return false; +} + +const S60MediaSettings& S60MediaPlayerControl::mediaControlSettings() const +{ + return m_mediaSettings; +} + +void S60MediaPlayerControl::setAudioEndpoint(const QString& name) +{ + m_mediaSettings.setAudioEndpoint(name); +} + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.h new file mode 100644 index 0000000..3d26a5e --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.h @@ -0,0 +1,143 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60MEDIAPLAYERCONTROL_H +#define S60MEDIAPLAYERCONTROL_H + +#include <QtCore/qobject.h> + +#include <qmediaplayercontrol.h> + +#include "ms60mediaplayerresolver.h" +#include <QtCore/qdebug.h> + +QT_BEGIN_NAMESPACE + +class QMediaPlayer; +class QMediaTimeRange; +class QMediaContent; + + +class S60MediaPlayerSession; +class S60MediaPlayerService; + +class S60MediaSettings +{ + +public: + S60MediaSettings() + : m_volume(0) + , m_muted(false) + , m_playbackRate(0) + , m_mediaStatus(QMediaPlayer::UnknownMediaStatus) + , m_audioEndpoint(QString("Default")) + { + } + + void setVolume(int volume) { m_volume = volume; } + void setMuted(bool muted) { m_muted = muted; } + void setPlaybackRate(int rate) { m_playbackRate = rate; } + void setMediaStatus(QMediaPlayer::MediaStatus status) {m_mediaStatus=status;} + void setAudioEndpoint(const QString& audioEndpoint) { m_audioEndpoint = audioEndpoint; } + + int volume() const { return m_volume; } + bool isMuted() const { return m_muted; } + qreal playbackRate() const { return m_playbackRate; } + QMediaPlayer::MediaStatus mediaStatus() const {return m_mediaStatus;} + QString audioEndpoint() const { return m_audioEndpoint; } + +private: + int m_volume; + bool m_muted; + qreal m_playbackRate; + QMediaPlayer::MediaStatus m_mediaStatus; + QString m_audioEndpoint; +}; + +class S60MediaPlayerControl : public QMediaPlayerControl +{ + Q_OBJECT + +public: + S60MediaPlayerControl(MS60MediaPlayerResolver& mediaPlayerResolver, QObject *parent = 0); + ~S60MediaPlayerControl(); + + // from QMediaPlayerControl + virtual QMediaPlayer::State state() const; + virtual QMediaPlayer::MediaStatus mediaStatus() const; + virtual qint64 duration() const; + virtual qint64 position() const; + virtual void setPosition(qint64 pos); + virtual int volume() const; + virtual void setVolume(int volume); + virtual bool isMuted() const; + virtual void setMuted(bool muted); + virtual int bufferStatus() const; + virtual bool isAudioAvailable() const; + virtual bool isVideoAvailable() const; + virtual bool isSeekable() const; + virtual QMediaTimeRange availablePlaybackRanges() const; + virtual qreal playbackRate() const; + virtual void setPlaybackRate(qreal rate); + virtual QMediaContent media() const; + virtual const QIODevice *mediaStream() const; + virtual void setMedia(const QMediaContent&, QIODevice *); + virtual void play(); + virtual void pause(); + virtual void stop(); + S60MediaPlayerSession* session(); + void setAudioEndpoint(const QString& name); + + // Own methods + void setVideoOutput(QObject *output); + const S60MediaSettings& mediaControlSettings() const; + +private: + MS60MediaPlayerResolver &m_mediaPlayerResolver; + S60MediaPlayerSession *m_session; + QMediaContent m_currentResource; + QIODevice *m_stream; + S60MediaSettings m_mediaSettings; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.cpp new file mode 100644 index 0000000..0b1c7d5 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.cpp @@ -0,0 +1,259 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtCore/qvariant.h> +#include <QtCore/qdebug.h> +#include <QtGui/qwidget.h> + +#include "s60mediaplayerservice.h" +#include "s60mediaplayercontrol.h" +#include "s60videoplayersession.h" +#include "s60audioplayersession.h" +#include "s60mediametadataprovider.h" +#include "s60videowidget.h" +#include "s60mediarecognizer.h" +//#include <qmediatimerange.h> +#include "s60videooverlay.h" +#include "s60videorenderer.h" +#include "s60mediaplayeraudioendpointselector.h" + +#include <qmediaplaylistnavigator.h> +#include <qmediaplaylist.h> + +QT_BEGIN_NAMESPACE + +S60MediaPlayerService::S60MediaPlayerService(QObject *parent) + : QMediaService(parent) + , m_control(NULL) + , m_videoOutput(NULL) + , m_videoPlayerSession(NULL) + , m_audioPlayerSession(NULL) + , m_metaData(NULL) + , m_videoWidget(NULL) + , m_videoWindow(NULL) + , m_videoRenderer(NULL) + , m_audioEndpointSelector(NULL) +{ + m_control = new S60MediaPlayerControl(*this, this); + m_metaData = new S60MediaMetaDataProvider(*this); + m_audioEndpointSelector = new S60MediaPlayerAudioEndpointSelector(m_control, this); +} + +S60MediaPlayerService::~S60MediaPlayerService() +{ + delete m_videoWidget; + delete m_videoRenderer; + delete m_videoWindow; + delete m_videoOutput; +} + +QMediaControl *S60MediaPlayerService::control(const char *name) const +{ + if (qstrcmp(name, QMediaPlayerControl_iid) == 0) + return m_control; + + if (qstrcmp(name, QMetaDataControl_iid) == 0) { + return m_metaData; + } + + if (qstrcmp(name, QVideoOutputControl_iid) == 0) { + if (!m_videoOutput) { + m_videoOutput = new S60VideoOutputControl; + connect(m_videoOutput, SIGNAL(outputChanged(QVideoOutputControl::Output)), + this, SLOT(videoOutputChanged(QVideoOutputControl::Output))); + m_videoOutput->setAvailableOutputs(QList<QVideoOutputControl::Output>() +// << QVideoOutputControl::RendererOutput +// << QVideoOutputControl::WindowOutput + << QVideoOutputControl::WidgetOutput); + + } + return m_videoOutput; + } + + if (qstrcmp(name, QVideoWidgetControl_iid) == 0) { + if (!m_videoWidget) + m_videoWidget = new S60VideoWidgetControl; + return m_videoWidget; + } + + if (qstrcmp(name, QVideoRendererControl_iid) == 0) { + if (m_videoRenderer) + m_videoRenderer = new S60VideoRenderer; + return m_videoRenderer; + } + + if (qstrcmp(name, QVideoWindowControl_iid) == 0) { + if (!m_videoWindow) + m_videoWindow = new S60VideoOverlay; + return m_videoWindow; + } + + if (qstrcmp(name, QAudioEndpointSelector_iid) == 0) { + return m_audioEndpointSelector; + } + + return 0; + +} + +void S60MediaPlayerService::videoOutputChanged(QVideoOutputControl::Output output) +{ + switch (output) { + case QVideoOutputControl::NoOutput: + m_control->setVideoOutput(0); + break; + + case QVideoOutputControl::RendererOutput: + m_control->setVideoOutput(m_videoRenderer); + break; + case QVideoOutputControl::WindowOutput: + m_control->setVideoOutput(m_videoWindow); + break; + + case QVideoOutputControl::WidgetOutput: + m_control->setVideoOutput(m_videoWidget); + break; + default: + qWarning("Invalid video output selection"); + break; + } +} + +S60MediaPlayerSession* S60MediaPlayerService::PlayerSession() +{ + QUrl url = m_control->media().canonicalUrl(); + + if (url.isEmpty() == true) { + return NULL; + } + + S60MediaRecognizer *m_mediaRecognizer = new S60MediaRecognizer(this); + S60MediaRecognizer::MediaType mediaType = m_mediaRecognizer->mediaType(url); + + switch (mediaType) { + case S60MediaRecognizer::Video: + case S60MediaRecognizer::Url: + return VideoPlayerSession(); + case S60MediaRecognizer::Audio: + return AudioPlayerSession(); + default: + break; + } + + return NULL; +} + +S60MediaPlayerSession* S60MediaPlayerService::VideoPlayerSession() +{ + if (!m_videoPlayerSession) { + m_videoPlayerSession = new S60VideoPlayerSession(this); + + connect(m_videoPlayerSession, SIGNAL(positionChanged(qint64)), + m_control, SIGNAL(positionChanged(qint64))); + connect(m_videoPlayerSession, SIGNAL(durationChanged(qint64)), + m_control, SIGNAL(durationChanged(qint64))); + connect(m_videoPlayerSession, SIGNAL(stateChanged(QMediaPlayer::State)), + m_control, SIGNAL(stateChanged(QMediaPlayer::State))); + connect(m_videoPlayerSession, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), + m_control, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus))); + connect(m_videoPlayerSession,SIGNAL(bufferStatusChanged(int)), + m_control, SIGNAL(bufferStatusChanged(int))); + connect(m_videoPlayerSession, SIGNAL(videoAvailableChanged(bool)), + m_control, SIGNAL(videoAvailableChanged(bool))); + connect(m_videoPlayerSession, SIGNAL(audioAvailableChanged(bool)), + m_control, SIGNAL(audioAvailableChanged(bool))); + connect(m_videoPlayerSession, SIGNAL(seekableChanged(bool)), + m_control, SIGNAL(seekableChanged(bool))); + connect(m_videoPlayerSession, SIGNAL(availablePlaybackRangesChanged(const QMediaTimeRange&)), + m_control, SIGNAL(availablePlaybackRangesChanged(const QMediaTimeRange&))); + connect(m_videoPlayerSession, SIGNAL(error(int, const QString &)), + m_control, SIGNAL(error(int, const QString &))); + connect(m_videoPlayerSession, SIGNAL(metaDataChanged()), + m_metaData, SIGNAL(metaDataChanged())); + connect(m_videoPlayerSession, SIGNAL(activeEndpointChanged(const QString&)), + m_audioEndpointSelector, SIGNAL(activeEndpointChanged(const QString&))); + } + + m_videoPlayerSession->setVolume(m_control->mediaControlSettings().volume()); + m_videoPlayerSession->setMuted(m_control->mediaControlSettings().isMuted()); + m_videoPlayerSession->setAudioEndpoint(m_control->mediaControlSettings().audioEndpoint()); + return m_videoPlayerSession; +} + +S60MediaPlayerSession* S60MediaPlayerService::AudioPlayerSession() +{ + if (!m_audioPlayerSession) { + m_audioPlayerSession = new S60AudioPlayerSession(this); + + connect(m_audioPlayerSession, SIGNAL(positionChanged(qint64)), + m_control, SIGNAL(positionChanged(qint64))); + connect(m_audioPlayerSession, SIGNAL(durationChanged(qint64)), + m_control, SIGNAL(durationChanged(qint64))); + connect(m_audioPlayerSession, SIGNAL(stateChanged(QMediaPlayer::State)), + m_control, SIGNAL(stateChanged(QMediaPlayer::State))); + connect(m_audioPlayerSession, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), + m_control, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus))); + connect(m_audioPlayerSession,SIGNAL(bufferStatusChanged(int)), + m_control, SIGNAL(bufferStatusChanged(int))); + connect(m_audioPlayerSession, SIGNAL(videoAvailableChanged(bool)), + m_control, SIGNAL(videoAvailableChanged(bool))); + connect(m_audioPlayerSession, SIGNAL(audioAvailableChanged(bool)), + m_control, SIGNAL(audioAvailableChanged(bool))); + connect(m_audioPlayerSession, SIGNAL(seekableChanged(bool)), + m_control, SIGNAL(seekableChanged(bool))); + connect(m_audioPlayerSession, SIGNAL(availablePlaybackRangesChanged(const QMediaTimeRange&)), + m_control, SIGNAL(availablePlaybackRangesChanged(const QMediaTimeRange&))); + connect(m_audioPlayerSession, SIGNAL(error(int, const QString &)), + m_control, SIGNAL(error(int, const QString &))); + connect(m_audioPlayerSession, SIGNAL(metaDataChanged()), + m_metaData, SIGNAL(metaDataChanged())); + connect(m_audioPlayerSession, SIGNAL(activeEndpointChanged(const QString&)), + m_audioEndpointSelector, SIGNAL(activeEndpointChanged(const QString&))); + } + + m_audioPlayerSession->setVolume(m_control->mediaControlSettings().volume()); + m_audioPlayerSession->setMuted(m_control->mediaControlSettings().isMuted()); + m_audioPlayerSession->setAudioEndpoint(m_control->mediaControlSettings().audioEndpoint()); + return m_audioPlayerSession; +} + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.h new file mode 100644 index 0000000..6c8155d --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.h @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60VIDEOPLAYERSERVICE_H +#define S60VIDEOPLAYERSERVICE_H + +#include <QtCore/qobject.h> + +#include <qmediaservice.h> +#include <qvideooutputcontrol.h> + +#include "s60videooutputcontrol.h" +#include "ms60mediaplayerresolver.h" + +#include "s60mediaplayeraudioendpointselector.h" + +QT_BEGIN_NAMESPACE + +class QMediaMetaData; +class QMediaPlayerControl; +class QMediaPlaylist; + + +class S60VideoPlayerSession; +class S60AudioPlayerSession; +class S60MediaPlayerControl; +class S60MediaMetaDataProvider; +class S60VideoWidgetControl; +class S60MediaRecognizer; +class S60VideoRenderer; +class S60VideoOverlay; + +class QMediaPlaylistNavigator; + +class S60MediaPlayerService : public QMediaService, public MS60MediaPlayerResolver +{ + Q_OBJECT + +public: + S60MediaPlayerService(QObject *parent = 0); + ~S60MediaPlayerService(); + + QMediaControl *control(const char *name) const; + +private slots: + void videoOutputChanged(QVideoOutputControl::Output output); + +protected: // From MS60MediaPlayerResolver + S60MediaPlayerSession* PlayerSession(); + S60MediaPlayerSession* VideoPlayerSession(); + S60MediaPlayerSession* AudioPlayerSession(); + +private: + S60MediaPlayerControl *m_control; + mutable S60VideoOutputControl *m_videoOutput; + S60VideoPlayerSession *m_videoPlayerSession; + S60AudioPlayerSession *m_audioPlayerSession; + mutable S60MediaMetaDataProvider *m_metaData; + mutable S60VideoWidgetControl *m_videoWidget; + mutable S60VideoOverlay *m_videoWindow; + mutable S60VideoRenderer *m_videoRenderer; + S60MediaPlayerAudioEndpointSelector *m_audioEndpointSelector; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.cpp new file mode 100644 index 0000000..693c103 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.cpp @@ -0,0 +1,496 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "s60mediaplayersession.h" + +#include <QtCore/qdebug.h> +#include <QtCore/qdir.h> +#include <QtCore/qvariant.h> +#include <QtCore/qtimer.h> +#include <mmf/common/mmferrors.h> +#include <qmediatimerange.h> + +QT_BEGIN_NAMESPACE + +S60MediaPlayerSession::S60MediaPlayerSession(QObject *parent) + : QObject(parent) + , m_playbackRate(0) + , m_muted(false) + , m_volume(0) + , m_state(QMediaPlayer::StoppedState) + , m_mediaStatus(QMediaPlayer::UnknownMediaStatus) + , m_progressTimer(new QTimer(this)) + , m_stalledTimer(new QTimer(this)) + , m_error(KErrNone) + , m_play_requested(false) + , m_stream(false) +{ + connect(m_progressTimer, SIGNAL(timeout()), this, SLOT(tick())); + connect(m_stalledTimer, SIGNAL(timeout()), this, SLOT(stalled())); +} + +S60MediaPlayerSession::~S60MediaPlayerSession() +{ +} + +int S60MediaPlayerSession::volume() const +{ + return m_volume; +} + +void S60MediaPlayerSession::setVolume(int volume) +{ + if (m_volume == volume) + return; + + m_volume = volume; + // Dont set symbian players volume until media loaded. + // Leaves with KerrNotReady although documentation says otherwise. + if (!m_muted && + ( mediaStatus() == QMediaPlayer::LoadedMedia + || mediaStatus() == QMediaPlayer::StalledMedia + || mediaStatus() == QMediaPlayer::BufferingMedia + || mediaStatus() == QMediaPlayer::BufferedMedia + || mediaStatus() == QMediaPlayer::EndOfMedia)) { + TRAPD(err, doSetVolumeL(m_volume)); + setError(err); + } +} + +bool S60MediaPlayerSession::isMuted() const +{ + return m_muted; +} + +bool S60MediaPlayerSession::isSeekable() const +{ + return (m_stream)?false:true; +} + +void S60MediaPlayerSession::setMediaStatus(QMediaPlayer::MediaStatus status) +{ + if (m_mediaStatus == status) + return; + + m_mediaStatus = status; + + emit mediaStatusChanged(m_mediaStatus); + + if (m_play_requested) + play(); +} + +void S60MediaPlayerSession::setState(QMediaPlayer::State state) +{ + if (m_state == state) + return; + + m_state = state; + emit stateChanged(m_state); +} + +QMediaPlayer::State S60MediaPlayerSession::state() const +{ + return m_state; +} + +QMediaPlayer::MediaStatus S60MediaPlayerSession::mediaStatus() const +{ + return m_mediaStatus; +} + +void S60MediaPlayerSession::load(QUrl url) +{ + setMediaStatus(QMediaPlayer::LoadingMedia); + startStalledTimer(); + m_stream = (url.scheme() == "file")?false:true; + TRAPD(err, + if(m_stream) + doLoadUrlL(QString2TPtrC(url.toString())); + else + doLoadL(QString2TPtrC(QDir::toNativeSeparators(url.toLocalFile())))); + setError(err); +} + +void S60MediaPlayerSession::play() +{ + if (state() == QMediaPlayer::PlayingState + || mediaStatus() == QMediaPlayer::UnknownMediaStatus + || mediaStatus() == QMediaPlayer::NoMedia + || mediaStatus() == QMediaPlayer::InvalidMedia) + return; + + if (mediaStatus() == QMediaPlayer::LoadingMedia) { + m_play_requested = true; + return; + } + + m_play_requested = false; + setState(QMediaPlayer::PlayingState); + startProgressTimer(); + doPlay(); +} + +void S60MediaPlayerSession::pause() +{ + if (mediaStatus() == QMediaPlayer::NoMedia || + mediaStatus() == QMediaPlayer::InvalidMedia) + return; + + setState(QMediaPlayer::PausedState); + stopProgressTimer(); + TRAP_IGNORE(doPauseL()); +} + +void S60MediaPlayerSession::stop() +{ + m_play_requested = false; + setState(QMediaPlayer::StoppedState); + if (mediaStatus() == QMediaPlayer::BufferingMedia || + mediaStatus() == QMediaPlayer::BufferedMedia) + setMediaStatus(QMediaPlayer::LoadedMedia); + if (mediaStatus() == QMediaPlayer::LoadingMedia) + setMediaStatus(QMediaPlayer::UnknownMediaStatus); + stopProgressTimer(); + stopStalledTimer(); + doStop(); + emit positionChanged(0); +} +void S60MediaPlayerSession::reset() +{ + m_play_requested = false; + setError(KErrNone, QString(), true); + stopProgressTimer(); + stopStalledTimer(); + doStop(); + setState(QMediaPlayer::StoppedState); + setMediaStatus(QMediaPlayer::UnknownMediaStatus); +} + +void S60MediaPlayerSession::setVideoRenderer(QObject *renderer) +{ + Q_UNUSED(renderer); +} + +int S60MediaPlayerSession::bufferStatus() +{ + if( mediaStatus() == QMediaPlayer::LoadingMedia + || mediaStatus() == QMediaPlayer::UnknownMediaStatus + || mediaStatus() == QMediaPlayer::NoMedia + || mediaStatus() == QMediaPlayer::InvalidMedia) + return 0; + + int progress = 0; + TRAPD(err, progress = doGetBufferStatusL()); + + // If buffer status query not supported by codec return 100 + // do not set error + if(err == KErrNotSupported) + return 100; + + setError(err); + return progress; +} + +bool S60MediaPlayerSession::isMetadataAvailable() const +{ + return !m_metaDataMap.isEmpty(); +} + +QVariant S60MediaPlayerSession::metaData(const QString &key) const +{ + return m_metaDataMap.value(key); +} + +QMap<QString, QVariant> S60MediaPlayerSession::availableMetaData() const +{ + return m_metaDataMap; +} + +void S60MediaPlayerSession::setMuted(bool muted) +{ + m_muted = muted; + + if( m_mediaStatus == QMediaPlayer::LoadedMedia + || m_mediaStatus == QMediaPlayer::StalledMedia + || m_mediaStatus == QMediaPlayer::BufferingMedia + || m_mediaStatus == QMediaPlayer::BufferedMedia + || m_mediaStatus == QMediaPlayer::EndOfMedia) { + TRAPD(err, doSetVolumeL((m_muted)?0:m_volume)); + setError(err); + } +} + +qint64 S60MediaPlayerSession::duration() const +{ + if( mediaStatus() == QMediaPlayer::LoadingMedia + || mediaStatus() == QMediaPlayer::UnknownMediaStatus + || mediaStatus() == QMediaPlayer::NoMedia + || mediaStatus() == QMediaPlayer::InvalidMedia) + return -1; + + qint64 pos = 0; + TRAP_IGNORE(pos = doGetDurationL()); + return pos; +} + +qint64 S60MediaPlayerSession::position() const +{ + if( mediaStatus() == QMediaPlayer::LoadingMedia + || mediaStatus() == QMediaPlayer::UnknownMediaStatus + || mediaStatus() == QMediaPlayer::NoMedia + || mediaStatus() == QMediaPlayer::InvalidMedia) + return 0; + + qint64 pos = 0; + TRAP_IGNORE(pos = doGetPositionL()); + return pos; +} + +void S60MediaPlayerSession::setPosition(qint64 pos) +{ + if (position() == pos) + return; + + if (state() == QMediaPlayer::PlayingState) + pause(); + + TRAPD(err, doSetPositionL(pos * 1000)); + setError(err); + + if (state() == QMediaPlayer::PausedState) + play(); + + emit positionChanged(position()); +} + +void S60MediaPlayerSession::setAudioEndpoint(const QString& audioEndpoint) +{ + doSetAudioEndpoint(audioEndpoint); +} + +void S60MediaPlayerSession::loaded() +{ + stopStalledTimer(); + if (m_error == KErrNone || m_error == KErrMMPartialPlayback) { + setMediaStatus(QMediaPlayer::LoadedMedia); + TRAPD(err, updateMetaDataEntriesL()); + setError(err); + setVolume(m_volume); + setMuted(m_muted); + emit durationChanged(duration()); + emit videoAvailableChanged(isVideoAvailable()); + emit audioAvailableChanged(isAudioAvailable()); + } +} + +void S60MediaPlayerSession::endOfMedia() +{ + setMediaStatus(QMediaPlayer::EndOfMedia); + setState(QMediaPlayer::StoppedState); + emit positionChanged(0); +} + +void S60MediaPlayerSession::buffering() +{ + startStalledTimer(); + setMediaStatus(QMediaPlayer::BufferingMedia); +} + +void S60MediaPlayerSession::buffered() +{ + stopStalledTimer(); + setMediaStatus(QMediaPlayer::BufferedMedia); +} +void S60MediaPlayerSession::stalled() +{ + setMediaStatus(QMediaPlayer::StalledMedia); +} + +QMap<QString, QVariant>& S60MediaPlayerSession::metaDataEntries() +{ + return m_metaDataMap; +} + +QMediaPlayer::Error S60MediaPlayerSession::fromSymbianErrorToMultimediaError(int error) +{ + switch(error) { + case KErrNoMemory: + case KErrNotFound: + case KErrBadHandle: + case KErrAbort: + case KErrNotSupported: + case KErrCorrupt: + case KErrGeneral: + case KErrArgument: + case KErrPathNotFound: + case KErrDied: + case KErrServerTerminated: + case KErrServerBusy: + case KErrCompletion: + case KErrBadPower: + return QMediaPlayer::ResourceError; + + case KErrMMPartialPlayback: + return QMediaPlayer::FormatError; + + case KErrMMAudioDevice: + case KErrMMVideoDevice: + case KErrMMDecoder: + case KErrUnknown: + return QMediaPlayer::ServiceMissingError; + + case KErrMMNotEnoughBandwidth: + case KErrMMSocketServiceNotFound: + case KErrMMNetworkRead: + case KErrMMNetworkWrite: + case KErrMMServerSocket: + case KErrMMServerNotSupported: + case KErrMMUDPReceive: + case KErrMMInvalidProtocol: + case KErrMMInvalidURL: + case KErrMMMulticast: + case KErrMMProxyServer: + case KErrMMProxyServerNotSupported: + case KErrMMProxyServerConnect: + return QMediaPlayer::NetworkError; + + case KErrNotReady: + case KErrInUse: + case KErrAccessDenied: + case KErrLocked: + case KErrMMDRMNotAuthorized: + case KErrPermissionDenied: + case KErrCancel: + case KErrAlreadyExists: + return QMediaPlayer::AccessDeniedError; + + case KErrNone: + default: + return QMediaPlayer::NoError; + } +} + +void S60MediaPlayerSession::setError(int error, const QString &errorString, bool forceReset) +{ + if( forceReset ) { + m_error = KErrNone; + emit this->error(QMediaPlayer::NoError, QString()); + return; + } + + // If error does not change and m_error is reseted without forceReset flag + if (error == m_error || + (m_error != KErrNone && error == KErrNone)) + return; + + m_error = error; + QMediaPlayer::Error mediaError = fromSymbianErrorToMultimediaError(m_error); + QString symbianError = QString(errorString); + + if (mediaError != QMediaPlayer::NoError) { + // TODO: fix to user friendly string at some point + // These error string are only dev usable + symbianError.append("Symbian:"); + symbianError.append(QString::number(m_error)); + } + + emit this->error(mediaError, symbianError); + + switch(mediaError){ + case QMediaPlayer::ResourceError: + case QMediaPlayer::NetworkError: + case QMediaPlayer::AccessDeniedError: + case QMediaPlayer::ServiceMissingError: + m_play_requested = false; + setMediaStatus(QMediaPlayer::InvalidMedia); + stop(); + break; + } +} + +void S60MediaPlayerSession::tick() +{ + emit positionChanged(position()); + + if (bufferStatus() < 100) + emit bufferStatusChanged(bufferStatus()); +} + +void S60MediaPlayerSession::startProgressTimer() +{ + m_progressTimer->start(500); +} + +void S60MediaPlayerSession::stopProgressTimer() +{ + m_progressTimer->stop(); +} + +void S60MediaPlayerSession::startStalledTimer() +{ + m_stalledTimer->start(30000); +} + +void S60MediaPlayerSession::stopStalledTimer() +{ + m_stalledTimer->stop(); +} +QString S60MediaPlayerSession::TDesC2QString(const TDesC& aDescriptor) +{ + return QString::fromUtf16(aDescriptor.Ptr(), aDescriptor.Length()); +} +TPtrC S60MediaPlayerSession::QString2TPtrC( const QString& string ) +{ + // Returned TPtrC is valid as long as the given parameter is valid and unmodified + return TPtrC16(static_cast<const TUint16*>(string.utf16()), string.length()); +} +QRect S60MediaPlayerSession::TRect2QRect(const TRect& tr) +{ + return QRect(tr.iTl.iX, tr.iTl.iY, tr.Width(), tr.Height()); +} +TRect S60MediaPlayerSession::QRect2TRect(const QRect& qr) +{ + return TRect(TPoint(qr.left(), qr.top()), TSize(qr.width(), qr.height())); +} + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.h new file mode 100644 index 0000000..bb9eddd --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.h @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60MEDIAPLAYERSESSION_H +#define S60MEDIAPLAYERSESSION_H + +#include <QtCore/qobject.h> +#include <QtCore/qurl.h> +#include <QtCore/qpair.h> +#include <qmediaplayer.h> +#include <e32cmn.h> // for TDesC +#include <QRect> +#include "s60mediaplayerservice.h" + +QT_BEGIN_NAMESPACE + +class QMediaTimeRange; + +class QTimer; + +class S60MediaPlayerSession : public QObject +{ + Q_OBJECT + +public: + S60MediaPlayerSession(QObject *parent); + virtual ~S60MediaPlayerSession(); + + // for player control interface to use + QMediaPlayer::State state() const; + QMediaPlayer::MediaStatus mediaStatus() const; + qint64 duration() const; + qint64 position() const; + void setPosition(qint64 pos); + int volume() const; + void setVolume(int volume); + bool isMuted() const; + void setMuted(bool muted); + virtual bool isVideoAvailable() const = 0; + virtual bool isAudioAvailable() const = 0; + bool isSeekable() const; + void play(); + void pause(); + void stop(); + void reset(); + bool isMetadataAvailable() const; + QVariant metaData(const QString &key) const; + QMap<QString, QVariant> availableMetaData() const; + void load(QUrl url); + int bufferStatus(); + virtual void setVideoRenderer(QObject *renderer); + void setMediaStatus(QMediaPlayer::MediaStatus); + void setState(QMediaPlayer::State state); + void setAudioEndpoint(const QString& audioEndpoint); + +protected: + virtual void doLoadL(const TDesC &path) = 0; + virtual void doLoadUrlL(const TDesC &path) = 0; + virtual void doPlay() = 0; + virtual void doStop() = 0; + virtual void doPauseL() = 0; + virtual void doSetVolumeL(int volume) = 0; + virtual void doSetPositionL(qint64 microSeconds) = 0; + virtual qint64 doGetPositionL() const = 0; + virtual void updateMetaDataEntriesL() = 0; + virtual int doGetBufferStatusL() const = 0; + virtual qint64 doGetDurationL() const = 0; + virtual void doSetAudioEndpoint(const QString& audioEndpoint) = 0; + +public: + // From S60MediaPlayerAudioEndpointSelector + virtual QString activeEndpoint() const = 0; + virtual QString defaultEndpoint() const = 0; +public Q_SLOTS: + virtual void setActiveEndpoint(const QString& name) = 0; + +protected: + void setError(int error, const QString &errorString = QString(), bool forceReset = false); + void loaded(); + void buffering(); + void buffered(); + void endOfMedia(); + QMap<QString, QVariant>& metaDataEntries(); + QMediaPlayer::Error fromSymbianErrorToMultimediaError(int error); + void startProgressTimer(); + void stopProgressTimer(); + void startStalledTimer(); + void stopStalledTimer(); + QString TDesC2QString(const TDesC& aDescriptor); + TPtrC QString2TPtrC( const QString& string ); + QRect TRect2QRect(const TRect& tr); + TRect QRect2TRect(const QRect& qr); + + +protected slots: + void tick(); + void stalled(); + +signals: + void durationChanged(qint64 duration); + void positionChanged(qint64 position); + void stateChanged(QMediaPlayer::State state); + void mediaStatusChanged(QMediaPlayer::MediaStatus mediaStatus); + void videoAvailableChanged(bool videoAvailable); + void audioAvailableChanged(bool audioAvailable); + void bufferStatusChanged(int percentFilled); + void seekableChanged(bool); + void availablePlaybackRangesChanged(const QMediaTimeRange&); + void metaDataChanged(); + void error(int error, const QString &errorString); + void activeEndpointChanged(const QString &name); + +private: + qreal m_playbackRate; + QMap<QString, QVariant> m_metaDataMap; + bool m_muted; + int m_volume; + QMediaPlayer::State m_state; + QMediaPlayer::MediaStatus m_mediaStatus; + QTimer *m_progressTimer; + QTimer *m_stalledTimer; + int m_error; + bool m_play_requested; + bool m_stream; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.cpp new file mode 100644 index 0000000..b563dd9 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.cpp @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "S60mediarecognizer.h" +#include <e32def.h> +#include <e32cmn.h> +#include <QtCore/qurl.h> +#include <QtCore/qdir.h> +#include <QtCore/qdebug.h> + +#include <apgcli.h> + +QT_BEGIN_NAMESPACE + +static const TInt KMimeTypePrefixLength = 6; // "audio/" or "video/" +_LIT(KMimeTypePrefixAudio, "audio/"); +_LIT(KMimeTypePrefixVideo, "video/"); + +S60MediaRecognizer::S60MediaRecognizer(QObject *parent) : QObject(parent) +{ +} + +S60MediaRecognizer::~S60MediaRecognizer() +{ + m_file.Close(); + m_fileServer.Close(); + m_recognizer.Close(); +} + +S60MediaRecognizer::MediaType S60MediaRecognizer::mediaType(const QUrl &url) +{ + bool isStream = (url.scheme() == "file")?false:true; + + if (isStream) + return Url; + else + return identifyMediaType(url.toLocalFile()); +} + +S60MediaRecognizer::MediaType S60MediaRecognizer::identifyMediaType(const QString& fileName) +{ + S60MediaRecognizer::MediaType result = NotSupported; + bool recognizerOpened = false; + + TInt err = m_recognizer.Connect(); + if (err == KErrNone) { + recognizerOpened = true; + } + + err = m_fileServer.Connect(); + if (err == KErrNone) { + recognizerOpened = true; + } + + // This is needed for sharing file handles for the recognizer + err = m_fileServer.ShareProtected(); + if (err == KErrNone) { + recognizerOpened = true; + } + + if (recognizerOpened) { + m_file.Close(); + err = m_file.Open(m_fileServer, QString2TPtrC(QDir::toNativeSeparators(fileName)), EFileRead | + EFileShareReadersOnly); + + if (err == KErrNone) { + TDataRecognitionResult recognizerResult; + err = m_recognizer.RecognizeData(m_file, recognizerResult); + if (err == KErrNone) { + const TPtrC mimeType = recognizerResult.iDataType.Des(); + + if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixAudio) == 0) { + result = Audio; + } else if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixVideo) == 0) { + result = Video; + } + } + } + } + return result; +} + +TPtrC S60MediaRecognizer::QString2TPtrC( const QString& string ) +{ + // Returned TPtrC is valid as long as the given parameter is valid and unmodified + return TPtrC16(static_cast<const TUint16*>(string.utf16()), string.length()); +} + +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.h new file mode 100644 index 0000000..320c34c --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.h @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60MEDIARECOGNIZER_H_ +#define S60MEDIARECOGNIZER_H_ + +#include <QtCore/qobject.h> + +#include <apgcli.h> +#include <f32file.h> + +QT_BEGIN_NAMESPACE + +class QUrl; + +class S60MediaRecognizer : public QObject +{ + Q_OBJECT + +public: + enum MediaType { + Audio, + Video, + Url, + NotSupported = -1 + }; + + S60MediaRecognizer(QObject *parent = 0); + ~S60MediaRecognizer(); + + S60MediaRecognizer::MediaType mediaType(const QUrl &url); + S60MediaRecognizer::MediaType identifyMediaType(const QString& fileName); + +protected: + TPtrC QString2TPtrC( const QString& string ); + +private: + RApaLsSession m_recognizer; + RFile m_file; + RFs m_fileServer; +}; + +QT_END_NAMESPACE + +#endif /* S60MEDIARECOGNIZER_H_ */ diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.cpp new file mode 100644 index 0000000..489b2e3 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.cpp @@ -0,0 +1,209 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtMultimedia/qvideosurfaceformat.h> +#include "s60videooverlay.h" +#include "s60videosurface.h" + +QT_BEGIN_NAMESPACE + +S60VideoOverlay::S60VideoOverlay(QObject *parent) + : QVideoWindowControl(parent) + , m_surface(new S60VideoSurface) + , m_aspectRatioMode(Qt::KeepAspectRatio) + , m_fullScreen(false) +{ + connect(m_surface, SIGNAL(surfaceFormatChanged(QVideoSurfaceFormat)), + this, SLOT(surfaceFormatChanged())); +} + +S60VideoOverlay::~S60VideoOverlay() +{ + delete m_surface; +} + +WId S60VideoOverlay::winId() const +{ + return m_surface->winId(); +} + +void S60VideoOverlay::setWinId(WId id) +{ + m_surface->setWinId(id); +} + +QRect S60VideoOverlay::displayRect() const +{ + return m_displayRect; +} + +void S60VideoOverlay::setDisplayRect(const QRect &rect) +{ + m_displayRect = rect; + + setScaledDisplayRect(); +} + +Qt::AspectRatioMode S60VideoOverlay::aspectRatioMode() const +{ + return m_aspectRatioMode; +} + +void S60VideoOverlay::setAspectRatioMode(Qt::AspectRatioMode ratio) +{ + m_aspectRatioMode = ratio; + + setScaledDisplayRect(); +} + +QSize S60VideoOverlay::customAspectRatio() const +{ + return m_aspectRatio; +} + +void S60VideoOverlay::setCustomAspectRatio(const QSize &customRatio) +{ + m_aspectRatio = customRatio; + + setScaledDisplayRect(); +} + +void S60VideoOverlay::repaint() +{ +} + +int S60VideoOverlay::brightness() const +{ + return m_surface->brightness(); +} + +void S60VideoOverlay::setBrightness(int brightness) +{ + m_surface->setBrightness(brightness); + + emit brightnessChanged(m_surface->brightness()); +} + +int S60VideoOverlay::contrast() const +{ + return m_surface->contrast(); +} + +void S60VideoOverlay::setContrast(int contrast) +{ + m_surface->setContrast(contrast); + + emit contrastChanged(m_surface->contrast()); +} + +int S60VideoOverlay::hue() const +{ + return m_surface->hue(); +} + +void S60VideoOverlay::setHue(int hue) +{ + m_surface->setHue(hue); + + emit hueChanged(m_surface->hue()); +} + +int S60VideoOverlay::saturation() const +{ + return m_surface->saturation(); +} + +void S60VideoOverlay::setSaturation(int saturation) +{ + m_surface->setSaturation(saturation); + + emit saturationChanged(m_surface->saturation()); +} + +bool S60VideoOverlay::isFullScreen() const +{ + return m_fullScreen; +} + +void S60VideoOverlay::setFullScreen(bool fullScreen) +{ + emit fullScreenChanged(m_fullScreen = fullScreen); +} + +QSize S60VideoOverlay::nativeSize() const +{ + return m_surface->surfaceFormat().sizeHint(); +} + +QAbstractVideoSurface *S60VideoOverlay::surface() const +{ + return m_surface; +} + +void S60VideoOverlay::surfaceFormatChanged() +{ + setScaledDisplayRect(); + + emit nativeSizeChanged(); +} + +void S60VideoOverlay::setScaledDisplayRect() +{ + switch (m_aspectRatioMode) { + case Qt::KeepAspectRatio: + { + QSize size = m_surface->surfaceFormat().viewport().size(); + + size.scale(m_displayRect.size(), Qt::KeepAspectRatio); + + QRect rect(QPoint(0, 0), size); + rect.moveCenter(m_displayRect.center()); + + m_surface->setDisplayRect(rect); + } + break; + case Qt::IgnoreAspectRatio: + m_surface->setDisplayRect(m_displayRect); + break; + }; +} + +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.h new file mode 100644 index 0000000..d846f32 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.h @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60VIDEOOVERLAY_H +#define S60VIDEOOVERLAY_H + +#include <QtCore/qobject.h> +#include <qvideowindowcontrol.h> + +QT_BEGIN_NAMESPACE + +class QAbstractVideoSurface; +class S60VideoSurface; + +class S60VideoOverlay : public QVideoWindowControl +{ + Q_OBJECT + +public: + S60VideoOverlay(QObject *parent = 0); + ~S60VideoOverlay(); + + WId winId() const; + void setWinId(WId id); + + QRect displayRect() const; + void setDisplayRect(const QRect &rect); + + bool isFullScreen() const; + void setFullScreen(bool fullScreen); + + QSize nativeSize() const; + + Qt::AspectRatioMode aspectRatioMode() const; + void setAspectRatioMode(Qt::AspectRatioMode mode); + + QSize customAspectRatio() const; + void setCustomAspectRatio(const QSize &customRatio); + + void repaint(); + + int brightness() const; + void setBrightness(int brightness); + + int contrast() const; + void setContrast(int contrast); + + int hue() const; + void setHue(int hue); + + int saturation() const; + void setSaturation(int saturation); + + QAbstractVideoSurface *surface() const; + +private slots: + void surfaceFormatChanged(); + +private: + void setScaledDisplayRect(); + + S60VideoSurface *m_surface; + Qt::AspectRatioMode m_aspectRatioMode; + QRect m_displayRect; + QSize m_aspectRatio; + bool m_fullScreen; +}; + +QT_END_NAMESPACE + +#endif // S60VIDEOOVERLAY_H diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.cpp new file mode 100644 index 0000000..134d5a0 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.cpp @@ -0,0 +1,486 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "s60videoplayersession.h" +#include "s60videowidget.h" +#include "s60mediaplayerservice.h" +#include "s60videooverlay.h" + +#include <QtCore/qdebug.h> +#include <QtGui/qwidget.h> +#include <QtCore/qtimer.h> +#include <QApplication> + +#include <coecntrl.h> +#include <coemain.h> // For CCoeEnv +#include <w32std.h> +#include <mmf/common/mmfcontrollerframeworkbase.h> + +#include <AudioOutput.h> +#include <MAudioOutputObserver.h> + +QT_BEGIN_NAMESPACE + +S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service) + : S60MediaPlayerSession(service) + , m_player(0) + , m_rect(0, 0, 0, 0) + , m_output(QVideoOutputControl::NoOutput) + , m_windowId(0) + , m_dsaActive(false) + , m_dsaStopped(false) + , m_wsSession(CCoeEnv::Static()->WsSession()) + , m_screenDevice(*CCoeEnv::Static()->ScreenDevice()) + , m_window(0) + , m_service(*service) + , m_aspectRatioMode(Qt::KeepAspectRatio) + , m_originalSize(1, 1) + , m_audioOutput(0) + , m_audioEndpoint("Default") +{ + resetNativeHandles(); + QT_TRAP_THROWING(m_player = CVideoPlayerUtility::NewL( + *this, + 0, + EMdaPriorityPreferenceNone, + m_wsSession, + m_screenDevice, + *m_window, + m_rect, + m_rect)); + m_dsaActive = true; + m_player->RegisterForVideoLoadingNotification(*this); +} + +S60VideoPlayerSession::~S60VideoPlayerSession() +{ +#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) + if (m_audioOutput) + m_audioOutput->UnregisterObserver(*this); + delete m_audioOutput; +#endif + m_player->Close(); + delete m_player; +} + +void S60VideoPlayerSession::doLoadL(const TDesC &path) +{ + // m_audioOutput needs to be reinitialized after MapcInitComplete + if (m_audioOutput) + m_audioOutput->UnregisterObserver(*this); + delete m_audioOutput; + m_audioOutput = NULL; + + m_player->OpenFileL(path); +} + +void S60VideoPlayerSession::doLoadUrlL(const TDesC &path) +{ + // m_audioOutput needs to be reinitialized after MapcInitComplete + if (m_audioOutput) + m_audioOutput->UnregisterObserver(*this); + delete m_audioOutput; + m_audioOutput = NULL; + + m_player->OpenUrlL(path); +} + +int S60VideoPlayerSession::doGetBufferStatusL() const +{ + int progress = 0; + m_player->GetVideoLoadingProgressL(progress); + return progress; +} + +qint64 S60VideoPlayerSession::doGetDurationL() const +{ + return m_player->DurationL().Int64() / qint64(1000); +} + +void S60VideoPlayerSession::setVideoRenderer(QObject *videoOutput) +{ + Q_UNUSED(videoOutput) + QVideoOutputControl *videoControl = qobject_cast<QVideoOutputControl *>(m_service.control(QVideoOutputControl_iid)); + + //Render changes + if (m_output != videoControl->output()) { + + if (m_output == QVideoOutputControl::WidgetOutput) { + S60VideoWidgetControl *widgetControl = qobject_cast<S60VideoWidgetControl *>(m_service.control(QVideoWidgetControl_iid)); + disconnect(widgetControl, SIGNAL(widgetUpdated()), this, SLOT(resetVideoDisplay())); + disconnect(widgetControl, SIGNAL(beginVideoWindowNativePaint()), this, SLOT(suspendDirectScreenAccess())); + disconnect(widgetControl, SIGNAL(endVideoWindowNativePaint()), this, SLOT(resumeDirectScreenAccess())); + disconnect(this, SIGNAL(stateChanged(QMediaPlayer::State)), widgetControl, SLOT(videoStateChanged(QMediaPlayer::State))); + } + + if (videoControl->output() == QVideoOutputControl::WidgetOutput) { + S60VideoWidgetControl *widgetControl = qobject_cast<S60VideoWidgetControl *>(m_service.control(QVideoWidgetControl_iid)); + connect(widgetControl, SIGNAL(widgetUpdated()), this, SLOT(resetVideoDisplay())); + connect(widgetControl, SIGNAL(beginVideoWindowNativePaint()), this, SLOT(suspendDirectScreenAccess())); + connect(widgetControl, SIGNAL(endVideoWindowNativePaint()), this, SLOT(resumeDirectScreenAccess())); + connect(this, SIGNAL(stateChanged(QMediaPlayer::State)), widgetControl, SLOT(videoStateChanged(QMediaPlayer::State))); + } + + m_output = videoControl->output(); + resetVideoDisplay(); + } +} + +bool S60VideoPlayerSession::resetNativeHandles() +{ + QVideoOutputControl* videoControl = qobject_cast<QVideoOutputControl *>(m_service.control(QVideoOutputControl_iid)); + WId newId = 0; + TRect newRect = TRect(0,0,0,0); + Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio; + + if (videoControl->output() == QVideoOutputControl::WidgetOutput) { + S60VideoWidgetControl* widgetControl = qobject_cast<S60VideoWidgetControl *>(m_service.control(QVideoWidgetControl_iid)); + QWidget *videoWidget = widgetControl->videoWidget(); + newId = widgetControl->videoWidgetWId(); + newRect = QRect2TRect(QRect(videoWidget->mapToGlobal(videoWidget->pos()), videoWidget->size())); + aspectRatioMode = widgetControl->aspectRatioMode(); + } else if (videoControl->output() == QVideoOutputControl::WindowOutput) { + S60VideoOverlay* windowControl = qobject_cast<S60VideoOverlay *>(m_service.control(QVideoWindowControl_iid)); + newId = windowControl->winId(); + newRect = TRect( newId->DrawableWindow()->AbsPosition(), newId->DrawableWindow()->Size()); + } else { + if (QApplication::activeWindow()) + newId = QApplication::activeWindow()->effectiveWinId(); + + if (!newId && QApplication::allWidgets().count()) + newId = QApplication::allWidgets().at(0)->effectiveWinId(); + + Q_ASSERT(newId != 0); + } + + if (newRect == m_rect && newId == m_windowId && aspectRatioMode == m_aspectRatioMode) + return false; + + if (newId) { + m_rect = newRect; + m_windowId = newId; + m_window = m_windowId->DrawableWindow(); + m_aspectRatioMode = aspectRatioMode; + return true; + } + return false; +} + +bool S60VideoPlayerSession::isVideoAvailable() const +{ +#ifdef PRE_S60_50_PLATFORM + return true; // this is not support in pre 5th platforms +#else + if (m_player) + return m_player->VideoEnabledL(); + else + return false; +#endif +} + +bool S60VideoPlayerSession::isAudioAvailable() const +{ + if (m_player) + return m_player->AudioEnabledL(); + else + return false; +} + +void S60VideoPlayerSession::doPlay() +{ + m_player->Play(); +} + +void S60VideoPlayerSession::doPauseL() +{ + m_player->PauseL(); +} + +void S60VideoPlayerSession::doStop() +{ + m_player->Stop(); +} + +qint64 S60VideoPlayerSession::doGetPositionL() const +{ + return m_player->PositionL().Int64() / qint64(1000); +} + +void S60VideoPlayerSession::doSetPositionL(qint64 microSeconds) +{ + m_player->SetPositionL(TTimeIntervalMicroSeconds(microSeconds)); +} + +void S60VideoPlayerSession::doSetVolumeL(int volume) +{ + m_player->SetVolumeL((volume / 100.0)* m_player->MaxVolume()); +} + +QPair<qreal, qreal> S60VideoPlayerSession::scaleFactor() +{ + QSize scaled = m_originalSize; + if (m_aspectRatioMode == Qt::IgnoreAspectRatio) + scaled.scale(TRect2QRect(m_rect).size(), Qt::IgnoreAspectRatio); + else if(m_aspectRatioMode == Qt::KeepAspectRatio) + scaled.scale(TRect2QRect(m_rect).size(), Qt::KeepAspectRatio); + + qreal width = qreal(scaled.width()) / qreal(m_originalSize.width()) * qreal(100); + qreal height = qreal(scaled.height()) / qreal(m_originalSize.height()) * qreal(100); + + return QPair<qreal, qreal>(width, height); +} + +void S60VideoPlayerSession::startDirectScreenAccess() +{ + if(m_dsaActive) + return; + + TRAPD(err, m_player->StartDirectScreenAccessL()); + if(err == KErrNone) + m_dsaActive = true; + setError(err); +} + +bool S60VideoPlayerSession::stopDirectScreenAccess() +{ + if(!m_dsaActive) + return false; + + TRAPD(err, m_player->StopDirectScreenAccessL()); + if(err == KErrNone) + m_dsaActive = false; + + setError(err); + return true; +} + +void S60VideoPlayerSession::MvpuoOpenComplete(TInt aError) +{ + setError(aError); + m_player->Prepare(); +} + +void S60VideoPlayerSession::MvpuoPrepareComplete(TInt aError) +{ + setError(aError); + TRAPD(err, + m_player->SetDisplayWindowL(m_wsSession, + m_screenDevice, + *m_window, + m_rect, + m_rect); + TSize originalSize; + m_player->VideoFrameSizeL(originalSize); + m_originalSize = QSize(originalSize.iWidth, originalSize.iHeight); + m_player->SetScaleFactorL(scaleFactor().first, scaleFactor().second, true)); + + setError(err); + m_dsaActive = true; +#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) + TRAP(err, + m_audioOutput = CAudioOutput::NewL(*m_player); + m_audioOutput->RegisterObserverL(*this); + ); + setActiveEndpoint(m_audioEndpoint); + setError(err); +#endif + loaded(); +} + +void S60VideoPlayerSession::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError) +{ + Q_UNUSED(aFrame); + Q_UNUSED(aError); +} + +void S60VideoPlayerSession::MvpuoPlayComplete(TInt aError) +{ + setError(aError); + endOfMedia(); +} + +void S60VideoPlayerSession::MvpuoEvent(const TMMFEvent &aEvent) +{ + Q_UNUSED(aEvent); +} + +void S60VideoPlayerSession::updateMetaDataEntriesL() +{ + metaDataEntries().clear(); + int numberOfMetaDataEntries = 0; + + numberOfMetaDataEntries = m_player->NumberOfMetaDataEntriesL(); + + for (int i = 0; i < numberOfMetaDataEntries; i++) { + CMMFMetaDataEntry *entry = NULL; + entry = m_player->MetaDataEntryL(i); + metaDataEntries().insert(TDesC2QString(entry->Name()), TDesC2QString(entry->Value())); + delete entry; + } + emit metaDataChanged(); +} + +void S60VideoPlayerSession::resetVideoDisplay() +{ + if (resetNativeHandles()) { + TRAPD(err, + m_player->SetDisplayWindowL(m_wsSession, + m_screenDevice, + *m_window, + m_rect, + m_rect)); + setError(err); + if( mediaStatus() == QMediaPlayer::LoadedMedia + || mediaStatus() == QMediaPlayer::StalledMedia + || mediaStatus() == QMediaPlayer::BufferingMedia + || mediaStatus() == QMediaPlayer::BufferedMedia + || mediaStatus() == QMediaPlayer::EndOfMedia) { + TRAPD(err, m_player->SetScaleFactorL(scaleFactor().first, scaleFactor().second, true)); + setError(err); + } + } +} + +void S60VideoPlayerSession::suspendDirectScreenAccess() +{ + m_dsaStopped = stopDirectScreenAccess(); +} + +void S60VideoPlayerSession::resumeDirectScreenAccess() +{ + if(!m_dsaStopped) + return; + + startDirectScreenAccess(); + m_dsaStopped = false; +} + +void S60VideoPlayerSession::MvloLoadingStarted() +{ + buffering(); +} + +void S60VideoPlayerSession::MvloLoadingComplete() +{ + buffered(); +} + +void S60VideoPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint) +{ + m_audioEndpoint = audioEndpoint; +} + +QString S60VideoPlayerSession::activeEndpoint() const +{ + QString outputName = QString("Default"); +#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) + if (m_audioOutput) { + CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput(); + outputName = qStringFromTAudioOutputPreference(output); + } +#endif + return outputName; +} + +QString S60VideoPlayerSession::defaultEndpoint() const +{ + QString outputName = QString("Default"); +#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) + if (m_audioOutput) { + CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput(); + outputName = qStringFromTAudioOutputPreference(output); + } +#endif + return outputName; +} + +void S60VideoPlayerSession::setActiveEndpoint(const QString& name) +{ + CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference; + + if (name == QString("Default")) + output = CAudioOutput::ENoPreference; + else if (name == QString("All")) + output = CAudioOutput::EAll; + else if (name == QString("None")) + output = CAudioOutput::ENoOutput; + else if (name == QString("Earphone")) + output = CAudioOutput::EPrivate; + else if (name == QString("Speaker")) + output = CAudioOutput::EPublic; +#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER) + if (m_audioOutput) { + TRAPD(err, m_audioOutput->SetAudioOutputL(output)); + setError(err); + + if (m_audioEndpoint != name) { + m_audioEndpoint = name; + emit activeEndpointChanged(name); + } + } +#endif +} + +void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput, + CAudioOutput::TAudioOutputPreference aNewDefault ) +{ + // Emit already implemented in setActiveEndpoint function + Q_UNUSED(aAudioOutput) + Q_UNUSED(aNewDefault) +} + +QString S60VideoPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const +{ + if (output == CAudioOutput::ENoPreference) + return QString("Default"); + else if (output == CAudioOutput::EAll) + return QString("All"); + else if (output == CAudioOutput::ENoOutput) + return QString("None"); + else if (output == CAudioOutput::EPrivate) + return QString("Earphone"); + else if (output == CAudioOutput::EPublic) + return QString("Speaker"); + return QString("Default"); +} + +QT_END_NAMESPACE + diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.h new file mode 100644 index 0000000..52e311a --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.h @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60VIDEOPLAYERSESSION_H +#define S60VIDEOPLAYERSESSION_H + +#include "s60mediaplayersession.h" +#include "s60mediaplayeraudioendpointselector.h" +#include <videoplayer.h> +#include <QtGui/qwidget.h> +#include <qvideowidget.h> + +#include <AudioOutput.h> +#include <MAudioOutputObserver.h> + +QT_BEGIN_NAMESPACE + +class QTimer; + +class S60VideoPlayerSession : public S60MediaPlayerSession, + public MVideoPlayerUtilityObserver, + public MVideoLoadingObserver, + public MAudioOutputObserver +{ + Q_OBJECT + +public: + S60VideoPlayerSession(QMediaService *service); + ~S60VideoPlayerSession(); + + //From S60MediaPlayerSession + bool isVideoAvailable() const; + bool isAudioAvailable() const; + void setVideoRenderer(QObject *renderer); + + //From MVideoLoadingObserver + void MvloLoadingStarted(); + void MvloLoadingComplete(); + + // From MAudioOutputObserver + void DefaultAudioOutputChanged(CAudioOutput& aAudioOutput, + CAudioOutput::TAudioOutputPreference aNewDefault); + +public: + // From S60MediaPlayerAudioEndpointSelector + QString activeEndpoint() const; + QString defaultEndpoint() const; +public Q_SLOTS: + void setActiveEndpoint(const QString& name); +Q_SIGNALS: + void activeEndpointChanged(const QString &name); + +protected: + //From S60MediaPlayerSession + void doLoadL(const TDesC &path); + void doLoadUrlL(const TDesC &path); + void doPlay(); + void doStop(); + void doPauseL(); + void doSetVolumeL(int volume); + qint64 doGetPositionL() const; + void doSetPositionL(qint64 microSeconds); + void updateMetaDataEntriesL(); + int doGetBufferStatusL() const; + qint64 doGetDurationL() const; + void doSetAudioEndpoint(const QString& audioEndpoint); + +private slots: + void resetVideoDisplay(); + void suspendDirectScreenAccess(); + void resumeDirectScreenAccess(); + +private: + bool resetNativeHandles(); + QPair<qreal, qreal> scaleFactor(); + void startDirectScreenAccess(); + bool stopDirectScreenAccess(); + QString qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const; + + + // From MVideoPlayerUtilityObserver + void MvpuoOpenComplete(TInt aError); + void MvpuoPrepareComplete(TInt aError); + void MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError); + void MvpuoPlayComplete(TInt aError); + void MvpuoEvent(const TMMFEvent &aEvent); + +private: + // Qwn + CVideoPlayerUtility *m_player; + TRect m_rect; + QVideoOutputControl::Output m_output; + WId m_windowId; + bool m_dsaActive; + bool m_dsaStopped; + + //Reference + RWsSession &m_wsSession; + CWsScreenDevice &m_screenDevice; + RWindowBase *m_window; + QMediaService &m_service; + Qt::AspectRatioMode m_aspectRatioMode; + QSize m_originalSize; + CAudioOutput *m_audioOutput; + QString m_audioEndpoint; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.cpp new file mode 100644 index 0000000..269dd43 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.cpp @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "s60videorenderer.h" + +#include <QtCore/qcoreevent.h> +#include <QtGui/qapplication.h> + +QT_BEGIN_NAMESPACE + +S60VideoRenderer::S60VideoRenderer(QObject *parent) + : QVideoRendererControl(parent) +{ +} + +S60VideoRenderer::~S60VideoRenderer() +{ +} + + +QAbstractVideoSurface *S60VideoRenderer::surface() const +{ + return m_surface; +} + +void S60VideoRenderer::setSurface(QAbstractVideoSurface *surface) +{ + m_surface = surface; +} + +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.h new file mode 100644 index 0000000..260dc8b --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60VIDEORENDERER_H +#define S60VIDEORENDERER_H + +#include <QtCore/qobject.h> +#include <qvideorenderercontrol.h> + +QT_BEGIN_NAMESPACE + +class S60VideoRenderer : public QVideoRendererControl +{ + Q_OBJECT + +public: + S60VideoRenderer(QObject *parent = 0); + virtual ~S60VideoRenderer(); + + QAbstractVideoSurface *surface() const; + void setSurface(QAbstractVideoSurface *surface); + +private: + + QAbstractVideoSurface *m_surface; +}; + +QT_END_NAMESPACE + +#endif // S60VIDEORENDERER_H diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.cpp new file mode 100644 index 0000000..bfa7a13 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.cpp @@ -0,0 +1,478 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//#include <QtGui/qx11info_x11.h> + +#include "s60videosurface.h" + +QT_BEGIN_NAMESPACE + +/*struct XvFormatRgb +{ + QVideoFrame::PixelFormat pixelFormat; + int bits_per_pixel; + int format; + int num_planes; + + int depth; + unsigned int red_mask; + unsigned int green_mask; + unsigned int blue_mask; + +};*/ +/* +bool operator ==(const XvImageFormatValues &format, const XvFormatRgb &rgb) +{ + return format.type == XvRGB + && format.bits_per_pixel == rgb.bits_per_pixel + && format.format == rgb.format + && format.num_planes == rgb.num_planes + && format.depth == rgb.depth + && format.red_mask == rgb.red_mask + && format.blue_mask == rgb.blue_mask; +} + +static const XvFormatRgb qt_xvRgbLookup[] = +{ + { QVideoFrame::Format_ARGB32, 32, XvPacked, 1, 32, 0x00FF0000, 0x0000FF00, 0x000000FF }, + { QVideoFrame::Format_RGB32 , 32, XvPacked, 1, 24, 0x00FF0000, 0x0000FF00, 0x000000FF }, + { QVideoFrame::Format_RGB24 , 24, XvPacked, 1, 24, 0x00FF0000, 0x0000FF00, 0x000000FF }, + { QVideoFrame::Format_RGB565, 16, XvPacked, 1, 16, 0x0000F800, 0x000007E0, 0x0000001F }, + { QVideoFrame::Format_BGRA32, 32, XvPacked, 1, 32, 0xFF000000, 0x00FF0000, 0x0000FF00 }, + { QVideoFrame::Format_BGR32 , 32, XvPacked, 1, 24, 0x00FF0000, 0x0000FF00, 0x000000FF }, + { QVideoFrame::Format_BGR24 , 24, XvPacked, 1, 24, 0x00FF0000, 0x0000FF00, 0x000000FF }, + { QVideoFrame::Format_BGR565, 16, XvPacked, 1, 16, 0x0000F800, 0x000007E0, 0x0000001F } +}; + +struct XvFormatYuv +{ + QVideoFrame::PixelFormat pixelFormat; + int bits_per_pixel; + int format; + int num_planes; + + unsigned int y_sample_bits; + unsigned int u_sample_bits; + unsigned int v_sample_bits; + unsigned int horz_y_period; + unsigned int horz_u_period; + unsigned int horz_v_period; + unsigned int vert_y_period; + unsigned int vert_u_period; + unsigned int vert_v_period; + char component_order[32]; +}; + +bool operator ==(const XvImageFormatValues &format, const XvFormatYuv &yuv) +{ + return format.type == XvYUV + && format.bits_per_pixel == yuv.bits_per_pixel + && format.format == yuv.format + && format.num_planes == yuv.num_planes + && format.y_sample_bits == yuv.y_sample_bits + && format.u_sample_bits == yuv.u_sample_bits + && format.v_sample_bits == yuv.v_sample_bits + && format.horz_y_period == yuv.horz_y_period + && format.horz_u_period == yuv.horz_u_period + && format.horz_v_period == yuv.horz_v_period + && format.horz_y_period == yuv.vert_y_period + && format.vert_u_period == yuv.vert_u_period + && format.vert_v_period == yuv.vert_v_period + && qstrncmp(format.component_order, yuv.component_order, 32) == 0; +} + +static const XvFormatYuv qt_xvYuvLookup[] = +{ + { QVideoFrame::Format_YUV444 , 24, XvPacked, 1, 8, 8, 8, 1, 1, 1, 1, 1, 1, "YUV" }, + { QVideoFrame::Format_YUV420P, 12, XvPlanar, 3, 8, 8, 8, 1, 2, 2, 1, 2, 2, "YUV" }, + { QVideoFrame::Format_YV12 , 12, XvPlanar, 3, 8, 8, 8, 1, 2, 2, 1, 2, 2, "YVU" }, + { QVideoFrame::Format_UYVY , 16, XvPacked, 1, 8, 8, 8, 1, 2, 2, 1, 1, 1, "UYVY" }, + { QVideoFrame::Format_YUYV , 16, XvPacked, 1, 8, 8, 8, 1, 2, 2, 1, 1, 1, "YUYV" }, + { QVideoFrame::Format_NV12 , 12, XvPlanar, 2, 8, 8, 8, 1, 2, 2, 1, 2, 2, "YUV" }, + { QVideoFrame::Format_NV12 , 12, XvPlanar, 2, 8, 8, 8, 1, 2, 2, 1, 2, 2, "YVU" }, + { QVideoFrame::Format_Y8 , 8 , XvPlanar, 1, 8, 0, 0, 1, 0, 0, 1, 0, 0, "Y" } +}; +*/ + +S60VideoSurface::S60VideoSurface(QObject *parent) + : QAbstractVideoSurface(parent) + , m_winId(0) + //, m_portId(0) + //, m_gc(0) + //, m_image(0) +{ +} + +S60VideoSurface::~S60VideoSurface() +{ + /*if (m_gc) + XFreeGC(QX11Info::display(), m_gc); + + if (m_portId != 0) + XvUngrabPort(QX11Info::display(), m_portId, 0); + */ +} + +WId S60VideoSurface::winId() const +{ + return m_winId; +} + +void S60VideoSurface::setWinId(WId id) +{ + /*if (id == m_winId) + return; + + if (m_image) + XFree(m_image); + + if (m_gc) { + XFreeGC(QX11Info::display(), m_gc); + m_gc = 0; + } + + if (m_portId != 0) + XvUngrabPort(QX11Info::display(), m_portId, 0); + + m_supportedPixelFormats.clear(); + m_formatIds.clear(); + + m_winId = id; + + if (m_winId && findPort()) { + querySupportedFormats(); + + m_gc = XCreateGC(QX11Info::display(), m_winId, 0, 0); + + if (m_image) { + m_image = 0; + + if (!start(surfaceFormat())) + QAbstractVideoSurface::stop(); + } + } else if (m_image) { + m_image = 0; + + QAbstractVideoSurface::stop(); + }*/ +} + +QRect S60VideoSurface::displayRect() const +{ + return m_displayRect; +} + +void S60VideoSurface::setDisplayRect(const QRect &rect) +{ + m_displayRect = rect; +} + +int S60VideoSurface::brightness() const +{ + //return getAttribute("XV_BRIGHTNESS", m_brightnessRange.first, m_brightnessRange.second); +} + +void S60VideoSurface::setBrightness(int brightness) +{ + //setAttribute("XV_BRIGHTNESS", brightness, m_brightnessRange.first, m_brightnessRange.second); +} + +int S60VideoSurface::contrast() const +{ + //return getAttribute("XV_CONTRAST", m_contrastRange.first, m_contrastRange.second); +} + +void S60VideoSurface::setContrast(int contrast) +{ + //setAttribute("XV_CONTRAST", contrast, m_contrastRange.first, m_contrastRange.second); +} + +int S60VideoSurface::hue() const +{ + //return getAttribute("XV_HUE", m_hueRange.first, m_hueRange.second); +} + +void S60VideoSurface::setHue(int hue) +{ + // setAttribute("XV_HUE", hue, m_hueRange.first, m_hueRange.second); +} + +int S60VideoSurface::saturation() const +{ + //return getAttribute("XV_SATURATION", m_saturationRange.first, m_saturationRange.second); +} + +void S60VideoSurface::setSaturation(int saturation) +{ + //setAttribute("XV_SATURATION", saturation, m_saturationRange.first, m_saturationRange.second); +} + +int S60VideoSurface::getAttribute(const char *attribute, int minimum, int maximum) const +{ + /*if (m_portId != 0) { + Display *display = QX11Info::display(); + + Atom atom = XInternAtom(display, attribute, True); + + int value = 0; + + XvGetPortAttribute(display, m_portId, atom, &value); + + return redistribute(value, minimum, maximum, -100, 100); + } else { + return 0; + }*/ +} + +void S60VideoSurface::setAttribute(const char *attribute, int value, int minimum, int maximum) +{ + /* if (m_portId != 0) { + Display *display = QX11Info::display(); + + Atom atom = XInternAtom(display, attribute, True); + + XvSetPortAttribute( + display, m_portId, atom, redistribute(value, -100, 100, minimum, maximum)); + }*/ +} + +int S60VideoSurface::redistribute( + int value, int fromLower, int fromUpper, int toLower, int toUpper) +{ + /*return fromUpper != fromLower + ? ((value - fromLower) * (toUpper - toLower) / (fromUpper - fromLower)) + toLower + : 0;*/ +} + +QList<QVideoFrame::PixelFormat> S60VideoSurface::supportedPixelFormats( + QAbstractVideoBuffer::HandleType handleType) const +{ + /*return handleType == QAbstractVideoBuffer::NoHandle + ? m_supportedPixelFormats + : QList<QVideoFrame::PixelFormat>();*/ +} + +bool S60VideoSurface::start(const QVideoSurfaceFormat &format) +{ + /*if (m_image) + XFree(m_image); + + int xvFormatId = 0; + for (int i = 0; i < m_supportedPixelFormats.count(); ++i) { + if (m_supportedPixelFormats.at(i) == format.pixelFormat()) { + xvFormatId = m_formatIds.at(i); + break; + } + } + + if (xvFormatId == 0) { + setError(UnsupportedFormatError); + } else { + XvImage *image = XvCreateImage( + QX11Info::display(), + m_portId, + xvFormatId, + 0, + format.frameWidth(), + format.frameHeight()); + + if (!image) { + setError(ResourceError); + } else { + m_viewport = format.viewport(); + m_image = image; + + return QAbstractVideoSurface::start(format); + } + } + + if (m_image) { + m_image = 0; + + QAbstractVideoSurface::stop(); + } +*/ + return false; +} + +void S60VideoSurface::stop() +{/* + if (m_image) { + XFree(m_image); + m_image = 0; + + QAbstractVideoSurface::stop(); + }*/ +} + +bool S60VideoSurface::present(const QVideoFrame &frame) +{/* + if (!m_image) { + setError(StoppedError); + return false; + } else if (m_image->width != frame.width() || m_image->height != frame.height()) { + setError(IncorrectFormatError); + return false; + } else { + QVideoFrame frameCopy(frame); + + if (!frameCopy.map(QAbstractVideoBuffer::ReadOnly)) { + setError(IncorrectFormatError); + return false; + } else { + bool presented = false; + + if (m_image->data_size > frame.numBytes()) { + qWarning("Insufficient frame buffer size"); + setError(IncorrectFormatError); + } else if (m_image->num_planes > 0 && m_image->pitches[0] != frame.bytesPerLine()) { + qWarning("Incompatible frame pitches"); + setError(IncorrectFormatError); + } else { + m_image->data = reinterpret_cast<char *>(frameCopy.bits()); + + XvPutImage( + QX11Info::display(), + m_portId, + m_winId, + m_gc, + m_image, + m_viewport.x(), + m_viewport.y(), + m_viewport.width(), + m_viewport.height(), + m_displayRect.x(), + m_displayRect.y(), + m_displayRect.width(), + m_displayRect.height()); + + m_image->data = 0; + + presented = true; + } + + frameCopy.unmap(); + + return presented; + } + }*/ +} + +bool S60VideoSurface::findPort() +{/* + unsigned int count = 0; + XvAdaptorInfo *adaptors = 0; + bool portFound = false; + + if (XvQueryAdaptors(QX11Info::display(), m_winId, &count, &adaptors) == Success) { + for (unsigned int i = 0; i < count && !portFound; ++i) { + if (adaptors[i].type & XvImageMask) { + m_portId = adaptors[i].base_id; + + for (unsigned int j = 0; j < adaptors[i].num_ports && !portFound; ++j, ++m_portId) + portFound = XvGrabPort(QX11Info::display(), m_portId, 0) == Success; + } + } + XvFreeAdaptorInfo(adaptors); + } + + return portFound;*/ +} + +void S60VideoSurface::querySupportedFormats() +{/* + int count = 0; + if (XvImageFormatValues *imageFormats = XvListImageFormats( + QX11Info::display(), m_portId, &count)) { + const int rgbCount = sizeof(qt_xvRgbLookup) / sizeof(XvFormatRgb); + const int yuvCount = sizeof(qt_xvYuvLookup) / sizeof(XvFormatYuv); + + for (int i = 0; i < count; ++i) { + switch (imageFormats[i].type) { + case XvRGB: + for (int j = 0; j < rgbCount; ++j) { + if (imageFormats[i] == qt_xvRgbLookup[j]) { + m_supportedPixelFormats.append(qt_xvRgbLookup[j].pixelFormat); + m_formatIds.append(imageFormats[i].id); + break; + } + } + break; + case XvYUV: + for (int j = 0; j < yuvCount; ++j) { + if (imageFormats[i] == qt_xvYuvLookup[j]) { + m_supportedPixelFormats.append(qt_xvYuvLookup[j].pixelFormat); + m_formatIds.append(imageFormats[i].id); + break; + } + } + break; + } + } + XFree(imageFormats); + } + + m_brightnessRange = qMakePair(0, 0); + m_contrastRange = qMakePair(0, 0); + m_hueRange = qMakePair(0, 0); + m_saturationRange = qMakePair(0, 0); + + if (XvAttribute *attributes = XvQueryPortAttributes(QX11Info::display(), m_portId, &count)) { + for (int i = 0; i < count; ++i) { + if (qstrcmp(attributes[i].name, "XV_BRIGHTNESS") == 0) + m_brightnessRange = qMakePair(attributes[i].min_value, attributes[i].max_value); + else if (qstrcmp(attributes[i].name, "XV_CONTRAST") == 0) + m_contrastRange = qMakePair(attributes[i].min_value, attributes[i].max_value); + else if (qstrcmp(attributes[i].name, "XV_HUE") == 0) + m_hueRange = qMakePair(attributes[i].min_value, attributes[i].max_value); + else if (qstrcmp(attributes[i].name, "XV_SATURATION") == 0) + m_saturationRange = qMakePair(attributes[i].min_value, attributes[i].max_value); + } + + XFree(attributes); + }*/ +} + +bool S60VideoSurface::isFormatSupported(const QVideoSurfaceFormat &format) const +{ +} + +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.h new file mode 100644 index 0000000..836e52f --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.h @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60VIDEOSURFACE_H +#define S60VIDEOSURFACE_H + +#include <QtGui/qwidget.h> +#include <QtMultimedia/qabstractvideosurface.h> + +QT_BEGIN_NAMESPACE + +class QVideoSurfaceFormat; + +class S60VideoSurface : public QAbstractVideoSurface +{ + Q_OBJECT +public: + S60VideoSurface(QObject *parent = 0); + ~S60VideoSurface(); + + WId winId() const; + void setWinId(WId id); + + QRect displayRect() const; + void setDisplayRect(const QRect &rect); + + int brightness() const; + void setBrightness(int brightness); + + int contrast() const; + void setContrast(int contrast); + + int hue() const; + void setHue(int hue); + + int saturation() const; + void setSaturation(int saturation); + + QList<QVideoFrame::PixelFormat> supportedPixelFormats( + QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const; + + bool isFormatSupported(const QVideoSurfaceFormat &format) const; + + bool start(const QVideoSurfaceFormat &format); + void stop(); + + bool present(const QVideoFrame &frame); + +private: + WId m_winId; + //XvPortID m_portId; + //GC m_gc; + //XvImage *m_image; + QList<QVideoFrame::PixelFormat> m_supportedPixelFormats; + QVector<int> m_formatIds; + QRect m_viewport; + QRect m_displayRect; + QPair<int, int> m_brightnessRange; + QPair<int, int> m_contrastRange; + QPair<int, int> m_hueRange; + QPair<int, int> m_saturationRange; + + bool findPort(); + void querySupportedFormats(); + + int getAttribute(const char *attribute, int minimum, int maximum) const; + void setAttribute(const char *attribute, int value, int minimum, int maximum); + + static int redistribute(int value, int fromLower, int fromUpper, int toLower, int toUpper); +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.cpp new file mode 100644 index 0000000..84000d5 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.cpp @@ -0,0 +1,208 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "s60videowidget.h" +#include <QtGui/private/qwidget_p.h> +#include <QEvent> +#include <coemain.h> // For CCoeEnv + +QT_BEGIN_NAMESPACE + +QBlackWidget::QBlackWidget(QWidget *parent) + : QWidget(parent) +{ + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + setAttribute(Qt::WA_OpaquePaintEvent, true); + setAttribute(Qt::WA_NoSystemBackground, true); + setAutoFillBackground(false); + setPalette(QPalette(Qt::black)); +#if QT_VERSION >= 0x040601 && !defined(__WINSCW__) + qt_widget_private(this)->extraData()->nativePaintMode = QWExtra::ZeroFill; + qt_widget_private(this)->extraData()->receiveNativePaintEvents = true; +#endif +} + +QBlackWidget::~QBlackWidget() +{ +} + +void QBlackWidget::beginNativePaintEvent(const QRect& /*controlRect*/) +{ + emit beginVideoWindowNativePaint(); +} + +void QBlackWidget::endNativePaintEvent(const QRect& /*controlRect*/) +{ + CCoeEnv::Static()->WsSession().Flush(); + emit endVideoWindowNativePaint(); +} + +void QBlackWidget::paintEvent(QPaintEvent *event) +{ + Q_UNUSED(event); + // Do nothing +} + +S60VideoWidgetControl::S60VideoWidgetControl(QObject *parent) + : QVideoWidgetControl(parent) + , m_widget(0) + , m_aspectRatioMode(Qt::KeepAspectRatio) +{ + m_widget = new QBlackWidget(); + connect(m_widget, SIGNAL(beginVideoWindowNativePaint()), this, SIGNAL(beginVideoWindowNativePaint())); + connect(m_widget, SIGNAL(endVideoWindowNativePaint()), this, SIGNAL(endVideoWindowNativePaint())); + m_widget->installEventFilter(this); + m_widget->winId(); +} + +S60VideoWidgetControl::~S60VideoWidgetControl() +{ + delete m_widget; +} + +QWidget *S60VideoWidgetControl::videoWidget() +{ + return m_widget; +} + +Qt::AspectRatioMode S60VideoWidgetControl::aspectRatioMode() const +{ + return m_aspectRatioMode; +} + +void S60VideoWidgetControl::setAspectRatioMode(Qt::AspectRatioMode ratio) +{ + if (m_aspectRatioMode == ratio) + return; + + m_aspectRatioMode = ratio; + emit widgetUpdated(); +} + +bool S60VideoWidgetControl::isFullScreen() const +{ + return m_widget->isFullScreen(); +} + +void S60VideoWidgetControl::setFullScreen(bool fullScreen) +{ + emit fullScreenChanged(fullScreen); +} + +int S60VideoWidgetControl::brightness() const +{ + return 0; +} + +void S60VideoWidgetControl::setBrightness(int brightness) +{ + Q_UNUSED(brightness); +} + +int S60VideoWidgetControl::contrast() const +{ + return 0; +} + +void S60VideoWidgetControl::setContrast(int contrast) +{ + Q_UNUSED(contrast); +} + +int S60VideoWidgetControl::hue() const +{ + return 0; +} + +void S60VideoWidgetControl::setHue(int hue) +{ + Q_UNUSED(hue); +} + +int S60VideoWidgetControl::saturation() const +{ + return 0; +} + +void S60VideoWidgetControl::setSaturation(int saturation) +{ + Q_UNUSED(saturation); +} + +bool S60VideoWidgetControl::eventFilter(QObject *object, QEvent *e) +{ + if (object == m_widget) { + if ( e->type() == QEvent::Resize + || e->type() == QEvent::Move + || e->type() == QEvent::WinIdChange + || e->type() == QEvent::ParentChange + || e->type() == QEvent::Show) + emit widgetUpdated(); + } + return false; +} + +WId S60VideoWidgetControl::videoWidgetWId() +{ + if (m_widget->internalWinId()) + return m_widget->internalWinId(); + + if (m_widget->effectiveWinId()) + return m_widget->effectiveWinId(); + + return NULL; +} + +void S60VideoWidgetControl::videoStateChanged(QMediaPlayer::State state) +{ + if (state == QMediaPlayer::StoppedState) { +#if QT_VERSION <= 0x040600 && !defined(FF_QT) + qt_widget_private(m_widget)->extraData()->disableBlit = false; +#endif + m_widget->repaint(); + } else if (state == QMediaPlayer::PlayingState) { +#if QT_VERSION <= 0x040600 && !defined(FF_QT) + qt_widget_private(m_widget)->extraData()->disableBlit = true; +#endif + } +} + +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.h new file mode 100644 index 0000000..28a1455 --- /dev/null +++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.h @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60VIDEOWIDGET_H +#define S60VIDEOWIDGET_H + +#include <qvideowidgetcontrol.h> +#include <qmediaplayer.h> + +QT_BEGIN_NAMESPACE + +class QBlackWidget : public QWidget +{ + Q_OBJECT + +public: + QBlackWidget(QWidget *parent = 0); + virtual ~QBlackWidget(); + +signals: + void beginVideoWindowNativePaint(); + void endVideoWindowNativePaint(); + +public slots: + void beginNativePaintEvent(const QRect&); + void endNativePaintEvent(const QRect&); + +protected: + void paintEvent(QPaintEvent *event); +}; + +class S60VideoWidgetControl : public QVideoWidgetControl +{ + Q_OBJECT + +public: + S60VideoWidgetControl(QObject *parent = 0); + virtual ~S60VideoWidgetControl(); + + // from QVideoWidgetControl + QWidget *videoWidget(); + Qt::AspectRatioMode aspectRatioMode() const; + void setAspectRatioMode(Qt::AspectRatioMode ratio); + bool isFullScreen() const; + void setFullScreen(bool fullScreen); + int brightness() const; + void setBrightness(int brightness); + int contrast() const; + void setContrast(int contrast); + int hue() const; + void setHue(int hue); + int saturation() const; + void setSaturation(int saturation); + + // from QObject + bool eventFilter(QObject *object, QEvent *event); + + //new methods + WId videoWidgetWId(); + +signals: + void widgetUpdated(); + void beginVideoWindowNativePaint(); + void endVideoWindowNativePaint(); + +private slots: + void videoStateChanged(QMediaPlayer::State state); + +private: + QBlackWidget *m_widget; + Qt::AspectRatioMode m_aspectRatioMode; +}; + +QT_END_NAMESPACE + + +#endif // S60VIDEOWIDGET_H diff --git a/src/plugins/mediaservices/symbian/s60mediaserviceplugin.cpp b/src/plugins/mediaservices/symbian/s60mediaserviceplugin.cpp new file mode 100644 index 0000000..1185583 --- /dev/null +++ b/src/plugins/mediaservices/symbian/s60mediaserviceplugin.cpp @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtCore/qstring.h> +#include <QtCore/qdebug.h> + +#include "s60mediaserviceplugin.h" +#ifdef QMEDIA_MMF_RADIO +#include "s60radiotunerservice.h" +#endif +#ifdef QMEDIA_MMF_PLAYER +#include "s60mediaplayerservice.h" +#endif +#ifdef QMEDIA_MMF_CAPTURE +#include "s60audiocaptureservice.h" +#endif + +QT_BEGIN_NAMESPACE + +QStringList S60MediaServicePlugin::keys() const +{ + QStringList list; +#ifdef QMEDIA_MMF_RADIO + list << QLatin1String(Q_MEDIASERVICE_RADIO); +#endif + +#ifdef QMEDIA_MMF_PLAYER + list << QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER); +#endif +#ifdef QMEDIA_MMF_CAPTURE + list << QLatin1String(Q_MEDIASERVICE_AUDIOSOURCE); +#endif + return list; +} + +QMediaService* S60MediaServicePlugin::create(QString const& key) +{ +#ifdef QMEDIA_MMF_PLAYER + if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER)) + return new S60MediaPlayerService; +#endif +#ifdef QMEDIA_MMF_CAPTURE + if (key == QLatin1String(Q_MEDIASERVICE_AUDIOSOURCE)) + return new S60AudioCaptureService; +#endif +#ifdef QMEDIA_MMF_RADIO + if (key == QLatin1String(Q_MEDIASERVICE_RADIO)) + return new S60RadioTunerService; +#endif + + return 0; +} + +void S60MediaServicePlugin::release(QMediaService *service) +{ + delete service; +} + +QT_END_NAMESPACE + +Q_EXPORT_PLUGIN2(qmmfengine, S60MediaServicePlugin); + diff --git a/src/plugins/mediaservices/symbian/s60mediaserviceplugin.h b/src/plugins/mediaservices/symbian/s60mediaserviceplugin.h new file mode 100644 index 0000000..be2e05d --- /dev/null +++ b/src/plugins/mediaservices/symbian/s60mediaserviceplugin.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifndef S60SERVICEPLUGIN_H +#define S60SERVICEPLUGIN_H + +#include <QtCore/qobject.h> +#include <qmediaservice.h> +#include <qmediaserviceproviderplugin.h> + +QT_BEGIN_NAMESPACE + +class S60MediaServicePlugin : public QMediaServiceProviderPlugin +{ + Q_OBJECT +public: + + QStringList keys() const; + QMediaService* create(QString const& key); + void release(QMediaService *service); +}; + +QT_END_NAMESPACE + +#endif // S60SERVICEPLUGIN_H diff --git a/src/plugins/mediaservices/symbian/s60videooutputcontrol.cpp b/src/plugins/mediaservices/symbian/s60videooutputcontrol.cpp new file mode 100644 index 0000000..da07a7d --- /dev/null +++ b/src/plugins/mediaservices/symbian/s60videooutputcontrol.cpp @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "s60videooutputcontrol.h" + +QT_BEGIN_NAMESPACE + +S60VideoOutputControl::S60VideoOutputControl(QObject *parent) + : QVideoOutputControl(parent) + , m_output(NoOutput) +{ +} + +QList<QVideoOutputControl::Output> S60VideoOutputControl::availableOutputs() const +{ + return m_outputs; +} + +void S60VideoOutputControl::setAvailableOutputs(const QList<Output> &outputs) +{ + emit availableOutputsChanged(m_outputs = outputs); +} + +QVideoOutputControl::Output S60VideoOutputControl::output() const +{ + return m_output; +} + +void S60VideoOutputControl::setOutput(Output output) +{ + if (!m_outputs.contains(output)) + output = NoOutput; + + if (m_output != output) + emit outputChanged(m_output = output); +} + +QT_END_NAMESPACE diff --git a/src/plugins/mediaservices/symbian/s60videooutputcontrol.h b/src/plugins/mediaservices/symbian/s60videooutputcontrol.h new file mode 100644 index 0000000..dbad889 --- /dev/null +++ b/src/plugins/mediaservices/symbian/s60videooutputcontrol.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef S60VIDEOOUTPUTCONTROL_H +#define S60VIDEOOUTPUTCONTROL_H + +#include <QObject> +#include <qvideooutputcontrol.h> + +QT_BEGIN_NAMESPACE + +class S60VideoOutputControl : public QVideoOutputControl +{ + Q_OBJECT +public: + S60VideoOutputControl(QObject *parent = 0); + + QList<Output> availableOutputs() const; + void setAvailableOutputs(const QList<Output> &outputs); + + Output output() const; + void setOutput(Output output); + +Q_SIGNALS: + void outputChanged(QVideoOutputControl::Output output); + +private: + QList<Output> m_outputs; + Output m_output; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/mediaservices/symbian/symbian.pro b/src/plugins/mediaservices/symbian/symbian.pro new file mode 100644 index 0000000..f76858f --- /dev/null +++ b/src/plugins/mediaservices/symbian/symbian.pro @@ -0,0 +1,27 @@ +TARGET = qmmfengine +QT += multimedia mediaservices + +load(data_caging_paths) + +include (../../qpluginbase.pri) +include(mediaplayer/mediaplayer.pri) + +HEADERS += s60mediaserviceplugin.h \ + s60videooutputcontrol.h + +SOURCES += s60mediaserviceplugin.cpp \ + s60videooutputcontrol.cpp + +contains(S60_VERSION, 3.2)|contains(S60_VERSION, 3.1) { + DEFINES += PRE_S60_50_PLATFORM +} + +INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE +symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtWidget/private + +# This is needed for having the .qtplugin file properly created on Symbian. +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/mediaservices +target.path += $$[QT_INSTALL_PLUGINS]/mediaservices +INSTALLS += target + +TARGET.UID3=0x20021318 diff --git a/src/qt3support/widgets/q3spinwidget.cpp b/src/qt3support/widgets/q3spinwidget.cpp index 3dc36c5..3bfad06 100644 --- a/src/qt3support/widgets/q3spinwidget.cpp +++ b/src/qt3support/widgets/q3spinwidget.cpp @@ -340,11 +340,13 @@ void Q3SpinWidget::paintEvent(QPaintEvent *) QPainter p(this); QStyleOptionSpinBox opt = getStyleOption(this); - if (d->theButton & 1) + if (d->theButton & 1) { opt.activeSubControls = QStyle::SC_SpinBoxDown; - else if (d->theButton & 2) + opt.state |= QStyle::State_Sunken; + } else if (d->theButton & 2) { opt.activeSubControls = QStyle::SC_SpinBoxUp; - else + opt.state |= QStyle::State_Sunken; + } else opt.activeSubControls = QStyle::SC_None; opt.rect = style()->subControlRect(QStyle::CC_SpinBox, &opt, QStyle::SC_SpinBoxFrame, this); opt.subControls = QStyle::SC_All; diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def index d0a446b..e309e25 100644 --- a/src/s60installs/bwins/QtCoreu.def +++ b/src/s60installs/bwins/QtCoreu.def @@ -3122,7 +3122,7 @@ EXPORTS ?reset@QIODevice@@UAE_NXZ @ 3121 NONAME ; bool QIODevice::reset(void) ?reset@QMetaProperty@@QBE_NPAVQObject@@@Z @ 3122 NONAME ; bool QMetaProperty::reset(class QObject *) const ?reset@QTextStream@@QAEXXZ @ 3123 NONAME ; void QTextStream::reset(void) - ?resetCurrentSender@QObjectPrivate@@SAXPAVQObject@@PAUSender@1@1@Z @ 3124 NONAME ; void QObjectPrivate::resetCurrentSender(class QObject *, struct QObjectPrivate::Sender *, struct QObjectPrivate::Sender *) + ?resetCurrentSender@QObjectPrivate@@SAXPAVQObject@@PAUSender@1@1@Z @ 3124 NONAME ABSENT ; void QObjectPrivate::resetCurrentSender(class QObject *, struct QObjectPrivate::Sender *, struct QObjectPrivate::Sender *) ?resetDeleteWatch@QObjectPrivate@@SAXPAV1@PAHH@Z @ 3125 NONAME ; void QObjectPrivate::resetDeleteWatch(class QObjectPrivate *, int *, int) ?resetStatus@QDataStream@@QAEXXZ @ 3126 NONAME ; void QDataStream::resetStatus(void) ?resetStatus@QTextStream@@QAEXXZ @ 3127 NONAME ; void QTextStream::resetStatus(void) @@ -3281,7 +3281,7 @@ EXPORTS ?setCoords@QRectF@@QAEXMMMM@Z @ 3280 NONAME ; void QRectF::setCoords(float, float, float, float) ?setCurrent@QDir@@SA_NABVQString@@@Z @ 3281 NONAME ; bool QDir::setCurrent(class QString const &) ?setCurrentPath@QFSFileEngine@@SA_NABVQString@@@Z @ 3282 NONAME ; bool QFSFileEngine::setCurrentPath(class QString const &) - ?setCurrentSender@QObjectPrivate@@SAPAUSender@1@PAVQObject@@PAU21@@Z @ 3283 NONAME ; struct QObjectPrivate::Sender * QObjectPrivate::setCurrentSender(class QObject *, struct QObjectPrivate::Sender *) + ?setCurrentSender@QObjectPrivate@@SAPAUSender@1@PAVQObject@@PAU21@@Z @ 3283 NONAME ABSENT ; struct QObjectPrivate::Sender * QObjectPrivate::setCurrentSender(class QObject *, struct QObjectPrivate::Sender *) ?setCurrentTime@QAbstractAnimation@@QAEXH@Z @ 3284 NONAME ; void QAbstractAnimation::setCurrentTime(int) ?setCurrentTime@QTimeLine@@QAEXH@Z @ 3285 NONAME ; void QTimeLine::setCurrentTime(int) ?setCurveShape@QTimeLine@@QAEXW4CurveShape@1@@Z @ 3286 NONAME ; void QTimeLine::setCurveShape(enum QTimeLine::CurveShape) diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index ec25b5c..5f05f08 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -3950,7 +3950,7 @@ EXPORTS ?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABVQDeclarativeError@@@Z @ 3949 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QDeclarativeError const &) ?error@QDeclarativeCustomParser@@IAEXABVQString@@@Z @ 3950 NONAME ; void QDeclarativeCustomParser::error(class QString const &) ?activeChanged@QDeclarativeDrag@@IAEXXZ @ 3951 NONAME ; void QDeclarativeDrag::activeChanged(void) - ??0QDeclarativeInfo@@AAE@PAUQDeclarativeInfoPrivate@@@Z @ 3952 NONAME ; QDeclarativeInfo::QDeclarativeInfo(struct QDeclarativeInfoPrivate *) + ??0QDeclarativeInfo@@AAE@PAUQDeclarativeInfoPrivate@@@Z @ 3952 NONAME ABSENT ; QDeclarativeInfo::QDeclarativeInfo(struct QDeclarativeInfoPrivate *) ?warnings@QDeclarativeEngine@@IAEXABV?$QList@VQDeclarativeError@@@@@Z @ 3953 NONAME ; void QDeclarativeEngine::warnings(class QList<class QDeclarativeError> const &) ?parentModelIndex@QDeclarativeVisualDataModel@@QBE?AVQVariant@@XZ @ 3954 NONAME ; class QVariant QDeclarativeVisualDataModel::parentModelIndex(void) const ?usedAnchors@QDeclarativeAnchors@@QBE?AV?$QFlags@W4Anchor@QDeclarativeAnchors@@@@XZ @ 3955 NONAME ; class QFlags<enum QDeclarativeAnchors::Anchor> QDeclarativeAnchors::usedAnchors(void) const diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def index daa9dc6..92a4020 100644 --- a/src/s60installs/eabi/QtCoreu.def +++ b/src/s60installs/eabi/QtCoreu.def @@ -3697,4 +3697,5 @@ EXPORTS _ZN16QDeclarativeData9destroyedE @ 3696 NONAME DATA 4 ABSENT _ZN24QAbstractDeclarativeData13parentChangedE @ 3697 NONAME DATA 4 _ZN24QAbstractDeclarativeData9destroyedE @ 3698 NONAME DATA 4 + _ZN23QEventDispatcherSymbian12selectThreadEv @ 3699 NONAME diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index 953d0a1..ad12166 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -3496,4 +3496,44 @@ EXPORTS _ZTIN14QDeclarativeJS3AST18FunctionExpressionE @ 3495 NONAME ABSENT _ZTIN14QDeclarativeJS3AST4NodeE @ 3496 NONAME ABSENT _ZTIN14QDeclarativeJS3AST9StatementE @ 3497 NONAME ABSENT + _Z7qmlInfoPK7QObjectRK17QDeclarativeError @ 3498 NONAME + _Z7qmlInfoPK7QObjectRK5QListI17QDeclarativeErrorE @ 3499 NONAME + _ZN16QDeclarativeDrag13activeChangedEv @ 3500 NONAME + _ZN16QDeclarativeDrag9setActiveEb @ 3501 NONAME + _ZN16QDeclarativeInfoC1EP23QDeclarativeInfoPrivate @ 3502 NONAME + _ZN16QDeclarativeInfoC1ERKS_ @ 3503 NONAME + _ZN16QDeclarativeInfoC2EP23QDeclarativeInfoPrivate @ 3504 NONAME + _ZN16QDeclarativeInfoC2ERKS_ @ 3505 NONAME + _ZN16QDeclarativeItem10forceFocusEv @ 3506 NONAME + _ZN16QDeclarativeView11eventFilterEP7QObjectP6QEvent @ 3507 NONAME + _ZN18QDeclarativeEngine32setOutputWarningsToStandardErrorEb @ 3508 NONAME + _ZN18QDeclarativeEngine8warningsERK5QListI17QDeclarativeErrorE @ 3509 NONAME + _ZN18QDeclarativeLoader20resetSourceComponentEv @ 3510 NONAME + _ZN20QDeclarativeFlipable15retransformBackEv @ 3511 NONAME + _ZN20QDeclarativeGridView11animStoppedEv @ 3512 NONAME + _ZN21QDeclarativeFlickable17setBoundsBehaviorENS_14BoundsBehaviorE @ 3513 NONAME + _ZN21QDeclarativeFlickable21boundsBehaviorChangedEv @ 3514 NONAME + _ZN21QDeclarativeMouseArea15geometryChangedERK6QRectFS2_ @ 3515 NONAME + _ZN21QDeclarativeMouseArea20mousePositionChangedEP22QDeclarativeMouseEvent @ 3516 NONAME + _ZN22QDeclarativeExpression8evaluateEPb @ 3517 NONAME + _ZN23QDeclarativeItemPrivate16transformChangedEv @ 3518 NONAME + _ZN24QDeclarativeCustomParser5errorERK7QString @ 3519 NONAME + _ZN24QDeclarativeDebugService18hasDebuggingClientEv @ 3520 NONAME + _ZN24QDeclarativeParentChange7executeEN23QDeclarativeActionEvent6ReasonE @ 3521 NONAME + _ZN24QDeclarativeParentChange7reverseEN23QDeclarativeActionEvent6ReasonE @ 3522 NONAME + _ZN25QDeclarativeAnchorChanges7executeEN23QDeclarativeActionEvent6ReasonE @ 3523 NONAME + _ZN25QDeclarativeAnchorChanges7reverseEN23QDeclarativeActionEvent6ReasonE @ 3524 NONAME + _ZN27QDeclarativeVisualDataModel12setRootIndexERK8QVariant @ 3525 NONAME + _ZN29QDeclarativeStateChangeScript7executeEN23QDeclarativeActionEvent6ReasonE @ 3526 NONAME + _ZNK16QDeclarativeDrag6activeEv @ 3527 NONAME + _ZNK16QDeclarativeType16noCreationReasonEv @ 3528 NONAME + _ZNK18QDeclarativeEngine29outputWarningsToStandardErrorEv @ 3529 NONAME + _ZNK21QDeclarativeFlickable14boundsBehaviorEv @ 3530 NONAME + _ZNK27QDeclarativeVisualDataModel10modelIndexEi @ 3531 NONAME + _ZNK27QDeclarativeVisualDataModel16parentModelIndexEv @ 3532 NONAME + _ZThn8_N24QDeclarativeParentChange7executeEN23QDeclarativeActionEvent6ReasonE @ 3533 NONAME + _ZThn8_N24QDeclarativeParentChange7reverseEN23QDeclarativeActionEvent6ReasonE @ 3534 NONAME + _ZThn8_N25QDeclarativeAnchorChanges7executeEN23QDeclarativeActionEvent6ReasonE @ 3535 NONAME + _ZThn8_N25QDeclarativeAnchorChanges7reverseEN23QDeclarativeActionEvent6ReasonE @ 3536 NONAME + _ZThn8_N29QDeclarativeStateChangeScript7executeEN23QDeclarativeActionEvent6ReasonE @ 3537 NONAME diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def index 2796778..2566415 100644 --- a/src/s60installs/eabi/QtNetworku.def +++ b/src/s60installs/eabi/QtNetworku.def @@ -1166,4 +1166,5 @@ EXPORTS _ZNK13QBearerEngine15requiresPollingEv @ 1165 NONAME _ZNK13QBearerEngine19configurationsInUseEv @ 1166 NONAME _ZNK21QNetworkAccessManager17networkAccessibleEv @ 1167 NONAME + _ZN35QNetworkConfigurationManagerPrivate12capabilitiesEv @ 1168 NONAME diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index ad196a8..dfd2694 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -151,9 +151,18 @@ symbian: { graphicssystems_plugins.sources += $$QT_BUILD_TREE/plugins/graphicssystems/qvggraphicssystem$${QT_LIBINFIX}.dll } - contains(QT_CONFIG, multimedia) { + contains(QT_CONFIG, multimedia):contains(QT_CONFIG, mediaservices):contains(QT_CONFIG, media-backend) { qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtMultimedia$${QT_LIBINFIX}.dll + } + + contains(QT_CONFIG, media-backend) { qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtMediaServices$${QT_LIBINFIX}.dll + + mediaservices_plugins.path = c:$$QT_PLUGINS_BASE_DIR/mediaservices + mediaservices_plugins.sources += $$QT_BUILD_TREE/plugins/mediaservices/qmmfengine$${QT_LIBINFIX}.dll + + DEPLOYMENT += mediaservices_plugins + } BLD_INF_RULES.prj_exports += "qt.iby $$CORE_MW_LAYER_IBY_EXPORT_PATH(qt.iby)" diff --git a/src/script/bridge/qscriptqobject_p.h b/src/script/bridge/qscriptqobject_p.h index b82bcb7..412a784 100644 --- a/src/script/bridge/qscriptqobject_p.h +++ b/src/script/bridge/qscriptqobject_p.h @@ -303,7 +303,7 @@ public: } protected: - static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesMarkChildren | JSC::OverridesGetPropertyNames | JSObject::StructureFlags; + static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesMarkChildren | JSC::OverridesGetPropertyNames | JSC::ImplementsHasInstance | JSObject::StructureFlags; Data *data; }; diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp index 24dcad9..4344af4 100644 --- a/src/sql/drivers/sqlite/qsql_sqlite.cpp +++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp @@ -259,6 +259,7 @@ bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int i q->setAt(QSql::AfterLastRow); sqlite3_reset(stmt); return false; + case SQLITE_CONSTRAINT: case SQLITE_ERROR: // SQLITE_ERROR is a generic error code and we must call sqlite3_reset() // to get the specific error message. diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp index 1416ee3..76bc2b0 100644 --- a/src/sql/kernel/qsqldatabase.cpp +++ b/src/sql/kernel/qsqldatabase.cpp @@ -98,7 +98,7 @@ QT_BEGIN_NAMESPACE -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QSqlDriverFactoryInterface_iid, QLatin1String("/sqldrivers"))) @@ -576,7 +576,7 @@ QStringList QSqlDatabase::drivers() list << QLatin1String("QIBASE"); #endif -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY if (QFactoryLoader *fl = loader()) { QStringList keys = fl->keys(); for (QStringList::const_iterator i = keys.constBegin(); i != keys.constEnd(); ++i) { @@ -774,7 +774,7 @@ void QSqlDatabasePrivate::init(const QString &type) } } -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +#ifndef QT_NO_LIBRARY if (!driver && loader()) { if (QSqlDriverFactoryInterface *factory = qobject_cast<QSqlDriverFactoryInterface*>(loader()->instance(type))) driver = factory->create(type); diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp index 46431a8..1a0e737 100644 --- a/src/testlib/qplaintestlogger.cpp +++ b/src/testlib/qplaintestlogger.cpp @@ -182,6 +182,7 @@ namespace QTest { hbuffer->Des().Copy(ptr.Mid(i, size)); RDebug::Print(format, hbuffer); } + delete hbuffer; } else { // fast, no allocations, but truncates silently diff --git a/src/testlib/qtestlogger.cpp b/src/testlib/qtestlogger.cpp index 6c76388..f0be6be 100644 --- a/src/testlib/qtestlogger.cpp +++ b/src/testlib/qtestlogger.cpp @@ -211,10 +211,7 @@ void QTestLogger::addIncident(IncidentTypes type, const char *description, QTest::qt_snprintf(buf, sizeof(buf), "%i", line); failureElement->addAttribute(QTest::AI_Line, buf); failureElement->addAttribute(QTest::AI_Description, description); - const char* tag = QTestResult::currentDataTag(); - if (tag) { - failureElement->addAttribute(QTest::AI_Tag, tag); - } + addTag(failureElement); currentLogElement->addLogElement(failureElement); } @@ -279,6 +276,27 @@ void QTestLogger::addBenchmarkResult(const QBenchmarkResult &result) currentLogElement->addLogElement(benchmarkElement); } +void QTestLogger::addTag(QTestElement* element) +{ + const char *tag = QTestResult::currentDataTag(); + const char *gtag = QTestResult::currentGlobalDataTag(); + const char *filler = (tag && gtag) ? ":" : ""; + if ((!tag || !tag[0]) && (!gtag || !gtag[0])) { + return; + } + + if (!tag) { + tag = ""; + } + if (!gtag) { + gtag = ""; + } + + QTestCharBuffer buf; + QTest::qt_asprintf(&buf, "%s%s%s", gtag, filler, tag); + element->addAttribute(QTest::AI_Tag, buf.constData()); +} + void QTestLogger::addMessage(MessageTypes type, const char *message, const char *file, int line) { QTestElement *errorElement = new QTestElement(QTest::LET_Error); @@ -299,7 +317,7 @@ void QTestLogger::addMessage(MessageTypes type, const char *message, const char break; case QAbstractTestLogger::QWarning: ++qwarnCounter; - typeBuf = "qwarning"; + typeBuf = "qwarn"; break; case QAbstractTestLogger::QFatal: ++qfatalCounter; @@ -320,6 +338,7 @@ void QTestLogger::addMessage(MessageTypes type, const char *message, const char errorElement->addAttribute(QTest::AI_Type, typeBuf); errorElement->addAttribute(QTest::AI_Description, message); + addTag(errorElement); if(file) errorElement->addAttribute(QTest::AI_File, file); diff --git a/src/testlib/qtestlogger_p.h b/src/testlib/qtestlogger_p.h index 31f7d55..bb7a358 100644 --- a/src/testlib/qtestlogger_p.h +++ b/src/testlib/qtestlogger_p.h @@ -83,6 +83,7 @@ class QTestLogger : public QAbstractTestLogger void addIncident(IncidentTypes type, const char *description, const char *file = 0, int line = 0); void addBenchmarkResult(const QBenchmarkResult &result); + void addTag(QTestElement* element); void addMessage(MessageTypes type, const char *message, const char *file = 0, int line = 0); diff --git a/src/testlib/qtestxmlstreamer.cpp b/src/testlib/qtestxmlstreamer.cpp index b9946e5..f63c221 100644 --- a/src/testlib/qtestxmlstreamer.cpp +++ b/src/testlib/qtestxmlstreamer.cpp @@ -111,12 +111,20 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, QTestCharBuffer QXmlTestLogger::xmlQuote("edFile, element->attributeValue(QTest::AI_File)); QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description)); - QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n <Description><![CDATA[%s]]></Description>\n</Message>\n", + QTestCharBuffer tagbuf; + if (element->attribute(QTest::AI_Tag)) { + QTestCharBuffer cdataTag; + QXmlTestLogger::xmlCdata(&cdataTag, element->attributeValue(QTest::AI_Tag)); + QTest::qt_asprintf(&tagbuf, " <DataTag><![CDATA[%s]]></DataTag>\n", cdataTag.constData()); + } + + QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n%s <Description><![CDATA[%s]]></Description>\n</Message>\n", element->attributeValue(QTest::AI_Type), element->attributeName(QTest::AI_File), quotedFile.constData(), element->attributeName(QTest::AI_Line), element->attributeValue(QTest::AI_Line), + tagbuf.constData(), cdataDesc.constData()); break; } @@ -149,7 +157,29 @@ void QTestXmlStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *f return; if (element->elementType() == QTest::LET_TestCase) { - QTest::qt_asprintf(formatted, "</TestFunction>\n"); + bool failed = false; + for (QTestElement* child = element->childElements(); child; child = child->nextElement()) { + if ( child->elementType() == QTest::LET_Failure + && child->attribute(QTest::AI_Result) + && ( !strcmp(child->attributeValue(QTest::AI_Result), "fail") + || !strcmp(child->attributeValue(QTest::AI_Result), "xpass")) + ) + { + failed = true; + break; + } + } + + // For passing functions, no Incident has been output yet. + // For failing functions, we already output one. + // Please note: we are outputting "pass" even if there was an xfail etc. + // This is by design (arguably bad design, but dangerous to change now!) + if (element->attribute(QTest::AI_Result) && !failed) { + QTest::qt_asprintf(formatted, "<Incident type=\"pass\" file=\"\" line=\"0\" />\n</TestFunction>\n"); + } + else { + QTest::qt_asprintf(formatted, "</TestFunction>\n"); + } } else { formatted->data()[0] = '\0'; } @@ -157,29 +187,11 @@ void QTestXmlStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *f void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const { - if(!element || !formatted) + Q_UNUSED(element); + if (!formatted) return; - if (element->elementType() == QTest::LET_TestCase && element->attribute(QTest::AI_Result)){ - QTestCharBuffer buf; - QTestCharBuffer quotedFile; - QXmlTestLogger::xmlQuote("edFile, element->attributeValue(QTest::AI_File)); - - QTest::qt_asprintf(&buf, "%s=\"%s\" %s=\"%s\"", - element->attributeName(QTest::AI_File), - quotedFile.constData(), - element->attributeName(QTest::AI_Line), - element->attributeValue(QTest::AI_Line)); - - if( !element->childElements() ) { - QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s/>\n", - element->attributeValue(QTest::AI_Result), buf.constData()); - } else { - formatted->data()[0] = '\0'; - } - } else { - formatted->data()[0] = '\0'; - } + formatted->data()[0] = '\0'; } void QTestXmlStreamer::output(QTestElement *element) const diff --git a/src/testlib/qxmltestlogger.cpp b/src/testlib/qxmltestlogger.cpp index 2236666..07e8ef0 100644 --- a/src/testlib/qxmltestlogger.cpp +++ b/src/testlib/qxmltestlogger.cpp @@ -244,7 +244,7 @@ void QXmlTestLogger::addBenchmarkResult(const QBenchmarkResult &result) QTestCharBuffer quotedTag; xmlQuote("edMetric, - benchmarkMetricUnit(result.metric)); + benchmarkMetricName(result.metric)); xmlQuote("edTag, result.context.tag.toAscii().constData()); QTest::qt_asprintf( diff --git a/src/xmlpatterns/schema/qxsdschemaresolver.cpp b/src/xmlpatterns/schema/qxsdschemaresolver.cpp index 34eb12c..f3d1ed0 100644 --- a/src/xmlpatterns/schema/qxsdschemaresolver.cpp +++ b/src/xmlpatterns/schema/qxsdschemaresolver.cpp @@ -632,7 +632,14 @@ void XsdSchemaResolver::resolveSimpleContentComplexTypes(const XsdComplexType::P } else { // 1.2 const XsdSimpleType::Ptr anonType(new XsdSimpleType()); - anonType->setCategory(complexBaseType->contentType()->simpleType()->category()); + XsdSimpleType::TypeCategory baseCategory = complexBaseType->contentType()->simpleType()->category(); + anonType->setCategory(baseCategory); + + if (baseCategory == XsdSimpleType::SimpleTypeList) { + const XsdSimpleType::Ptr baseSimpleType = complexBaseType->contentType()->simpleType(); + anonType->setItemType(baseSimpleType->itemType()); + } + anonType->setDerivationMethod(XsdSimpleType::DerivationRestriction); anonType->setWxsSuperType(complexBaseType->contentType()->simpleType()); anonType->setFacets(complexTypeFacets(complexType)); diff --git a/src/xmlpatterns/type/qschematype_p.h b/src/xmlpatterns/type/qschematype_p.h index 1b26fb8..ff8b86b 100644 --- a/src/xmlpatterns/type/qschematype_p.h +++ b/src/xmlpatterns/type/qschematype_p.h @@ -174,7 +174,7 @@ namespace QPatternist * a QXmlName instance stored as a member. * * If the type code was refactored to not be store globally and - * therfore by design would be tied to a name pool, this argument could + * therefore by design would be tied to a name pool, this argument could * be removed. */ virtual QXmlName name(const NamePool::Ptr &np) const = 0; diff --git a/src/xmlpatterns/xmlpatterns.pro b/src/xmlpatterns/xmlpatterns.pro index a224762..e50d184 100644 --- a/src/xmlpatterns/xmlpatterns.pro +++ b/src/xmlpatterns/xmlpatterns.pro @@ -24,13 +24,14 @@ include($$PWD/schema/schema.pri) include($$PWD/type/type.pri) include($$PWD/utils/utils.pri) include($$PWD/qobjectmodel/qobjectmodel.pri, "", true) -wince*:# The Microsoft MIPS compiler crashes if /Og is specified -: -# -O2/1 expands to /Og plus additional arguments. -contains(DEFINES, MIPS): { - QMAKE_CXXFLAGS_RELEASE ~= s/-O2/-Oi -Ot -Oy -Ob2/ - QMAKE_CXXFLAGS_RELEASE ~= s/-O1/-Os -Oy -Ob2/ +wince* { + # The Microsoft MIPS compiler crashes if /Og is specified. + # -O2/1 expands to /Og plus additional arguments. + contains(DEFINES, MIPS) { + QMAKE_CXXFLAGS_RELEASE ~= s/-O2/-Oi -Ot -Oy -Ob2/ + QMAKE_CXXFLAGS_RELEASE ~= s/-O1/-Os -Oy -Ob2/ + } } + symbian:TARGET.UID3 = 0x2001E62B -HEADERS += |