Remove WinCE port from trunk
authorossy@webkit.org <ossy@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 25 Sep 2014 10:14:57 +0000 (10:14 +0000)
committerossy@webkit.org <ossy@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 25 Sep 2014 10:14:57 +0000 (10:14 +0000)
https://bugs.webkit.org/show_bug.cgi?id=136951

Reviewed by Alex Christensen.

.:
* Source/cmake/OptionsWinCE.cmake: Removed.
* Source/cmake/WebKitPackaging.cmake:

Source/JavaScriptCore:
* assembler/ARMAssembler.h:
(JSC::ARMAssembler::cacheFlush):
* assembler/ARMv7Assembler.h:
(JSC::ARMv7Assembler::cacheFlush):
* config.h:
* heap/MachineStackMarker.cpp:
(JSC::MachineThreads::gatherFromCurrentThread):
(JSC::MachineThreads::gatherFromOtherThread):
(JSC::swapIfBackwards): Deleted.
* jit/ExecutableAllocator.h:
* jsc.cpp:
(main):
* runtime/DateConstructor.cpp:
* runtime/Options.cpp:
(JSC::overrideOptionWithHeuristic):
* runtime/VM.cpp:
(JSC::VM::VM):
* testRegExp.cpp:
(main):
* tools/CodeProfiling.cpp:
(JSC::CodeProfiling::notifyAllocator):

Source/WebCore:
* Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp:
* PlatformWinCE.cmake: Removed.
* accessibility/AXObjectCache.cpp:
* editing/FrameSelection.cpp:
(WebCore::FrameSelection::modifyMovingRight):
* loader/icon/wince/IconDatabaseWinCE.cpp: Removed.
* page/EventHandler.cpp:
(WebCore::EventHandler::sendContextMenuEventForKey):
* page/Settings.cpp:
* page/win/EventHandlerWin.cpp:
(WebCore::EventHandler::createDraggingDataTransfer):
* platform/ContextMenu.h:
* platform/DragImage.cpp:
* platform/FileSystem.h:
* platform/graphics/BitmapImage.cpp:
(WebCore::BitmapImage::mayFillWithSolidColor):
* platform/graphics/FontGlyphs.cpp:
(WebCore::FontGlyphs::glyphDataAndPageForCharacter):
* platform/graphics/FontPlatformData.h:
* platform/graphics/ImageBufferData.h:
* platform/graphics/MediaPlayer.cpp:
* platform/graphics/SimpleFontData.h:
* platform/graphics/opentype/OpenTypeUtilities.cpp:
(WebCore::renameAndActivateFont):
* platform/graphics/opentype/OpenTypeUtilities.h:
* platform/graphics/win/DIBPixelData.cpp:
(WebCore::DIBPixelData::setRGBABitmapAlpha):
* platform/graphics/win/GDIExtras.cpp: Removed.
* platform/graphics/win/GDIExtras.h:
(WebCore::hasAlphaBlendSupport):
(WebCore::alphaBlendIfSupported):
* platform/graphics/win/IconWin.cpp:
(WebCore::Icon::createIconForFiles):
(WebCore::Icon::paint):
* platform/graphics/win/SimpleFontDataWin.cpp:
(WebCore::SimpleFontData::initGDIFont):
(WebCore::SimpleFontData::platformDestroy):
(WebCore::SimpleFontData::boundsForGDIGlyph):
(WebCore::SimpleFontData::widthForGDIGlyph):
(WebCore::SimpleFontData::scriptFontProperties):
* platform/graphics/wince/FontCacheWinCE.cpp: Removed.
* platform/graphics/wince/FontCustomPlatformData.cpp: Removed.
* platform/graphics/wince/FontCustomPlatformData.h: Removed.
* platform/graphics/wince/FontPlatformData.cpp: Removed.
* platform/graphics/wince/FontPlatformData.h: Removed.
* platform/graphics/wince/FontWinCE.cpp: Removed.
* platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp: Removed.
* platform/graphics/wince/GradientWinCE.cpp: Removed.
* platform/graphics/wince/GraphicsContextWinCE.cpp: Removed.
* platform/graphics/wince/ImageBufferDataWince.h: Removed.
* platform/graphics/wince/ImageBufferWinCE.cpp: Removed.
* platform/graphics/wince/ImageWinCE.cpp: Removed.
* platform/graphics/wince/MediaPlayerPrivateWinCE.h: Removed.
* platform/graphics/wince/MediaPlayerProxy.cpp: Removed.
* platform/graphics/wince/MediaPlayerProxy.h: Removed.
* platform/graphics/wince/PathWinCE.cpp: Removed.
* platform/graphics/wince/PlatformPathWinCE.cpp: Removed.
* platform/graphics/wince/PlatformPathWinCE.h: Removed.
* platform/graphics/wince/SharedBitmap.cpp: Removed.
* platform/graphics/wince/SharedBitmap.h: Removed.
* platform/graphics/wince/SimpleFontDataWinCE.cpp: Removed.
* platform/graphics/wince/WinCEGraphicsExtras.h: Removed.
* platform/image-decoders/jpeg/JPEGImageDecoder.h:
* platform/network/win/NetworkStateNotifierWin.cpp:
(WebCore::NetworkStateNotifier::NetworkStateNotifier):
* platform/win/COMPtr.h:
* platform/win/ClipboardUtilitiesWin.cpp:
* platform/win/ContextMenuItemWin.cpp:
* platform/win/ContextMenuWin.cpp:
(WebCore::ContextMenu::getContextMenuItems):
(WebCore::ContextMenu::createPlatformContextMenuFromItems):
* platform/win/DragImageWin.cpp:
(WebCore::dragLabelFont):
* platform/win/FileSystemWin.cpp:
(WebCore::pathByAppendingComponent):
(WebCore::pathGetFileName):
(WebCore::storageDirectory):
* platform/win/LoggingWin.cpp:
(WebCore::logLevelString):
* platform/win/PasteboardWin.cpp:
(WebCore::PasteboardOwnerWndProc):
(WebCore::Pasteboard::createForCopyAndPaste):
(WebCore::pathRemoveBadFSCharacters):
(WebCore::filesystemPathFromUrlOrTitle):
(WebCore::createGlobalHDropContent):
* platform/win/PlatformMouseEventWin.cpp:
(WebCore::messageToEventType):
(WebCore::PlatformMouseEvent::PlatformMouseEvent):
* platform/win/PlatformScreenWin.cpp:
(WebCore::deviceInfoForWidget):
(WebCore::screenIsMonochrome):
* platform/win/PopupMenuWin.cpp:
(WebCore::PopupMenuWin::show):
(WebCore::PopupMenuWin::paint):
(WebCore::PopupMenuWin::registerClass):
(WebCore::PopupMenuWin::wndProc):
* platform/win/ScrollbarThemeWin.cpp:
(WebCore::ScrollbarThemeWin::paintButton):
* platform/win/SharedBufferWin.cpp:
* platform/win/SharedTimerWin.cpp:
(WebCore::TimerWindowWndProc):
(WebCore::initializeOffScreenTimerWindow):
(WebCore::queueTimerProc):
(WebCore::setSharedTimerFireInterval):
(WebCore::stopSharedTimer):
* platform/win/SoftLinking.h:
* platform/win/SystemInfo.cpp:
(WebCore::windowsVersion):
(WebCore::processorArchitecture):
(WebCore::architectureTokenForUAString):
* platform/win/WCDataObject.cpp:
(WebCore::WCDataObject::CopyMedium):
* plugins/PluginDatabase.cpp:
* plugins/PluginView.cpp:
(WebCore::PluginView::stop):
* plugins/PluginViewNone.cpp:
* plugins/win/PluginDatabaseWin.cpp:
(WebCore::addWindowsMediaPlayerPluginDirectory):
(WebCore::addMacromediaPluginDirectories):
* plugins/win/PluginPackageWin.cpp:
(WebCore::PluginPackage::load):
* plugins/win/PluginViewWin.cpp:
(WebCore::setUpOffscreenPaintingHooks):
(WebCore::registerPluginView):
(WebCore::PluginView::wndProc):
(WebCore::PluginView::updatePluginWidget):
(WebCore::PluginView::paintIntoTransformedContext):
(WebCore::PluginView::paint):
(WebCore::PluginView::handleMouseEvent):
(WebCore::PluginView::setParent):
(WebCore::PluginView::setNPWindowRect):
(WebCore::PluginView::platformStart):
* rendering/RenderThemeWinCE.cpp: Removed.
* rendering/RenderThemeWinCE.h: Removed.
* storage/wince/DatabaseThreadWinCE.cpp: Removed.
* storage/wince/DatabaseThreadWinCE.h: Removed.
* storage/wince/StorageThreadWinCE.cpp: Removed.
* storage/wince/StorageThreadWinCE.h: Removed.

Source/WebKit:
* PlatformWinCE.cmake: Removed.
* wince/WebCoreSupport/ChromeClientWinCE.cpp: Removed.
* wince/WebCoreSupport/ChromeClientWinCE.h: Removed.
* wince/WebCoreSupport/ContextMenuClientWinCE.cpp: Removed.
* wince/WebCoreSupport/ContextMenuClientWinCE.h: Removed.
* wince/WebCoreSupport/DragClientWinCE.cpp: Removed.
* wince/WebCoreSupport/DragClientWinCE.h: Removed.
* wince/WebCoreSupport/EditorClientWinCE.cpp: Removed.
* wince/WebCoreSupport/EditorClientWinCE.h: Removed.
* wince/WebCoreSupport/FrameLoaderClientWinCE.cpp: Removed.
* wince/WebCoreSupport/FrameLoaderClientWinCE.h: Removed.
* wince/WebCoreSupport/FrameNetworkingContextWinCE.cpp: Removed.
* wince/WebCoreSupport/FrameNetworkingContextWinCE.h: Removed.
* wince/WebCoreSupport/InspectorClientWinCE.cpp: Removed.
* wince/WebCoreSupport/InspectorClientWinCE.h: Removed.
* wince/WebCoreSupport/PlatformStrategiesWinCE.cpp: Removed.
* wince/WebCoreSupport/PlatformStrategiesWinCE.h: Removed.
* wince/WebView.cpp: Removed.
* wince/WebView.h: Removed.

Source/WebKit/cf:
* WebCoreSupport/WebInspectorClientCF.cpp:

Source/WTF:
* config.h:
* wtf/Assertions.cpp:
* wtf/Assertions.h:
* wtf/Atomics.h:
(WTF::weakCompareAndSwap):
* wtf/CurrentTime.cpp:
(WTF::lowResUTCTime):
* wtf/DataLog.cpp:
* wtf/DateMath.cpp:
(WTF::getLocalTime):
(WTF::calculateDSTOffset):
* wtf/FastMalloc.cpp:
* wtf/FeatureDefines.h:
* wtf/OSAllocator.h:
(WTF::OSAllocator::decommitAndRelease):
* wtf/Platform.h:
* wtf/PlatformWin.cmake:
* wtf/RAMSize.cpp:
(WTF::computeRAMSize):
* wtf/RandomNumberSeed.h:
(WTF::initializeRandomNumberGenerator):
* wtf/StackBounds.cpp:
(WTF::StackBounds::initialize):
* wtf/StackBounds.h:
(WTF::StackBounds::isGrowingDownward):
* wtf/StdLibExtras.h:
(wtf_bsearch): Deleted.
* wtf/StringExtras.h:
(strnicmp): Deleted.
(stricmp): Deleted.
(strdup): Deleted.
* wtf/ThreadSpecific.h:
* wtf/ThreadingWin.cpp:
(WTF::createThreadInternal):
* wtf/WindowsExtras.h:
(WTF::getRegistryValue):
(WTF::getWindowPointer):
(WTF::setWindowPointer):
* wtf/dtoa/utils.h:
* wtf/text/WTFString.cpp:
(WTF::String::format):

Tools:
* BuildSlaveSupport/build.webkit.org-config/wkbuild.py:
(_should_file_trigger_build):
* BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py:
(ShouldBuildTest):
* CMakeLists.txt:
* DumpRenderTree/win/DRTDataObject.cpp:
(DRTDataObject::CopyMedium):
* Scripts/build-webkit:
* Scripts/webkit-build-directory:
* Scripts/webkitdirs.pm:
(argumentsForConfiguration):
(builtDylibPathForName):
(isAppleWinWebKit):
(launcherPath):
(launcherName):
(shouldRemoveCMakeCache):
(cmakeBasedPortArguments):
(cmakeBasedPortName):
(isCMakeBuild):
(isWinCE): Deleted.
(determineIsWinCE): Deleted.
* Scripts/webkitperl/FeatureList.pm:
* Scripts/webkitpy/port/port_testcase.py:
(test_apache_config_file_name_for_platform):
* TestWebKitAPI/config.h:
* WinCELauncher/CMakeLists.txt: Removed.
* WinCELauncher/main.cpp: Removed.
* gtk/manifest.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@173949 268f45cc-cd09-0410-ab3c-d52691b4dbfc

155 files changed:
ChangeLog
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/assembler/ARMAssembler.h
Source/JavaScriptCore/assembler/ARMv7Assembler.h
Source/JavaScriptCore/config.h
Source/JavaScriptCore/heap/MachineStackMarker.cpp
Source/JavaScriptCore/jit/ExecutableAllocator.h
Source/JavaScriptCore/jsc.cpp
Source/JavaScriptCore/runtime/DateConstructor.cpp
Source/JavaScriptCore/runtime/Options.cpp
Source/JavaScriptCore/runtime/VM.cpp
Source/JavaScriptCore/testRegExp.cpp
Source/JavaScriptCore/tools/CodeProfiling.cpp
Source/WTF/ChangeLog
Source/WTF/config.h
Source/WTF/wtf/Assertions.cpp
Source/WTF/wtf/Assertions.h
Source/WTF/wtf/Atomics.h
Source/WTF/wtf/CurrentTime.cpp
Source/WTF/wtf/DataLog.cpp
Source/WTF/wtf/DateMath.cpp
Source/WTF/wtf/FastMalloc.cpp
Source/WTF/wtf/FeatureDefines.h
Source/WTF/wtf/OSAllocator.h
Source/WTF/wtf/PageAllocationAligned.cpp
Source/WTF/wtf/Platform.h
Source/WTF/wtf/PlatformWin.cmake
Source/WTF/wtf/RAMSize.cpp
Source/WTF/wtf/RandomNumberSeed.h
Source/WTF/wtf/StackBounds.cpp
Source/WTF/wtf/StackBounds.h
Source/WTF/wtf/StdLibExtras.h
Source/WTF/wtf/StringExtras.h
Source/WTF/wtf/ThreadSpecific.h
Source/WTF/wtf/ThreadingWin.cpp
Source/WTF/wtf/WindowsExtras.h
Source/WTF/wtf/dtoa/utils.h
Source/WTF/wtf/text/WTFString.cpp
Source/WebCore/ChangeLog
Source/WebCore/Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp
Source/WebCore/PlatformWinCE.cmake [deleted file]
Source/WebCore/accessibility/AXObjectCache.cpp
Source/WebCore/editing/FrameSelection.cpp
Source/WebCore/loader/icon/wince/IconDatabaseWinCE.cpp [deleted file]
Source/WebCore/page/EventHandler.cpp
Source/WebCore/page/Settings.cpp
Source/WebCore/page/win/EventHandlerWin.cpp
Source/WebCore/platform/ContextMenu.h
Source/WebCore/platform/DragImage.cpp
Source/WebCore/platform/FileSystem.h
Source/WebCore/platform/graphics/BitmapImage.cpp
Source/WebCore/platform/graphics/FontGlyphs.cpp
Source/WebCore/platform/graphics/FontPlatformData.h
Source/WebCore/platform/graphics/ImageBufferData.h
Source/WebCore/platform/graphics/MediaPlayer.cpp
Source/WebCore/platform/graphics/SimpleFontData.h
Source/WebCore/platform/graphics/opentype/OpenTypeUtilities.cpp
Source/WebCore/platform/graphics/opentype/OpenTypeUtilities.h
Source/WebCore/platform/graphics/win/DIBPixelData.cpp
Source/WebCore/platform/graphics/win/GDIExtras.cpp [deleted file]
Source/WebCore/platform/graphics/win/GDIExtras.h [deleted file]
Source/WebCore/platform/graphics/win/IconWin.cpp
Source/WebCore/platform/graphics/win/SimpleFontDataWin.cpp
Source/WebCore/platform/graphics/wince/FontCacheWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/FontCustomPlatformData.cpp [deleted file]
Source/WebCore/platform/graphics/wince/FontCustomPlatformData.h [deleted file]
Source/WebCore/platform/graphics/wince/FontPlatformData.cpp [deleted file]
Source/WebCore/platform/graphics/wince/FontPlatformData.h [deleted file]
Source/WebCore/platform/graphics/wince/FontWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/GradientWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/ImageBufferDataWince.h [deleted file]
Source/WebCore/platform/graphics/wince/ImageBufferWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/ImageWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/MediaPlayerPrivateWinCE.h [deleted file]
Source/WebCore/platform/graphics/wince/MediaPlayerProxy.cpp [deleted file]
Source/WebCore/platform/graphics/wince/MediaPlayerProxy.h [deleted file]
Source/WebCore/platform/graphics/wince/PathWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/PlatformPathWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/PlatformPathWinCE.h [deleted file]
Source/WebCore/platform/graphics/wince/SharedBitmap.cpp [deleted file]
Source/WebCore/platform/graphics/wince/SharedBitmap.h [deleted file]
Source/WebCore/platform/graphics/wince/SimpleFontDataWinCE.cpp [deleted file]
Source/WebCore/platform/graphics/wince/WinCEGraphicsExtras.h [deleted file]
Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
Source/WebCore/platform/network/win/NetworkStateNotifierWin.cpp
Source/WebCore/platform/win/COMPtr.h
Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp
Source/WebCore/platform/win/ContextMenuItemWin.cpp
Source/WebCore/platform/win/ContextMenuWin.cpp
Source/WebCore/platform/win/DragImageWin.cpp
Source/WebCore/platform/win/FileSystemWin.cpp
Source/WebCore/platform/win/LoggingWin.cpp
Source/WebCore/platform/win/PasteboardWin.cpp
Source/WebCore/platform/win/PlatformMouseEventWin.cpp
Source/WebCore/platform/win/PlatformScreenWin.cpp
Source/WebCore/platform/win/PopupMenuWin.cpp
Source/WebCore/platform/win/ScrollbarThemeWin.cpp
Source/WebCore/platform/win/SharedBufferWin.cpp
Source/WebCore/platform/win/SharedTimerWin.cpp
Source/WebCore/platform/win/SoftLinking.h
Source/WebCore/platform/win/SystemInfo.cpp
Source/WebCore/platform/win/WCDataObject.cpp
Source/WebCore/plugins/PluginDatabase.cpp
Source/WebCore/plugins/PluginView.cpp
Source/WebCore/plugins/PluginViewNone.cpp
Source/WebCore/plugins/win/PluginDatabaseWin.cpp
Source/WebCore/plugins/win/PluginPackageWin.cpp
Source/WebCore/plugins/win/PluginViewWin.cpp
Source/WebCore/rendering/RenderThemeWinCE.cpp [deleted file]
Source/WebCore/rendering/RenderThemeWinCE.h [deleted file]
Source/WebCore/storage/wince/DatabaseThreadWinCE.cpp [deleted file]
Source/WebCore/storage/wince/DatabaseThreadWinCE.h [deleted file]
Source/WebCore/storage/wince/StorageThreadWinCE.cpp [deleted file]
Source/WebCore/storage/wince/StorageThreadWinCE.h [deleted file]
Source/WebKit/ChangeLog
Source/WebKit/PlatformWinCE.cmake [deleted file]
Source/WebKit/cf/ChangeLog
Source/WebKit/cf/WebCoreSupport/WebInspectorClientCF.cpp
Source/WebKit/wince/ChangeLog
Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.cpp [deleted file]
Source/WebKit/wince/WebCoreSupport/ChromeClientWinCE.h [deleted file]
Source/WebKit/wince/WebCoreSupport/ContextMenuClientWinCE.cpp [deleted file]
Source/WebKit/wince/WebCoreSupport/ContextMenuClientWinCE.h [deleted file]
Source/WebKit/wince/WebCoreSupport/DragClientWinCE.cpp [deleted file]
Source/WebKit/wince/WebCoreSupport/DragClientWinCE.h [deleted file]
Source/WebKit/wince/WebCoreSupport/EditorClientWinCE.cpp [deleted file]
Source/WebKit/wince/WebCoreSupport/EditorClientWinCE.h [deleted file]
Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.cpp [deleted file]
Source/WebKit/wince/WebCoreSupport/FrameLoaderClientWinCE.h [deleted file]
Source/WebKit/wince/WebCoreSupport/FrameNetworkingContextWinCE.cpp [deleted file]
Source/WebKit/wince/WebCoreSupport/FrameNetworkingContextWinCE.h [deleted file]
Source/WebKit/wince/WebCoreSupport/InspectorClientWinCE.cpp [deleted file]
Source/WebKit/wince/WebCoreSupport/InspectorClientWinCE.h [deleted file]
Source/WebKit/wince/WebCoreSupport/PlatformStrategiesWinCE.cpp [deleted file]
Source/WebKit/wince/WebCoreSupport/PlatformStrategiesWinCE.h [deleted file]
Source/WebKit/wince/WebView.cpp [deleted file]
Source/WebKit/wince/WebView.h [deleted file]
Source/cmake/OptionsWinCE.cmake [deleted file]
Source/cmake/WebKitPackaging.cmake
Tools/BuildSlaveSupport/build.webkit.org-config/wkbuild.py
Tools/BuildSlaveSupport/build.webkit.org-config/wkbuild_unittest.py
Tools/CMakeLists.txt
Tools/ChangeLog
Tools/DumpRenderTree/win/DRTDataObject.cpp
Tools/Scripts/build-webkit
Tools/Scripts/webkit-build-directory
Tools/Scripts/webkitdirs.pm
Tools/Scripts/webkitperl/FeatureList.pm
Tools/Scripts/webkitpy/port/port_testcase.py
Tools/TestWebKitAPI/config.h
Tools/WinCELauncher/CMakeLists.txt [deleted file]
Tools/WinCELauncher/main.cpp [deleted file]
Tools/gtk/manifest.txt

index 136e2f9..2078069 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2014-09-25  Csaba Osztrogonác  <ossy@webkit.org>
+
+        Remove WinCE port from trunk
+        https://bugs.webkit.org/show_bug.cgi?id=136951
+
+        Reviewed by Alex Christensen.
+
+        * Source/cmake/OptionsWinCE.cmake: Removed.
+        * Source/cmake/WebKitPackaging.cmake:
+
 2014-09-17  Renato Nagy  <rnagy@inf.u-szeged.hu>
 
         [EFL][GTK] Remove WebKit1 related codes
index 6647544..f4f8bc4 100644 (file)
@@ -1,3 +1,32 @@
+2014-09-25  Csaba Osztrogonác  <ossy@webkit.org>
+
+        Remove WinCE port from trunk
+        https://bugs.webkit.org/show_bug.cgi?id=136951
+
+        Reviewed by Alex Christensen.
+
+        * assembler/ARMAssembler.h:
+        (JSC::ARMAssembler::cacheFlush):
+        * assembler/ARMv7Assembler.h:
+        (JSC::ARMv7Assembler::cacheFlush):
+        * config.h:
+        * heap/MachineStackMarker.cpp:
+        (JSC::MachineThreads::gatherFromCurrentThread):
+        (JSC::MachineThreads::gatherFromOtherThread):
+        (JSC::swapIfBackwards): Deleted.
+        * jit/ExecutableAllocator.h:
+        * jsc.cpp:
+        (main):
+        * runtime/DateConstructor.cpp:
+        * runtime/Options.cpp:
+        (JSC::overrideOptionWithHeuristic):
+        * runtime/VM.cpp:
+        (JSC::VM::VM):
+        * testRegExp.cpp:
+        (main):
+        * tools/CodeProfiling.cpp:
+        (JSC::CodeProfiling::notifyAllocator):
+
 2014-09-24  Brian J. Burg  <burg@cs.washington.edu>
 
         Web Inspector: subtract elapsed time while debugger is paused from profile nodes
index 087d31c..3228a96 100644 (file)
@@ -1119,8 +1119,6 @@ namespace JSC {
                 linuxPageFlush(current, current + page);
 
             linuxPageFlush(current, end);
-#elif OS(WINCE)
-            CacheRangeFlush(code, size, CACHE_SYNC_ALL);
 #else
 #error "The cacheFlush support is missing on this platform."
 #endif
index ffc3090..647feb1 100644 (file)
@@ -2410,8 +2410,6 @@ public:
             linuxPageFlush(current, current + page);
 
         linuxPageFlush(current, end);
-#elif OS(WINCE)
-        CacheRangeFlush(code, size, CACHE_SYNC_ALL);
 #else
 #error "The cacheFlush support is missing on this platform."
 #endif
index 2761624..4596917 100644 (file)
 #define WINVER 0x0502
 #endif
 
-#if !COMPILER(MSVC7_OR_LOWER) && !OS(WINCE)
+#if !COMPILER(MSVC7_OR_LOWER)
 // 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
 #endif
-#endif // !COMPILER(MSVC7_OR_LOWER) && !OS(WINCE)
+#endif // !COMPILER(MSVC7_OR_LOWER
 
 #endif // OS(WINDOWS)
 
index 0654ffe..1269f0c 100644 (file)
@@ -69,18 +69,6 @@ using namespace WTF;
 
 namespace JSC {
 
-static inline void swapIfBackwards(void*& begin, void*& end)
-{
-#if OS(WINCE)
-    if (begin <= end)
-        return;
-    std::swap(begin, end);
-#else
-UNUSED_PARAM(begin);
-UNUSED_PARAM(end);
-#endif
-}
-
 #if OS(DARWIN)
 typedef mach_port_t PlatformThread;
 #elif OS(WINDOWS)
@@ -248,12 +236,10 @@ void MachineThreads::gatherFromCurrentThread(ConservativeRoots& conservativeRoot
 
     void* registersBegin = &registers;
     void* registersEnd = reinterpret_cast<void*>(roundUpToMultipleOf<sizeof(void*)>(reinterpret_cast<uintptr_t>(&registers + 1)));
-    swapIfBackwards(registersBegin, registersEnd);
     conservativeRoots.add(registersBegin, registersEnd, jitStubRoutines, codeBlocks);
 
     void* stackBegin = stackCurrent;
     void* stackEnd = wtfThreadData().stack().origin();
-    swapIfBackwards(stackBegin, stackEnd);
     conservativeRoots.add(stackBegin, stackEnd, jitStubRoutines, codeBlocks);
 }
 
@@ -453,7 +439,6 @@ void MachineThreads::gatherFromOtherThread(ConservativeRoots& conservativeRoots,
 
     void* stackPointer = otherThreadStackPointer(regs);
     void* stackBase = thread->stackBase;
-    swapIfBackwards(stackPointer, stackBase);
     stackPointer = reinterpret_cast<void*>(WTF::roundUpToMultipleOf<sizeof(void*)>(reinterpret_cast<uintptr_t>(stackPointer)));
     conservativeRoots.add(stackPointer, stackBase, jitStubRoutines, codeBlocks);
 
index 55f9e77..636c2fa 100644 (file)
 #include <unistd.h>
 #endif
 
-#if OS(WINCE)
-// From pkfuncs.h (private header file from the Platform Builder)
-#define CACHE_SYNC_ALL 0x07F
-extern "C" __declspec(dllimport) void CacheRangeFlush(LPVOID pAddr, DWORD dwLength, DWORD dwFlags);
-#endif
-
 #define JIT_ALLOCATOR_LARGE_ALLOC_SIZE (pageSize() * 4)
 
 #if ENABLE(ASSEMBLER_WX_EXCLUSIVE)
index 09493aa..6958703 100644 (file)
@@ -78,7 +78,7 @@
 #include <signal.h>
 #endif
 
-#if COMPILER(MSVC) && !OS(WINCE)
+#if COMPILER(MSVC)
 #include <crtdbg.h>
 #include <mmsystem.h>
 #include <windows.h>
@@ -1109,7 +1109,7 @@ EncodedJSValue JSC_HOST_CALL functionReturnTypeFor(ExecState* exec)
 // be in a separate main function because the jscmain function requires object
 // unwinding.
 
-#if COMPILER(MSVC) && !defined(_DEBUG) && !OS(WINCE)
+#if COMPILER(MSVC) && !defined(_DEBUG)
 #define TRY       __try {
 #define EXCEPT(x) } __except (EXCEPTION_EXECUTE_HANDLER) { x; }
 #else
@@ -1141,7 +1141,6 @@ int main(int argc, char** argv)
 #endif
 
 #if OS(WINDOWS)
-#if !OS(WINCE)
     // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for
     // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the
     // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>.
@@ -1155,7 +1154,6 @@ int main(int argc, char** argv)
     _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
     _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
 #endif
-#endif
 
     timeBeginPeriod(1);
 #endif
@@ -1170,7 +1168,6 @@ int main(int argc, char** argv)
 #endif
     JSC::initializeThreading();
 
-#if !OS(WINCE)
     if (char* timeoutString = getenv("JSC_timeout")) {
         if (sscanf(timeoutString, "%lf", &s_desiredTimeout) != 1) {
             dataLog(
@@ -1179,7 +1176,6 @@ int main(int argc, char** argv)
         } else
             createThread(timeoutThreadMain, 0, "jsc Timeout Thread");
     }
-#endif
 
 #if PLATFORM(IOS)
     Options::crashIfCantAllocateJITMemory() = true;
index 49a1c36..af570df 100644 (file)
 #include "JSReplayInputs.h"
 #endif
 
-#if OS(WINCE)
-extern "C" time_t time(time_t* timer); // Provided by libce.
-#endif
-
 #if HAVE(SYS_TIME_H)
 #include <sys/time.h>
 #endif
index f0ddf98..4718eec 100644 (file)
@@ -105,7 +105,6 @@ static bool parse(const char* string, GCLogging::Level& value)
 template<typename T>
 bool overrideOptionWithHeuristic(T& variable, const char* name)
 {
-#if !OS(WINCE)
     const char* stringValue = getenv(name);
     if (!stringValue)
         return false;
@@ -114,7 +113,6 @@ bool overrideOptionWithHeuristic(T& variable, const char* name)
         return true;
     
     fprintf(stderr, "WARNING: failed to parse %s=%s\n", name, stringValue);
-#endif
     return false;
 }
 
index 4914197..1396340 100644 (file)
@@ -266,11 +266,9 @@ VM::VM(VMType vmType, HeapType heapType)
         m_perBytecodeProfiler = adoptPtr(new Profiler::Database(*this));
 
         StringPrintStream pathOut;
-#if !OS(WINCE)
         const char* profilerPath = getenv("JSC_PROFILER_PATH");
         if (profilerPath)
             pathOut.print(profilerPath, "/");
-#endif
         pathOut.print("JSCProfile-", getCurrentProcessID(), "-", m_perBytecodeProfiler->databaseID(), ".json");
         m_perBytecodeProfiler->registerToSaveAtExit(pathOut.toCString().data());
     }
index 9286ce1..ab8d1dc 100644 (file)
@@ -39,7 +39,7 @@
 #include <sys/time.h>
 #endif
 
-#if COMPILER(MSVC) && !OS(WINCE)
+#if COMPILER(MSVC)
 #include <crtdbg.h>
 #include <mmsystem.h>
 #include <windows.h>
@@ -150,7 +150,7 @@ GlobalObject::GlobalObject(VM& vm, Structure* structure, const Vector<String>& a
 // be in a separate main function because the realMain function requires object
 // unwinding.
 
-#if COMPILER(MSVC) && !defined(_DEBUG) && !OS(WINCE)
+#if COMPILER(MSVC) && !defined(_DEBUG)
 #define TRY       __try {
 #define EXCEPT(x) } __except (EXCEPTION_EXECUTE_HANDLER) { x; }
 #else
@@ -163,12 +163,10 @@ int realMain(int argc, char** argv);
 int main(int argc, char** argv)
 {
 #if OS(WINDOWS)
-#if !OS(WINCE)
     // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for
     // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the
     // error mode here to work around Cygwin's behavior. See <http://webkit.org/b/55222>.
     ::SetErrorMode(0);
-#endif
 
 #if defined(_DEBUG)
     _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
index c76a9a8..302b5f9 100644 (file)
@@ -92,7 +92,6 @@ void CodeProfiling::sample(void* pc, void** framePointer)
 
 void CodeProfiling::notifyAllocator(WTF::MetaAllocator* allocator)
 {
-#if !OS(WINCE)
     // Check for JSC_CODE_PROFILING.
     const char* codeProfilingMode = getenv("JSC_CODE_PROFILING");
     if (!codeProfilingMode)
@@ -119,7 +118,6 @@ void CodeProfiling::notifyAllocator(WTF::MetaAllocator* allocator)
     ASSERT(!s_tracker);
     s_tracker = new WTF::MetaAllocatorTracker();
     allocator->trackAllocations(s_tracker);
-#endif
 }
 
 void* CodeProfiling::getOwnerUIDForPC(void* address)
index b37a6e3..fc58558 100644 (file)
@@ -1,3 +1,52 @@
+2014-09-25  Csaba Osztrogonác  <ossy@webkit.org>
+
+        Remove WinCE port from trunk
+        https://bugs.webkit.org/show_bug.cgi?id=136951
+
+        Reviewed by Alex Christensen.
+
+        * config.h:
+        * wtf/Assertions.cpp:
+        * wtf/Assertions.h:
+        * wtf/Atomics.h:
+        (WTF::weakCompareAndSwap):
+        * wtf/CurrentTime.cpp:
+        (WTF::lowResUTCTime):
+        * wtf/DataLog.cpp:
+        * wtf/DateMath.cpp:
+        (WTF::getLocalTime):
+        (WTF::calculateDSTOffset):
+        * wtf/FastMalloc.cpp:
+        * wtf/FeatureDefines.h:
+        * wtf/OSAllocator.h:
+        (WTF::OSAllocator::decommitAndRelease):
+        * wtf/Platform.h:
+        * wtf/PlatformWin.cmake:
+        * wtf/RAMSize.cpp:
+        (WTF::computeRAMSize):
+        * wtf/RandomNumberSeed.h:
+        (WTF::initializeRandomNumberGenerator):
+        * wtf/StackBounds.cpp:
+        (WTF::StackBounds::initialize):
+        * wtf/StackBounds.h:
+        (WTF::StackBounds::isGrowingDownward):
+        * wtf/StdLibExtras.h:
+        (wtf_bsearch): Deleted.
+        * wtf/StringExtras.h:
+        (strnicmp): Deleted.
+        (stricmp): Deleted.
+        (strdup): Deleted.
+        * wtf/ThreadSpecific.h:
+        * wtf/ThreadingWin.cpp:
+        (WTF::createThreadInternal):
+        * wtf/WindowsExtras.h:
+        (WTF::getRegistryValue):
+        (WTF::getWindowPointer):
+        (WTF::setWindowPointer):
+        * wtf/dtoa/utils.h:
+        * wtf/text/WTFString.cpp:
+        (WTF::String::format):
+
 2014-09-24  Geoffrey Garen  <ggaren@apple.com>
 
         Do the bmalloc.
index 5c22316..2903cf2 100644 (file)
@@ -44,7 +44,7 @@
 #endif
 #endif
 
-#if !COMPILER(MSVC7_OR_LOWER) && !OS(WINCE)
+#if !COMPILER(MSVC7_OR_LOWER)
 // 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
index ea5b9b3..4e12c57 100644 (file)
@@ -55,7 +55,7 @@
 #endif
 #endif // USE(CF)
 
-#if COMPILER(MSVC) && !OS(WINCE)
+#if COMPILER(MSVC)
 #include <crtdbg.h>
 #endif
 
@@ -127,20 +127,7 @@ static void vprintf_stderr_common(const char* format, va_list args)
                 break;
 
             if (_vsnprintf(buffer, size, format, args) != -1) {
-#if OS(WINCE)
-                // WinCE only supports wide chars
-                wchar_t* wideBuffer = (wchar_t*)malloc(size * sizeof(wchar_t));
-                if (wideBuffer == NULL)
-                    break;
-                for (unsigned int i = 0; i < size; ++i) {
-                    if (!(wideBuffer[i] = buffer[i]))
-                        break;
-                }
-                OutputDebugStringW(wideBuffer);
-                free(wideBuffer);
-#else
                 OutputDebugStringA(buffer);
-#endif
                 free(buffer);
                 break;
             }
@@ -201,7 +188,7 @@ static void printf_stderr_common(const char* format, ...)
 
 static void printCallSite(const char* file, int line, const char* function)
 {
-#if OS(WINDOWS) && !OS(WINCE) && defined(_DEBUG)
+#if OS(WINDOWS) && defined(_DEBUG)
     _CrtDbgReport(_CRT_WARN, file, line, NULL, "%s\n", function);
 #else
     // By using this format, which matches the format used by MSVC for compiler errors, developers
@@ -240,7 +227,7 @@ void WTFGetBacktrace(void** stack, int* size)
 {
 #if OS(DARWIN) || (OS(LINUX) && !defined(__UCLIBC__))
     *size = backtrace(stack, *size);
-#elif OS(WINDOWS) && !OS(WINCE)
+#elif OS(WINDOWS)
     // The CaptureStackBackTrace function is available in XP, but it is not defined
     // in the Windows Server 2003 R2 Platform SDK. So, we'll grab the function
     // through GetProcAddress.
index 8be094c..a40bc8b 100644 (file)
@@ -199,14 +199,6 @@ extern "C" {
   Expressions inside them are evaluated in debug builds only.
 */
 
-#if OS(WINCE)
-/* FIXME: We include this here only to avoid a conflict with the ASSERT macro. */
-#include <windows.h>
-#undef min
-#undef max
-#undef ERROR
-#endif
-
 #if OS(WINDOWS)
 /* FIXME: Change to use something other than ASSERT to avoid this conflict with the underlying platform */
 #undef ASSERT
index 4e630c2..7876817 100644 (file)
@@ -74,11 +74,7 @@ namespace WTF {
 #if OS(WINDOWS)
 inline bool weakCompareAndSwap(volatile unsigned* location, unsigned expected, unsigned newValue)
 {
-#if OS(WINCE)
-    return InterlockedCompareExchange(reinterpret_cast<LONG*>(const_cast<unsigned*>(location)), static_cast<LONG>(newValue), static_cast<LONG>(expected)) == static_cast<LONG>(expected);
-#else
     return InterlockedCompareExchange(reinterpret_cast<LONG volatile*>(location), static_cast<LONG>(newValue), static_cast<LONG>(expected)) == static_cast<LONG>(expected);
-#endif
 }
 
 inline bool weakCompareAndSwap(void*volatile* location, void* expected, void* newValue)
index 990caa1..411e671 100644 (file)
@@ -72,11 +72,7 @@ static double lowResUTCTime()
 {
     FILETIME fileTime;
 
-#if OS(WINCE)
-    GetCurrentFT(&fileTime);
-#else
     GetSystemTimeAsFileTime(&fileTime);
-#endif
 
     // As per Windows documentation for FILETIME, copy the resulting FILETIME structure to a
     // ULARGE_INTEGER structure using memcpy (using memcpy instead of direct assignment can
index 29bed15..ea04f6f 100644 (file)
 #include <unistd.h>
 #endif
 
-#if OS(WINCE)
-#ifndef _IONBF
-#define _IONBF 0x0004
-#endif
-#endif
-
 #define DATA_LOG_TO_FILE 0
 
 // Set to 1 to use the temp directory from confstr instead of hardcoded directory.
index 6ee36d3..37cf35e 100644 (file)
@@ -121,7 +121,6 @@ static const int firstDayOfMonth[2][12] = {
     {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335}
 };
 
-#if !OS(WINCE)
 static inline void getLocalTime(const time_t* localTime, struct tm* localTM)
 {
 #if COMPILER(MINGW)
@@ -132,7 +131,6 @@ static inline void getLocalTime(const time_t* localTime, struct tm* localTM)
     localtime_r(localTime, localTM);
 #endif
 }
-#endif
 
 bool isLeapYear(int year)
 {
@@ -424,11 +422,7 @@ static void UnixTimeToFileTime(time_t t, LPFILETIME pft)
  */
 static double calculateDSTOffset(time_t localTime, double utcOffset)
 {
-#if OS(WINCE)
-    UNUSED_PARAM(localTime);
-    UNUSED_PARAM(utcOffset);
-    return 0;
-#elif OS(WINDOWS)
+#if OS(WINDOWS)
     FILETIME utcFileTime;
     UnixTimeToFileTime(localTime, &utcFileTime);
     SYSTEMTIME utcSystemTime, localSystemTime;
index 4d40796..d731a14 100644 (file)
@@ -122,11 +122,6 @@ namespace WTF {
 
 #if OS(WINDOWS)
 
-// TLS_OUT_OF_INDEXES is not defined on WinCE.
-#ifndef TLS_OUT_OF_INDEXES
-#define TLS_OUT_OF_INDEXES 0xffffffff
-#endif
-
 static DWORD isForibiddenTlsIndex = TLS_OUT_OF_INDEXES;
 static const LPVOID kTlsAllowValue = reinterpret_cast<LPVOID>(0); // Must be zero.
 static const LPVOID kTlsForbiddenValue = reinterpret_cast<LPVOID>(1);
index df76a7a..603285e 100644 (file)
@@ -239,7 +239,7 @@ the public iOS SDK. We will also need to update the FeatureDefines.xcconfig file
 #endif /* PLATFORM(MAC) */
 
 /* --------- Apple Windows port --------- */
-#if PLATFORM(WIN) && !OS(WINCE) && !PLATFORM(WIN_CAIRO)
+#if PLATFORM(WIN) && !PLATFORM(WIN_CAIRO)
 
 #if !defined(ENABLE_FULLSCREEN_API)
 #define ENABLE_FULLSCREEN_API 1
@@ -253,26 +253,7 @@ the public iOS SDK. We will also need to update the FeatureDefines.xcconfig file
 #define ENABLE_WEBGL 1
 #endif
 
-#endif /* PLATFORM(WIN) && !OS(WINCE) && !PLATFORM(WIN_CAIRO) */
-
-/* --------- WinCE port --------- */
-/* WinCE port is a specialization of PLATFORM(WIN). */
-/* PLATFORM(WIN) is always enabled when building for the WinCE port. */
-#if PLATFORM(WIN) && OS(WINCE)
-
-#if !defined(ENABLE_DRAG_SUPPORT)
-#define ENABLE_DRAG_SUPPORT 0
-#endif
-
-#if !defined(ENABLE_FTPDIR)
-#define ENABLE_FTPDIR 0
-#endif
-
-#if !defined(ENABLE_INSPECTOR)
-#define ENABLE_INSPECTOR 0
-#endif
-
-#endif /* PLATFORM(WIN) && OS(WINCE) */
+#endif /* PLATFORM(WIN) && !PLATFORM(WIN_CAIRO) */
 
 /* --------- Windows CAIRO port --------- */
 /* PLATFORM(WIN_CAIRO) is a specialization of PLATFORM(WIN). */
index a576672..985cdff 100644 (file)
@@ -63,7 +63,6 @@ public:
     // committing/decommitting the entire region additional parameters allow a subregion to be
     // specified.
     WTF_EXPORT_PRIVATE static void* reserveAndCommit(size_t reserveSize, size_t commitSize, Usage = UnknownUsage, bool writable = true, bool executable = false);
-    static void decommitAndRelease(void* releaseBase, size_t releaseSize, void* decommitBase, size_t decommitSize);
 
     // Reallocate an existing, committed allocation.
     // The prior allocation must be fully comitted, and the new size will also be fully committed.
@@ -79,25 +78,11 @@ inline void* OSAllocator::reserveAndCommit(size_t reserveSize, size_t commitSize
     return base;
 }
 
-inline void OSAllocator::decommitAndRelease(void* releaseBase, size_t releaseSize, void* decommitBase, size_t decommitSize)
+inline void OSAllocator::decommitAndRelease(void* releaseBase, size_t releaseSize)
 {
-    ASSERT(decommitBase >= releaseBase && (static_cast<char*>(decommitBase) + decommitSize) <= (static_cast<char*>(releaseBase) + releaseSize));
-#if OS(WINCE)
-    // On most platforms we can actually skip this final decommit; releasing the VM will
-    // implicitly decommit any physical memory in the region. This is not true on WINCE.
-    decommit(decommitBase, decommitSize);
-#else
-    UNUSED_PARAM(decommitBase);
-    UNUSED_PARAM(decommitSize);
-#endif
     releaseDecommitted(releaseBase, releaseSize);
 }
 
-inline void OSAllocator::decommitAndRelease(void* base, size_t size)
-{
-    decommitAndRelease(base, size, base, size);
-}
-
 template<typename T>
 inline T* OSAllocator::reallocateCommitted(T* oldBase, size_t oldSize, size_t newSize, Usage usage, bool writable, bool executable)
 {
index bdb976b..ab57725 100644 (file)
@@ -78,7 +78,7 @@ void PageAllocationAligned::deallocate()
     vm_deallocate(current_task(), reinterpret_cast<vm_address_t>(tmp.base()), tmp.size());
 #else
     ASSERT(tmp.m_reservation.contains(tmp.base(), tmp.size()));
-    OSAllocator::decommitAndRelease(tmp.m_reservation.base(), tmp.m_reservation.size(), tmp.base(), tmp.size());
+    OSAllocator::decommitAndRelease(tmp.m_reservation.base(), tmp.m_reservation.size());
 #endif
 }
 
index 532778e..b6007b3 100644 (file)
 #define WTF_OS_SOLARIS 1
 #endif
 
-/* OS(WINCE) - Windows CE; note that for this platform OS(WINDOWS) is also defined */
-#if defined(_WIN32_WCE)
-#define WTF_OS_WINCE 1
-#endif
-
 /* OS(WINDOWS) - Any version of Windows */
 #if defined(WIN32) || defined(_WIN32)
 #define WTF_OS_WINDOWS 1
 
 #endif /* OS(DARWIN) */
 
-#if OS(WINDOWS) && !OS(WINCE)
+#if OS(WINDOWS)
 
 #define HAVE_SYS_TIMEB_H 1
 #define HAVE_ALIGNED_MALLOC 1
 /* The JIT is enabled by default on all x86, x86-64, ARM & MIPS platforms except ARMv7k and Windows. */
 #if !defined(ENABLE_JIT) \
     && (CPU(X86) || CPU(X86_64) || CPU(ARM) || CPU(ARM64) || CPU(MIPS)) \
-    && !CPU(APPLE_ARMV7K)                                                           \
-    && !OS(WINCE)
+    && !CPU(APPLE_ARMV7K)
 #define ENABLE_JIT 1
 #endif
 
 #define WTF_USE_UNIX_DOMAIN_SOCKETS 1
 #endif
 
-#if !defined(WTF_USE_IMLANG_FONT_LINK2) && !OS(WINCE)
+#if !defined(WTF_USE_IMLANG_FONT_LINK2)
 #define WTF_USE_IMLANG_FONT_LINK2 1
 #endif
 
index cb2c526..74c9ebf 100644 (file)
@@ -5,15 +5,9 @@ list(APPEND WTF_SOURCES
     win/RunLoopWin.cpp
 )
 
-if (WINCE)
-    list(APPEND WTF_LIBRARIES
-        mmtimer
-    )
-else ()
-    list(APPEND WTF_LIBRARIES
-        winmm
-    )
-endif ()
+list(APPEND WTF_LIBRARIES
+    winmm
+)
 
 list(APPEND WTF_HEADERS
     "${DERIVED_SOURCES_WTF_DIR}/WTFHeaderDetection.h"
index 50b5222..a6d1f64 100644 (file)
@@ -61,13 +61,6 @@ static size_t computeRAMSize()
     if (pages == -1 || pageSize == -1)
         return ramSizeGuess;
     return pages * pageSize;
-#elif OS(WINCE)
-    MEMORYSTATUS status;
-    status.dwLength = sizeof(status);
-    GlobalMemoryStatus(&status);
-    if (status.dwTotalPhys <= 0)
-        return ramSizeGuess;
-    return status.dwTotalPhys;
 #elif OS(WINDOWS)
     MEMORYSTATUSEX status;
     status.dwLength = sizeof(status);
index 13ad48e..a65d7d9 100644 (file)
@@ -45,9 +45,6 @@ inline void initializeRandomNumberGenerator()
 {
 #if OS(DARWIN)
     // On Darwin we use arc4random which initialises itself.
-#elif OS(WINCE)
-    // initialize rand()
-    srand(GetTickCount());
 #elif COMPILER(MSVC) && defined(_CRT_RAND_S)
     // On Windows we use rand_s which initialises itself
 #elif OS(UNIX)
index 1c86750..f308ac1 100644 (file)
@@ -124,16 +124,6 @@ void StackBounds::initialize()
     // stackOrigin.AllocationBase points to the reserved stack memory base address.
 
     m_origin = static_cast<char*>(stackOrigin.BaseAddress) + stackOrigin.RegionSize;
-#if OS(WINCE)
-    SYSTEM_INFO systemInfo;
-    GetSystemInfo(&systemInfo);
-    DWORD pageSize = systemInfo.dwPageSize;
-
-    MEMORY_BASIC_INFORMATION stackMemory;
-    VirtualQuery(m_origin, &stackMemory, sizeof(stackMemory));
-
-    m_bound = static_cast<char*>(m_origin) - stackMemory.RegionSize + pageSize;
-#else
     // The stack on Windows consists out of three parts (uncommitted memory, a guard page and present
     // committed memory). The 3 regions have different BaseAddresses but all have the same AllocationBase
     // since they are all from the same VirtualAlloc. The 3 regions are laid out in memory (from high to
@@ -173,7 +163,6 @@ void StackBounds::initialize()
     ASSERT(endOfStack == computedEnd);
 #endif // NDEBUG
     m_bound = static_cast<char*>(endOfStack) + guardPage.RegionSize;
-#endif // OS(WINCE)
 }
 
 #else
index b57aae2..179cc15 100644 (file)
@@ -98,11 +98,7 @@ public:
     bool isGrowingDownward() const
     {
         ASSERT(m_origin && m_bound);
-#if OS(WINCE)
-        return m_origin > m_bound;
-#else
         return true;
-#endif
     }
 
 private:
index c1f45e0..a018723 100644 (file)
@@ -297,31 +297,6 @@ WTF_EXPORT_PRIVATE bool isCompilationThread();
 
 } // namespace WTF
 
-#if OS(WINCE)
-// Windows CE CRT has does not implement bsearch().
-inline void* wtf_bsearch(const void* key, const void* base, size_t count, size_t size, int (*compare)(const void *, const void *))
-{
-    const char* first = static_cast<const char*>(base);
-
-    while (count) {
-        size_t pos = (count - 1) >> 1;
-        const char* item = first + pos * size;
-        int compareResult = compare(item, key);
-        if (!compareResult)
-            return const_cast<char*>(item);
-        if (compareResult < 0) {
-            count -= (pos + 1);
-            first += (pos + 1) * size;
-        } else
-            count = pos;
-    }
-
-    return 0;
-}
-
-#define bsearch(key, base, count, size, compare) wtf_bsearch(key, base, count, size, compare)
-#endif
-
 // This version of placement new omits a 0 check.
 enum NotNullTag { NotNull };
 inline void* operator new(size_t, NotNullTag, void* location)
index 103e173..b1aea51 100644 (file)
@@ -69,25 +69,6 @@ inline double wtf_vsnprintf(char* buffer, size_t count, const char* format, va_l
 // vsnprintf does not null terminate the buffer. WebKit can rely on the null termination.
 #define vsnprintf(buffer, count, format, args) wtf_vsnprintf(buffer, count, format, args)
 
-#if OS(WINCE)
-
-inline int strnicmp(const char* string1, const char* string2, size_t count)
-{
-    return _strnicmp(string1, string2, count);
-}
-
-inline int stricmp(const char* string1, const char* string2)
-{
-    return _stricmp(string1, string2);
-}
-
-inline char* strdup(const char* strSource)
-{
-    return _strdup(strSource);
-}
-
-#endif
-
 inline int strncasecmp(const char* s1, const char* s2, size_t len)
 {
     return _strnicmp(s1, s2, len);
index 1dcb378..f4040e7 100644 (file)
@@ -158,11 +158,6 @@ inline void ThreadSpecific<T>::set(T* ptr)
 
 #elif OS(WINDOWS)
 
-// TLS_OUT_OF_INDEXES is not defined on WinCE.
-#ifndef TLS_OUT_OF_INDEXES
-#define TLS_OUT_OF_INDEXES 0xffffffff
-#endif
-
 // The maximum number of TLS keys that can be created. For simplification, we assume that:
 // 1) Once the instance of ThreadSpecific<> is created, it will not be destructed until the program dies.
 // 2) We do not need to hold many instances of ThreadSpecific<> data. This fixed number should be far enough.
index e72afff..2e97688 100644 (file)
@@ -94,6 +94,7 @@
 
 #include "MainThread.h"
 #include "ThreadFunctionInvocation.h"
+#include <process.h>
 #include <windows.h>
 #include <wtf/CurrentTime.h>
 #include <wtf/HashMap.h>
 #include "ThreadSpecific.h"
 #endif
 
-#if !OS(WINCE)
-#include <process.h>
-#endif
-
 #if HAVE(ERRNO_H)
 #include <errno.h>
 #endif
@@ -218,17 +215,9 @@ ThreadIdentifier createThreadInternal(ThreadFunction entryPoint, void* data, con
     unsigned threadIdentifier = 0;
     ThreadIdentifier threadID = 0;
     OwnPtr<ThreadFunctionInvocation> invocation = adoptPtr(new ThreadFunctionInvocation(entryPoint, data));
-#if OS(WINCE)
-    // This is safe on WINCE, since CRT is in the core and innately multithreaded.
-    // On desktop Windows, need to use _beginthreadex (not available on WinCE) if using any CRT functions
-    HANDLE threadHandle = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)wtfThreadEntryPoint, invocation.get(), 0, (LPDWORD)&threadIdentifier);
-#else
     HANDLE threadHandle = reinterpret_cast<HANDLE>(_beginthreadex(0, 0, wtfThreadEntryPoint, invocation.get(), 0, &threadIdentifier));
-#endif
     if (!threadHandle) {
-#if OS(WINCE)
-        LOG_ERROR("Failed to create thread at entry point %p with data %p: %ld", entryPoint, data, ::GetLastError());
-#elif !HAVE(ERRNO_H)
+#if !HAVE(ERRNO_H)
         LOG_ERROR("Failed to create thread at entry point %p with data %p.", entryPoint, data);
 #else
         LOG_ERROR("Failed to create thread at entry point %p with data %p: %ld", entryPoint, data, errno);
index 16bc865..061db53 100644 (file)
@@ -39,34 +39,17 @@ namespace WTF {
 
 inline HRESULT getRegistryValue(HKEY hkey, LPCWSTR pszSubKey, LPCWSTR pszValue, LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData)
 {
-#if OS(WINCE)
-    HKEY key;
-    if (::RegOpenKeyExW(hkey, pszSubKey, 0, 0, &key) != ERROR_SUCCESS)
-        return ERROR_INVALID_NAME;
-    HRESULT result = ::RegQueryValueExW(key, pszValue, 0, pdwType, static_cast<LPBYTE>(pvData), pcbData);
-    ::RegCloseKey(key);
-    return result;
-#else
     return ::SHGetValueW(hkey, pszSubKey, pszValue, pdwType, pvData, pcbData);
-#endif
 }
 
 inline void* getWindowPointer(HWND hWnd, int index)
 {
-#if OS(WINCE)
-    return reinterpret_cast<void*>(::GetWindowLong(hWnd, index));
-#else
     return reinterpret_cast<void*>(::GetWindowLongPtr(hWnd, index));
-#endif
 }
 
 inline void* setWindowPointer(HWND hWnd, int index, void* value)
 {
-#if OS(WINCE)
-    return reinterpret_cast<void*>(::SetWindowLong(hWnd, index, reinterpret_cast<LONG>(value)));
-#else
     return reinterpret_cast<void*>(::SetWindowLongPtr(hWnd, index, reinterpret_cast<LONG_PTR>(value)));
-#endif
 }
 
 } // namespace WTF
index 5c41482..9e2fc3d 100644 (file)
@@ -49,7 +49,7 @@
 defined(__ARMEL__) || \
 defined(_MIPS_ARCH_MIPS32R2)
 #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
-#elif CPU(MIPS) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || OS(WINCE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA)
+#elif CPU(MIPS) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA)
 #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
 #elif defined(_M_IX86) || defined(__i386__)
 #if defined(_WIN32)
@@ -58,8 +58,6 @@ defined(_MIPS_ARCH_MIPS32R2)
 #else
 #undef DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS
 #endif  // _WIN32
-#elif defined(WINCE) || defined(_WIN32_WCE)
-#define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
 #else
 #error Target architecture was not detected as supported by Double-Conversion.
 #endif
index 0803c2d..f69ec84 100644 (file)
@@ -452,29 +452,6 @@ Vector<UChar> String::charactersWithNullTermination() const
 
 String String::format(const char *format, ...)
 {
-#if OS(WINCE)
-    va_list args;
-    va_start(args, format);
-
-    Vector<char, 256> buffer;
-
-    int bufferSize = 256;
-    buffer.resize(bufferSize);
-    for (;;) {
-        int written = vsnprintf(buffer.data(), bufferSize, format, args);
-        va_end(args);
-
-        if (written == 0)
-            return String("");
-        if (written > 0)
-            return StringImpl::create(reinterpret_cast<const LChar*>(buffer.data()), written);
-        
-        bufferSize <<= 1;
-        buffer.resize(bufferSize);
-        va_start(args, format);
-    }
-
-#else
     va_list args;
     va_start(args, format);
 
@@ -509,7 +486,6 @@ String String::format(const char *format, ...)
     va_end(args);
     
     return StringImpl::create(reinterpret_cast<const LChar*>(buffer.data()), len);
-#endif
 }
 
 String String::number(int number)
index 6e2b5aa..d7e4993 100644 (file)
@@ -1,3 +1,149 @@
+2014-09-25  Csaba Osztrogonác  <ossy@webkit.org>
+
+        Remove WinCE port from trunk
+        https://bugs.webkit.org/show_bug.cgi?id=136951
+
+        Reviewed by Alex Christensen.
+
+        * Modules/encryptedmedia/CDMPrivateMediaPlayer.cpp:
+        * PlatformWinCE.cmake: Removed.
+        * accessibility/AXObjectCache.cpp:
+        * editing/FrameSelection.cpp:
+        (WebCore::FrameSelection::modifyMovingRight):
+        * loader/icon/wince/IconDatabaseWinCE.cpp: Removed.
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::sendContextMenuEventForKey):
+        * page/Settings.cpp:
+        * page/win/EventHandlerWin.cpp:
+        (WebCore::EventHandler::createDraggingDataTransfer):
+        * platform/ContextMenu.h:
+        * platform/DragImage.cpp:
+        * platform/FileSystem.h:
+        * platform/graphics/BitmapImage.cpp:
+        (WebCore::BitmapImage::mayFillWithSolidColor):
+        * platform/graphics/FontGlyphs.cpp:
+        (WebCore::FontGlyphs::glyphDataAndPageForCharacter):
+        * platform/graphics/FontPlatformData.h:
+        * platform/graphics/ImageBufferData.h:
+        * platform/graphics/MediaPlayer.cpp:
+        * platform/graphics/SimpleFontData.h:
+        * platform/graphics/opentype/OpenTypeUtilities.cpp:
+        (WebCore::renameAndActivateFont):
+        * platform/graphics/opentype/OpenTypeUtilities.h:
+        * platform/graphics/win/DIBPixelData.cpp:
+        (WebCore::DIBPixelData::setRGBABitmapAlpha):
+        * platform/graphics/win/GDIExtras.cpp: Removed.
+        * platform/graphics/win/GDIExtras.h:
+        (WebCore::hasAlphaBlendSupport):
+        (WebCore::alphaBlendIfSupported):
+        * platform/graphics/win/IconWin.cpp:
+        (WebCore::Icon::createIconForFiles):
+        (WebCore::Icon::paint):
+        * platform/graphics/win/SimpleFontDataWin.cpp:
+        (WebCore::SimpleFontData::initGDIFont):
+        (WebCore::SimpleFontData::platformDestroy):
+        (WebCore::SimpleFontData::boundsForGDIGlyph):
+        (WebCore::SimpleFontData::widthForGDIGlyph):
+        (WebCore::SimpleFontData::scriptFontProperties):
+        * platform/graphics/wince/FontCacheWinCE.cpp: Removed.
+        * platform/graphics/wince/FontCustomPlatformData.cpp: Removed.
+        * platform/graphics/wince/FontCustomPlatformData.h: Removed.
+        * platform/graphics/wince/FontPlatformData.cpp: Removed.
+        * platform/graphics/wince/FontPlatformData.h: Removed.
+        * platform/graphics/wince/FontWinCE.cpp: Removed.
+        * platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp: Removed.
+        * platform/graphics/wince/GradientWinCE.cpp: Removed.
+        * platform/graphics/wince/GraphicsContextWinCE.cpp: Removed.
+        * platform/graphics/wince/ImageBufferDataWince.h: Removed.
+        * platform/graphics/wince/ImageBufferWinCE.cpp: Removed.
+        * platform/graphics/wince/ImageWinCE.cpp: Removed.
+        * platform/graphics/wince/MediaPlayerPrivateWinCE.h: Removed.
+        * platform/graphics/wince/MediaPlayerProxy.cpp: Removed.
+        * platform/graphics/wince/MediaPlayerProxy.h: Removed.
+        * platform/graphics/wince/PathWinCE.cpp: Removed.
+        * platform/graphics/wince/PlatformPathWinCE.cpp: Removed.
+        * platform/graphics/wince/PlatformPathWinCE.h: Removed.
+        * platform/graphics/wince/SharedBitmap.cpp: Removed.
+        * platform/graphics/wince/SharedBitmap.h: Removed.
+        * platform/graphics/wince/SimpleFontDataWinCE.cpp: Removed.
+        * platform/graphics/wince/WinCEGraphicsExtras.h: Removed.
+        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
+        * platform/network/win/NetworkStateNotifierWin.cpp:
+        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
+        * platform/win/COMPtr.h:
+        * platform/win/ClipboardUtilitiesWin.cpp:
+        * platform/win/ContextMenuItemWin.cpp:
+        * platform/win/ContextMenuWin.cpp:
+        (WebCore::ContextMenu::getContextMenuItems):
+        (WebCore::ContextMenu::createPlatformContextMenuFromItems):
+        * platform/win/DragImageWin.cpp:
+        (WebCore::dragLabelFont):
+        * platform/win/FileSystemWin.cpp:
+        (WebCore::pathByAppendingComponent):
+        (WebCore::pathGetFileName):
+        (WebCore::storageDirectory):
+        * platform/win/LoggingWin.cpp:
+        (WebCore::logLevelString):
+        * platform/win/PasteboardWin.cpp:
+        (WebCore::PasteboardOwnerWndProc):
+        (WebCore::Pasteboard::createForCopyAndPaste):
+        (WebCore::pathRemoveBadFSCharacters):
+        (WebCore::filesystemPathFromUrlOrTitle):
+        (WebCore::createGlobalHDropContent):
+        * platform/win/PlatformMouseEventWin.cpp:
+        (WebCore::messageToEventType):
+        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
+        * platform/win/PlatformScreenWin.cpp:
+        (WebCore::deviceInfoForWidget):
+        (WebCore::screenIsMonochrome):
+        * platform/win/PopupMenuWin.cpp:
+        (WebCore::PopupMenuWin::show):
+        (WebCore::PopupMenuWin::paint):
+        (WebCore::PopupMenuWin::registerClass):
+        (WebCore::PopupMenuWin::wndProc):
+        * platform/win/ScrollbarThemeWin.cpp:
+        (WebCore::ScrollbarThemeWin::paintButton):
+        * platform/win/SharedBufferWin.cpp:
+        * platform/win/SharedTimerWin.cpp:
+        (WebCore::TimerWindowWndProc):
+        (WebCore::initializeOffScreenTimerWindow):
+        (WebCore::queueTimerProc):
+        (WebCore::setSharedTimerFireInterval):
+        (WebCore::stopSharedTimer):
+        * platform/win/SoftLinking.h:
+        * platform/win/SystemInfo.cpp:
+        (WebCore::windowsVersion):
+        (WebCore::processorArchitecture):
+        (WebCore::architectureTokenForUAString):
+        * platform/win/WCDataObject.cpp:
+        (WebCore::WCDataObject::CopyMedium):
+        * plugins/PluginDatabase.cpp:
+        * plugins/PluginView.cpp:
+        (WebCore::PluginView::stop):
+        * plugins/PluginViewNone.cpp:
+        * plugins/win/PluginDatabaseWin.cpp:
+        (WebCore::addWindowsMediaPlayerPluginDirectory):
+        (WebCore::addMacromediaPluginDirectories):
+        * plugins/win/PluginPackageWin.cpp:
+        (WebCore::PluginPackage::load):
+        * plugins/win/PluginViewWin.cpp:
+        (WebCore::setUpOffscreenPaintingHooks):
+        (WebCore::registerPluginView):
+        (WebCore::PluginView::wndProc):
+        (WebCore::PluginView::updatePluginWidget):
+        (WebCore::PluginView::paintIntoTransformedContext):
+        (WebCore::PluginView::paint):
+        (WebCore::PluginView::handleMouseEvent):
+        (WebCore::PluginView::setParent):
+        (WebCore::PluginView::setNPWindowRect):
+        (WebCore::PluginView::platformStart):
+        * rendering/RenderThemeWinCE.cpp: Removed.
+        * rendering/RenderThemeWinCE.h: Removed.
+        * storage/wince/DatabaseThreadWinCE.cpp: Removed.
+        * storage/wince/DatabaseThreadWinCE.h: Removed.
+        * storage/wince/StorageThreadWinCE.cpp: Removed.
+        * storage/wince/StorageThreadWinCE.h: Removed.
+
 2014-09-25  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         Unreviewed. Fix GTK+ build after r173944.
index ac6f46f..1271a7a 100644 (file)
@@ -34,7 +34,7 @@
 #include "ExceptionCode.h"
 #include "MediaPlayer.h"
 
-#if PLATFORM(IOS) || OS(WINCE)
+#if PLATFORM(IOS)
 #include "SoftLinking.h"
 #endif
 
diff --git a/Source/WebCore/PlatformWinCE.cmake b/Source/WebCore/PlatformWinCE.cmake
deleted file mode 100644 (file)
index d6e8918..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-list(APPEND WebCore_INCLUDE_DIRECTORIES
-    "${WEBCORE_DIR}/platform/wince"
-    "${WEBCORE_DIR}/platform/graphics/wince"
-    "${WEBCORE_DIR}/platform/network/win"
-    "${3RDPARTY_DIR}/libjpeg"
-    "${3RDPARTY_DIR}/libpng"
-    "${3RDPARTY_DIR}/libxml2/include"
-    "${3RDPARTY_DIR}/libxslt/include"
-    "${3RDPARTY_DIR}/sqlite"
-    "${3RDPARTY_DIR}/zlib"
-)
-
-list(APPEND WebCore_SOURCES
-    page/win/FrameGdiWin.cpp
-
-    platform/ScrollAnimatorNone.cpp
-
-    platform/graphics/win/DIBPixelData.cpp
-    platform/graphics/win/GDIExtras.cpp
-    platform/graphics/win/IconWin.cpp
-    platform/graphics/win/ImageWin.cpp
-    platform/graphics/win/IntPointWin.cpp
-    platform/graphics/win/IntRectWin.cpp
-    platform/graphics/win/IntSizeWin.cpp
-
-    platform/graphics/wince/FontCacheWince.cpp
-    platform/graphics/wince/FontCustomPlatformData.cpp
-    platform/graphics/wince/FontPlatformData.cpp
-    platform/graphics/wince/FontWince.cpp
-    platform/graphics/wince/GlyphPageTreeNodeWince.cpp
-    platform/graphics/wince/GradientWince.cpp
-    platform/graphics/wince/GraphicsContextWince.cpp
-    platform/graphics/wince/ImageBufferWince.cpp
-    platform/graphics/wince/ImageWinCE.cpp
-    platform/graphics/wince/PathWince.cpp
-    platform/graphics/wince/PlatformPathWince.cpp
-    platform/graphics/wince/SharedBitmap.cpp
-    platform/graphics/wince/SimpleFontDataWince.cpp
-
-    platform/network/NetworkStorageSessionStub.cpp
-
-    platform/network/win/CookieJarWin.cpp
-    platform/network/win/CredentialStorageWin.cpp
-    platform/network/win/ProxyServerWin.cpp
-    platform/network/win/ResourceHandleWin.cpp
-    platform/network/win/SocketStreamHandleWin.cpp
-
-    platform/text/LocaleNone.cpp
-
-    platform/text/win/TextCodecWin.cpp
-
-    rendering/RenderThemeWince.cpp
-)
-
-list(APPEND WebCore_LIBRARIES
-    crypt32
-    iphlpapi
-    libjpeg
-    libpng
-    libxml2
-    libxslt
-    sqlite
-    wininet
-)
index eaa1623..b0ec59b 100644 (file)
@@ -566,7 +566,7 @@ void AXObjectCache::remove(Widget* view)
 }
     
     
-#if !PLATFORM(WIN) || OS(WINCE)
+#if !PLATFORM(WIN)
 AXID AXObjectCache::platformGenerateAXID() const
 {
     static AXID lastUsedID = 0;
index 5ef4856..7e63393 100644 (file)
@@ -770,8 +770,6 @@ VisiblePosition FrameSelection::modifyMovingRight(TextGranularity granularity)
             pos = VisiblePosition(m_selection.extent(), m_selection.affinity()).right(true);
         break;
     case WordGranularity: {
-        // Visual word movement relies on isWordTextBreak which is not implemented in WinCE and QT.
-        // https://bugs.webkit.org/show_bug.cgi?id=81136.
         bool skipsSpaceWhenMovingRight = m_frame && m_frame->editor().behavior().shouldSkipSpaceWhenMovingRight();
         pos = rightWordPosition(VisiblePosition(m_selection.extent(), m_selection.affinity()), skipsSpaceWhenMovingRight);
         break;
diff --git a/Source/WebCore/loader/icon/wince/IconDatabaseWinCE.cpp b/Source/WebCore/loader/icon/wince/IconDatabaseWinCE.cpp
deleted file mode 100644 (file)
index 34fd9eb..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile Inc.
- *
- *  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 "IconDatabase.h"
-
-#include "DocumentLoader.h"
-#include "FileSystem.h"
-#include "IconDatabaseClient.h"
-#include "IconRecord.h"
-#include "Image.h"
-#include <wtf/AutodrainedPool.h>
-#include <wtf/text/CString.h>
-
-namespace WebCore {
-
-static IconDatabase* sharedIconDatabase = 0;
-
-// Function to obtain the global icon database.
-IconDatabase& iconDatabase()
-{
-    if (!sharedIconDatabase)
-        sharedIconDatabase = new IconDatabase;
-    return *sharedIconDatabase;
-}
-
-IconDatabase::IconDatabase() {}
-IconDatabase::~IconDatabase() {}
-
-void IconDatabase::setClient(IconDatabaseClient*) {}
-
-bool IconDatabase::open(const String& path) { return false; }
-void IconDatabase::close() {}
-
-void IconDatabase::removeAllIcons() {}
-
-Image* IconDatabase::iconForPageURL(const String&, const IntSize&) { return 0; }
-void IconDatabase::readIconForPageURLFromDisk(const String&) {}
-String IconDatabase::iconURLForPageURL(const String&) { return String(); }
-Image* IconDatabase::defaultIcon(const IntSize&) { return 0;}
-
-void IconDatabase::retainIconForPageURL(const String&) {}
-void IconDatabase::releaseIconForPageURL(const String&) {}
-
-void IconDatabase::setIconDataForIconURL(PassRefPtr<SharedBuffer> data, const String&) {}
-void IconDatabase::setIconURLForPageURL(const String& iconURL, const String& pageURL) {}
-
-IconLoadDecision IconDatabase::loadDecisionForIconURL(const String&, DocumentLoader*) { return IconLoadNo; }
-bool IconDatabase::iconDataKnownForIconURL(const String&) { return false; }
-
-void IconDatabase::setEnabled(bool enabled) {}
-bool IconDatabase::isEnabled() const { return false; }
-
-void IconDatabase::setPrivateBrowsingEnabled(bool flag) {}
-bool IconDatabase::isPrivateBrowsingEnabled() const { return false; }
-
-void IconDatabase::delayDatabaseCleanup() {}
-void IconDatabase::allowDatabaseCleanup() {}
-void IconDatabase::checkIntegrityBeforeOpening() {}
-
-// Support for WebCoreStatistics in WebKit
-size_t IconDatabase::pageURLMappingCount() { return 0; }
-size_t IconDatabase::retainedPageURLCount() {return 0; }
-size_t IconDatabase::iconRecordCount() { return 0; }
-size_t IconDatabase::iconRecordCountWithData() { return 0; }
-
-bool IconDatabase::isOpen() const { return false; }
-String IconDatabase::databasePath() const { return String(); }
-String IconDatabase::defaultDatabaseFilename() { return String(); }
-
-} // namespace WebCore
index d94e406..3c15217 100644 (file)
@@ -2815,7 +2815,7 @@ bool EventHandler::sendContextMenuEventForKey()
 
     static const int kContextMenuMargin = 1;
 
-#if OS(WINDOWS) && !OS(WINCE)
+#if OS(WINDOWS)
     int rightAligned = ::GetSystemMetrics(SM_MENUDROPALIGNMENT);
 #else
     int rightAligned = 0;
index fe5a3d5..b858530 100644 (file)
@@ -101,7 +101,7 @@ bool Settings::gManageAudioSession = false;
 
 // NOTEs
 //  1) EditingMacBehavior comprises Tiger, Leopard, SnowLeopard and iOS builds, as well as QtWebKit when built on Mac;
-//  2) EditingWindowsBehavior comprises Win32 and WinCE builds, as well as QtWebKit and Chromium when built on Windows;
+//  2) EditingWindowsBehavior comprises Win32 build;
 //  3) EditingUnixBehavior comprises all unix-based systems, but Darwin/MacOS (and then abusing the terminology);
 // 99) MacEditingBehavior is used as a fallback.
 static EditingBehaviorType editingBehaviorTypeForPlatform()
index 60b7f20..6442ecb 100644 (file)
@@ -94,11 +94,7 @@ bool EventHandler::eventActivatedView(const PlatformMouseEvent& event) const
 #if ENABLE(DRAG_SUPPORT)
 PassRefPtr<DataTransfer> EventHandler::createDraggingDataTransfer() const
 {
-#if OS(WINCE)
-    return 0;
-#else
     return DataTransfer::createForDragAndDrop();
-#endif
 }
 #endif
 
index ff9d36b..c8e2a74 100644 (file)
@@ -92,9 +92,6 @@ namespace WebCore {
         RetainPtr<NSMutableArray> m_platformDescription;
 #else
         PlatformMenuDescription m_platformDescription;
-#if OS(WINCE)
-        unsigned m_itemCount;
-#endif
 #endif
 
 #endif // USE(CROSS_PLATFORM_CONTEXT_MENUS)
index 5f1e1dd..8191c6f 100644 (file)
@@ -201,7 +201,7 @@ DragImageRef createDragImageForImage(Frame& frame, Node& node, IntRect& imageRec
     return createDragImageFromSnapshot(snapshotNode(frame, node), &node);
 }
 
-#if !PLATFORM(COCOA) && (!PLATFORM(WIN) || OS(WINCE))
+#if !PLATFORM(COCOA) && !PLATFORM(WIN)
 DragImageRef createDragImageForLink(URL&, const String&, FontRenderingMode)
 {
     return nullptr;
index 43cf876..a813867 100644 (file)
@@ -197,7 +197,7 @@ CString sharedResourcesPath();
 uint64_t getVolumeFreeSizeForPath(const char*);
 #endif
 
-#if PLATFORM(WIN) && !OS(WINCE)
+#if PLATFORM(WIN)
 String localUserSpecificStorageDirectory();
 String roamingUserSpecificStorageDirectory();
 #endif
index bfa9d0f..220b369 100644 (file)
@@ -676,11 +676,7 @@ bool BitmapImage::mayFillWithSolidColor()
 {
     if (!m_checkedForSolidColor && frameCount() > 0) {
         checkForSolidColor();
-        // WINCE PORT: checkForSolidColor() doesn't set m_checkedForSolidColor until
-        // it gets enough information to make final decision.
-#if !OS(WINCE)
         ASSERT(m_checkedForSolidColor);
-#endif
     }
     return m_isSolidColor && !m_currentFrame;
 }
index a8cad44..520b454 100644 (file)
@@ -394,20 +394,10 @@ std::pair<GlyphData, GlyphPage*> FontGlyphs::glyphDataAndPageForCharacter(const
         GlyphData data = fallbackPage && fallbackPage->fontDataForCharacter(c) ? fallbackPage->glyphDataForCharacter(c) : characterFontData->missingGlyphData();
         // Cache it so we don't have to do system fallback again next time.
         if (variant == NormalVariant) {
-#if OS(WINCE)
-            // missingGlyphData returns a null character, which is not suitable for GDI to display.
-            // Also, sometimes we cannot map a font for the character on WINCE, but GDI can still
-            // display the character, probably because the font package is not installed correctly.
-            // So we just always set the glyph to be same as the character, and let GDI solve it.
-            page->setGlyphDataForCharacter(c, c, characterFontData.get());
-            characterFontData->setMaxGlyphPageTreeLevel(std::max(characterFontData->maxGlyphPageTreeLevel(), node->level()));
-            return std::make_pair(page->glyphDataForCharacter(c), page);
-#else
             page->setGlyphDataForCharacter(c, data.glyph, data.fontData);
             data.fontData->setMaxGlyphPageTreeLevel(std::max(data.fontData->maxGlyphPageTreeLevel(), node->level()));
             if (!Font::isCJKIdeographOrSymbol(c) && data.fontData->platformData().orientation() != Horizontal && !data.fontData->isTextOrientationFallback())
                 return glyphDataAndPageForNonCJKCharacterWithGlyphOrientation(c, description.nonCJKGlyphOrientation(), data, fallbackPage, pageNumber);
-#endif
         }
         return std::make_pair(data, page);
     }
@@ -416,15 +406,8 @@ std::pair<GlyphData, GlyphPage*> FontGlyphs::glyphDataAndPageForCharacter(const
     // FIXME: It would be nicer to use the missing glyph from the last resort font instead.
     GlyphData data = primarySimpleFontData(description)->missingGlyphData();
     if (variant == NormalVariant) {
-#if OS(WINCE)
-        // See comment about WINCE GDI handling near setGlyphDataForCharacter above.
-        page->setGlyphDataForCharacter(c, c, data.fontData);
-        data.fontData->setMaxGlyphPageTreeLevel(std::max(data.fontData->maxGlyphPageTreeLevel(), node->level()));
-        return std::make_pair(page->glyphDataForCharacter(c), page);
-#else
         page->setGlyphDataForCharacter(c, data.glyph, data.fontData);
         data.fontData->setMaxGlyphPageTreeLevel(std::max(data.fontData->maxGlyphPageTreeLevel(), node->level()));
-#endif
     }
     return std::make_pair(data, page);
 }
index 82033a0..97e85d8 100644 (file)
@@ -23,9 +23,7 @@
  */
 
 // FIXME: This is temporary until all ports switch to using this file.
-#if USE(WINGDI)
-#include "wince/FontPlatformData.h"
-#elif PLATFORM(EFL) || PLATFORM(GTK)
+#if PLATFORM(EFL) || PLATFORM(GTK)
 #include "freetype/FontPlatformData.h"
 #else
 
index e1a9e6b..fbdae7a 100644 (file)
@@ -27,6 +27,4 @@
 #include "ImageBufferDataCG.h"
 #elif USE(CAIRO)
 #include "ImageBufferDataCairo.h"
-#elif USE(WINGDI)
-#include "ImageBufferDataWince.h"
 #endif
index c0a132a..a6fe11a 100644 (file)
@@ -66,9 +66,6 @@
 #include "MediaPlayerPrivateMediaSourceAVFObjC.h"
 #endif
 #endif
-#elif OS(WINCE)
-#include "MediaPlayerPrivateWinCE.h"
-#define PlatformMediaEngineClassName MediaPlayerPrivate
 #elif PLATFORM(WIN) && !USE(GSTREAMER)
 #if USE(AVFOUNDATION)
 #include "MediaPlayerPrivateAVFoundationCF.h"
index d302722..f12f807 100644 (file)
@@ -46,7 +46,7 @@
 #include <wtf/RetainPtr.h>
 #endif
 
-#if (PLATFORM(WIN) && !OS(WINCE))
+#if PLATFORM(WIN)
 #include <usp10.h>
 #endif
 
@@ -230,10 +230,8 @@ public:
 
 #if PLATFORM(WIN)
     bool isSystemFont() const { return m_isSystemFont; }
-#if !OS(WINCE) // disable unused members to save space
     SCRIPT_FONTPROPERTIES* scriptFontProperties() const;
     SCRIPT_CACHE* scriptCache() const { return &m_scriptCache; }
-#endif
     static void setShouldApplyMacAscentHack(bool);
     static bool shouldApplyMacAscentHack();
     static float ascentConsideringMacAscentHack(const WCHAR*, float ascent, float descent);
@@ -254,7 +252,7 @@ private:
     PassRefPtr<SimpleFontData> createScaledFontData(const FontDescription&, float scaleFactor) const;
     PassRefPtr<SimpleFontData> platformCreateScaledFontData(const FontDescription&, float scaleFactor) const;
 
-#if (PLATFORM(WIN) && !OS(WINCE))
+#if PLATFORM(WIN)
     void initGDIFont();
     void platformCommonDestroy();
     FloatRect boundsForGDIGlyph(Glyph glyph) const;
@@ -336,11 +334,9 @@ private:
 
 #if PLATFORM(WIN)
     bool m_isSystemFont;
-#if !OS(WINCE) // disable unused members to save space
     mutable SCRIPT_CACHE m_scriptCache;
     mutable SCRIPT_FONTPROPERTIES* m_scriptFontProperties;
 #endif
-#endif
 #if PLATFORM(IOS)
     bool m_shouldNotBeUsedForArabic;
 #endif
index d09c5a4..f7d0ac8 100644 (file)
@@ -408,7 +408,6 @@ bool renameFont(const SharedBuffer& fontData, const String& fontName, Vector<cha
     return true;
 }
 
-#if !OS(WINCE)
 // Rename the font and install the new font data into the system
 HANDLE renameAndActivateFont(const SharedBuffer& fontData, const String& fontName)
 {
@@ -426,6 +425,5 @@ HANDLE renameAndActivateFont(const SharedBuffer& fontData, const String& fontNam
 
     return fontHandle;
 }
-#endif
 
 }
index ab839e0..832a4a8 100644 (file)
@@ -37,10 +37,6 @@ struct BigEndianUShort;
 struct EOTPrefix;
 class SharedBuffer;
 
-#if OS(WINCE)
-typedef unsigned __int8 UInt8;
-#endif
-
 struct EOTHeader {
     EOTHeader();
 
index e9a0f9b..0a865be 100644 (file)
@@ -91,12 +91,10 @@ void DIBPixelData::setRGBABitmapAlpha(HDC hdc, const IntRect& dstRect, unsigned
     ASSERT(pixelData.bitsPerPixel() == 32);
 
     IntRect drawRect(dstRect);
-#if !OS(WINCE)
     XFORM trans;
     GetWorldTransform(hdc, &trans);
     IntSize transformedPosition(trans.eDx, trans.eDy);
     drawRect.move(transformedPosition);
-#endif
 
     int pixelDataWidth = pixelData.size().width();
     int pixelDataHeight = pixelData.size().height();
diff --git a/Source/WebCore/platform/graphics/win/GDIExtras.cpp b/Source/WebCore/platform/graphics/win/GDIExtras.cpp
deleted file mode 100644 (file)
index 4bd95da..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "GDIExtras.h"
-
-#include "SoftLinking.h"
-
-namespace WebCore {
-
-#if OS(WINCE)
-SOFT_LINK_LIBRARY(coredll)
-SOFT_LINK_OPTIONAL(coredll, AlphaBlend, BOOL, APIENTRY, (HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc,
-                                                         int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, BLENDFUNCTION blendFunction))
-
-AlphaBlendPointerType AlphaBlendPointer()
-{
-    return AlphaBlendPtr();
-}
-#endif
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/win/GDIExtras.h b/Source/WebCore/platform/graphics/win/GDIExtras.h
deleted file mode 100644 (file)
index 0166124..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef GDIExtras_h
-#define GDIExtras_h
-
-#include <windows.h>
-
-namespace WebCore {
-
-typedef BOOL (APIENTRY *AlphaBlendPointerType) (HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc,
-                                                int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, BLENDFUNCTION blendFunction);
-
-#if OS(WINCE)
-AlphaBlendPointerType AlphaBlendPointer();
-#endif
-
-inline bool hasAlphaBlendSupport()
-{
-#if OS(WINCE)
-    return AlphaBlendPointer();
-#else
-    return true;
-#endif
-}
-
-inline bool alphaBlendIfSupported(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc,
-                                  int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, BLENDFUNCTION blendFunction)
-{
-#if OS(WINCE)
-    AlphaBlendPointerType alphaBlendPointer = AlphaBlendPointer();
-    if (!alphaBlendPointer)
-        return false;
-
-    alphaBlendPointer(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, blendFunction);
-#else
-    AlphaBlend(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest, hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, blendFunction);
-#endif
-    return true;
-}
-
-} // namespace WebCore
-
-#endif // GDIExtras_h
index 50cf3e5..f3b0d0b 100644 (file)
 #include <windows.h>
 #include <wtf/text/WTFString.h>
 
-#if OS(WINCE)
-// SHGFI_SHELLICONSIZE is not available on WINCE
-#define SHGFI_SHELLICONSIZE         0
-#endif
-
 namespace WebCore {
 
 static const int shell32MultipleFileIconIndex = 54;
@@ -64,9 +59,6 @@ PassRefPtr<Icon> Icon::createIconForFiles(const Vector<String>& filenames)
         return adoptRef(new Icon(sfi.hIcon));
     }
 
-#if OS(WINCE)
-    return 0;
-#else
     WCHAR buffer[MAX_PATH];
     UINT length = ::GetSystemDirectoryW(buffer, WTF_ARRAY_LENGTH(buffer));
     if (!length)
@@ -79,7 +71,6 @@ PassRefPtr<Icon> Icon::createIconForFiles(const Vector<String>& filenames)
     if (!::ExtractIconExW(buffer, shell32MultipleFileIconIndex, 0, &hIcon, 1))
         return 0;
     return adoptRef(new Icon(hIcon));
-#endif
 }
 
 void Icon::paint(GraphicsContext* context, const IntRect& r)
@@ -87,12 +78,8 @@ void Icon::paint(GraphicsContext* context, const IntRect& r)
     if (context->paintingDisabled())
         return;
 
-#if OS(WINCE)
-    context->drawIcon(m_hIcon, r, DI_NORMAL);
-#else
     LocalWindowsContext windowContext(context, r);
     DrawIconEx(windowContext.hdc(), r.x(), r.y(), m_hIcon, r.width(), r.height(), 0, 0, DI_NORMAL);
-#endif
 }
 
 }
index 6c14866..9658456 100644 (file)
@@ -96,13 +96,11 @@ void SimpleFontData::initGDIFont()
     m_avgCharWidth = textMetrics.tmAveCharWidth;
     m_maxCharWidth = textMetrics.tmMaxCharWidth;
     float xHeight = ascent * 0.56f; // Best guess for xHeight if no x glyph is present.
-#if !OS(WINCE)
     GLYPHMETRICS gm;
     static const MAT2 identity = { 0, 1,  0, 0,  0, 0,  0, 1 };
     DWORD len = GetGlyphOutline(hdc, 'x', GGO_METRICS, &gm, 0, 0, &identity);
     if (len != GDI_ERROR && gm.gmptGlyphOrigin.y > 0)
         xHeight = gm.gmptGlyphOrigin.y;
-#endif
     m_fontMetrics.setXHeight(xHeight);
     m_fontMetrics.setUnitsPerEm(metrics.otmEMSquare);
 
@@ -121,10 +119,8 @@ void SimpleFontData::platformCharWidthInit()
 
 void SimpleFontData::platformDestroy()
 {
-#if !OS(WINCE)
     ScriptFreeCache(&m_scriptCache);
     delete m_scriptFontProperties;
-#endif
 }
 
 PassRefPtr<SimpleFontData> SimpleFontData::platformCreateScaledFontData(const FontDescription& fontDescription, float scaleFactor) const
@@ -200,9 +196,6 @@ void SimpleFontData::determinePitch()
 
 FloatRect SimpleFontData::boundsForGDIGlyph(Glyph glyph) const
 {
-#if OS(WINCE)
-    return FloatRect();
-#else
     HWndDC hdc(0);
     SetGraphicsMode(hdc, GM_ADVANCED);
     HGDIOBJ oldFont = SelectObject(hdc, m_platformData.hfont());
@@ -215,35 +208,24 @@ FloatRect SimpleFontData::boundsForGDIGlyph(Glyph glyph) const
 
     return FloatRect(gdiMetrics.gmptGlyphOrigin.x, -gdiMetrics.gmptGlyphOrigin.y,
         gdiMetrics.gmBlackBoxX + m_syntheticBoldOffset, gdiMetrics.gmBlackBoxY); 
-#endif
 }
 
 float SimpleFontData::widthForGDIGlyph(Glyph glyph) const
 {
     HWndDC hdc(0);
-#if !OS(WINCE)
     SetGraphicsMode(hdc, GM_ADVANCED);
-#endif
     HGDIOBJ oldFont = SelectObject(hdc, m_platformData.hfont());
 
-#if OS(WINCE)
-    WCHAR c = glyph;
-    SIZE fontSize;
-    GetTextExtentPoint32W(hdc, &c, 1, &fontSize);
-    float result = fontSize.cx * m_platformData.size() / 72.f;
-#else
     GLYPHMETRICS gdiMetrics;
     static const MAT2 identity = { 0, 1,  0, 0,  0, 0,  0, 1 };
     GetGlyphOutline(hdc, glyph, GGO_METRICS | GGO_GLYPH_INDEX, &gdiMetrics, 0, 0, &identity);
     float result = gdiMetrics.gmCellIncX + m_syntheticBoldOffset;
-#endif
 
     SelectObject(hdc, oldFont);
 
     return result;
 }
 
-#if !OS(WINCE)
 SCRIPT_FONTPROPERTIES* SimpleFontData::scriptFontProperties() const
 {
     if (!m_scriptFontProperties) {
@@ -261,6 +243,5 @@ SCRIPT_FONTPROPERTIES* SimpleFontData::scriptFontProperties() const
     }
     return m_scriptFontProperties;
 }
-#endif
 
 } // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/FontCacheWinCE.cpp b/Source/WebCore/platform/graphics/wince/FontCacheWinCE.cpp
deleted file mode 100644 (file)
index f9ebe4b..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
-* Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.
-* Copyright (C) 2007-2009 Torch Mobile, Inc.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-*
-* 1.  Redistributions of source code must retain the above copyright
-*     notice, this list of conditions and the following disclaimer. 
-* 2.  Redistributions in binary form must reproduce the above copyright
-*     notice, this list of conditions and the following disclaimer in the
-*     documentation and/or other materials provided with the distribution. 
-* 3.  Neither the name of Apple Inc. ("Apple") nor the names of
-*     its contributors may be used to endorse or promote products derived
-*     from this software without specific prior written permission. 
-*
-* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "config.h"
-#include "FontCache.h"
-
-#include "Font.h"
-#include "FontData.h"
-#include "SimpleFontData.h"
-#include <wtf/OwnPtr.h>
-#include <windows.h>
-#include <mlang.h>
-
-namespace WebCore {
-
-extern HDC g_screenDC;
-
-static IMultiLanguage *multiLanguage = 0;
-static IMLangFontLinkType* langFontLink = 0;
-
-IMultiLanguage* FontCache::getMultiLanguageInterface()
-{
-    if (!multiLanguage)
-        CoCreateInstance(CLSID_CMultiLanguage, 0, CLSCTX_INPROC_SERVER, IID_IMultiLanguage, (void**)&multiLanguage);
-
-    return multiLanguage;
-}
-
-IMLangFontLinkType* FontCache::getFontLinkInterface()
-{
-    if (!langFontLink) {
-        if (IMultiLanguage* mli = getMultiLanguageInterface())
-            mli->QueryInterface(&langFontLink);
-    }
-
-    return langFontLink;
-}
-
-static bool currentFontContainsCharacter(IMLangFontLinkType* langFontLink, HDC hdc, HFONT hfont, UChar character, const wchar_t* faceName)
-{
-#if USE(IMLANG_FONT_LINK2)
-    UINT unicodeRanges;
-    if (S_OK != langFontLink->GetFontUnicodeRanges(hdc, &unicodeRanges, 0))
-        return false;
-
-    static Vector<UNICODERANGE, 64> glyphsetBuffer;
-    glyphsetBuffer.resize(unicodeRanges);
-
-    if (S_OK != langFontLink->GetFontUnicodeRanges(hdc, &unicodeRanges, glyphsetBuffer.data()))
-        return false;
-
-    // FIXME: Change this to a binary search. (Yong Li: That's easy. But, is it guaranteed that the ranges are sorted?)
-    for (Vector<UNICODERANGE, 64>::const_iterator i = glyphsetBuffer.begin(); i != glyphsetBuffer.end(); ++i) {
-        if (i->wcTo >= character)
-            return i->wcFrom <= character;
-    }
-#else
-    DWORD fontCodePages = 0, charCodePages = 0;
-    HRESULT result = langFontLink->GetFontCodePages(hdc, hfont, &fontCodePages);
-    if (result != S_OK)
-        return false;
-    result = langFontLink->GetCharCodePages(character, &charCodePages);
-    if (result != S_OK)
-        return false;
-
-    fontCodePages |= FontPlatformData::getKnownFontCodePages(faceName);
-    if (fontCodePages & charCodePages)
-        return true;
-#endif
-
-    return false;
-}
-
-static HFONT createMLangFont(IMLangFontLinkType* langFontLink, HDC hdc, const FontPlatformData& refFont, DWORD codePageMask, UChar character = 0)
-{
-    HFONT mlangFont;
-
-#if USE(IMLANG_FONT_LINK2)
-    HRESULT result = langFontLink->MapFont(hdc, codePageMask, character, &mlangFont);
-#else
-    HRESULT result = langFontLink->MapFont(hdc, codePageMask, refFont.hfont(), &mlangFont);
-#endif
-
-    if (SUCCEEDED(result))
-        return mlangFont;
-    return 0;
-}
-
-static const Vector<DWORD, 4>& getCJKCodePageMasks()
-{
-    // The default order in which we look for a font for a CJK character. If the user's default code page is
-    // one of these, we will use it first.
-    static const UINT CJKCodePages[] = {
-        932, /* Japanese */
-        936, /* Simplified Chinese */
-        950, /* Traditional Chinese */
-        949  /* Korean */
-    };
-
-    static Vector<DWORD, 4> codePageMasks;
-    static bool initialized;
-    if (!initialized) {
-        initialized = true;
-        IMLangFontLinkType* langFontLink = fontCache().getFontLinkInterface();
-        if (!langFontLink)
-            return codePageMasks;
-
-        UINT defaultCodePage;
-        DWORD defaultCodePageMask = 0;
-        if (GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_RETURN_NUMBER | LOCALE_IDEFAULTANSICODEPAGE, reinterpret_cast<LPWSTR>(&defaultCodePage), sizeof(defaultCodePage)))
-            langFontLink->CodePageToCodePages(defaultCodePage, &defaultCodePageMask);
-
-        if (defaultCodePage == CJKCodePages[0] || defaultCodePage == CJKCodePages[1] || defaultCodePage == CJKCodePages[2] || defaultCodePage == CJKCodePages[3])
-            codePageMasks.append(defaultCodePageMask);
-        for (unsigned i = 0; i < 4; ++i) {
-            if (defaultCodePage != CJKCodePages[i]) {
-                DWORD codePageMask;
-                langFontLink->CodePageToCodePages(CJKCodePages[i], &codePageMask);
-                codePageMasks.append(codePageMask);
-            }
-        }
-    }
-    return codePageMasks;
-}
-
-
-struct TraitsInFamilyProcData {
-    TraitsInFamilyProcData(const AtomicString& familyName)
-        : m_familyName(familyName)
-    {
-    }
-
-    const AtomicString& m_familyName;
-    HashSet<unsigned> m_traitsMasks;
-};
-
-static int CALLBACK traitsInFamilyEnumProc(CONST LOGFONT* logFont, CONST TEXTMETRIC* metrics, DWORD fontType, LPARAM lParam)
-{
-    TraitsInFamilyProcData* procData = reinterpret_cast<TraitsInFamilyProcData*>(lParam);
-
-    unsigned traitsMask = 0;
-    traitsMask |= logFont->lfItalic ? FontStyleItalicMask : FontStyleNormalMask;
-    traitsMask |= FontVariantNormalMask;
-    LONG weight = FontPlatformData::adjustedGDIFontWeight(logFont->lfWeight, procData->m_familyName);
-    traitsMask |= weight == FW_THIN ? FontWeight100Mask :
-        weight == FW_EXTRALIGHT ? FontWeight200Mask :
-        weight == FW_LIGHT ? FontWeight300Mask :
-        weight == FW_NORMAL ? FontWeight400Mask :
-        weight == FW_MEDIUM ? FontWeight500Mask :
-        weight == FW_SEMIBOLD ? FontWeight600Mask :
-        weight == FW_BOLD ? FontWeight700Mask :
-        weight == FW_EXTRABOLD ? FontWeight800Mask :
-                                 FontWeight900Mask;
-    procData->m_traitsMasks.add(traitsMask);
-    return 1;
-}
-
-void FontCache::platformInit()
-{
-}
-
-void FontCache::comInitialize()
-{
-}
-
-void FontCache::comUninitialize()
-{
-    if (langFontLink) {
-        langFontLink->Release();
-        langFontLink = 0;
-    }
-    if (multiLanguage) {
-        multiLanguage->Release();
-        multiLanguage = 0;
-    }
-}
-
-PassRefPtr<SimpleFontData> FontCache::systemFallbackForCharacters(const FontDescription& description, const SimpleFontData* originalFontData, bool, const UChar* characters, int length)
-{
-    String familyName;
-    WCHAR name[LF_FACESIZE];
-
-    UChar character = characters[0];
-    const FontPlatformData& origFont = originalFontData->platformData();
-
-    if (IMLangFontLinkType* langFontLink = getFontLinkInterface()) {
-        HGDIOBJ oldFont = GetCurrentObject(g_screenDC, OBJ_FONT);
-        HFONT hfont = 0;
-        DWORD codePages = 0;
-        UINT codePage = 0;
-        // Try MLang font linking first.
-        langFontLink->GetCharCodePages(character, &codePages);
-        if (codePages && u_getIntPropertyValue(character, UCHAR_UNIFIED_IDEOGRAPH)) {
-            // The CJK character may belong to multiple code pages. We want to
-            // do font linking against a single one of them, preferring the default
-            // code page for the user's locale.
-            const Vector<DWORD, 4>& CJKCodePageMasks = getCJKCodePageMasks();
-            unsigned numCodePages = CJKCodePageMasks.size();
-            for (unsigned i = 0; i < numCodePages; ++i) {
-                hfont = createMLangFont(langFontLink, g_screenDC, origFont, CJKCodePageMasks[i]);
-                if (!hfont)
-                    continue;
-
-                SelectObject(g_screenDC, hfont);
-                GetTextFace(g_screenDC, LF_FACESIZE, name);
-
-                if (hfont && !(codePages & CJKCodePageMasks[i])) {
-                    // We asked about a code page that is not one of the code pages
-                    // returned by MLang, so the font might not contain the character.
-                    if (!currentFontContainsCharacter(langFontLink, g_screenDC, hfont, character, name))
-                    {
-                        SelectObject(g_screenDC, oldFont);
-                        langFontLink->ReleaseFont(hfont);
-                        hfont = 0;
-                        continue;
-                    }
-                }
-                break;
-            }
-        } else {
-            hfont = createMLangFont(langFontLink, g_screenDC, origFont, codePages, character);
-            SelectObject(g_screenDC, hfont);
-            GetTextFace(g_screenDC, LF_FACESIZE, name);
-        }
-        SelectObject(g_screenDC, oldFont);
-
-        if (hfont) {
-            familyName = name;
-            langFontLink->ReleaseFont(hfont);
-        } else
-            FontPlatformData::mapKnownFont(codePages, familyName);
-    }
-
-    if (familyName.isEmpty())
-        familyName = FontPlatformData::defaultFontFamily();
-
-    if (!familyName.isEmpty()) {
-        // FIXME: temporary workaround for Thai font problem
-        FontDescription fontDescription(description);
-        if (ublock_getCode(c) == UBLOCK_THAI && fontDescription.weight() > FontWeightNormal)
-            fontDescription.setWeight(FontWeightNormal);
-
-        FontPlatformData* result = getCachedFontPlatformData(fontDescription, familyName);
-        if (result && result->hash() != origFont.hash()) {
-            if (RefPtr<SimpleFontData> fontData = getCachedFontData(result, DoNotRetain))
-                return fontData.release();
-        }
-    }
-
-    return 0;
-}
-
-PassRefPtr<SimpleFontData> FontCache::getLastResortFallbackFont(const FontDescription& fontDesc, ShouldRetain shouldRetain)
-{
-    // FIXME: Would be even better to somehow get the user's default font here.  For now we'll pick
-    // the default that the user would get without changing any prefs.
-    return getCachedFontData(fontDesc, FontPlatformData::defaultFontFamily(), false, shouldRetain);
-}
-
-PassOwnPtr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family)
-{
-    return adoptPtr(new FontPlatformData(fontDescription, family));
-}
-
-void FontCache::getTraitsInFamily(const AtomicString& familyName, Vector<unsigned>& traitsMasks)
-{
-    LOGFONT logFont;
-    logFont.lfCharSet = DEFAULT_CHARSET;
-    unsigned familyLength = std::min(familyName.length(), static_cast<unsigned>(LF_FACESIZE - 1));
-    memcpy(logFont.lfFaceName, familyName.characters(), familyLength * sizeof(UChar));
-    logFont.lfFaceName[familyLength] = 0;
-    logFont.lfPitchAndFamily = 0;
-
-    TraitsInFamilyProcData procData(familyName);
-    EnumFontFamiliesEx(g_screenDC, &logFont, traitsInFamilyEnumProc, reinterpret_cast<LPARAM>(&procData), 0);
-    copyToVector(procData.m_traitsMasks, traitsMasks);
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.cpp b/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.cpp
deleted file mode 100644 (file)
index 4b948f8..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2009 Torch Mobile Inc. All rights reserved.
- *
- * 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 "FontCustomPlatformData.h"
-
-#include "CachedFont.h"
-#include "FontPlatformData.h"
-#include "OpenTypeUtilities.h"
-#include "SharedBuffer.h"
-#include <wtf/RandomNumber.h>
-#include <wtf/text/Base64.h>
-
-namespace WebCore {
-
-static CustomFontCache* g_customFontCache = 0;
-
-void setCustomFontCache(CustomFontCache* cache)
-{
-    g_customFontCache = cache;
-}
-
-FontCustomPlatformData::~FontCustomPlatformData()
-{
-    if (g_customFontCache && !m_name.isEmpty())
-        g_customFontCache->unregisterFont(m_name);
-}
-
-FontPlatformData FontCustomPlatformData::fontPlatformData(int size, bool bold, bool italic, FontOrientation, FontWidthVariant, FontRenderingMode renderingMode)
-{
-    FontDescription fontDesc;
-    fontDesc.setComputedSize(size);
-    fontDesc.setSpecifiedSize(size);
-    fontDesc.setItalic(italic);
-    fontDesc.setWeight(bold ? FontWeightBold : FontWeightNormal);
-    return FontPlatformData(fontDesc, m_name, false);
-}
-
-// Creates a unique and unpredictable font name, in order to avoid collisions and to
-// not allow access from CSS.
-static String createUniqueFontName()
-{
-    GUID fontUuid;
-
-    unsigned int* ptr = reinterpret_cast<unsigned int*>(&fontUuid);
-    for (int i = 0; i < sizeof(GUID) / sizeof(int) ; ++i)
-        *(ptr + i) = static_cast<unsigned int>(randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0));
-
-    String fontName = base64Encode(reinterpret_cast<char*>(&fontUuid), sizeof(fontUuid));
-    ASSERT(fontName.length() < LF_FACESIZE);
-    return fontName.replace('/', '_');
-}
-
-std::unique_ptr<FontCustomPlatformData> createFontCustomPlatformData(SharedBuffer& buffer)
-{
-    String fontName = createUniqueFontName();
-
-    Vector<char> rewrittenFontData;
-    if (!renameFont(buffer, fontName, rewrittenFontData))
-        return nullptr;
-
-    RefPtr<SharedBuffer> localBuffer = SharedBuffer::adoptVector(rewrittenFontData);
-    if (!g_customFontCache || !g_customFontCache->registerFont(fontName, localBuffer.get()))
-        return nullptr;
-
-    return std::make_unique<FontCustomPlatformData>(fontName);
-}
-
-bool FontCustomPlatformData::supportsFormat(const String& format)
-{
-    return equalIgnoringCase(format, "truetype") || equalIgnoringCase(format, "opentype");
-}
-
-}
diff --git a/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.h b/Source/WebCore/platform/graphics/wince/FontCustomPlatformData.h
deleted file mode 100644 (file)
index 442d742..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
- *
- * 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 FontCustomPlatformData_h
-#define FontCustomPlatformData_h
-
-#include "FontDescription.h"
-#include "FontRenderingMode.h"
-#include "FontWidthVariant.h"
-#include <wtf/Noncopyable.h>
-#include <wtf/text/WTFString.h>
-
-namespace WebCore {
-
-    class FontPlatformData;
-    class CachedFont;
-    class SharedBuffer;
-
-    class CustomFontCache {
-    public:
-        virtual bool registerFont(const String& fontName, const SharedBuffer*) = 0;
-        virtual void unregisterFont(const String& fontName) = 0;
-    };
-
-    struct FontCustomPlatformData {
-        WTF_MAKE_NONCOPYABLE(FontCustomPlatformData);
-    public:
-        FontCustomPlatformData(const String& name)
-            : m_name(name)
-        {
-        }
-
-        ~FontCustomPlatformData();
-
-        FontPlatformData fontPlatformData(int size, bool bold, bool italic, FontOrientation = Horizontal, FontWidthVariant = RegularWidth, FontRenderingMode = NormalRenderingMode);
-
-        static bool supportsFormat(const String&);
-
-        String m_name;
-    };
-
-    std::unique_ptr<FontCustomPlatformData> createFontCustomPlatformData(SharedBuffer&);
-    void setCustomFontCache(CustomFontCache*);
-}
-
-#endif
diff --git a/Source/WebCore/platform/graphics/wince/FontPlatformData.cpp b/Source/WebCore/platform/graphics/wince/FontPlatformData.cpp
deleted file mode 100644 (file)
index ca6ca5f..0000000
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile Inc.
- *
- *  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 "FontPlatformData.h"
-
-#include "Font.h"
-#include "FontCache.h"
-#include "FontData.h"
-#include "SimpleFontData.h"
-#include <wtf/StdLibExtras.h>
-#include <wtf/text/StringHash.h>
-#include <wtf/text/WTFString.h>
-#include <wtf/win/GDIObject.h>
-
-#include <windows.h>
-#include <mlang.h>
-
-namespace WebCore {
-
-extern HDC g_screenDC;
-
-static wchar_t songTiStr[] = { 0x5b8b, 0x4f53, 0 };
-static wchar_t heiTiStr[] = { 0x9ed1, 0x4f53, 0 };
-
-class FontFamilyCodePageInfo {
-public:
-    FontFamilyCodePageInfo()
-        : m_codePage(0), m_codePages(0)
-    {
-    }
-    FontFamilyCodePageInfo(const wchar_t* family, UINT codePage)
-        : m_family(family), m_codePage(codePage), m_codePages(0)
-    {
-    }
-    DWORD codePages() const
-    {
-        if (!m_codePages) {
-            if (IMLangFontLinkType* langFontLink = fontCache().getFontLinkInterface())
-                langFontLink->CodePageToCodePages(m_codePage, &m_codePages);
-        }
-        return m_codePages;
-    }
-
-    String m_family;
-    UINT m_codePage;
-private:
-    mutable DWORD m_codePages;
-};
-
-class FontFamilyChecker {
-public:
-    FontFamilyChecker(const wchar_t* family)
-        : m_exists(false)
-    {
-        EnumFontFamilies(g_screenDC, family, enumFontFamProc, (LPARAM)this);
-    }
-    bool isSupported() const { return m_exists; }
-private:
-    bool m_exists;
-    static int CALLBACK enumFontFamProc(const LOGFONT FAR* lpelf, const TEXTMETRIC FAR* lpntm, DWORD FontType, LPARAM lParam);
-};
-
-class ValidFontFamilyFinder {
-public:
-    ValidFontFamilyFinder()
-    {
-        EnumFontFamilies(g_screenDC, 0, enumFontFamProc, (LPARAM)this);
-    }
-    const String& family() const { return m_family; }
-private:
-    String m_family;
-    static int CALLBACK enumFontFamProc(const LOGFONT FAR* lpelf, const TEXTMETRIC FAR* lpntm, DWORD FontType, LPARAM lParam);
-};
-
-class FixedSizeFontData: public RefCounted<FixedSizeFontData> {
-public:
-    LOGFONT m_font;
-    GDIObject<HFONT> m_hfont;
-    TEXTMETRIC m_metrics;
-    DWORD m_codePages;
-    unsigned m_weight;
-    bool m_italic;
-
-    static PassRefPtr<FixedSizeFontData> create(const AtomicString& family, unsigned weight, bool italic);
-private:
-    FixedSizeFontData()
-        : m_codePages(0)
-        , m_weight(0)
-        , m_italic(false)
-    {
-        memset(&m_font, 0, sizeof(m_font));
-        memset(&m_metrics, 0, sizeof(m_metrics));
-    }
-};
-
-struct FixedSizeFontDataKey {
-    FixedSizeFontDataKey(const AtomicString& family = AtomicString(), unsigned weight = 0, bool italic = false)
-        : m_family(family)
-        , m_weight(weight)
-        , m_italic(italic)
-    {
-    }
-
-    FixedSizeFontDataKey(WTF::HashTableDeletedValueType) : m_weight(-2) { }
-    bool isHashTableDeletedValue() const { return m_weight == -2; }
-
-    bool operator==(const FixedSizeFontDataKey& other) const
-    {
-        return equalIgnoringCase(m_family, other.m_family)
-            && m_weight == other.m_weight
-            && m_italic == other.m_italic;
-    }
-
-    AtomicString m_family;
-    unsigned m_weight;
-    bool m_italic;
-};
-
-struct FixedSizeFontDataKeyHash {
-    static unsigned hash(const FixedSizeFontDataKey& font)
-    {
-        unsigned hashCodes[] = {
-            CaseFoldingHash::hash(font.m_family),
-            font.m_weight,
-            // static_cast<unsigned>(font.m_italic);
-        };
-        return StringHasher::hashMemory<sizeof(hashCodes)>(hashCodes);
-    }
-
-    static bool equal(const FixedSizeFontDataKey& a, const FixedSizeFontDataKey& b)
-    {
-        return a == b;
-    }
-
-    static const bool safeToCompareToEmptyOrDeleted = true;
-};
-
-struct FixedSizeFontDataKeyTraits : WTF::GenericHashTraits<FixedSizeFontDataKey> {
-    static const bool emptyValueIsZero = true;
-    static const FixedSizeFontDataKey& emptyValue()
-    {
-        DEPRECATED_DEFINE_STATIC_LOCAL(FixedSizeFontDataKey, key, (nullAtom));
-        return key;
-    }
-    static void constructDeletedValue(FixedSizeFontDataKey& slot)
-    {
-        new (&slot) FixedSizeFontDataKey(WTF::HashTableDeletedValue);
-    }
-    static bool isDeletedValue(const FixedSizeFontDataKey& value)
-    {
-        return value.isHashTableDeletedValue();
-    }
-};
-
-int CALLBACK FontFamilyChecker::enumFontFamProc(const LOGFONT FAR* lpelf, const TEXTMETRIC FAR* lpntm, DWORD FontType, LPARAM lParam)
-{
-    ((FontFamilyChecker*)lParam)->m_exists = true;
-    return 0;
-}
-
-int CALLBACK ValidFontFamilyFinder::enumFontFamProc(const LOGFONT FAR* lpelf, const TEXTMETRIC FAR* lpntm, DWORD FontType, LPARAM lParam)
-{
-    if (lpelf->lfCharSet != SYMBOL_CHARSET) {
-        ((ValidFontFamilyFinder*)lParam)->m_family = String(lpelf->lfFaceName);
-        return 0;
-    }
-    return 1;
-}
-
-typedef Vector<FontFamilyCodePageInfo> KnownFonts;
-static KnownFonts& knownFonts()
-{
-    static KnownFonts fonts;
-    static bool firstTime = true;
-    if (firstTime) {
-        firstTime = false;
-        if (FontPlatformData::isSongTiSupported())
-            fonts.append(FontFamilyCodePageInfo(songTiStr, 936));
-    }
-    return fonts;
-}
-
-static String getDefaultFontFamily()
-{
-    if (FontFamilyChecker(L"Tahoma").isSupported())
-        return String(L"Tahoma");
-
-    bool good = false;
-    String family;
-    HKEY key;
-    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SYSTEM\\GDI\\SysFnt", 0, 0, &key) == ERROR_SUCCESS) {
-        DWORD maxlen, type;
-        if (RegQueryValueEx(key, L"Nm", 0, &type, 0, &maxlen) == ERROR_SUCCESS && type == REG_SZ) {
-            ++maxlen;
-            if (wchar_t* buffer = new wchar_t[maxlen]) {
-                if (RegQueryValueEx(key, L"Nm", 0, &type, (LPBYTE)buffer, &maxlen) == ERROR_SUCCESS) {
-                    family = String(buffer, maxlen);
-                    good = true;
-                }
-                delete[] buffer;
-            }
-        }
-        RegCloseKey(key);
-    }
-    if (good)
-        return family;
-
-    return ValidFontFamilyFinder().family();
-}
-
-typedef HashMap<FixedSizeFontDataKey, RefPtr<FixedSizeFontData>, FixedSizeFontDataKeyHash, FixedSizeFontDataKeyTraits> FixedSizeFontCache;
-FixedSizeFontCache g_fixedSizeFontCache;
-
-PassRefPtr<FixedSizeFontData> FixedSizeFontData::create(const AtomicString& family, unsigned weight, bool italic)
-{
-    FixedSizeFontData* fontData = new FixedSizeFontData();
-
-    fontData->m_weight = weight;
-    fontData->m_italic = italic;
-
-    LOGFONT& winFont = fontData->m_font;
-    // The size here looks unusual.  The negative number is intentional.
-    winFont.lfHeight = -72;
-    winFont.lfWidth = 0;
-    winFont.lfEscapement = 0;
-    winFont.lfOrientation = 0;
-    winFont.lfUnderline = false;
-    winFont.lfStrikeOut = false;
-    winFont.lfCharSet = DEFAULT_CHARSET;
-    winFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
-    winFont.lfQuality = CLEARTYPE_QUALITY; //DEFAULT_QUALITY;
-    winFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
-    winFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
-    winFont.lfItalic = italic;
-    winFont.lfWeight = FontPlatformData::adjustedGDIFontWeight(weight, family);
-
-    int len = std::min(family.length(), (unsigned int)LF_FACESIZE - 1);
-    wmemcpy(winFont.lfFaceName, family.characters(), len);
-    winFont.lfFaceName[len] = L'\0';
-
-    fontData->m_hfont = adoptGDIObject(::CreateFontIndirect(&winFont));
-
-    HGDIOBJ oldFont = SelectObject(g_screenDC, fontData->m_hfont.get());
-
-    GetTextMetrics(g_screenDC, &fontData->m_metrics);
-
-    if (IMLangFontLinkType* langFontLink = fontCache().getFontLinkInterface()) {
-        langFontLink->GetFontCodePages(g_screenDC, fontData->m_hfont.get(), &fontData->m_codePages);
-        fontData->m_codePages |= FontPlatformData::getKnownFontCodePages(winFont.lfFaceName);
-    }
-
-    SelectObject(g_screenDC, oldFont);
-
-    return adoptRef(fontData);
-}
-
-static PassRefPtr<FixedSizeFontData> createFixedSizeFontData(const AtomicString& family, unsigned weight, bool italic)
-{
-    FixedSizeFontDataKey key(family, weight, italic);
-    FixedSizeFontCache::AddResult result = g_fixedSizeFontCache.add(key, RefPtr<FixedSizeFontData>());
-    if (result.isNewEntry)
-        result.iterator->value = FixedSizeFontData::create(family, weight, italic);
-
-    return result.iterator->value;
-}
-
-static LONG toGDIFontWeight(FontWeight fontWeight)
-{
-    static LONG gdiFontWeights[] = {
-        FW_THIN,        // FontWeight100
-        FW_EXTRALIGHT,  // FontWeight200
-        FW_LIGHT,       // FontWeight300
-        FW_NORMAL,      // FontWeight400
-        FW_MEDIUM,      // FontWeight500
-        FW_SEMIBOLD,    // FontWeight600
-        FW_BOLD,        // FontWeight700
-        FW_EXTRABOLD,   // FontWeight800
-        FW_HEAVY        // FontWeight900
-    };
-    return gdiFontWeights[fontWeight];
-}
-
-class FontPlatformPrivateData {
-public:
-    int m_reference;
-    RefPtr<FixedSizeFontData> m_rootFontData;
-    AtomicString m_family;
-    FontDescription m_fontDescription;
-    GDIObject<HFONT> m_hfontScaled;
-    int m_size;
-    long m_fontScaledWidth;
-    long m_fontScaledHeight;
-    bool m_disabled;
-    FontPlatformPrivateData(int size, unsigned weight)
-        : m_reference(1)
-        , m_family(FontPlatformData::defaultFontFamily())
-        , m_size(size)
-        , m_fontScaledWidth(0)
-        , m_fontScaledHeight(0)
-        , m_disabled(false)
-    {
-        m_rootFontData = createFixedSizeFontData(m_family, weight, false);
-    }
-    FontPlatformPrivateData(const FontDescription& fontDescription, const AtomicString& family)
-        : m_reference(1)
-        , m_size(fontDescription.computedPixelSize())
-        , m_fontDescription(fontDescription)
-        , m_family(family)
-        , m_fontScaledWidth(0)
-        , m_fontScaledHeight(0)
-        , m_disabled(!fontDescription.specifiedSize())
-    {
-        m_rootFontData = FixedSizeFontData::create(family, toGDIFontWeight(fontDescription.weight()), fontDescription.italic());
-    }
-};
-
-FontPlatformData::FontPlatformData(const FontDescription& fontDescription, const AtomicString& desiredFamily, bool useDefaultFontIfNotPresent)
-{
-    String family(desiredFamily);
-    if (!equalIgnoringCase(family, defaultFontFamily()) && !FontFamilyChecker(family.charactersWithNullTermination().data()).isSupported()) {
-        if (equalIgnoringCase(family, String(heiTiStr)) && isSongTiSupported())
-            family = String(songTiStr);
-        else if (useDefaultFontIfNotPresent)
-            family = defaultFontFamily();
-    }
-
-    m_private = new FontPlatformPrivateData(fontDescription, family);
-}
-
-FontPlatformData::FontPlatformData(float size, bool bold, bool oblique)
-{
-    if (!size)
-        m_private = 0;
-    else
-        m_private = new FontPlatformPrivateData((int)(size + 0.5), bold ? FW_BOLD : FW_NORMAL);
-}
-
-FontPlatformData::~FontPlatformData()
-{
-    if (isValid() && !--m_private->m_reference) {
-        if (m_private->m_rootFontData->refCount() == 2) {
-            FixedSizeFontDataKey key(m_private->m_family, m_private->m_rootFontData->m_weight, m_private->m_rootFontData->m_italic);
-            g_fixedSizeFontCache.remove(key);
-        }
-        delete m_private;
-    }
-}
-
-FontPlatformData& FontPlatformData::operator=(const FontPlatformData& o)
-{
-    if (isValid() && !--m_private->m_reference)
-        delete m_private;
-
-    if (m_private = o.m_private)
-        ++m_private->m_reference;
-
-    return *this;
-}
-
-HFONT FontPlatformData::hfont() const
-{
-    if (!isValid())
-        return 0;
-
-    if (m_private->m_disabled)
-        return 0;
-
-    if (!m_private->m_rootFontData->m_hfont)
-        m_private->m_rootFontData->m_hfont = adoptGDIObject(::CreateFontIndirect(&m_private->m_rootFontData->m_font));
-
-    return m_private->m_rootFontData->m_hfont.get();
-}
-
-HFONT FontPlatformData::getScaledFontHandle(int height, int width) const
-{
-    if (!isValid() || m_private->m_disabled)
-        return 0;
-
-    if (!m_private->m_hfontScaled || m_private->m_fontScaledHeight != height || m_private->m_fontScaledWidth != width) {
-        m_private->m_fontScaledHeight = height;
-        m_private->m_fontScaledWidth = width;
-        LOGFONT font = m_private->m_rootFontData->m_font;
-        font.lfHeight = -height;
-        font.lfWidth = width;
-        m_private->m_hfontScaled = adoptGDIObject(::CreateFontIndirect(&font));
-    }
-
-    return m_private->m_hfontScaled.get();
-}
-
-bool FontPlatformData::discardFontHandle()
-{
-    if (!isValid())
-        return false;
-
-    if (m_private->m_rootFontData->m_hfont) {
-        m_private->m_rootFontData->m_hfont = nullptr;
-        return true;
-    }
-
-    if (m_private->m_hfontScaled) {
-        m_private->m_hfontScaled = nullptr;
-        return true;
-    }
-    return false;
-}
-
-const TEXTMETRIC& FontPlatformData::metrics() const
-{
-    return m_private->m_rootFontData->m_metrics;
-}
-
-bool FontPlatformData::isSystemFont() const
-{
-    return false;
-}
-
-int FontPlatformData::size() const
-{
-    return m_private->m_size;
-}
-
-const FontDescription& FontPlatformData::fontDescription() const
-{
-    return m_private->m_fontDescription;
-}
-
-const AtomicString& FontPlatformData::family() const
-{
-    return m_private->m_family;
-}
-
-const LOGFONT& FontPlatformData::logFont() const
-{
-    return m_private->m_rootFontData->m_font;
-}
-
-bool FontPlatformData::isDisabled() const
-{
-    return !isValid() || m_private->m_disabled;
-}
-
-DWORD FontPlatformData::codePages() const
-{
-    return m_private->m_rootFontData->m_codePages;
-}
-
-bool FontPlatformData::isSongTiSupported()
-{
-    static bool exists = FontFamilyChecker(songTiStr).isSupported();
-    return exists;
-}
-
-bool FontPlatformData::mapKnownFont(DWORD codePages, String& family)
-{
-    KnownFonts& fonts = knownFonts();
-    for (KnownFonts::iterator i = fonts.begin(); i != fonts.end(); ++i) {
-        if (i->codePages() & codePages) {
-            family = i->m_family;
-            return true;
-        }
-    }
-    return false;
-}
-
-DWORD FontPlatformData::getKnownFontCodePages(const wchar_t* family)
-{
-    KnownFonts& fonts = knownFonts();
-    for (KnownFonts::iterator i = fonts.begin(); i != fonts.end(); ++i) {
-        if (equalIgnoringCase(i->m_family, String(family)))
-            return i->codePages();
-    }
-    return 0;
-}
-
-const String& FontPlatformData::defaultFontFamily()
-{
-    static String family(getDefaultFontFamily());
-    return family;
-}
-
-LONG FontPlatformData::adjustedGDIFontWeight(LONG gdiFontWeight, const String& family)
-{
-    static AtomicString lucidaStr("Lucida Grande");
-    if (equalIgnoringCase(family, lucidaStr)) {
-        if (gdiFontWeight == FW_NORMAL)
-            return FW_MEDIUM;
-        if (gdiFontWeight == FW_BOLD)
-            return FW_SEMIBOLD;
-    }
-    return gdiFontWeight;
-}
-
-#ifndef NDEBUG
-String FontPlatformData::description() const
-{
-    return String();
-}
-#endif
-
-}
diff --git a/Source/WebCore/platform/graphics/wince/FontPlatformData.h b/Source/WebCore/platform/graphics/wince/FontPlatformData.h
deleted file mode 100644 (file)
index 00c9468..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * This file is part of the internal font implementation.  It should not be included by anyone other than
- * FontMac.cpp, FontWin.cpp and Font.cpp.
- *
- * Copyright (C) 2006, 2007 Apple Inc.
- * Copyright (C) 2007-2008 Torch Mobile, Inc.
- *
- * 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 FontPlatformData_h
-#define FontPlatformData_h
-
-#include "FontDescription.h"
-#include "FontOrientation.h"
-#include <wtf/Forward.h>
-#include <wtf/Noncopyable.h>
-#include <wtf/text/StringImpl.h>
-
-typedef struct tagTEXTMETRICW TEXTMETRIC;
-typedef struct tagLOGFONTW LOGFONT;
-
-namespace WebCore {
-
-    class FontPlatformPrivateData;
-
-    class FontPlatformData {
-
-    public:
-
-        FontPlatformData(): m_private(0) {}
-        FontPlatformData(float size, bool bold, bool oblique);
-
-        // Used for deleted values in the font cache's hash tables.
-        FontPlatformData(WTF::HashTableDeletedValueType) : m_private((FontPlatformPrivateData*)1) {}
-        bool isHashTableDeletedValue() const { return (unsigned)m_private == 1; }
-
-        FontPlatformData(const FontDescription& fontDescription, const AtomicString& family, bool useDefaultFontIfNotPresent = true);
-
-        ~FontPlatformData();
-
-        FontPlatformData(const FontPlatformData& o) : m_private(0) { operator=(o); }
-        FontPlatformData& operator=(const FontPlatformData& o);
-
-        int isValid() const { return reinterpret_cast<unsigned>(m_private) & ~1; }
-        HFONT hfont() const;
-        const TEXTMETRIC& metrics() const;
-        bool isSystemFont() const;
-        int size() const;
-        unsigned hash() const { return (unsigned)m_private; }
-        const FontDescription& fontDescription() const;
-        const AtomicString& family() const;
-        bool operator==(const FontPlatformData& other) const {     return m_private == other.m_private; }
-        HFONT getScaledFontHandle(int height, int width) const;
-        const LOGFONT& logFont() const;
-        bool isDisabled() const;
-        bool discardFontHandle();
-        DWORD codePages() const;
-
-        static bool isSongTiSupported();
-        static bool mapKnownFont(DWORD codePages, String& family);
-        static DWORD getKnownFontCodePages(const wchar_t* family);
-        static const String& defaultFontFamily();
-        static LONG adjustedGDIFontWeight(LONG gdiFontWeight, const String& family);
-
-        FontOrientation orientation() const { return Horizontal; } // FIXME: Implement.
-        void setOrientation(FontOrientation) { } // FIXME: Implement.
-
-#ifndef NDEBUG
-        String description() const;
-#endif
-
-    private:
-        FontPlatformPrivateData* m_private;
-    };
-
-}
-
-#endif
diff --git a/Source/WebCore/platform/graphics/wince/FontWinCE.cpp b/Source/WebCore/platform/graphics/wince/FontWinCE.cpp
deleted file mode 100644 (file)
index f02848c..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
- * Copyright (C) 2007-2009 Torch Mobile, Inc.
- * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
- * Copyright (C) 2008 Holger Hans Peter Freyther
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#include "config.h"
-#include "Font.h"
-
-#include "AffineTransform.h"
-#include "FloatRect.h"
-#include "FontCache.h"
-#include "FontData.h"
-#include "FontGlyphs.h"
-#include "GlyphBuffer.h"
-#include "GraphicsContext.h"
-#include "IntRect.h"
-#include "NotImplemented.h"
-#include "TextRun.h"
-#include "WidthIterator.h"
-#include <wtf/MathExtras.h>
-#include <wtf/OwnPtr.h>
-
-#include <windows.h>
-
-using namespace WTF::Unicode;
-
-namespace WebCore {
-
-HDC g_screenDC = GetDC(0);
-
-class ScreenDcReleaser {
-public:
-    ~ScreenDcReleaser()
-    {
-        ReleaseDC(0, g_screenDC);
-    }
-};
-
-ScreenDcReleaser releaseScreenDc;
-
-void Font::drawGlyphs(GraphicsContext* graphicsContext, const SimpleFontData* fontData, const GlyphBuffer& glyphBuffer,
-    int from, int numGlyphs, const FloatPoint& point) const
-{
-    graphicsContext->drawText(fontData, glyphBuffer, from, numGlyphs, point);
-}
-
-class TextRunComponent {
-public:
-    TextRunComponent() : m_textRun(0, 0) {}
-    TextRunComponent(const UChar *start, int length, const TextRun& parentTextRun, const Font &font, int offset);
-    TextRunComponent(int spaces, const Font &font, int offset);
-    ~TextRunComponent() { m_textRun; }
-
-    bool isSpace() const { return m_spaces; }
-    int textLength() const { return m_spaces ? m_spaces : m_textRun.length(); }
-
-    TextRun m_textRun;
-    float m_width;
-    int m_offset;
-    int m_spaces;
-};
-
-TextRunComponent::TextRunComponent(const UChar *start, int length, const TextRun& parentTextRun, const Font &font, int o)
-    : m_textRun(start, length, 0, 0
-        , parentTextRun.allowsTrailingExpansion() ? TextRun::AllowTrailingExpansion : TextRun::ForbidTrailingExpansion
-        , parentTextRun.direction()
-        , parentTextRun.directionalOverride())
-    , m_offset(o)
-    , m_spaces(0)
-{
-    m_textRun.setTabSize(parentTextRun.allowTabs(), parentTextRun.tabSize());
-
-    WidthIterator it(&font, m_textRun);
-    it.advance(m_textRun.length(), 0);
-    m_width = it.m_runWidthSoFar;
-}
-
-TextRunComponent::TextRunComponent(int s, const Font &font, int o)
-    : m_textRun(0, 0)
-    , m_offset(o)
-    , m_spaces(s)
-{
-    m_width = s * font.primaryFont()->widthForGlyph(' ');
-}
-
-typedef Vector<TextRunComponent, 128> TextRunComponents;
-
-static int generateComponents(TextRunComponents* components, const Font &font, const TextRun &run)
-{
-    int letterSpacing = font.letterSpacing();
-    int wordSpacing = font.wordSpacing();
-    int padding = run.expansion();
-    int numSpaces = 0;
-    if (padding) {
-        for (int i = 0; i < run.length(); i++)
-            if (Font::treatAsSpace(run[i]))
-                ++numSpaces;
-    }
-
-    int offset = 0;
-    if (letterSpacing) {
-        // need to draw every letter on it's own
-        int start = 0;
-        if (Font::treatAsSpace(run[0])) {
-            int add = 0;
-            if (numSpaces) {
-                add = padding/numSpaces;
-                padding -= add;
-                --numSpaces;
-            }
-            components->append(TextRunComponent(1, font, offset));
-            offset += add + letterSpacing + components->last().m_width;
-            start = 1;
-        }
-        for (int i = 1; i < run.length(); ++i) {
-            UChar ch = run[i];
-            if (U16_IS_LEAD(ch) && U16_IS_TRAIL(run[i-1]))
-                ch = U16_GET_SUPPLEMENTARY(ch, run[i-1]);
-            if (U16_IS_TRAIL(ch) || U_GET_GC_MASK(ch) & U_GC_MN_MASK)
-                continue;
-            if (Font::treatAsSpace(run[i])) {
-                int add = 0;
-                if (i - start > 0) {
-                    components->append(TextRunComponent(run.characters16() + start, i - start,
-                                                        run, font, offset));
-                    offset += components->last().m_width + letterSpacing;
-                }
-                if (numSpaces) {
-                    add = padding/numSpaces;
-                    padding -= add;
-                    --numSpaces;
-                }
-                components->append(TextRunComponent(1, font, offset));
-                offset += wordSpacing + add + components->last().m_width + letterSpacing;
-                start = i + 1;
-                continue;
-            }
-            if (i - start > 0) {
-                components->append(TextRunComponent(run.characters16() + start, i - start,
-                                                    run,
-                                                    font, offset));
-                offset += components->last().m_width + letterSpacing;
-            }
-            start = i;
-        }
-        if (run.length() - start > 0) {
-            components->append(TextRunComponent(run.characters16() + start, run.length() - start,
-                                                run,
-                                                font, offset));
-            offset += components->last().m_width;
-        }
-        offset += letterSpacing;
-    } else {
-        int start = 0;
-        for (int i = 0; i < run.length(); ++i) {
-            if (Font::treatAsSpace(run[i])) {
-                if (i - start > 0) {
-                    components->append(TextRunComponent(run.characters16() + start, i - start,
-                                                        run,
-                                                        font, offset));
-                    offset += components->last().m_width;
-                }
-                int add = 0;
-                if (numSpaces) {
-                    add = padding/numSpaces;
-                    padding -= add;
-                    --numSpaces;
-                }
-                components->append(TextRunComponent(1, font, offset));
-                offset += add + components->last().m_width;
-                if (i)
-                    offset += wordSpacing;
-                start = i + 1;
-            }
-        }
-        if (run.length() - start > 0) {
-            components->append(TextRunComponent(run.characters16() + start, run.length() - start,
-                                                run,
-                                                font, offset));
-            offset += components->last().m_width;
-        }
-    }
-    return offset;
-}
-
-float Font::drawComplexText(GraphicsContext* context, const TextRun& run, const FloatPoint& point, int from, int to) const
-{
-    if (to < 0)
-        to = run.length();
-    if (from < 0)
-        from = 0;
-
-    TextRunComponents components;
-    int w = generateComponents(&components, *this, run);
-
-    float widthOfDrawnText = 0;
-    int curPos = 0;
-    for (int i = 0; i < (int)components.size(); ++i) {
-        const TextRunComponent& comp = components.at(i);
-        int len = comp.textLength();
-        int curEnd = curPos + len;
-        if (curPos < to && from < curEnd && !comp.isSpace()) {
-            FloatPoint pt = point;
-            if (run.rtl())
-                pt.setX(point.x() + w - comp.m_offset - comp.m_width);
-            else
-                pt.setX(point.x() + comp.m_offset);
-            widthOfDrawnText += drawSimpleText(context, comp.m_textRun, pt, from - curPos, std::min(to, curEnd) - curPos);
-        }
-        curPos += len;
-        if (from < curPos)
-            from = curPos;
-    }
-    return widthOfDrawnText;
-}
-
-void Font::drawEmphasisMarksForComplexText(GraphicsContext* /* context */, const TextRun& /* run */, const AtomicString& /* mark */, const FloatPoint& /* point */, int /* from */, int /* to */) const
-{
-    notImplemented();
-}
-
-float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFontData*>* fallbackFonts, GlyphOverflow* glyphOverflow) const
-{
-    TextRunComponents components;
-    int w = generateComponents(&components, *this, run);
-    return w;
-}
-
-int Font::offsetForPositionForComplexText(const TextRun& run, float xFloat, bool includePartialGlyphs) const
-{
-    // FIXME: This truncation is not a problem for HTML, but only affects SVG, which passes floating-point numbers
-    // to Font::offsetForPosition(). Bug http://webkit.org/b/40673 tracks fixing this problem.
-    int position = static_cast<int>(xFloat);
-
-    TextRunComponents components;
-    int w = generateComponents(&components, *this, run);
-
-    if (position >= w)
-        return run.length();
-
-    int offset = 0;
-    if (run.rtl()) {
-        for (size_t i = 0; i < components.size(); ++i) {
-            const TextRunComponent& comp = components.at(i);
-            int xe = w - comp.m_offset;
-            int xs = xe - comp.m_width;
-            if (position >= xs)
-                return offset + (comp.isSpace()
-                    ? static_cast<int>((position - xe) * comp.m_spaces / std::max(1.f, comp.m_width) + 0.5)
-                    : offsetForPositionForSimpleText(comp.m_textRun, position - xs, includePartialGlyphs));
-
-            offset += comp.textLength();
-        }
-    } else {
-        for (size_t i = 0; i < components.size(); ++i) {
-            const TextRunComponent& comp = components.at(i);
-            int xs = comp.m_offset;
-            int xe = xs + comp.m_width;
-            if (position <= xe) {
-                if (position - xs >= xe)
-                    return offset + comp.textLength();
-                return offset + (comp.isSpace()
-                    ? static_cast<int>((position - xs) * comp.m_spaces / std::max(1.f, comp.m_width) + 0.5)
-                    : offsetForPositionForSimpleText(comp.m_textRun, position - xs, includePartialGlyphs));
-            }
-            offset += comp.textLength();
-        }
-    }
-    return run.length();
-}
-
-
-static float cursorToX(const Font* font, const TextRunComponents& components, int width, bool rtl, int cursor)
-{
-    int start = 0;
-    for (size_t i = 0; i < components.size(); ++i) {
-        const TextRunComponent& comp = components.at(i);
-        if (start + comp.textLength() <= cursor) {
-            start += comp.textLength();
-            continue;
-        }
-        int xs = comp.m_offset;
-        if (rtl)
-            xs = width - xs - comp.m_width;
-
-        int pos = cursor - start;
-        if (comp.isSpace()) {
-            if (rtl)
-                pos = comp.textLength() - pos;
-            return xs + pos * comp.m_width / comp.m_spaces;
-        }
-        WidthIterator it(font, comp.m_textRun);
-        GlyphBuffer glyphBuffer;
-        it.advance(pos, &glyphBuffer);
-        return xs + it.m_runWidthSoFar;
-    }
-    return width;
-}
-
-FloatRect Font::selectionRectForComplexText(const TextRun& run, const FloatPoint& pt,
-    int h, int from, int to) const
-{
-    TextRunComponents components;
-    int w = generateComponents(&components, *this, run);
-
-    if (!from && to == run.length())
-        return FloatRect(pt.x(), pt.y(), w, h);
-
-    float x1 = cursorToX(this, components, w, run.rtl(), from);
-    float x2 = cursorToX(this, components, w, run.rtl(), to);
-    if (x2 < x1)
-        std::swap(x1, x2);
-
-    return FloatRect(pt.x() + x1, pt.y(), x2 - x1, h);
-}
-
-bool Font::canReturnFallbackFontsForComplexText()
-{
-    return false;
-}
-
-bool Font::canExpandAroundIdeographsInComplexText()
-{
-    return false;
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp b/Source/WebCore/platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp
deleted file mode 100644 (file)
index 8dc55f4..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile Inc.
- *
- *  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 "GlyphPageTreeNode.h"
-
-#include "Font.h"
-#include "FontCache.h"
-#include "FontData.h"
-#include "SimpleFontData.h"
-
-namespace WebCore {
-
-DWORD getKnownFontCodePages(const wchar_t* family);
-
-typedef unsigned (*funcGetCharCodePages)(unsigned short c, unsigned& lastPos);
-funcGetCharCodePages getCharCodePages = 0;
-
-bool GlyphPage::fill(unsigned offset, unsigned length, UChar* buffer, unsigned bufferLength, const SimpleFontData* fontData)
-{
-    if (length != bufferLength)
-        return false;
-
-    if (fontData->platformData().hfont()) {
-        DWORD fontCodePages = fontData->platformData().codePages();
-        if (fontCodePages) {
-            if (getCharCodePages) {
-                unsigned lastPos = 0;
-                for (unsigned i = 0; i < bufferLength; ++i) {
-                    DWORD actualCodePages = getCharCodePages(buffer[i], lastPos);
-                    if (!actualCodePages || (actualCodePages & fontCodePages))
-                        setGlyphDataForIndex(offset + i, buffer[i], fontData);
-                    else
-                        setGlyphDataForIndex(offset + i, 0, 0);
-                }
-                return true;
-            } else if (IMLangFontLinkType* langFontLink = fontCache().getFontLinkInterface()) {
-                for (unsigned i = 0; i < bufferLength; ++i) {
-                    DWORD actualCodePages;
-                    langFontLink->GetCharCodePages(buffer[i], &actualCodePages);
-                    if (!actualCodePages || (actualCodePages & fontCodePages))
-                        setGlyphDataForIndex(offset + i, buffer[i], fontData);
-                    else
-                        setGlyphDataForIndex(offset + i, 0, 0);
-                }
-                return true;
-            }
-        }
-    }
-
-    for (unsigned i = 0; i < length; ++i)
-        setGlyphDataForIndex(offset + i, buffer[i], fontData);
-
-    return true;
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/GradientWinCE.cpp b/Source/WebCore/platform/graphics/wince/GradientWinCE.cpp
deleted file mode 100644 (file)
index d735881..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2009 Torch Mobile, Inc. All rights reserved.
- *
- *  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 "Gradient.h"
-
-#include "GraphicsContext.h"
-
-namespace WebCore {
-
-void Gradient::platformDestroy()
-{
-}
-
-static inline bool compareStops(const Gradient::ColorStop& a, const Gradient::ColorStop& b)
-{
-    return a.stop < b.stop;
-}
-
-const Vector<Gradient::ColorStop, 2>& Gradient::getStops() const
-{
-    if (!m_stopsSorted) {
-        if (m_stops.size())
-            std::stable_sort(m_stops.begin(), m_stops.end(), compareStops);
-        m_stopsSorted = true;
-    }
-    return m_stops;
-}
-
-void Gradient::fill(GraphicsContext* c, const FloatRect& r)
-{
-    c->fillRect(r, this);
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp b/Source/WebCore/platform/graphics/wince/GraphicsContextWinCE.cpp
deleted file mode 100644 (file)
index 0269f00..0000000
+++ /dev/null
@@ -1,1853 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile Inc.
- *  Copyright (C) 2010 Patrick Gansterer <paroga@paroga.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 "GraphicsContext.h"
-
-#include "AffineTransform.h"
-#include "FloatRoundedRect.h"
-#include "Font.h"
-#include "GDIExtras.h"
-#include "GlyphBuffer.h"
-#include "Gradient.h"
-#include "NotImplemented.h"
-#include "Path.h"
-#include "PlatformPathWinCE.h"
-#include "SharedBitmap.h"
-#include "SimpleFontData.h"
-#include <windows.h>
-#include <wtf/OwnPtr.h>
-#include <wtf/unicode/CharacterNames.h>
-
-namespace WebCore {
-
-typedef void (*FuncGradientFillRectLinear)(HDC hdc, const IntRect& r, const IntPoint& p0, const IntPoint& p1, const Vector<Gradient::ColorStop>& stops);
-typedef void (*FuncGradientFillRectRadial)(HDC hdc, const IntRect& r, const IntPoint& p0, const IntPoint& p1, float r0, float r1, const Vector<Gradient::ColorStop>& stops);
-FuncGradientFillRectLinear g_linearGradientFiller = 0;
-FuncGradientFillRectRadial g_radialGradientFiller = 0;
-
-static inline bool isZero(double d)
-{
-    return d > 0 ? d <= 1.E-10 : d >= -1.E-10;
-}
-
-// stableRound rounds -0.5 to 0, where lround rounds -0.5 to -1.
-static inline int stableRound(double d)
-{
-    if (d > 0)
-        return static_cast<int>(d + 0.5);
-
-    int i = static_cast<int>(d);
-    return i - d > 0.5 ? i - 1 : i;
-}
-
-// Unlike enclosingIntRect(), this function does strict rounding.
-static inline IntRect roundRect(const FloatRect& r)
-{
-    return IntRect(stableRound(r.x()), stableRound(r.y()), stableRound(r.maxX()) - stableRound(r.x()), stableRound(r.maxY()) - stableRound(r.y()));
-}
-
-// Rotation transformation
-class RotationTransform {
-public:
-    RotationTransform()
-        : m_cosA(1.)
-        , m_sinA(0.)
-        , m_preShiftX(0)
-        , m_preShiftY(0)
-        , m_postShiftX(0)
-        , m_postShiftY(0)
-    {
-    }
-    RotationTransform operator-() const
-    {
-        RotationTransform rtn;
-        rtn.m_cosA = m_cosA;
-        rtn.m_sinA = -m_sinA;
-        rtn.m_preShiftX = m_postShiftX;
-        rtn.m_preShiftY = m_postShiftY;
-        rtn.m_postShiftX = m_preShiftX;
-        rtn.m_postShiftY = m_preShiftY;
-        return rtn;
-    }
-    void map(double x1, double y1, double* x2, double* y2) const
-    {
-        x1 += m_preShiftX;
-        y1 += m_preShiftY;
-        *x2 = x1 * m_cosA + y1 * m_sinA + m_postShiftX;
-        *y2 = y1 * m_cosA - x1 * m_sinA + m_postShiftY;
-    }
-    void map(int x1, int y1, int* x2, int* y2) const
-    {
-        x1 += m_preShiftX;
-        y1 += m_preShiftY;
-        *x2 = stableRound(x1 * m_cosA + y1 * m_sinA) + m_postShiftX;
-        *y2 = stableRound(y1 * m_cosA - x1 * m_sinA) + m_postShiftY;
-    }
-
-    double m_cosA;
-    double m_sinA;
-    int m_preShiftX;
-    int m_preShiftY;
-    int m_postShiftX;
-    int m_postShiftY;
-};
-
-template<class T> static inline IntPoint mapPoint(const IntPoint& p, const T& t)
-{
-    int x, y;
-    t.map(p.x(), p.y(), &x, &y);
-    return IntPoint(x, y);
-}
-
-template<class T> static inline FloatPoint mapPoint(const FloatPoint& p, const T& t)
-{
-    double x, y;
-    t.map(p.x(), p.y(), &x, &y);
-    return FloatPoint(static_cast<float>(x), static_cast<float>(y));
-}
-
-template<class Transform, class Rect, class Value> static inline Rect mapRect(const Rect& rect, const Transform& transform)
-{
-    Value x[4], y[4];
-    Value l, t, r, b;
-    r = rect.maxX() - 1;
-    b = rect.maxY() - 1;
-    transform.map(rect.x(), rect.y(), x, y);
-    transform.map(rect.x(), b, x + 1, y + 1);
-    transform.map(r, b, x + 2, y + 2);
-    transform.map(r, rect.y(), x + 3, y + 3);
-    l = r = x[3];
-    t = b = y[3];
-    for (int i = 0; i < 3; ++i) {
-        if (x[i] < l)
-            l = x[i];
-        else if (x[i] > r)
-            r = x[i];
-
-        if (y[i] < t)
-            t = y[i];
-        else if (y[i] > b)
-            b = y[i];
-    }
-
-    return IntRect(l, t, r - l + 1, b - t + 1);
-}
-
-template<class T> static inline IntRect mapRect(const IntRect& rect, const T& transform)
-{
-    return mapRect<T, IntRect, int>(rect, transform);
-}
-
-template<class T> static inline FloatRect mapRect(const FloatRect& rect, const T& transform)
-{
-    return mapRect<T, FloatRect, double>(rect, transform);
-}
-
-class GraphicsContextPlatformPrivateData {
-public:
-    GraphicsContextPlatformPrivateData()
-        : m_transform()
-        , m_opacity(1.0)
-    {
-    }
-
-    AffineTransform m_transform;
-    float m_opacity;
-};
-
-enum AlphaPaintType {
-    AlphaPaintNone,
-    AlphaPaintImage,
-    AlphaPaintOther,
-};
-
-class GraphicsContextPlatformPrivate : public GraphicsContextPlatformPrivateData {
-public:
-    GraphicsContextPlatformPrivate(HDC dc)
-        : m_dc(dc)
-    {
-    }
-    ~GraphicsContextPlatformPrivate()
-    {
-        while (!m_backupData.isEmpty())
-            restore();
-    }
-
-    void translate(float x, float y)
-    {
-        m_transform.translate(x, y);
-    }
-
-    void scale(const FloatSize& size)
-    {
-        m_transform.scaleNonUniform(size.width(), size.height());
-    }
-
-    void rotate(float radians)
-    {
-        m_transform.rotate(rad2deg(radians));
-    }
-
-    void concatCTM(const AffineTransform& transform)
-    {
-        m_transform *= transform;
-    }
-
-    void setCTM(const AffineTransform& transform)
-    {
-        m_transform = transform;
-    }
-
-    IntRect mapRect(const IntRect& rect) const
-    {
-        return m_transform.mapRect(rect);
-    }
-
-    FloatRect mapRect(const FloatRect& rect) const
-    {
-        return m_transform.mapRect(rect);
-    }
-
-    IntPoint mapPoint(const IntPoint& point) const
-    {
-        return m_transform.mapPoint(point);
-    }
-
-    FloatPoint mapPoint(const FloatPoint& point) const
-    {
-        return m_transform.mapPoint(point);
-    }
-
-    FloatSize mapSize(const FloatSize& size) const
-    {
-        double w, h;
-        m_transform.map(size.width(), size.height(), w, h);
-        return FloatSize(static_cast<float>(w), static_cast<float>(h));
-    }
-
-    void save()
-    {
-        if (m_dc)
-            SaveDC(m_dc);
-
-        m_backupData.append(*static_cast<GraphicsContextPlatformPrivateData*>(this));
-    }
-
-    void restore()
-    {
-        if (m_backupData.isEmpty())
-            return;
-
-        if (m_dc)
-            RestoreDC(m_dc, -1);
-
-        GraphicsContextPlatformPrivateData::operator=(m_backupData.last());
-        m_backupData.removeLast();
-    }
-
-    bool hasAlpha() const { return m_bitmap && m_bitmap->hasAlpha(); }
-
-    PassRefPtr<SharedBitmap> getTransparentLayerBitmap(IntRect& origRect, AlphaPaintType alphaPaint, RECT& bmpRect, bool checkClipBox, bool force) const
-    {
-        if (m_opacity <= 0)
-            return 0;
-
-        if (force || m_opacity < 1.)  {
-            if (checkClipBox) {
-                RECT clipBox;
-                int clipType = GetClipBox(m_dc, &clipBox);
-                if (clipType == SIMPLEREGION || clipType == COMPLEXREGION)
-                    origRect.intersect(clipBox);
-                if (origRect.isEmpty())
-                    return 0;
-            }
-
-            RefPtr<SharedBitmap> bmp = SharedBitmap::create(origRect.size(), alphaPaint == AlphaPaintNone ? BitmapInfo::BitCount16 : BitmapInfo::BitCount32, false);
-            SetRect(&bmpRect, 0, 0, origRect.width(), origRect.height());
-            if (bmp) {
-                switch (alphaPaint) {
-                case AlphaPaintNone:
-                case AlphaPaintImage:
-                    {
-                        SharedBitmap::DCHolder dc(bmp.get());
-                        if (dc.get()) {
-                            BitBlt(dc.get(), 0, 0, origRect.width(), origRect.height(), m_dc, origRect.x(), origRect.y(), SRCCOPY);
-                            if (bmp->is32bit() && (!m_bitmap || m_bitmap->is16bit())) {
-                                // Set alpha channel
-                                unsigned* pixels = (unsigned*)bmp->bytes();
-                                const unsigned* const pixelsEnd = pixels + bmp->bitmapInfo().numPixels();
-                                while (pixels < pixelsEnd) {
-                                    *pixels |= 0xFF000000;
-                                    ++pixels;
-                                }
-                            }
-                            return bmp;
-                        }
-                    }
-                    break;
-                //case AlphaPaintOther:
-                default:
-                    memset(bmp->bytes(), 0xFF, bmp->bitmapInfo().numPixels() * 4);
-                    return bmp;
-                    break;
-                }
-            }
-        }
-
-        bmpRect = origRect;
-        return 0;
-    }
-
-    void paintBackTransparentLayerBitmap(HDC hdc, SharedBitmap* bmp, const IntRect& origRect, AlphaPaintType alphaPaint, const RECT& bmpRect)
-    {
-        if (hdc == m_dc)
-            return;
-
-        if (alphaPaint == AlphaPaintOther && hasAlphaBlendSupport()) {
-            ASSERT(bmp && bmp->bytes() && bmp->is32bit());
-            unsigned* pixels = (unsigned*)bmp->bytes();
-            const unsigned* const pixelsEnd = pixels + bmp->bitmapInfo().numPixels();
-            while (pixels < pixelsEnd) {
-                *pixels ^= 0xFF000000;
-                ++pixels;
-            }
-        }
-        if ((m_opacity < 1. || alphaPaint == AlphaPaintOther) && hasAlphaBlendSupport()) {
-            const BLENDFUNCTION blend = { AC_SRC_OVER, 0
-                , m_opacity >= 1. ? 255 : (BYTE)(m_opacity * 255)
-                , alphaPaint == AlphaPaintNone ? 0 : AC_SRC_ALPHA };
-            bool success = alphaBlendIfSupported(m_dc, origRect.x(), origRect.y(), origRect.width(), origRect.height(), hdc, 0, 0, bmpRect.right, bmpRect.bottom, blend);
-            ASSERT_UNUSED(success, success);
-        } else
-            StretchBlt(m_dc, origRect.x(), origRect.y(), origRect.width(), origRect.height(), hdc, 0, 0, bmpRect.right, bmpRect.bottom, SRCCOPY);
-    }
-
-    HDC m_dc;
-    RefPtr<SharedBitmap> m_bitmap;
-    Vector<GraphicsContextPlatformPrivateData> m_backupData;
-};
-
-static GDIObject<HPEN> createPen(const Color& col, double fWidth, StrokeStyle style)
-{
-    int width = stableRound(fWidth);
-    if (width < 1)
-        width = 1;
-
-    int penStyle = PS_NULL;
-    switch (style) {
-        case SolidStroke:
-        case DoubleStroke:
-        case WavyStroke: // FIXME: https://bugs.webkit.org/show_bug.cgi?id=94114 - Needs platform support.
-            penStyle = PS_SOLID;
-            break;
-        case DottedStroke:  // not supported on Windows CE
-        case DashedStroke:
-            penStyle = PS_DASH;
-            width = 1;
-            break;
-        default:
-            break;
-    }
-
-    return adoptGDIObject(::CreatePen(penStyle, width, RGB(col.red(), col.green(), col.blue())));
-}
-
-static inline GDIObject<HBRUSH> createBrush(const Color& col)
-{
-    return adoptGDIObject(::CreateSolidBrush(RGB(col.red(), col.green(), col.blue())));
-}
-
-template <typename PixelType, bool Is16bit> static void _rotateBitmap(SharedBitmap* destBmp, const SharedBitmap* sourceBmp, const RotationTransform& transform)
-{
-    int destW = destBmp->width();
-    int destH = destBmp->height();
-    int sourceW = sourceBmp->width();
-    int sourceH = sourceBmp->height();
-    PixelType* dest = (PixelType*)destBmp->bytes();
-    const PixelType* source = (const PixelType*)sourceBmp->bytes();
-    int padding;
-    int paddedSourceW;
-    if (Is16bit) {
-        padding = destW & 1;
-        paddedSourceW = sourceW + (sourceW & 1);
-    } else {
-        padding = 0;
-        paddedSourceW = sourceW;
-    }
-    if (isZero(transform.m_sinA)) {
-        int cosA = transform.m_cosA > 0 ? 1 : -1;
-        for (int y = 0; y < destH; ++y) {
-            for (int x = 0; x < destW; ++x) {
-                int x1 = x + transform.m_preShiftX;
-                int y1 = y + transform.m_preShiftY;
-                int srcX = x1 * cosA + transform.m_postShiftX;
-                int srcY = y1 * cosA - transform.m_postShiftY;
-                if (srcX >= 0 && srcX <= sourceW && srcY >= 0 && srcY <= sourceH)
-                    *dest++ = source[srcY * paddedSourceW + srcX] | 0xFF000000;
-                else
-                    *dest++ |= 0xFF;
-            }
-            dest += padding;
-        }
-    } else if (isZero(transform.m_cosA)) {
-        int sinA = transform.m_sinA > 0 ? 1 : -1;
-        for (int y = 0; y < destH; ++y) {
-            for (int x = 0; x < destW; ++x) {
-                int x1 = x + transform.m_preShiftX;
-                int y1 = y + transform.m_preShiftY;
-                int srcX = y1 * sinA + transform.m_postShiftX;
-                int srcY = -x1 * sinA + transform.m_postShiftY;
-                if (srcX >= 0 && srcX <= sourceW && srcY >= 0 && srcY <= sourceH)
-                    *dest++ = source[srcY * paddedSourceW + srcX];
-            }
-            dest += padding;
-        }
-    } else {
-        for (int y = 0; y < destH; ++y) {
-            for (int x = 0; x < destW; ++x) {
-                // FIXME: for best quality, we should get weighted sum of four neighbours,
-                // but that will be too expensive
-                int srcX, srcY;
-                transform.map(x, y, &srcX, &srcY);
-                if (srcX >= 0 && srcX <= sourceW && srcY >= 0 && srcY <= sourceH)
-                    *dest++ = source[srcY * paddedSourceW + srcX];
-            }
-            dest += padding;
-        }
-    }
-}
-
-static void rotateBitmap(SharedBitmap* destBmp, const SharedBitmap* sourceBmp, const RotationTransform& transform)
-{
-    ASSERT(destBmp->is16bit() == sourceBmp->is16bit());
-    if (destBmp->is16bit())
-        _rotateBitmap<unsigned short, true>(destBmp, sourceBmp, transform);
-    else
-        _rotateBitmap<unsigned, false>(destBmp, sourceBmp, transform);
-}
-
-class TransparentLayerDC {
-    WTF_MAKE_NONCOPYABLE(TransparentLayerDC);
-public:
-    TransparentLayerDC(GraphicsContextPlatformPrivate* data, IntRect& origRect, const IntRect* rectBeforeTransform = 0, int alpha = 255, bool paintImage = false);
-    ~TransparentLayerDC();
-
-    HDC hdc() const { return m_memDc; }
-    const RECT& rect() const { return m_bmpRect; }
-    IntSize toShift() const { return IntSize(m_bmpRect.left - m_origRect.x(), m_bmpRect.top - m_origRect.y()); }
-    void fillAlphaChannel();
-
-private:
-    GraphicsContextPlatformPrivate* m_data;
-    IntRect m_origRect;
-    IntRect m_rotatedOrigRect;
-    HDC m_memDc;
-    RefPtr<SharedBitmap> m_bitmap;
-    RefPtr<SharedBitmap> m_rotatedBitmap;
-    RECT m_bmpRect;
-    unsigned m_key;
-    RotationTransform m_rotation;
-    float m_oldOpacity;
-    AlphaPaintType m_alphaPaintType;
-};
-
-TransparentLayerDC::TransparentLayerDC(GraphicsContextPlatformPrivate* data, IntRect& origRect, const IntRect* rectBeforeTransform, int alpha, bool paintImage)
-: m_data(data)
-, m_origRect(origRect)
-, m_oldOpacity(data->m_opacity)
-// m_key1 and m_key2 are not initalized here. They are used only in the case that
-// SharedBitmap::getDC() is called, I.E., when m_bitmap is not null.
-{
-    m_data->m_opacity *= alpha / 255.;
-    bool mustCreateLayer;
-    if (!m_data->hasAlpha()) {
-        mustCreateLayer = false;
-        m_alphaPaintType = AlphaPaintNone;
-    } else {
-        mustCreateLayer = true;
-        m_alphaPaintType = paintImage ? AlphaPaintImage : AlphaPaintOther;
-    }
-    if (rectBeforeTransform && !isZero(m_data->m_transform.b())) {
-        m_rotatedOrigRect = origRect;
-        m_rotatedBitmap = m_data->getTransparentLayerBitmap(m_rotatedOrigRect, m_alphaPaintType, m_bmpRect, false, true);
-        if (m_rotatedBitmap) {
-            double a = m_data->m_transform.a();
-            double b = m_data->m_transform.b();
-            double c = _hypot(a, b);
-            m_rotation.m_cosA = a / c;
-            m_rotation.m_sinA = b / c;
-
-            int centerX = origRect.x() + origRect.width() / 2;
-            int centerY = origRect.y() + origRect.height() / 2;
-            m_rotation.m_preShiftX = -centerX;
-            m_rotation.m_preShiftY = -centerY;
-            m_rotation.m_postShiftX = centerX;
-            m_rotation.m_postShiftY = centerY;
-
-            m_origRect = mapRect(m_rotatedOrigRect, m_rotation);
-
-            m_rotation.m_preShiftX += m_rotatedOrigRect.x();
-            m_rotation.m_preShiftY += m_rotatedOrigRect.y();
-            m_rotation.m_postShiftX -= m_origRect.x();
-            m_rotation.m_postShiftY -= m_origRect.y();
-
-            FloatPoint topLeft = m_data->m_transform.mapPoint(FloatPoint(rectBeforeTransform->location()));
-            FloatPoint topRight(rectBeforeTransform->maxX() - 1, rectBeforeTransform->y());
-            topRight = m_data->m_transform.mapPoint(topRight);
-            FloatPoint bottomLeft(rectBeforeTransform->x(), rectBeforeTransform->maxY() - 1);
-            bottomLeft = m_data->m_transform.mapPoint(bottomLeft);
-            FloatSize sideTop = topRight - topLeft;
-            FloatSize sideLeft = bottomLeft - topLeft;
-            float width = _hypot(sideTop.width() + 1, sideTop.height() + 1);
-            float height = _hypot(sideLeft.width() + 1, sideLeft.height() + 1);
-
-            origRect.inflateX(stableRound((width - origRect.width()) * 0.5));
-            origRect.inflateY(stableRound((height - origRect.height()) * 0.5));
-
-            m_bitmap = SharedBitmap::create(m_origRect.size(), m_rotatedBitmap->is16bit() ? BitmapInfo::BitCount16 : BitmapInfo::BitCount32, true);
-            if (m_bitmap)
-                rotateBitmap(m_bitmap.get(), m_rotatedBitmap.get(), -m_rotation);
-            else
-                m_rotatedBitmap = 0;
-        }
-    } else
-        m_bitmap = m_data->getTransparentLayerBitmap(m_origRect, m_alphaPaintType, m_bmpRect, true, mustCreateLayer);
-    if (m_bitmap)
-        m_memDc = m_bitmap->getDC(&m_key);
-    else
-        m_memDc = m_data->m_dc;
-}
-
-TransparentLayerDC::~TransparentLayerDC()
-{
-    if (m_rotatedBitmap) {
-        m_bitmap->releaseDC(m_memDc, m_key);
-        m_key = 0;
-        rotateBitmap(m_rotatedBitmap.get(), m_bitmap.get(), m_rotation);
-        m_memDc = m_rotatedBitmap->getDC(&m_key);
-        m_data->paintBackTransparentLayerBitmap(m_memDc, m_rotatedBitmap.get(), m_rotatedOrigRect, m_alphaPaintType, m_bmpRect);
-        m_rotatedBitmap->releaseDC(m_memDc, m_key);
-    } else if (m_bitmap) {
-        m_data->paintBackTransparentLayerBitmap(m_memDc, m_bitmap.get(), m_origRect, m_alphaPaintType, m_bmpRect);
-        m_bitmap->releaseDC(m_memDc, m_key);
-    }
-    m_data->m_opacity = m_oldOpacity;
-}
-
-void TransparentLayerDC::fillAlphaChannel()
-{
-    if (!m_bitmap || !m_bitmap->is32bit())
-        return;
-
-    unsigned* pixels = (unsigned*)m_bitmap->bytes();
-    const unsigned* const pixelsEnd = pixels + m_bitmap->bitmapInfo().numPixels();
-    while (pixels < pixelsEnd) {
-        *pixels |= 0xFF000000;
-        ++pixels;
-    }
-}
-
-class ScopeDCProvider {
-    WTF_MAKE_NONCOPYABLE(ScopeDCProvider);
-public:
-    explicit ScopeDCProvider(GraphicsContextPlatformPrivate* data)
-        : m_data(data)
-    {
-        if (m_data->m_bitmap)
-            m_data->m_dc = m_data->m_bitmap->getDC(&m_key);
-    }
-    ~ScopeDCProvider()
-    {
-        if (m_data->m_bitmap) {
-            m_data->m_bitmap->releaseDC(m_data->m_dc, m_key);
-            m_data->m_dc = 0;
-        }
-    }
-private:
-    GraphicsContextPlatformPrivate* m_data;
-    unsigned m_key;
-};
-
-
-void GraphicsContext::platformInit(PlatformGraphicsContext* dc, bool)
-{
-    m_data = new GraphicsContextPlatformPrivate(dc);
-}
-
-void GraphicsContext::platformDestroy()
-{
-    delete m_data;
-}
-
-void GraphicsContext::setBitmap(PassRefPtr<SharedBitmap> bmp)
-{
-    ASSERT(!m_data->m_dc);
-    m_data->m_bitmap = bmp;
-}
-
-HDC GraphicsContext::getWindowsContext(const IntRect& dstRect, bool supportAlphaBlend, bool mayCreateBitmap)
-{
-    // FIXME: Add support for AlphaBlend.
-    ASSERT(!supportAlphaBlend);
-    return m_data->m_dc;
-}
-
-void GraphicsContext::releaseWindowsContext(HDC hdc, const IntRect& dstRect, bool supportAlphaBlend, bool mayCreateBitmap)
-{
-}
-
-void GraphicsContext::savePlatformState()
-{
-    m_data->save();
-}
-
-void GraphicsContext::restorePlatformState()
-{
-    m_data->restore();
-}
-
-void GraphicsContext::drawRect(const FloatRect& rect, float)
-{
-    if (!m_data->m_opacity || paintingDisabled() || rect.isEmpty())
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect trRect = m_data->mapRect(rect);
-    TransparentLayerDC transparentDC(m_data, trRect, &rect);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    trRect.move(transparentDC.toShift());
-
-    GDIObject<HBRUSH> brush;
-    HGDIOBJ oldBrush;
-    if (fillColor().alpha()) {
-        brush = createBrush(fillColor());
-        oldBrush = SelectObject(dc, brush.get());
-    } else
-        oldBrush = SelectObject(dc, GetStockObject(NULL_BRUSH));
-
-    GDIObject<HPEN> pen;
-    HGDIOBJ oldPen;
-    if (strokeStyle() != NoStroke) {
-        pen = createPen(strokeColor(), strokeThickness(), strokeStyle());
-        oldPen = SelectObject(dc, pen.get());
-    } else
-        oldPen = SelectObject(dc, GetStockObject(NULL_PEN));
-
-    if (brush || pen) {
-        if (trRect.width() <= 0)
-            trRect.setWidth(1);
-        if (trRect.height() <= 0)
-            trRect.setHeight(1);
-
-        Rectangle(dc, trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY());
-    }
-
-    SelectObject(dc, oldPen);
-    SelectObject(dc, oldBrush);
-}
-
-void GraphicsContext::drawLine(const FloatPoint& point1, const FloatPoint& point2)
-{
-    if (!m_data->m_opacity || paintingDisabled() || strokeStyle() == NoStroke || !strokeColor().alpha())
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntPoint trPoint1 = m_data->mapPoint(point1);
-    IntPoint trPoint2 = m_data->mapPoint(point2);
-
-    IntRect lineRect(trPoint1, trPoint2 - trPoint1);
-    lineRect.setHeight(lineRect.height() + strokeThickness());
-    TransparentLayerDC transparentDC(m_data, lineRect, 0, strokeColor().alpha());
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    trPoint1 += transparentDC.toShift();
-    trPoint2 += transparentDC.toShift();
-
-    auto pen = createPen(strokeColor(), strokeThickness(), strokeStyle());
-    HGDIOBJ oldPen = SelectObject(dc, pen.get());
-
-    MoveToEx(dc, trPoint1.x(), trPoint1.y(), 0);
-    LineTo(dc, trPoint2.x(), trPoint2.y());
-
-    SelectObject(dc, oldPen);
-}
-
-void GraphicsContext::drawEllipse(const IntRect& rect)
-{
-    if (!m_data->m_opacity || paintingDisabled() || (!fillColor().alpha() && strokeStyle() == NoStroke))
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect trRect = m_data->mapRect(rect);
-    TransparentLayerDC transparentDC(m_data, trRect, &rect);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    trRect.move(transparentDC.toShift());
-
-    GDIObject<HBRUSH> brush;
-    HGDIOBJ oldBrush;
-    if (fillColor().alpha()) {
-        brush = createBrush(fillColor());
-        oldBrush = SelectObject(dc, brush.get());
-    } else
-        oldBrush = SelectObject(dc, GetStockObject(NULL_BRUSH));
-
-    GDIObject<HPEN> pen;
-    HGDIOBJ oldPen = 0;
-    if (strokeStyle() != NoStroke) {
-        pen = createPen(strokeColor(), strokeThickness(), strokeStyle());
-        oldPen = SelectObject(dc, pen.get());
-    } else
-        oldPen = SelectObject(dc, GetStockObject(NULL_PEN));
-
-    if (brush || pen)
-        Ellipse(dc, trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY());
-
-    SelectObject(dc, oldPen);
-    SelectObject(dc, oldBrush);
-}
-
-static inline bool equalAngle(double a, double b) 
-{
-    return fabs(a - b) < 1E-5;
-}
-
-void getEllipsePointByAngle(double angle, double a, double b, float& x, float& y)
-{
-    while (angle < 0)
-        angle += 2 * piDouble;
-    while (angle >= 2 * piDouble)
-        angle -= 2 * piDouble;
-
-    if (equalAngle(angle, 0) || equalAngle(angle, 2 * piDouble)) {
-        x = a;
-        y = 0;
-    } else if (equalAngle(angle, piDouble)) {
-        x = -a;
-        y = 0;
-    } else if (equalAngle(angle, .5 * piDouble)) {
-        x = 0;
-        y = b;
-    } else if (equalAngle(angle, 1.5 * piDouble)) {
-        x = 0;
-        y = -b;
-    } else {
-        double k = tan(angle);
-        double sqA = a * a;
-        double sqB = b * b;
-        double tmp = 1. / (1. / sqA + (k * k) / sqB);
-        tmp = tmp <= 0 ? 0 : sqrt(tmp);
-        if (angle > .5 * piDouble && angle < 1.5 * piDouble)
-            tmp = -tmp;
-        x = tmp;
-
-        k = tan(.5 * piDouble - angle);
-        tmp = 1. / ((k * k) / sqA + 1 / sqB);
-        tmp = tmp <= 0 ? 0 : sqrt(tmp);
-        if (angle > piDouble)
-            tmp = -tmp;
-        y = tmp;
-    }
-}
-
-void GraphicsContext::drawConvexPolygon(size_t npoints, const FloatPoint* points, bool shouldAntialias)
-{
-    if (!m_data->m_opacity || paintingDisabled() || npoints <= 1 || !points)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    Vector<POINT, 20> winPoints(npoints);
-    FloatPoint trPoint = m_data->mapPoint(points[0]);
-    winPoints[0].x = stableRound(trPoint.x());
-    winPoints[0].y = stableRound(trPoint.y());
-    RECT rect = { winPoints[0].x, winPoints[0].y, winPoints[0].x, winPoints[0].y };
-    for (size_t i = 1; i < npoints; ++i) {
-        trPoint = m_data->mapPoint(points[i]);
-        winPoints[i].x = stableRound(trPoint.x());
-        winPoints[i].y = stableRound(trPoint.y());
-        if (rect.left > winPoints[i].x)
-            rect.left = winPoints[i].x;
-        else if (rect.right < winPoints[i].x)
-            rect.right = winPoints[i].x;
-        if (rect.top > winPoints[i].y)
-            rect.top = winPoints[i].y;
-        else if (rect.bottom < winPoints[i].y)
-            rect.bottom = winPoints[i].y;
-    }
-    rect.bottom += 1;
-    rect.right += 1;
-
-    IntRect intRect(rect);
-    TransparentLayerDC transparentDC(m_data, intRect);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-
-    for (size_t i = 0; i < npoints; ++i) {
-        winPoints[i].x += transparentDC.toShift().width();
-        winPoints[i].y += transparentDC.toShift().height();
-    }
-
-    GDIObject<HBRUSH> brush;
-    HGDIOBJ oldBrush;
-    if (fillColor().alpha()) {
-        brush = createBrush(fillColor());
-        oldBrush = SelectObject(dc, brush.get());
-    } else
-        oldBrush = SelectObject(dc, GetStockObject(NULL_BRUSH));
-
-    GDIObject<HPEN> pen;
-    HGDIOBJ oldPen;
-    if (strokeStyle() != NoStroke) {
-        pen = createPen(strokeColor(), strokeThickness(), strokeStyle());
-        oldPen = SelectObject(dc, pen.get());
-    } else
-        oldPen = SelectObject(dc, GetStockObject(NULL_PEN));
-
-    if (brush || pen)
-        Polygon(dc, winPoints.data(), npoints);
-
-    SelectObject(dc, oldPen);
-    SelectObject(dc, oldBrush);
-}
-
-void GraphicsContext::clipConvexPolygon(size_t numPoints, const FloatPoint* points, bool antialiased)
-{
-    if (paintingDisabled())
-        return;
-
-    if (numPoints <= 1)
-        return;
-    
-    // FIXME: IMPLEMENT!!
-}
-
-void GraphicsContext::fillRect(const FloatRect& rect, const Color& color, ColorSpace colorSpace)
-{
-    if (paintingDisabled() || !m_data->m_opacity)
-        return;
-
-    int alpha = color.alpha();
-    if (!alpha)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect intRect = enclosingIntRect(rect);
-    TransparentLayerDC transparentDC(m_data, m_data->mapRect(intRect), &intRect, alpha);
-
-    if (!transparentDC.hdc())
-        return;
-
-    auto hbrush = adoptGDIObject(::CreateSolidBrush(RGB(color.red(), color.green(), color.blue())));
-    FillRect(transparentDC.hdc(), &transparentDC.rect(), hbrush.get());
-}
-
-void GraphicsContext::clip(const FloatRect& rect)
-{
-    if (paintingDisabled())
-        return;
-
-    if (!m_data->m_dc)
-        return;
-
-    IntRect trRect = enclosingIntRect(m_data->mapRect(rect));
-
-    auto clipRgn = adoptGDIObject(::CreateRectRgn(0, 0, 0, 0));
-    if (GetClipRgn(m_data->m_dc, clipRgn.get()) > 0)
-        IntersectClipRect(m_data->m_dc, trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY());
-    else {
-        clipRgn = adoptGDIObject(::CreateRectRgn(trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY()));
-        SelectClipRgn(m_data->m_dc, clipRgn.get());
-    }
-}
-
-void GraphicsContext::clipOut(const FloatRect& rect)
-{
-    if (paintingDisabled())
-        return;
-
-    if (!m_data->m_dc)
-        return;
-
-    IntRect trRect = m_data->mapRect(rect);
-
-    ExcludeClipRect(m_data->m_dc, trRect.x(), trRect.y(), trRect.maxX(), trRect.maxY());
-}
-
-void GraphicsContext::drawFocusRing(const Path& path, int width, int offset, const Color& color)
-{
-    // FIXME: implement
-}
-
-void GraphicsContext::drawFocusRing(const Vector<IntRect>& rects, int width, int offset, const Color& color)
-{
-    if (!m_data->m_opacity || paintingDisabled())
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    int radius = (width - 1) / 2;
-    offset += radius;
-
-    unsigned rectCount = rects.size();
-    IntRect finalFocusRect;
-    for (unsigned i = 0; i < rectCount; i++) {
-        IntRect focusRect = rects[i];
-        focusRect.inflate(offset);
-        finalFocusRect.unite(focusRect);
-    }
-
-    IntRect intRect = finalFocusRect;
-    IntRect trRect = m_data->mapRect(finalFocusRect);
-    TransparentLayerDC transparentDC(m_data, trRect, &intRect);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    trRect.move(transparentDC.toShift());
-
-    RECT rect = trRect;
-    DrawFocusRect(dc, &rect);
-}
-
-FloatRect GraphicsContext::computeLineBoundsForText(const FloatPoint& origin, float width, bool printing)
-{
-    return FloatRect(origin, FloatSize(width, strokeThickness()));
-}
-
-void GraphicsContext::drawLineForText(const FloatPoint& origin, float width, bool printing, bool doubleUnderlines)
-{
-    if (paintingDisabled())
-        return;
-
-    StrokeStyle oldStyle = strokeStyle();
-    setStrokeStyle(SolidStroke);
-    drawLine(roundedIntPoint(origin), roundedIntPoint(origin + FloatSize(width, 0)));
-    if (doubleUnderlines)
-        drawLine(roundedIntPoint(origin + FloatSize(0, strokeThickness() * 2)), roundedIntPoint(origin + FloatSize(width, strokeThickness() * 2)));
-    setStrokeStyle(oldStyle);
-}
-
-void GraphicsContext::drawLinesForText(const FloatPoint& point, const DashArray& widths, bool printing, bool doubleUnderlines)
-{
-    for (size_t i = 0; i < widths.size(); i += 2)
-        drawLineForText(FloatPoint(point.x() + widths[i], point.y()), widths[i+1] - widths[i], printing, doubleUnderlines);
-}
-
-void GraphicsContext::updateDocumentMarkerResources()
-{
-    notImplemented();
-}
-
-void GraphicsContext::drawLineForDocumentMarker(const FloatPoint&, float width, DocumentMarkerLineStyle style)
-{
-    notImplemented();
-}
-
-void GraphicsContext::setPlatformFillColor(const Color& col, ColorSpace colorSpace)
-{
-    notImplemented();
-}
-
-void GraphicsContext::setPlatformStrokeColor(const Color& col, ColorSpace colorSpace)
-{
-    notImplemented();
-}
-
-void GraphicsContext::setPlatformStrokeThickness(float strokeThickness)
-{
-    notImplemented();
-}
-
-void GraphicsContext::setURLForRect(const URL& link, const IntRect& destRect)
-{
-    notImplemented();
-}
-
-void GraphicsContext::clearRect(const FloatRect& rect)
-{
-    if (paintingDisabled())
-        return;
-
-    if (m_data->hasAlpha()) {
-        IntRect trRect = enclosingIntRect(m_data->mapRect(rect));
-        m_data->m_bitmap->clearPixels(trRect);
-        return;
-    } 
-
-    fillRect(rect, Color(Color::white), ColorSpaceDeviceRGB);
-}
-
-void GraphicsContext::strokeRect(const FloatRect& rect, float width)
-{
-    if (!m_data->m_opacity || paintingDisabled() || strokeStyle() == NoStroke)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect intRect = enclosingIntRect(rect);
-    IntRect trRect = m_data->mapRect(intRect);
-    TransparentLayerDC transparentDC(m_data, trRect, &intRect);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    trRect.move(transparentDC.toShift());
-
-    auto pen = createPen(strokeColor(), strokeThickness(), strokeStyle());
-    HGDIOBJ oldPen = SelectObject(dc, pen.get());
-
-    int right = trRect.maxX() - 1;
-    int bottom = trRect.maxY() - 1;
-    const POINT intPoints[5] =
-    {
-        { trRect.x(), trRect.y() },
-        { right, trRect.y() },
-        { right, bottom },
-        { trRect.x(), bottom },
-        { trRect.x(), trRect.y() }
-    };
-
-    Polyline(dc, intPoints, 5);
-
-    SelectObject(dc, oldPen);
-}
-
-void GraphicsContext::beginPlatformTransparencyLayer(float opacity)
-{
-    m_data->save();
-    m_data->m_opacity *= opacity;
-}
-
-void GraphicsContext::endPlatformTransparencyLayer()
-{
-    m_data->restore();
-}
-
-bool GraphicsContext::supportsTransparencyLayers()
-{
-    return true;
-}
-
-void GraphicsContext::concatCTM(const AffineTransform& transform)
-{
-    m_data->concatCTM(transform);
-}
-
-void GraphicsContext::setCTM(const AffineTransform& transform)
-{
-    m_data->setCTM(transform);
-}
-
-AffineTransform& GraphicsContext::affineTransform()
-{
-    return m_data->m_transform;
-}
-
-const AffineTransform& GraphicsContext::affineTransform() const
-{
-    return m_data->m_transform;
-}
-
-void GraphicsContext::resetAffineTransform()
-{
-    m_data->m_transform.makeIdentity();
-}
-
-void GraphicsContext::translate(float x, float y)
-{
-    m_data->translate(x, y);
-}
-
-void GraphicsContext::rotate(float radians)
-{
-    m_data->rotate(radians);
-}
-
-void GraphicsContext::scale(const FloatSize& size)
-{
-    m_data->scale(size);
-}
-
-void GraphicsContext::setLineCap(LineCap lineCap)
-{
-    notImplemented();
-}
-
-void GraphicsContext::setLineJoin(LineJoin lineJoin)
-{
-    notImplemented();
-}
-
-void GraphicsContext::setMiterLimit(float miter)
-{
-    notImplemented();
-}
-
-void GraphicsContext::setAlpha(float alpha)
-{
-    m_data->m_opacity = alpha;
-}
-
-void GraphicsContext::setPlatformCompositeOperation(CompositeOperator op, BlendMode blendMode)
-{
-    notImplemented();
-}
-
-void GraphicsContext::clip(const Path& path, WindRule)
-{
-    notImplemented();
-}
-
-void GraphicsContext::canvasClip(const Path& path, WindRule fillRule)
-{
-    clip(path, fillRule);
-}
-
-void GraphicsContext::clipOut(const Path&)
-{
-    notImplemented();
-}
-
-static inline IntPoint rectCenterPoint(const RECT& rect)
-{
-    return IntPoint(rect.left + (rect.right - rect.left) / 2, rect.top + (rect.bottom - rect.top) / 2);
-}
-
-void GraphicsContext::fillRoundedRect(const FloatRoundedRect& rect, const Color& c, ColorSpace colorSpace)
-{
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    FloatSize shadowOffset;
-    float shadowBlur = 0;
-    Color shadowColor;
-    ColorSpace shadowColorSpace;
-        
-    getShadow(shadowOffset, shadowBlur, shadowColor, shadowColorSpace);
-    
-    const FloatRect& fillRect = rect.rect();
-    IntRect dstRect = fillRect;
-    
-    dstRect.move(stableRound(shadowOffset.width()), stableRound(shadowOffset.height()));
-    dstRect.inflate(stableRound(shadowBlur));
-    dstRect = m_data->mapRect(dstRect);
-  
-    FloatSize newTopLeft(m_data->mapSize(rect.radii().topLeft()));
-    FloatSize newTopRight(m_data->mapSize(rect.radii().topRight()));
-    FloatSize newBottomLeft(m_data->mapSize(rect.radii().bottomLeft()));
-    FloatSize newBottomRight(m_data->mapSize(rect.radii().bottomRight()));
-
-    TransparentLayerDC transparentDc(m_data, dstRect, &fillRect);
-    HDC dc = transparentDc.hdc();
-    if (!dc)
-        return;
-
-    dstRect.move(transparentDc.toShift());
-
-    RECT rectWin = dstRect;
-
-    auto brush = createBrush(shadowColor);
-    HGDIOBJ oldBrush = SelectObject(dc, brush.get());
-
-    SelectObject(dc, GetStockObject(NULL_PEN));
-
-    IntPoint centerPoint = rectCenterPoint(rectWin);
-    // Draw top left half
-    RECT clipRect(rectWin);
-    clipRect.right = centerPoint.x();
-    clipRect.bottom = centerPoint.y();
-
-    auto clipRgn = adoptGDIObject(::CreateRectRgn(0, 0, 0, 0));
-    bool needsNewClip = (GetClipRgn(dc, clipRgn.get()) <= 0);
-
-    drawRoundCorner(needsNewClip, clipRect, rectWin, dc, stableRound(newTopLeft.width() * 2), stableRound(newTopLeft.height() * 2));
-
-    // Draw top right
-    clipRect = rectWin;
-    clipRect.left = centerPoint.x();
-    clipRect.bottom = centerPoint.y();
-
-    drawRoundCorner(needsNewClip, clipRect, rectWin, dc, stableRound(newTopRight.width() * 2), stableRound(newTopRight.height() * 2));
-
-     // Draw bottom left
-    clipRect = rectWin;
-    clipRect.right = centerPoint.x();
-    clipRect.top = centerPoint.y();
-
-    drawRoundCorner(needsNewClip, clipRect, rectWin, dc, stableRound(newBottomLeft.width() * 2), stableRound(newBottomLeft.height() * 2));
-
-    // Draw bottom right
-    clipRect = rectWin;
-    clipRect.left = centerPoint.x();
-    clipRect.top = centerPoint.y();
-
-    drawRoundCorner(needsNewClip, clipRect, rectWin, dc, stableRound(newBottomRight.width() * 2), stableRound(newBottomRight.height() * 2));
-
-    SelectObject(dc, oldBrush);
-}
-
-void GraphicsContext::drawRoundCorner(bool needsNewClip, RECT clipRect, RECT rectWin, HDC dc, int width, int height)
-{
-    if (!dc)
-        return;
-
-    auto clipRgn = adoptGDIObject(::CreateRectRgn(0, 0, 0, 0));
-    if (needsNewClip) {
-        clipRgn = adoptGDIObject(::CreateRectRgn(clipRect.left, clipRect.top, clipRect.right, clipRect.bottom));
-        SelectClipRgn(dc, clipRgn.get());
-    } else
-        IntersectClipRect(dc, clipRect.left, clipRect.top, clipRect.right, clipRect.bottom);
-
-    ::RoundRect(dc, rectWin.left , rectWin.top , rectWin.right , rectWin.bottom , width, height);
-
-    SelectClipRgn(dc, needsNewClip ? 0 : clipRgn.get());
-}
-
-
-FloatRect GraphicsContext::roundToDevicePixels(const FloatRect& frect, RoundingMode)
-{
-    notImplemented();
-    return frect;
-}
-
-Color gradientAverageColor(const Gradient* gradient)
-{
-    const Vector<Gradient::ColorStop>& stops = gradient->getStops();
-    if (stops.isEmpty())
-        return Color();
-
-    const Gradient::ColorStop& stop = stops.first();
-    if (stops.size() == 1)
-        return Color(stop.red, stop.green, stop.blue, stop.alpha);
-
-    const Gradient::ColorStop& lastStop = stops.last();
-    return Color((stop.red + lastStop.red) * 0.5f
-        , (stop.green + lastStop.green) * 0.5f
-        , (stop.blue + lastStop.blue) * 0.5f
-        , (stop.alpha + lastStop.alpha) * 0.5f);
-}
-
-void GraphicsContext::fillPath(const Path& path)
-{
-    if (path.isNull())
-        return;
-
-    Color c = m_state.fillGradient
-        ? gradientAverageColor(m_state.fillGradient.get())
-        : fillColor();
-
-    if (!c.alpha() || !m_data->m_opacity)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    auto brush = createBrush(c);
-
-    if (m_data->m_opacity < 1.0f || m_data->hasAlpha()) {
-        IntRect trRect = enclosingIntRect(m_data->mapRect(path.boundingRect()));
-        trRect.inflate(1);
-        TransparentLayerDC transparentDC(m_data, trRect);
-        HDC dc = transparentDC.hdc();
-        if (!dc)
-            return;
-
-        AffineTransform tr = m_data->m_transform;
-        tr.translate(transparentDC.toShift().width(), transparentDC.toShift().height());
-
-        SelectObject(dc, GetStockObject(NULL_PEN));
-        HGDIOBJ oldBrush = SelectObject(dc, brush.get());
-        path.platformPath()->fillPath(dc, &tr);
-        SelectObject(dc, oldBrush);
-    } else {
-        SelectObject(m_data->m_dc, GetStockObject(NULL_PEN));
-        HGDIOBJ oldBrush = SelectObject(m_data->m_dc, brush.get());
-        path.platformPath()->fillPath(m_data->m_dc, &m_data->m_transform);
-        SelectObject(m_data->m_dc, oldBrush);
-    }
-}
-
-
-void GraphicsContext::strokePath(const Path& path)
-{
-    if (path.isNull() || !m_data->m_opacity)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    auto pen = createPen(strokeColor(), strokeThickness(), strokeStyle());
-
-    if (m_data->m_opacity < 1.0f || m_data->hasAlpha()) {
-        IntRect trRect = enclosingIntRect(m_data->mapRect(path.boundingRect()));
-        trRect.inflate(1);
-        TransparentLayerDC transparentDC(m_data, trRect);
-        HDC dc = transparentDC.hdc();
-        if (!dc)
-            return;
-
-        AffineTransform tr = m_data->m_transform;
-        tr.translate(transparentDC.toShift().width(), transparentDC.toShift().height());
-
-        SelectObject(dc, GetStockObject(NULL_BRUSH));
-        HGDIOBJ oldPen = SelectObject(dc, pen.get());
-        path.platformPath()->strokePath(dc, &tr);
-        SelectObject(dc, oldPen);
-    } else {
-        SelectObject(m_data->m_dc, GetStockObject(NULL_BRUSH));
-        HGDIOBJ oldPen = SelectObject(m_data->m_dc, pen.get());
-        path.platformPath()->strokePath(m_data->m_dc, &m_data->m_transform);
-        SelectObject(m_data->m_dc, oldPen);
-    }
-}
-
-void GraphicsContext::fillRect(const FloatRect& r, const Gradient* gradient)
-{
-    if (!m_data->m_opacity)
-        return;
-
-    const Vector<Gradient::ColorStop>& stops = gradient->getStops();
-    if (stops.isEmpty())
-        return;
-
-    size_t numStops = stops.size();
-    if (numStops == 1) {
-        const Gradient::ColorStop& stop = stops.first();
-        Color color(stop.red, stop.green, stop.blue, stop.alpha);
-        fillRect(r, color, ColorSpaceDeviceRGB);
-        return;
-    } 
-    
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect intRect = enclosingIntRect(r);
-    IntRect rect = m_data->mapRect(intRect);
-    TransparentLayerDC transparentDC(m_data, rect, &intRect, 255, true);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-
-    rect.move(transparentDC.toShift());
-    FloatPoint fp0 = m_data->mapPoint(gradient->p0());
-    FloatPoint fp1 = m_data->mapPoint(gradient->p1());
-    IntPoint p0(stableRound(fp0.x()), stableRound(fp0.y()));
-    IntPoint p1(stableRound(fp1.x()), stableRound(fp1.y()));
-    p0 += transparentDC.toShift();
-    p1 += transparentDC.toShift();
-
-    if (gradient->isRadial()) {
-        if (g_radialGradientFiller) {
-            // FIXME: don't support 2D scaling at this time
-            double scale = (m_data->m_transform.a() + m_data->m_transform.d()) * 0.5;
-            float r0 = gradient->startRadius() * scale;
-            float r1 = gradient->endRadius() * scale;
-            g_radialGradientFiller(dc, rect, p0, p1, r0, r1, gradient->getStops());
-            return;
-        }
-    } else if (g_linearGradientFiller) {
-        g_linearGradientFiller(dc, rect, p0, p1, gradient->getStops());
-        return;
-    }
-
-    // Simple 1D linear solution that assumes p0 is on the top or left side, and p1 is on the right or bottom side
-    size_t numRects = (numStops - 1);
-    Vector<TRIVERTEX, 20> tv;
-    tv.resize(numRects * 2);
-    Vector<GRADIENT_RECT, 10> mesh;
-    mesh.resize(numRects);
-    int x = rect.x();
-    int y = rect.y();
-    int width = rect.width();
-    int height = rect.height();
-    FloatSize d = gradient->p1() - gradient->p0();
-    bool vertical = fabs(d.height()) > fabs(d.width());
-    for (size_t i = 0; i < numStops; ++i) {
-        const Gradient::ColorStop& stop = stops[i];
-        int iTv = i ? 2 * i - 1 : 0;
-        tv[iTv].Red = stop.red * 0xFFFF;
-        tv[iTv].Green = stop.green * 0xFFFF;
-        tv[iTv].Blue = stop.blue * 0xFFFF;
-        tv[iTv].Alpha = stop.alpha * 0xFFFF;
-        if (i) {
-            tv[iTv].x = vertical ? x + width: x + width * stop.stop;
-            tv[iTv].y = vertical ? y + height * stop.stop : y + height;
-            mesh[i - 1].UpperLeft = iTv - 1;
-            mesh[i - 1].LowerRight = iTv;
-        } else {
-            tv[iTv].x = x;
-            tv[iTv].y = y;
-        }
-
-        if (i && i < numRects) {
-            tv[iTv + 1] = tv[iTv];
-            if (vertical)
-                tv[iTv + 1].x = x;
-            else
-                tv[iTv + 1].y = y;
-        }
-    }
-
-    GradientFill(dc, tv.data(), tv.size(), mesh.data(), mesh.size(), vertical ? GRADIENT_FILL_RECT_V : GRADIENT_FILL_RECT_H);
-}
-
-AffineTransform GraphicsContext::getCTM(IncludeDeviceScale) const
-{
-    if (paintingDisabled())
-        return AffineTransform();
-
-    return m_data->m_transform;
-}
-
-void GraphicsContext::fillRect(const FloatRect& rect)
-{
-    savePlatformState();
-
-    if (m_state.fillGradient)
-        fillRect(rect, m_state.fillGradient.get());
-    else
-        fillRect(rect, fillColor(), ColorSpaceDeviceRGB);
-
-    restorePlatformState();
-}
-
-void GraphicsContext::setPlatformShadow(const FloatSize&, float, const Color&, ColorSpace)
-{
-    notImplemented();
-}
-
-void GraphicsContext::clearPlatformShadow()
-{
-    notImplemented();
-}
-
-InterpolationQuality GraphicsContext::imageInterpolationQuality() const
-{
-    notImplemented();
-    return InterpolationDefault;
-}
-
-void GraphicsContext::setImageInterpolationQuality(InterpolationQuality)
-{
-    notImplemented();
-}
-
-static inline bool isCharVisible(UChar c)
-{
-    return c && c != zeroWidthSpace;
-}
-
-void GraphicsContext::drawText(const Font& font, const TextRun& run, const FloatPoint& point, int from, int to)
-{
-    if (paintingDisabled() || !fillColor().alpha() || !m_data->m_opacity)
-        return;
-
-    bool mustSupportAlpha = m_data->hasAlpha();
-
-    if (!mustSupportAlpha && fillColor().alpha() == 0xFF && m_data->m_opacity >= 1.0) {
-        font.drawText(this, run, point, from, to);
-        return;
-    }
-
-    float oldOpacity = m_data->m_opacity;
-    m_data->m_opacity *= fillColor().alpha() / 255.0;
-
-    FloatRect textRect = font.selectionRectForText(run, point, font.fontMetrics().height(), from, to);
-    textRect.setY(textRect.y() - font.fontMetrics().ascent());
-    IntRect trRect = enclosingIntRect(m_data->mapRect(textRect));
-    RECT bmpRect;
-    AlphaPaintType alphaPaintType = mustSupportAlpha ? AlphaPaintOther : AlphaPaintNone;
-    if (RefPtr<SharedBitmap> bmp = m_data->getTransparentLayerBitmap(trRect, alphaPaintType, bmpRect, true, mustSupportAlpha)) {
-        {
-            GraphicsContext gc(0);
-            gc.setBitmap(bmp);
-            gc.scale(FloatSize(m_data->m_transform.a(), m_data->m_transform.d()));
-            font.drawText(&gc, run, IntPoint(0, font.fontMetrics().ascent()), from, to);
-        }
-        unsigned key1;
-        HDC memDC = bmp->getDC(&key1);
-        if (memDC) {
-            m_data->paintBackTransparentLayerBitmap(memDC, bmp.get(), trRect, alphaPaintType, bmpRect);
-            bmp->releaseDC(memDC, key1);
-        }
-    }
-
-    m_data->m_opacity = oldOpacity;
-}
-
-void GraphicsContext::drawText(const SimpleFontData* fontData, const GlyphBuffer& glyphBuffer,
-                      int from, int numGlyphs, const FloatPoint& point)
-{
-    if (!m_data->m_opacity)
-        return;
-
-    for (;;) {
-        if (!numGlyphs)
-            return;
-        if (isCharVisible(*glyphBuffer.glyphs(from)))
-            break;
-        ++from;
-        --numGlyphs;
-    }
-
-    double scaleX = m_data->m_transform.a();
-    double scaleY = m_data->m_transform.d();
-
-    int height = fontData->platformData().size() * scaleY;
-    int width = fontData->avgCharWidth() * scaleX;
-
-    if (!height || !width)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    HFONT hFont = height > 1
-        ? fontData->platformData().getScaledFontHandle(height, scaleX == scaleY ? 0 : width)
-        : 0;
-
-    FloatPoint startPoint(point.x(), point.y() - fontData->fontMetrics().ascent());
-    FloatPoint trPoint = m_data->mapPoint(startPoint);
-    int y = stableRound(trPoint.y());
-
-    Color color = fillColor();
-    if (!color.alpha())
-        return;
-
-    COLORREF fontColor = RGB(color.red(), color.green(), color.blue());
-
-    if (!hFont) {
-        double offset = trPoint.x();
-        const GlyphBufferAdvance* advance = glyphBuffer.advances(from);
-        if (scaleX == 1.)
-            for (int i = 1; i < numGlyphs; ++i)
-                offset += (*advance++).width();
-        else
-            for (int i = 1; i < numGlyphs; ++i)
-                offset += (*advance++).width() * scaleX;
-
-        offset += width;
-
-        auto hPen = adoptGDIObject(::CreatePen(PS_DASH, 1, fontColor));
-        HGDIOBJ oldPen = SelectObject(m_data->m_dc, hPen.get());
-
-        MoveToEx(m_data->m_dc, stableRound(trPoint.x()), y, 0);
-        LineTo(m_data->m_dc, stableRound(offset), y);
-
-        SelectObject(m_data->m_dc, oldPen);
-        return;
-    }
-
-    FloatSize shadowOffset;
-    float shadowBlur = 0;
-    Color shadowColor;
-    ColorSpace shadowColorSpace;
-    bool hasShadow = textDrawingMode() == TextModeFill
-        && getShadow(shadowOffset, shadowBlur, shadowColor, shadowColorSpace)
-        && shadowColor.alpha();
-    COLORREF shadowRGBColor;
-    FloatPoint trShadowPoint;
-    if (hasShadow) {
-        shadowRGBColor = RGB(shadowColor.red(), shadowColor.green(), shadowColor.blue());
-        trShadowPoint = m_data->mapPoint(startPoint + shadowOffset);
-    }
-
-    HGDIOBJ hOldFont = SelectObject(m_data->m_dc, hFont);
-    COLORREF oldTextColor = GetTextColor(m_data->m_dc);
-    int oldTextAlign = GetTextAlign(m_data->m_dc);
-    SetTextAlign(m_data->m_dc, 0);
-
-    int oldBkMode = GetBkMode(m_data->m_dc);
-    SetBkMode(m_data->m_dc, TRANSPARENT);
-
-    if (numGlyphs > 1) {
-        double offset = trPoint.x();
-        Vector<int, 256> glyphSpace(numGlyphs);
-        Vector<UChar, 256> text(numGlyphs);
-        int* curSpace = glyphSpace.data();
-        UChar* curChar = text.data();
-        const UChar* srcChar = glyphBuffer.glyphs(from);
-        const UChar* const srcCharEnd = srcChar + numGlyphs;
-        *curChar++ = *srcChar++;
-        int firstOffset = stableRound(offset);
-        int lastOffset = firstOffset;
-        const GlyphBufferAdvance* advance = glyphBuffer.advances(from);
-        // FIXME: ExtTextOut() can flip over each word for RTL languages, even when TA_RTLREADING is off.
-        // (this can be GDI bug or font driver bug?)
-        // We are not clear how it processes characters and handles specified spaces. On the other side,
-        // our glyph buffer is already in the correct order for rendering. So, the solution is that we
-        // call ExtTextOut() for each single character when the text contains any RTL character.
-        // This solution is not perfect as it is slower than calling ExtTextOut() one time for all characters.
-        // Drawing characters one by one may be too slow.
-        bool drawOneByOne = false;
-        if (scaleX == 1.) {
-            for (; srcChar < srcCharEnd; ++srcChar) {
-                offset += (*advance++).width();
-                int offsetInt = stableRound(offset);
-                if (isCharVisible(*srcChar)) {
-                    if (!drawOneByOne && u_charDirection(*srcChar) == U_RIGHT_TO_LEFT)
-                        drawOneByOne = true;
-                    *curChar++ = *srcChar;
-                    *curSpace++ = offsetInt - lastOffset;
-                    lastOffset = offsetInt;
-                }
-            }
-        } else {
-            for (; srcChar < srcCharEnd; ++srcChar) {
-                offset += (*advance++).width() * scaleX;
-                int offsetInt = stableRound(offset);
-                if (isCharVisible(*srcChar)) {
-                    if (!drawOneByOne && u_charDirection(*srcChar) == U_RIGHT_TO_LEFT)
-                        drawOneByOne = true;
-                    *curChar++ = *srcChar;
-                    *curSpace++ = offsetInt - lastOffset;
-                    lastOffset = offsetInt;
-                }
-            }
-        }
-        numGlyphs = curChar - text.data();
-        if (hasShadow) {
-            SetTextColor(m_data->m_dc, shadowRGBColor);
-            if (drawOneByOne) {
-                int xShadow = firstOffset + stableRound(trShadowPoint.x() - trPoint.x());
-                int yShadow = stableRound(trShadowPoint.y());
-                for (int i = 0; i < numGlyphs; ++i) {
-                    ExtTextOut(m_data->m_dc, xShadow, yShadow, 0, NULL, text.data() + i, 1, 0);
-                    xShadow += glyphSpace[i];
-                }
-            } else
-                ExtTextOut(m_data->m_dc, firstOffset + stableRound(trShadowPoint.x() - trPoint.x()), stableRound(trShadowPoint.y()), 0, NULL, text.data(), numGlyphs, glyphSpace.data());
-        }
-        SetTextColor(m_data->m_dc, fontColor);
-        if (drawOneByOne) {
-            int x = firstOffset;
-            for (int i = 0; i < numGlyphs; ++i) {
-                ExtTextOut(m_data->m_dc, x, y, 0, NULL, text.data() + i, 1, 0);
-                x += glyphSpace[i];
-            }
-        } else
-            ExtTextOut(m_data->m_dc, firstOffset, y, 0, NULL, text.data(), numGlyphs, glyphSpace.data());
-    } else {
-        UChar c = *glyphBuffer.glyphs(from);
-        if (hasShadow) {
-            SetTextColor(m_data->m_dc, shadowRGBColor);
-            ExtTextOut(m_data->m_dc, stableRound(trShadowPoint.x()), stableRound(trShadowPoint.y()), 0, NULL, &c, 1, 0);
-        }
-        SetTextColor(m_data->m_dc, fontColor);
-        ExtTextOut(m_data->m_dc, stableRound(trPoint.x()), y, 0, NULL, &c, 1, 0);
-    }
-
-    SetTextAlign(m_data->m_dc, oldTextAlign);
-    SetTextColor(m_data->m_dc, oldTextColor);
-    SetBkMode(m_data->m_dc, oldBkMode);
-    SelectObject(m_data->m_dc, hOldFont);
-}
-
-void GraphicsContext::drawFrameControl(const IntRect& rect, unsigned type, unsigned state)
-{
-    if (!m_data->m_opacity)
-        return;
-
-    const int boxWidthBest = 8;
-    const int boxHeightBest = 8;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect trRect = m_data->mapRect(rect);
-    TransparentLayerDC transparentDC(m_data, trRect, &rect, 255, true);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    trRect.move(transparentDC.toShift());
-
-    RECT rectWin = trRect;
-
-    if ((rectWin.right - rectWin.left) < boxWidthBest) {
-        RefPtr<SharedBitmap> bmp = SharedBitmap::create(IntSize(boxWidthBest, boxHeightBest), BitmapInfo::BitCount16, true);
-        SharedBitmap::DCHolder memDC(bmp.get());
-        if (memDC.get()) {
-            RECT tempRect = {0, 0, boxWidthBest, boxHeightBest};
-            DrawFrameControl(memDC.get(), &tempRect, type, state);
-
-            ::StretchBlt(dc, rectWin.left, rectWin.top, rectWin.right - rectWin.left, rectWin.bottom - rectWin.top, memDC.get(), 0, 0, boxWidthBest, boxHeightBest, SRCCOPY);
-            return;
-        }
-    }
-
-    DrawFrameControl(dc, &rectWin, type, state);
-}
-
-void GraphicsContext::drawFocusRect(const IntRect& rect)
-{
-    if (!m_data->m_opacity)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect trRect = m_data->mapRect(rect);
-    TransparentLayerDC transparentDC(m_data, trRect, &rect);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    trRect.move(transparentDC.toShift());
-
-    RECT rectWin = trRect;
-    DrawFocusRect(dc, &rectWin);
-}
-
-void GraphicsContext::paintTextField(const IntRect& rect, unsigned state)
-{
-    if (!m_data->m_opacity)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect trRect = m_data->mapRect(rect);
-    TransparentLayerDC transparentDC(m_data, trRect, &rect);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    trRect.move(transparentDC.toShift());
-
-    RECT rectWin = trRect;
-    DrawEdge(dc, &rectWin, EDGE_ETCHED, BF_RECT | BF_ADJUST);
-    FillRect(dc, &rectWin, reinterpret_cast<HBRUSH>(((state & DFCS_INACTIVE) ? COLOR_BTNFACE : COLOR_WINDOW) + 1));
-}
-
-void GraphicsContext::drawBitmap(SharedBitmap* bmp, const IntRect& dstRectIn, const IntRect& srcRect, ColorSpace styleColorSpace, CompositeOperator compositeOp, BlendMode blendMode)
-{
-    if (!m_data->m_opacity)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect dstRect = m_data->mapRect(dstRectIn);
-    TransparentLayerDC transparentDC(m_data, dstRect, &dstRectIn, 255, true);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    dstRect.move(transparentDC.toShift());
-
-    bmp->draw(dc, dstRect, srcRect, compositeOp, blendMode);
-
-    if (bmp->is16bit())
-        transparentDC.fillAlphaChannel();
-}
-
-void GraphicsContext::drawBitmapPattern(SharedBitmap* bmp, const FloatRect& tileRectIn, const AffineTransform& patternTransform,
-                const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRectIn, const IntSize& origSourceSize)
-{
-    if (!m_data->m_opacity)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect intDstRect = enclosingIntRect(destRectIn);
-    IntRect trRect = m_data->mapRect(intDstRect);
-    TransparentLayerDC transparentDC(m_data, trRect, &intDstRect, 255, true);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    trRect.move(transparentDC.toShift());
-    FloatRect movedDstRect = m_data->m_transform.inverse().mapRect(FloatRect(trRect));
-    FloatSize moved(movedDstRect.location() - destRectIn.location());
-    AffineTransform transform = m_data->m_transform;
-    transform.translate(moved.width(), moved.height());
-
-    bmp->drawPattern(dc, transform, tileRectIn, patternTransform, phase, styleColorSpace, op, destRectIn, origSourceSize);
-
-    if (!bmp->hasAlpha())
-        transparentDC.fillAlphaChannel();
-}
-
-void GraphicsContext::drawIcon(HICON icon, const IntRect& dstRectIn, UINT flags)
-{
-    if (!m_data->m_opacity)
-        return;
-
-    ScopeDCProvider dcProvider(m_data);
-    if (!m_data->m_dc)
-        return;
-
-    IntRect dstRect = m_data->mapRect(dstRectIn);
-    TransparentLayerDC transparentDC(m_data, dstRect, &dstRectIn, 255, true);
-    HDC dc = transparentDC.hdc();
-    if (!dc)
-        return;
-    dstRect.move(transparentDC.toShift());
-
-    DrawIconEx(dc, dstRect.x(), dstRect.y(), icon, dstRect.width(), dstRect.height(), 0, NULL, flags);
-}
-
-void GraphicsContext::setPlatformShouldAntialias(bool)
-{
-    notImplemented();
-}
-
-void GraphicsContext::setLineDash(const DashArray&, float)
-{
-    notImplemented();
-}
-
-void GraphicsContext::clipPath(const Path&, WindRule)
-{
-    notImplemented();
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/ImageBufferDataWince.h b/Source/WebCore/platform/graphics/wince/ImageBufferDataWince.h
deleted file mode 100644 (file)
index dd46d38..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2009 Torch Mobile, Inc. All rights reserved.
- *
- *  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 "SharedBitmap.h"
-
-namespace WebCore {
-
-class IntSize;
-
-class ImageBufferData {
-public:
-    ImageBufferData(const IntSize&);
-    RefPtr<SharedBitmap> m_bitmap;
-};
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/ImageBufferWinCE.cpp b/Source/WebCore/platform/graphics/wince/ImageBufferWinCE.cpp
deleted file mode 100644 (file)
index 2cc23f8..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Copyright (C) 2009 Torch Mobile, Inc. All rights reserved.
- * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved.
- *
- *  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 "ImageBuffer.h"
-
-#include "GraphicsContext.h"
-#include "Image.h"
-#include "ImageData.h"
-#include "NotImplemented.h"
-#include "SharedBitmap.h"
-
-namespace WebCore {
-
-class BufferedImage: public Image {
-
-public:
-    BufferedImage(const ImageBufferData* data)
-        : m_data(data)
-    {
-    }
-
-    virtual bool currentFrameKnownToBeOpaque() { return !m_data->m_bitmap->hasAlpha() ; }
-    virtual IntSize size() const { return IntSize(m_data->m_bitmap->width(), m_data->m_bitmap->height()); }
-    virtual void destroyDecodedData(bool destroyAll = true) {}
-    virtual unsigned decodedSize() const { return 0; }
-    virtual void draw(GraphicsContext*, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator, BlendMode, ImageOrientationDescription);
-    virtual void drawPattern(GraphicsContext*, const FloatRect& srcRect, const AffineTransform& patternTransform,
-                             const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect& destRect);
-
-    const ImageBufferData* m_data;
-};
-
-void BufferedImage::draw(GraphicsContext* ctxt, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator compositeOp, BlendMode blendMode, ImageOrientationDescription)
-{
-    IntRect intDstRect = enclosingIntRect(dstRect);
-    IntRect intSrcRect(srcRect);
-    m_data->m_bitmap->draw(ctxt, intDstRect, intSrcRect, styleColorSpace, compositeOp, blendMode);
-}
-
-void BufferedImage::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRectIn, const AffineTransform& patternTransform,
-    const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRect, BlendMode)
-{
-    m_data->m_bitmap->drawPattern(ctxt, tileRectIn, patternTransform, phase, styleColorSpace, op, destRect, size());
-}
-
-ImageBufferData::ImageBufferData(const IntSize& size)
-    : m_bitmap(SharedBitmap::create(size, BitmapInfo::BitCount32, false))
-{
-    // http://www.w3.org/TR/2009/WD-html5-20090212/the-canvas-element.html#canvaspixelarray
-    // "When the canvas is initialized it must be set to fully transparent black."
-    m_bitmap->resetPixels(true);
-    m_bitmap->setHasAlpha(true);
-}
-
-ImageBuffer::ImageBuffer(const IntSize& size, float resolutionScale, ColorSpace colorSpace, RenderingMode, bool& success)
-    : m_data(size)
-    , m_size(size)
-    , m_logicalSize(size)
-{
-    // FIXME: Respect resoutionScale to support high-DPI canvas.
-    UNUSED_PARAM(resolutionScale);
-    // FIXME: colorSpace is not used
-    UNUSED_PARAM(colorSpace);
-
-    m_context = adoptPtr(new GraphicsContext(0));
-    m_context->setBitmap(m_data.m_bitmap);
-    success = true;
-}
-
-ImageBuffer::~ImageBuffer()
-{
-}
-
-GraphicsContext* ImageBuffer::context() const
-{
-    return m_context.get();
-}
-
-PassRefPtr<Image> ImageBuffer::copyImage(BackingStoreCopy copyBehavior, ScaleBehavior) const
-{
-    ASSERT(copyBehavior == CopyBackingStore);
-    return adoptRef(new BufferedImage(&m_data));
-}
-
-BackingStoreCopy ImageBuffer::fastCopyImageMode()
-{
-    return CopyBackingStore;
-}
-
-void ImageBuffer::clip(GraphicsContext*, const FloatRect&) const
-{
-    notImplemented();
-}
-
-void ImageBuffer::draw(GraphicsContext* context, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect,
-                       CompositeOperator op, BlendMode blendMode, bool useLowQualityScale)
-{
-    RefPtr<Image> imageCopy = copyImage(CopyBackingStore);
-    context->drawImage(imageCopy.get(), styleColorSpace, destRect, srcRect, op, blendMode, ImageOrientationDescription(), useLowQualityScale);
-}
-
-void ImageBuffer::drawPattern(GraphicsContext* context, const FloatRect& srcRect, const AffineTransform& patternTransform,
-                              const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRect)
-{
-    RefPtr<Image> imageCopy = copyImage(CopyBackingStore);
-    imageCopy->drawPattern(context, srcRect, patternTransform, phase, styleColorSpace, op, destRect);
-}
-
-template <bool premultiplied>
-static PassRefPtr<Uint8ClampedArray> getImageData(const IntRect& rect, const SharedBitmap* bitmap)
-{
-    RefPtr<Uint8ClampedArray> imageData = Uint8ClampedArray::createUninitialized(rect.width() * rect.height() * 4);
-
-    const unsigned char* src = static_cast<const unsigned char*>(bitmap->bytes());
-    if (!src)
-        return imageData.release();
-
-    IntRect sourceRect(0, 0, bitmap->width(), bitmap->height());
-    sourceRect.intersect(rect);
-    if (sourceRect.isEmpty())
-        return imageData.release();
-
-    unsigned char* dst = imageData->data();
-    imageData->zeroFill();
-    src += (sourceRect.y() * bitmap->width() + sourceRect.x()) * 4;
-    dst += ((sourceRect.y() - rect.y()) * rect.width() + sourceRect.x() - rect.x()) * 4;
-    int bytesToCopy = sourceRect.width() * 4;
-    int srcSkip = (bitmap->width() - sourceRect.width()) * 4;
-    int dstSkip = (rect.width() - sourceRect.width()) * 4;
-    const unsigned char* dstEnd = dst + sourceRect.height() * rect.width() * 4;
-    while (dst < dstEnd) {
-        const unsigned char* dstRowEnd = dst + bytesToCopy;
-        while (dst < dstRowEnd) {
-            // Convert ARGB little endian to RGBA big endian
-            int blue = *src++;
-            int green = *src++;
-            int red = *src++;
-            int alpha = *src++;
-            if (premultiplied) {
-                *dst++ = static_cast<unsigned char>((red * alpha + 254) / 255);
-                *dst++ = static_cast<unsigned char>((green * alpha + 254) / 255);
-                *dst++ = static_cast<unsigned char>((blue * alpha + 254) / 255);
-                *dst++ = static_cast<unsigned char>(alpha);
-            } else {
-                *dst++ = static_cast<unsigned char>(red);
-                *dst++ = static_cast<unsigned char>(green);
-                *dst++ = static_cast<unsigned char>(blue);
-                *dst++ = static_cast<unsigned char>(alpha);
-                ++src;
-            }
-        }
-        src += srcSkip;
-        dst += dstSkip;
-    }
-
-    return imageData.release();
-}
-
-PassRefPtr<Uint8ClampedArray> ImageBuffer::getUnmultipliedImageData(const IntRect& rect, CoordinateSystem) const
-{
-    return getImageData<false>(rect, m_data.m_bitmap.get());
-}
-
-PassRefPtr<Uint8ClampedArray> ImageBuffer::getPremultipliedImageData(const IntRect& rect, CoordinateSystem) const
-{
-    return getImageData<true>(rect, m_data.m_bitmap.get());
-}
-
-void ImageBuffer::putByteArray(Multiply multiplied, Uint8ClampedArray* source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint, CoordinateSystem)
-{
-    SharedBitmap* bitmap = m_data.m_bitmap.get();
-    unsigned char* dst = (unsigned char*)bitmap->bytes();
-    if (!dst)
-        return;
-
-    IntRect destRect(destPoint, sourceRect.size());
-    destRect.intersect(IntRect(0, 0, bitmap->width(), bitmap->height()));
-
-    if (destRect.isEmpty())
-        return;
-
-    const unsigned char* src = source->data();
-    dst += (destRect.y() * bitmap->width() + destRect.x()) * 4;
-    src += (sourceRect.y() * sourceSize.width() + sourceRect.x()) * 4;
-    int bytesToCopy = destRect.width() * 4;
-    int dstSkip = (bitmap->width() - destRect.width()) * 4;
-    int srcSkip = (sourceSize.width() - destRect.width()) * 4;
-    const unsigned char* dstEnd = dst + destRect.height() * bitmap->width() * 4;
-    while (dst < dstEnd) {
-        const unsigned char* dstRowEnd = dst + bytesToCopy;
-        while (dst < dstRowEnd) {
-            // Convert RGBA big endian to ARGB little endian
-            int red = *src++;
-            int green = *src++;
-            int blue = *src++;
-            int alpha = *src++;
-            if (multiplied == Premultiplied) {
-                *dst++ = static_cast<unsigned char>(blue * 255 / alpha);
-                *dst++ = static_cast<unsigned char>(green * 255 / alpha);
-                *dst++ = static_cast<unsigned char>(red * 255 / alpha);
-                *dst++ = static_cast<unsigned char>(alpha);
-            } else {
-                *dst++ = static_cast<unsigned char>(blue);
-                *dst++ = static_cast<unsigned char>(green);
-                *dst++ = static_cast<unsigned char>(red);
-                *dst++ = static_cast<unsigned char>(alpha);
-            }
-        }
-        src += srcSkip;
-        dst += dstSkip;
-    }
-}
-
-void ImageBuffer::platformTransformColorSpace(const Vector<int>& lookUpTable)
-{
-    UNUSED_PARAM(lookUpTable);
-    notImplemented();
-}
-
-String ImageBuffer::toDataURL(const String& mimeType, const double*, CoordinateSystem) const
-{
-    if (!m_data.m_bitmap->bytes())
-        return "data:,";
-
-    notImplemented();
-    return String();
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/ImageWinCE.cpp b/Source/WebCore/platform/graphics/wince/ImageWinCE.cpp
deleted file mode 100644 (file)
index bc0a963..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
- * Copyright (C) 2007-2009 Torch Mobile Inc.
- * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "Image.h"
-
-#include "BitmapImage.h"
-#include "GraphicsContext.h"
-#include "ImageDecoder.h"
-#include "NotImplemented.h"
-#include "SharedBuffer.h"
-#include "TransformationMatrix.h"
-#include "WinceGraphicsExtras.h"
-#include <wtf/text/WTFString.h>
-#include <wtf/win/GDIObject.h>
-
-namespace WebCore {
-
-PassNativeImagePtr ImageFrame::asNewNativeImage() const
-{
-    return SharedBitmap::create(m_backingStore, m_size, hasAlpha());
-}
-
-bool FrameData::clear(bool clearMetaData)
-{
-    if (clearMetaData)
-        m_haveMetadata = false;
-
-    if (m_frame) {
-        m_frame = 0;
-        return true;
-    }
-
-    return false;
-}
-
-bool BitmapImage::getHBITMAPOfSize(HBITMAP bmp, const IntSize* size)
-{
-    if (!bmp)
-        return false;
-
-    BITMAP bmpInfo;
-    GetObject(bmp, sizeof(BITMAP), &bmpInfo);
-
-    ASSERT(bmpInfo.bmBitsPixel == 32);
-    int bufferSize = bmpInfo.bmWidthBytes * bmpInfo.bmHeight;
-
-    auto hdc = adoptGDIObject(::CreateCompatibleDC(0));
-    HGDIOBJ hOldBmp = SelectObject(hdc.get(), bmp);
-
-    {
-        GraphicsContext gc(hdc.get());
-
-        IntSize imageSize = BitmapImage::size();
-        if (size)
-            drawFrameMatchingSourceSize(&gc, FloatRect(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight), *size, ColorSpaceDeviceRGB, CompositeCopy);
-        else
-            draw(&gc, FloatRect(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight), FloatRect(0, 0, imageSize.width(), imageSize.height()), ColorSpaceDeviceRGB, CompositeCopy, BlendModeNormal, ImageOrientationDescription());
-    }
-
-    SelectObject(hdc.get(), hOldBmp);
-
-    return true;
-}
-
-void BitmapImage::drawFrameMatchingSourceSize(GraphicsContext* ctxt, const FloatRect& dstRect, const IntSize& srcSize, ColorSpace styleColorSpace, CompositeOperator compositeOp)
-{
-    int frames = frameCount();
-    for (int i = 0; i < frames; ++i) {
-        RefPtr<SharedBitmap> bmp = frameAtIndex(i);
-        if (!bmp || bmp->height() != static_cast<unsigned>(srcSize.height()) || bmp->width() != static_cast<unsigned>(srcSize.width()))
-            continue;
-
-        size_t currentFrame = m_currentFrame;
-        m_currentFrame = i;
-        draw(ctxt, dstRect, FloatRect(0, 0, srcSize.width(), srcSize.height()), styleColorSpace, compositeOp, BlendModeNormal, ImageOrientationDescription());
-        m_currentFrame = currentFrame;
-        return;
-    }
-
-    // No image of the correct size was found, fallback to drawing the current frame
-    IntSize imageSize = BitmapImage::size();
-    draw(ctxt, dstRect, FloatRect(0, 0, imageSize.width(), imageSize.height()), styleColorSpace, compositeOp, BlendModeNormal, ImageOrientationDescription());
-}
-
-void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& dstRect, const FloatRect& srcRectIn, ColorSpace styleColorSpace, CompositeOperator compositeOp, BlendMode blendMode, ImageOrientationDescription)
-{
-    if (!m_source.initialized())
-        return;
-
-    if (mayFillWithSolidColor())
-        fillWithSolidColor(ctxt, dstRect, solidColor(), styleColorSpace, compositeOp);
-    else {
-        IntRect intSrcRect(srcRectIn);
-        RefPtr<SharedBitmap> bmp = frameAtIndex(m_currentFrame);
-        if (bmp) {
-            if (bmp->width() != m_source.size().width()) {
-                double scaleFactor = static_cast<double>(bmp->width()) / m_source.size().width();
-
-                intSrcRect.setX(stableRound(srcRectIn.x() * scaleFactor));
-                intSrcRect.setWidth(stableRound(srcRectIn.width() * scaleFactor));
-                intSrcRect.setY(stableRound(srcRectIn.y() * scaleFactor));
-                intSrcRect.setHeight(stableRound(srcRectIn.height() * scaleFactor));
-            }
-            bmp->draw(ctxt, enclosingIntRect(dstRect), intSrcRect, styleColorSpace, compositeOp, blendMode);
-        }
-    }
-
-    startAnimation();
-}
-
-void Image::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRect, const AffineTransform& patternTransform,
-    const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRect, BlendMode blendMode)
-{
-    notImplemented();
-}
-
-void BitmapImage::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRectIn, const AffineTransform& patternTransform,
-                        const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRect)
-{
-    RefPtr<SharedBitmap> bmp = nativeImageForCurrentFrame();
-    if (!bmp)
-        return;
-
-    bmp->drawPattern(ctxt, tileRectIn, patternTransform, phase, styleColorSpace, op, destRect, m_source.size());
-}
-
-void BitmapImage::determineMinimumSubsamplingLevel() const
-{
-    m_minimumSubsamplingLevel = 0;
-}
-
-void BitmapImage::checkForSolidColor()
-{
-    if (m_checkedForSolidColor)
-        return;
-
-    if (frameCount() != 1) {
-        m_isSolidColor = false;
-        m_checkedForSolidColor = true;
-        return;
-    }
-
-    RefPtr<SharedBitmap> bmp = frameAtIndex(0);
-    if (!bmp || !bmp->validHeight()) {
-        m_isSolidColor = false;
-        return;
-    }
-
-    if (bmp->width() != 1 || bmp->validHeight() != 1) {
-        m_isSolidColor = false;
-        m_checkedForSolidColor = true;
-        return;
-    }
-
-    m_isSolidColor = true;
-
-    if (bmp->is16bit()) {
-        unsigned short c = ((unsigned short *)bmp->bytes())[0];
-        int r = (c >> 7) & 0xF8;
-        int g = (c >> 2) & 0xF8;
-        int b = (c << 3) & 0xF8;
-        if (bmp->usesTransparentColor() && bmp->transparentColor() == RGB(r, g, b))
-            m_solidColor = Color(r, g, b, 0);
-        else
-            m_solidColor = Color(r, g, b);
-    } else {
-        unsigned c = ((unsigned *)bmp->bytes())[0];
-        m_solidColor = Color(c);
-    }
-
-    if (bmp->validHeight() == bmp->height())
-        m_checkedForSolidColor = true;
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/MediaPlayerPrivateWinCE.h b/Source/WebCore/platform/graphics/wince/MediaPlayerPrivateWinCE.h
deleted file mode 100644 (file)
index b8c2523..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2009 Torch Mobile Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#ifndef MediaPlayerPrivateWinCE_h
-#define MediaPlayerPrivateWinCE_h
-
-#if ENABLE(VIDEO)
-
-#include <wtf/Forward.h>
-#include "MediaPlayerPrivate.h"
-#include "Timer.h"
-#include <wtf/OwnPtr.h>
-
-namespace WebCore {
-
-    class GraphicsContext;
-    class IntSize;
-    class IntRect;
-
-    class MediaPlayerPrivate : public MediaPlayerPrivateInterface {
-    public:
-        static void registerMediaEngine(MediaEngineRegistrar);
-
-        ~MediaPlayerPrivate();
-
-        IntSize naturalSize() const;
-        bool hasVideo() const;
-
-        void load(const String& url);
-        void cancelLoad();
-
-        void play();
-        void pause();
-
-        bool paused() const;
-        bool seeking() const;
-
-        float duration() const;
-        float currentTime() const;
-        void seek(float time);
-
-        void setRate(float);
-        void setVolume(float);
-
-        MediaPlayer::NetworkState networkState() const { return m_networkState; }
-        MediaPlayer::ReadyState readyState() const { return m_readyState; }
-
-        std::unique_ptr<PlatformTimeRanges> buffered() const;
-        float maxTimeSeekable() const;
-        // FIXME: bytesLoaded() should be replaced with didLoadingProgress() (by somebody who can find the implementation of this class).
-        unsigned bytesLoaded() const;
-        unsigned totalBytes() const;
-
-        void setVisible(bool);
-        void setSize(const IntSize&);
-
-        void loadStateChanged();
-        void didEnd();
-
-        void paint(GraphicsContext*, const IntRect&);
-
-    private:
-        MediaPlayerPrivate(MediaPlayer*);
-
-        void updateStates();
-        void doSeek();
-        void cancelSeek();
-        void seekTimerFired(Timer<MediaPlayerPrivate>*);
-        float maxTimeLoaded() const;
-        void sawUnsupportedTracks();
-
-        // engine support
-        static PassOwnPtr<MediaPlayerPrivateInterface> create(MediaPlayer*);
-        static void getSupportedTypes(HashSet<String>& types);
-        static MediaPlayer::SupportsType supportsType(const MediaEngineSupportParameters&);
-        static bool isAvailable();
-
-        virtual String engineDescription() const { return "WinCE"; }
-
-        MediaPlayer* m_player;
-        float m_seekTo;
-        float m_endTime;
-        Timer<MediaPlayerPrivate> m_seekTimer;
-        MediaPlayer::NetworkState m_networkState;
-        MediaPlayer::ReadyState m_readyState;
-        unsigned m_enabledTrackCount;
-        unsigned m_totalTrackCount;
-        bool m_hasUnsupportedTracks;
-        bool m_startedPlaying;
-        bool m_isStreaming;
-    };
-
-}
-
-#endif // ENABLE(VIDEO)
-
-#endif // MediaPlayerPrivateWinCE_h
diff --git a/Source/WebCore/platform/graphics/wince/MediaPlayerProxy.cpp b/Source/WebCore/platform/graphics/wince/MediaPlayerProxy.cpp
deleted file mode 100644 (file)
index b8d1040..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2009 Torch Mobile, Inc. All rights reserved.
- *
- *  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.
- */
-
-#if ENABLE(VIDEO)
-
-#include "config.h"
-#include "MediaPlayerProxy.h"
-
-#include "BridgeJSC.h"
-#include "DocumentLoader.h"
-#include "HTMLPlugInElement.h"
-#include "HTMLVideoElement.h"
-#include "JSDOMBinding.h"
-#include "JSPluginElementFunctions.h"
-#include "MediaPlayer.h"
-#include "Node.h"
-#include "PluginView.h"
-#include "RenderPartObject.h"
-#include "RenderWidget.h"
-#include "Widget.h"
-#include "c_class.h"
-#include "c_instance.h"
-#include "c_runtime.h"
-#include "npruntime_impl.h"
-#include <runtime/Identifier.h>
-#include <wtf/text/WTFString.h>
-
-using namespace JSC;
-
-namespace WebCore {
-
-using namespace Bindings;
-using namespace HTMLNames;
-
-WebMediaPlayerProxy::WebMediaPlayerProxy(MediaPlayer* player)
-    : m_mediaPlayer(player)
-    , m_init(false)
-    , m_hasSentResponseToPlugin(false)
-{
-    if (!m_init)
-        initEngine();
-}
-
-WebMediaPlayerProxy::~WebMediaPlayerProxy()
-{
-    m_instance.release();
-}
-
-ScriptInstance WebMediaPlayerProxy::pluginInstance()
-{
-    if (!m_instance) {
-        RenderObject* r = element()->renderer();
-        if (!r || !r->isWidget())
-            return 0;
-
-        Frame* frame = element()->document().frame();
-
-        RenderWidget* renderWidget = static_cast<RenderWidget*>(element()->renderer());
-        if (renderWidget && renderWidget->widget())
-            m_instance = frame->script().createScriptInstanceForWidget(renderWidget->widget());
-    }
-
-    return m_instance;
-}
-
-void WebMediaPlayerProxy::load(const String& url)
-{
-    if (!m_init)
-        initEngine();
-    if (m_init)
-        invokeMethod("play");
-}
-
-void WebMediaPlayerProxy::initEngine()
-{
-    HTMLMediaElement* element = toHTMLMediaElement(m_mediaPlayer->mediaPlayerClient());
-    String url = element->initialURL();
-
-    if (url.isEmpty())
-        return;
-
-    Frame* frame = element->document().frame();
-    Vector<String> paramNames;
-    Vector<String> paramValues;
-    String serviceType;
-
-    // add all attributes set on the embed object
-    if (element->hasAttributes()) {
-        for (unsigned i = 0; i < element->attributeCount(); ++i) {
-            Attribute* it = element->attributeItem(i);
-            paramNames.append(it->name().localName().string());
-            paramValues.append(it->value().string());
-        }
-    }
-    serviceType = "application/x-mplayer2";
-    frame->loader()->subframeLoader()->requestObject(static_cast<RenderPartObject*>(element->renderer()), url, nullAtom, serviceType, paramNames, paramValues);
-    m_init = true;
-
-}
-
-HTMLMediaElement* WebMediaPlayerProxy::element()
-{
-    return toHTMLMediaElement(m_mediaPlayer->mediaPlayerClient());
-
-}
-
-void WebMediaPlayerProxy::invokeMethod(const String& methodName)
-{
-    Frame* frame = element()->document().frame();
-    RootObject* root = frame->script().bindingRootObject();
-    if (!root)
-        return;
-    ExecState *exec = root->globalObject()->globalExec();
-    Instance* instance = pluginInstance().get();
-    if (!instance)
-        return;
-
-    instance->begin();
-    Class *aClass = instance->getClass();
-    Identifier iden(exec, methodName);
-    MethodList methodList = aClass->methodsNamed(iden, instance);
-    ArgList args;
-    instance->invokeMethod(exec, methodList , args);
-    instance->end();
-}
-
-}
-
-#endif
diff --git a/Source/WebCore/platform/graphics/wince/MediaPlayerProxy.h b/Source/WebCore/platform/graphics/wince/MediaPlayerProxy.h
deleted file mode 100644 (file)
index 1495a26..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2009 Torch Mobile, Inc. All rights reserved.
- *
- *  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 MediaPlayerProxy_h
-#define MediaPlayerProxy_h
-
-#if ENABLE(VIDEO)
-
-#include <wtf/Forward.h>
-
-namespace WebCore {
-
-    class IntRect;
-    class IntSize;
-    class MediaPlayer;
-    class PluginView;
-    class HTMLMediaElement;
-
-    enum MediaPlayerProxyNotificationType {
-        MediaPlayerNotificationPlayPauseButtonPressed,
-        Idle,
-        Loading,
-        Loaded,
-        FormatError,
-        NetworkError,
-        DecodeError
-    };
-
-    class WebMediaPlayerProxy {
-    public:
-        WebMediaPlayerProxy(MediaPlayer* player);
-        ~WebMediaPlayerProxy();
-
-        MediaPlayer* mediaPlayer() {return m_mediaPlayer;}
-        void initEngine();
-        void load(const String& url);
-        HTMLMediaElement* element();
-        void invokeMethod(const String& methodName);
-        RefPtr<JSC::Bindings::Instance> pluginInstance();
-
-    private:
-        MediaPlayer* m_mediaPlayer;
-        bool m_init;
-        WebCore::PluginView* m_pluginView;
-        bool m_hasSentResponseToPlugin;
-        ScriptInstance m_instance;
-    };
-
-}
-#endif // ENABLE(VIDEO)
-
-#endif
diff --git a/Source/WebCore/platform/graphics/wince/PathWinCE.cpp b/Source/WebCore/platform/graphics/wince/PathWinCE.cpp
deleted file mode 100644 (file)
index 62ce9e7..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile, Inc.
- *
- *  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 "Path.h"
-
-#include "AffineTransform.h"
-#include "FloatRect.h"
-#include "NotImplemented.h"
-#include "PlatformPathWinCE.h"
-#include <wtf/OwnPtr.h>
-#include <wtf/text/WTFString.h>
-
-namespace WebCore {
-
-Path::Path()
-    : m_path(new PlatformPath())
-{
-}
-
-Path::Path(const Path& other)
-    : m_path(new PlatformPath(*other.m_path))
-{
-}
-
-Path::~Path()
-{
-    delete m_path;
-}
-
-Path& Path::operator=(const Path& other)
-{
-    if (&other != this) {
-        delete m_path;
-        m_path = new PlatformPath(*other.m_path);
-    }
-    return *this;
-}
-
-bool Path::contains(const FloatPoint& point, WindRule rule) const
-{
-    return m_path->contains(point, rule);
-}
-
-void Path::translate(const FloatSize& size)
-{
-    m_path->translate(size);
-}
-
-FloatRect Path::boundingRect() const
-{
-    return m_path->boundingRect();
-}
-
-void Path::moveTo(const FloatPoint& point)
-{
-    m_path->moveTo(point);
-}
-
-void Path::addLineTo(const FloatPoint& point)
-{
-    m_path->addLineTo(point);
-}
-
-void Path::addQuadCurveTo(const FloatPoint& cp, const FloatPoint& p)
-{
-    m_path->addQuadCurveTo(cp, p);
-}
-
-void Path::addBezierCurveTo(const FloatPoint& cp1, const FloatPoint& cp2, const FloatPoint& p)
-{
-    m_path->addBezierCurveTo(cp1, cp2, p);
-}
-
-void Path::addArcTo(const FloatPoint& p1, const FloatPoint& p2, float radius)
-{
-    m_path->addArcTo(p1, p2, radius);
-}
-
-void Path::closeSubpath()
-{
-    m_path->closeSubpath();
-}
-
-void Path::addArc(const FloatPoint& p, float r, float sar, float ear, bool anticlockwise)
-{
-    m_path->addEllipse(p, r, r, sar, ear, anticlockwise);
-}
-
-void Path::addRect(const FloatRect& r)
-{
-    m_path->addRect(r);
-}
-
-void Path::addEllipse(const FloatRect& r)
-{
-    m_path->addEllipse(r);
-}
-
-void Path::addPath(const Path&, const AffineTransform&)
-{
-    notImplemented();
-}
-
-void Path::clear()
-{
-    m_path->clear();
-}
-
-bool Path::isEmpty() const
-{
-    return m_path->isEmpty();
-}
-
-void Path::apply(void* info, PathApplierFunction function) const
-{
-    m_path->apply(info, function);
-}
-
-void Path::transform(const AffineTransform& t)
-{
-    m_path->transform(t);
-}
-
-FloatRect Path::strokeBoundingRect(StrokeStyleApplier*) const
-{
-    notImplemented();
-    return FloatRect();
-}
-
-bool Path::strokeContains(StrokeStyleApplier*, const FloatPoint&) const
-{
-    notImplemented();
-    return false;
-}
-
-bool Path::hasCurrentPoint() const
-{
-    // Not sure if this is correct. At the meantime, we do what other ports
-    // do.
-    // See https://bugs.webkit.org/show_bug.cgi?id=27266,
-    // https://bugs.webkit.org/show_bug.cgi?id=27187, and 
-    // http://trac.webkit.org/changeset/45873
-    return !isEmpty();
-}
-
-FloatPoint Path::currentPoint() const
-{
-    return m_path->lastPoint();
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/PlatformPathWinCE.cpp b/Source/WebCore/platform/graphics/wince/PlatformPathWinCE.cpp
deleted file mode 100644 (file)
index b579d92..0000000
+++ /dev/null
@@ -1,772 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile, Inc.
- *
- *  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 "PlatformPathWinCE.h"
-
-#include "AffineTransform.h"
-#include "FloatRect.h"
-#include "GraphicsContext.h"
-#include "Path.h"
-#include "WinCEGraphicsExtras.h"
-#include <wtf/MathExtras.h>
-#include <wtf/OwnPtr.h>
-#include <wtf/text/WTFString.h>
-
-#include <windows.h>
-
-namespace WebCore {
-
-// Implemented in GraphicsContextWinCE.cpp
-void getEllipsePointByAngle(double angle, double a, double b, float& x, float& y);
-
-static void quadCurve(int segments, Vector<PathPoint>& pts, const PathPoint* control)
-{
-    const float step = 1.0 / segments;
-    register float tA = 0.0;
-    register float tB = 1.0;
-
-    float c1x = control[0].x();
-    float c1y = control[0].y();
-    float c2x = control[1].x();
-    float c2y = control[1].y();
-    float c3x = control[2].x();
-    float c3y = control[2].y();
-
-    const int offset = pts.size();
-    pts.resize(offset + segments);
-    PathPoint pp;
-    pp.m_x = c1x;
-    pp.m_y = c1y;
-
-    for (int i = 1; i < segments; ++i) {
-        tA += step;
-        tB -= step;
-
-        const float a = tB * tB;
-        const float b = 2.0 * tA * tB;
-        const float c = tA * tA;
-
-        pp.m_x = c1x * a + c2x * b + c3x * c;
-        pp.m_y = c1y * a + c2y * b + c3y * c;
-
-        pts[offset + i - 1] = pp;
-    }
-
-    pp.m_x = c3x;
-    pp.m_y = c3y;
-    pts[offset + segments - 1] = pp;
-}
-
-static inline void bezier(int segments, Vector<PathPoint>& pts, const PathPoint* control)
-{
-    const float step = 1.0 / segments;
-    register float tA = 0.0;
-    register float tB = 1.0;
-
-    float c1x = control[0].x();
-    float c1y = control[0].y();
-    float c2x = control[1].x();
-    float c2y = control[1].y();
-    float c3x = control[2].x();
-    float c3y = control[2].y();
-    float c4x = control[3].x();
-    float c4y = control[3].y();
-
-    const int offset = pts.size();
-    pts.resize(offset + segments);
-    PathPoint pp;
-    pp.m_x = c1x;
-    pp.m_y = c1y;
-
-    for (int i = 1; i < segments; ++i) {
-        tA += step;
-        tB -= step;
-        const float tAsq = tA * tA;
-        const float tBsq = tB * tB;
-
-        const float a = tBsq * tB;
-        const float b = 3.0 * tA * tBsq;
-        const float c = 3.0 * tB * tAsq;
-        const float d = tAsq * tA;
-
-        pp.m_x = c1x * a + c2x * b + c3x * c + c4x * d;
-        pp.m_y = c1y * a + c2y * b + c3y * c + c4y * d;
-
-        pts[offset + i - 1] = pp;
-    }
-
-    pp.m_x = c4x;
-    pp.m_y = c4y;
-    pts[offset + segments - 1] = pp;
-}
-
-static bool containsPoint(const FloatRect& r, const FloatPoint& p)
-{
-    return p.x() >= r.x() && p.y() >= r.y() && p.x() < r.maxX() && p.y() < r.maxY();
-}
-
-static void normalizeAngle(float& angle)
-{
-    angle = fmod(angle, 2 * piFloat);
-    if (angle < 0)
-        angle += 2 * piFloat;
-    if (angle < 0.00001f)
-        angle = 0;
-}
-
-static void transformArcPoint(float& x, float& y, const FloatPoint& c)
-{
-    x += c.x();
-    y += c.y();
-}
-
-static void inflateRectToContainPoint(FloatRect& r, float x, float y)
-{
-    if (r.isEmpty()) {
-        r.setX(x);
-        r.setY(y);
-        r.setSize(FloatSize(1, 1));
-        return;
-    }
-    if (x < r.x()) {
-        r.setWidth(r.maxX() - x);
-        r.setX(x);
-    } else {
-        float w = x - r.x() + 1;
-        if (w > r.width())
-            r.setWidth(w);
-    }
-    if (y < r.y()) {
-        r.setHeight(r.maxY() - y);
-        r.setY(y);
-    } else {
-        float h =  y - r.y() + 1;
-        if (h > r.height())
-            r.setHeight(h);
-    }
-}
-
-// return 0-based value: 0 - first Quadrant ( 0 - 90 degree)
-static inline int quadrant(const PathPoint& point, const PathPoint& origin)
-{
-    return point.m_x < origin.m_x ?
-        (point.m_y < origin.m_y ? 2 : 1)
-        : (point.m_y < origin.m_y ? 3 : 0);
-}
-
-static inline bool isQuadrantOnLeft(int q) { return q == 1 || q == 2; }
-static inline bool isQuadrantOnRight(int q) { return q == 0 || q == 3; }
-static inline bool isQuadrantOnTop(int q) { return q == 2 || q == 3; }
-static inline bool isQuadrantOnBottom(int q) { return q == 0 || q == 1; }
-
-static inline int nextQuadrant(int q) { return q == 3 ? 0 : q + 1; }
-static inline int quadrantDiff(int q1, int q2)
-{
-    int d = q1 - q2;
-    while (d < 0)
-        d += 4;
-    return d;
-}
-
-struct PathVector {
-    float m_x;
-    float m_y;
-
-    PathVector() : m_x(0), m_y(0) {}
-    PathVector(float x, float y) : m_x(x), m_y(y) {}
-    double angle() const { return atan2(m_y, m_x); }
-    operator double () const { return angle(); }
-    double length() const { return _hypot(m_x, m_y); }
-};
-
-PathVector operator-(const PathPoint& p1, const PathPoint& p2)
-{
-    return PathVector(p1.m_x - p2.m_x, p1.m_y - p2.m_y);
-}
-
-static void addArcPoint(PathPolygon& poly, const PathPoint& center, const PathPoint& radius, double angle)
-{
-    PathPoint p;
-    getEllipsePointByAngle(angle, radius.m_x, radius.m_y, p.m_x, p.m_y);
-    transformArcPoint(p.m_x, p.m_y, center);
-    if (poly.isEmpty() || poly.last() != p)
-        poly.append(p);
-}
-
-static void addArcPoints(PathPolygon& poly, const PlatformPathElement::ArcTo& data)
-{
-    const PathPoint& startPoint = poly.last();
-    double curAngle = startPoint - data.m_center;
-    double endAngle = data.m_end - data.m_center;
-    double angleStep = 2. / std::max(data.m_radius.m_x, data.m_radius.m_y);
-    if (data.m_clockwise) {
-        if (endAngle <= curAngle || startPoint == data.m_end)
-            endAngle += 2 * piDouble;
-    } else {
-        angleStep = -angleStep;
-        if (endAngle >= curAngle || startPoint == data.m_end)
-            endAngle -= 2 * piDouble;
-    }
-
-    for (curAngle += angleStep; data.m_clockwise ? curAngle < endAngle : curAngle > endAngle; curAngle += angleStep)
-        addArcPoint(poly, data.m_center, data.m_radius, curAngle);
-
-    if (poly.isEmpty() || poly.last() != data.m_end)
-        poly.append(data.m_end);
-}
-
-static void drawPolygons(HDC dc, const Vector<PathPolygon>& polygons, bool fill, const AffineTransform* transformation)
-{
-    for (Vector<PathPolygon>::const_iterator i = polygons.begin(); i != polygons.end(); ++i) {
-        int npoints = i->size();
-        if (!npoints)
-            continue;
-
-        POINT* winPoints = 0;
-        if (fill) {
-            if (npoints > 2)
-                winPoints = new POINT[npoints + 1];
-        } else
-            winPoints = new POINT[npoints];
-
-        if (winPoints) {
-            if (transformation) {
-                for (int i2 = 0; i2 < npoints; ++i2) {
-                    FloatPoint trPoint = transformation->mapPoint(i->at(i2));
-                    winPoints[i2].x = stableRound(trPoint.x());
-                    winPoints[i2].y = stableRound(trPoint.y());
-                }
-            } else {
-                for (int i2 = 0; i2 < npoints; ++i2) {
-                    winPoints[i2].x = stableRound(i->at(i2).x());
-                    winPoints[i2].y = stableRound(i->at(i2).y());
-                }
-            }
-
-            if (fill && winPoints[npoints - 1] != winPoints[0]) {
-                winPoints[npoints].x = winPoints[0].x;
-                winPoints[npoints].y = winPoints[0].y;
-                ++npoints;
-            }
-
-            if (fill)
-                ::Polygon(dc, winPoints, npoints);
-            else
-                ::Polyline(dc, winPoints, npoints);
-            delete[] winPoints;
-        }
-    }
-}
-
-
-int PlatformPathElement::numControlPoints() const
-{
-    switch (m_type) {
-    case PathMoveTo:
-    case PathLineTo:
-        return 1;
-    case PathQuadCurveTo:
-    case PathArcTo:
-        return 2;
-    case PathBezierCurveTo:
-        return 3;
-    default:
-        ASSERT(m_type == PathCloseSubpath);
-        return 0;
-    }
-}
-
-int PlatformPathElement::numPoints() const
-{
-    switch (m_type) {
-    case PathMoveTo:
-    case PathLineTo:
-    case PathArcTo:
-        return 1;
-    case PathQuadCurveTo:
-        return 2;
-    case PathBezierCurveTo:
-        return 3;
-    default:
-        ASSERT(m_type == PathCloseSubpath);
-        return 0;
-    }
-}
-
-void PathPolygon::move(const FloatSize& offset)
-{
-    for (Vector<PathPoint>::iterator i = begin(); i < end(); ++i)
-        i->move(offset);
-}
-
-void PathPolygon::transform(const AffineTransform& t)
-{
-    for (Vector<PathPoint>::iterator i = begin(); i < end(); ++i)
-        *i = t.mapPoint(*i);
-}
-
-bool PathPolygon::contains(const FloatPoint& point) const
-{
-    if (size() < 3)
-        return false;
-
-    // Test intersections between the polygon and the vertical line: x = point.x()
-
-    int intersected = 0;
-    const PathPoint* point1 = &last();
-    Vector<PathPoint>::const_iterator last = end();
-    // wasNegative: -1 means unknown, 0 means false, 1 means true.
-    int wasNegative = -1;
-    for (Vector<PathPoint>::const_iterator i = begin(); i != last; ++i) {
-        const PathPoint& point2 = *i;
-        if (point1->x() != point.x()) {
-            if (point2.x() == point.x()) {
-                // We are getting on the vertical line
-                wasNegative = point1->x() < point.x() ? 1 : 0;
-            } else if (point2.x() < point.x() != point1->x() < point.x()) {
-                float y = (point2.y() - point1->y()) / (point2.x() - point1->x()) * (point.x() - point1->x()) + point1->y();
-                if (y >= point.y())
-                    ++intersected;
-            }
-        } else {
-            // We were on the vertical line
-
-            // handle special case
-            if (point1->y() == point.y())
-                return true;
-
-            if (point1->y() > point.y()) {
-                if (point2.x() == point.x()) {
-                    // see if the point is on this segment
-                    if (point2.y() <= point.y())
-                        return true;
-
-                    // We are still on the line
-                } else {
-                    // We are leaving the line now.
-                    // We have to get back to see which side we come from. If we come from
-                    // the same side we are leaving, no intersection should be counted
-                    if (wasNegative < 0) {
-                        Vector<PathPoint>::const_iterator jLast = i;
-                        Vector<PathPoint>::const_iterator j = i;
-                        do {
-                            if (j == begin())
-                                j = last;
-                            else
-                                --j;
-                            if (j->x() != point.x()) {
-                                if (j->x() > point.x())
-                                    wasNegative = 0;
-                                else
-                                    wasNegative = 1;
-                                break;
-                            }
-                        } while (j != jLast);
-
-                        if (wasNegative < 0)
-                            return false;
-                    }
-                    if (wasNegative ? point2.x() > point.x() : point2.x() < point.x())
-                        ++intersected;
-                }
-            } else if (point2.x() == point.x() && point2.y() >= point.y())
-                return true;
-        }
-        point1 = &point2;
-    }
-
-    return intersected & 1;
-}
-
-void PlatformPathElement::move(const FloatSize& offset)
-{
-    int n = numControlPoints();
-    for (int i = 0; i < n; ++i)
-        m_data.m_points[i].move(offset);
-}
-
-void PlatformPathElement::transform(const AffineTransform& t)
-{
-    int n = numControlPoints();
-    for (int i = 0; i < n; ++i) {
-        FloatPoint p = t.mapPoint(m_data.m_points[i]);
-        m_data.m_points[i].set(p.x(), p.y());
-    }
-}
-
-void PlatformPathElement::inflateRectToContainMe(FloatRect& r, const FloatPoint& lastPoint) const
-{
-    if (m_type == PathArcTo) {
-        const ArcTo& data = m_data.m_arcToData;
-        PathPoint startPoint;
-        startPoint = lastPoint;
-        PathPoint endPoint = data.m_end;
-        if (!data.m_clockwise)
-            std::swap(startPoint, endPoint);
-
-        int q0 = quadrant(startPoint, data.m_center);
-        int q1 = quadrant(endPoint, data.m_center);
-        bool containsExtremes[4] = { false }; // bottom, left, top, right
-        static const PathPoint extremeVectors[4] = { { 0, 1 }, { -1, 0 }, { 0, -1 }, { 1, 0 } };
-        if (q0 == q1) {
-            if (startPoint.m_x == endPoint.m_x || isQuadrantOnBottom(q0) != startPoint.m_x > endPoint.m_x) {
-                for (int i = 0; i < 4; ++i)
-                    containsExtremes[i] = true;
-            }
-        } else {
-            int extreme = q0;
-            int diff = quadrantDiff(q1, q0);
-            for (int i = 0; i < diff; ++i) {
-                containsExtremes[extreme] = true;
-                extreme = nextQuadrant(extreme);
-            }
-        }
-
-        inflateRectToContainPoint(r, startPoint.m_x, startPoint.m_y);
-        inflateRectToContainPoint(r, endPoint.m_x, endPoint.m_y);
-        for (int i = 0; i < 4; ++i) {
-            if (containsExtremes[i])
-                inflateRectToContainPoint(r, data.m_center.m_x + data.m_radius.m_x * extremeVectors[i].m_x, data.m_center.m_y + data.m_radius.m_y * extremeVectors[i].m_y);
-        }
-    } else {
-        int n = numPoints();
-        for (int i = 0; i < n; ++i)
-            inflateRectToContainPoint(r, m_data.m_points[i].m_x, m_data.m_points[i].m_y);
-    }
-}
-
-PathElementType PlatformPathElement::type() const
-{
-    switch (m_type) {
-    case PathMoveTo:
-        return PathElementMoveToPoint;
-    case PathLineTo:
-        return PathElementAddLineToPoint;
-    case PathArcTo:
-        // FIXME: there's no arcTo type for PathElement
-        return PathElementAddLineToPoint;
-        // return PathElementAddQuadCurveToPoint;
-    case PathQuadCurveTo:
-        return PathElementAddQuadCurveToPoint;
-    case PathBezierCurveTo:
-        return PathElementAddCurveToPoint;
-    default:
-        ASSERT(m_type == PathCloseSubpath);
-        return PathElementCloseSubpath;
-    }
-}
-
-PlatformPath::PlatformPath()
-    : m_penLifted(true)
-{
-    m_currentPoint.clear();
-}
-
-void PlatformPath::ensureSubpath()
-{
-    if (m_penLifted) {
-        m_penLifted = false;
-        m_subpaths.append(PathPolygon());
-        m_subpaths.last().append(m_currentPoint);
-    } else
-        ASSERT(!m_subpaths.isEmpty());
-}
-
-void PlatformPath::addToSubpath(const PlatformPathElement& e)
-{
-    if (e.platformType() == PlatformPathElement::PathMoveTo) {
-        m_penLifted = true;
-        m_currentPoint = e.pointAt(0);
-    } else if (e.platformType() == PlatformPathElement::PathCloseSubpath) {
-        m_penLifted = true;
-        if (!m_subpaths.isEmpty()) {
-            if (m_currentPoint != m_subpaths.last()[0]) {
-                // According to W3C, we have to draw a line from current point to the initial point
-                m_subpaths.last().append(m_subpaths.last()[0]);
-                m_currentPoint = m_subpaths.last()[0];
-            }
-        } else
-            m_currentPoint.clear();
-    } else {
-        ensureSubpath();
-        switch (e.platformType()) {
-        case PlatformPathElement::PathLineTo:
-            m_subpaths.last().append(e.pointAt(0));
-            break;
-        case PlatformPathElement::PathArcTo:
-            addArcPoints(m_subpaths.last(), e.arcTo());
-            break;
-        case PlatformPathElement::PathQuadCurveTo:
-            {
-                PathPoint control[] = {
-                    m_currentPoint,
-                    e.pointAt(0),
-                    e.pointAt(1),
-                };
-                // FIXME: magic number?
-                quadCurve(50, m_subpaths.last(), control);
-            }
-            break;
-        case PlatformPathElement::PathBezierCurveTo:
-            {
-                PathPoint control[] = {
-                    m_currentPoint,
-                    e.pointAt(0),
-                    e.pointAt(1),
-                    e.pointAt(2),
-                };
-                // FIXME: magic number?
-                bezier(100, m_subpaths.last(), control);
-            }
-            break;
-        default:
-            ASSERT_NOT_REACHED();
-            break;
-        }
-        m_currentPoint = m_subpaths.last().last();
-    }
-}
-
-void PlatformPath::append(const PlatformPathElement& e)
-{
-    e.inflateRectToContainMe(m_boundingRect, lastPoint());
-    addToSubpath(e);
-    m_elements.append(e);
-}
-
-void PlatformPath::append(const PlatformPath& p)
-{
-    const PlatformPathElements& e = p.elements();
-    for (PlatformPathElements::const_iterator it(e.begin()); it != e.end(); ++it) {
-        addToSubpath(*it);
-        it->inflateRectToContainMe(m_boundingRect, lastPoint());
-        m_elements.append(*it);
-    }
-}
-
-void PlatformPath::clear()
-{
-    m_elements.clear();
-    m_boundingRect = FloatRect();
-    m_subpaths.clear();
-    m_currentPoint.clear();
-    m_penLifted = true;
-}
-
-void PlatformPath::strokePath(HDC dc, const AffineTransform* transformation) const
-{
-    drawPolygons(dc, m_subpaths, false, transformation);
-}
-
-void PlatformPath::fillPath(HDC dc, const AffineTransform* transformation) const
-{
-    HGDIOBJ oldPen = SelectObject(dc, GetStockObject(NULL_PEN));
-    drawPolygons(dc, m_subpaths, true, transformation);
-    SelectObject(dc, oldPen);
-}
-
-void PlatformPath::translate(const FloatSize& size)
-{
-    for (PlatformPathElements::iterator it(m_elements.begin()); it != m_elements.end(); ++it)
-        it->move(size);
-
-    m_boundingRect.move(size);
-    for (Vector<PathPolygon>::iterator it = m_subpaths.begin(); it != m_subpaths.end(); ++it)
-        it->move(size);
-}
-
-void PlatformPath::transform(const AffineTransform& t)
-{
-    for (PlatformPathElements::iterator it(m_elements.begin()); it != m_elements.end(); ++it)
-        it->transform(t);
-
-    m_boundingRect = t.mapRect(m_boundingRect);
-    for (Vector<PathPolygon>::iterator it = m_subpaths.begin(); it != m_subpaths.end(); ++it)
-        it->transform(t);
-}
-
-bool PlatformPath::contains(const FloatPoint& point, WindRule rule) const
-{
-    // optimization: check the bounding rect first
-    if (!containsPoint(m_boundingRect, point))
-        return false;
-
-    for (Vector<PathPolygon>::const_iterator i = m_subpaths.begin(); i != m_subpaths.end(); ++i) {
-        if (i->contains(point))
-            return true;
-    }
-
-    return false;
-}
-
-void PlatformPath::moveTo(const FloatPoint& point)
-{
-    PlatformPathElement::MoveTo data = { { point.x(), point.y() } };
-    PlatformPathElement pe(data);
-    append(pe);
-}
-
-void PlatformPath::addLineTo(const FloatPoint& point)
-{
-    PlatformPathElement::LineTo data = { { point.x(), point.y() } };
-    PlatformPathElement pe(data);
-    append(pe);
-}
-
-void PlatformPath::addQuadCurveTo(const FloatPoint& cp, const FloatPoint& p)
-{
-    PlatformPathElement::QuadCurveTo data = { { cp.x(), cp.y() }, { p.x(), p.y() } };
-    PlatformPathElement pe(data);
-    append(pe);
-}
-
-void PlatformPath::addBezierCurveTo(const FloatPoint& cp1, const FloatPoint& cp2, const FloatPoint& p)
-{
-    PlatformPathElement::BezierCurveTo data = { { cp1.x(), cp1.y() }, { cp2.x(), cp2.y() }, { p.x(), p.y() } };
-    PlatformPathElement pe(data);
-    append(pe);
-}
-
-void PlatformPath::addArcTo(const FloatPoint& fp1, const FloatPoint& fp2, float radius)
-{
-    const PathPoint& p0 = m_currentPoint;
-    PathPoint p1;
-    p1 = fp1;
-    PathPoint p2;
-    p2 = fp2;
-    if (!radius || p0 == p1 || p1 == p2) {
-        addLineTo(p1);
-        return;
-    }
-
-    PathVector v01 = p0 - p1;
-    PathVector v21 = p2 - p1;
-
-    // sin(A - B) = sin(A) * cos(B) - sin(B) * cos(A)
-    double cross = v01.m_x * v21.m_y - v01.m_y * v21.m_x;
-
-    if (fabs(cross) < 1E-10) {
-        // on one line
-        addLineTo(p1);
-        return;
-    }
-
-    double d01 = v01.length();
-    double d21 = v21.length();
-    double angle = (piDouble - fabs(asin(cross / (d01 * d21)))) * 0.5;
-    double span = radius * tan(angle);
-    double rate = span / d01;
-    PathPoint startPoint;
-    startPoint.m_x = p1.m_x + v01.m_x * rate;
-    startPoint.m_y = p1.m_y + v01.m_y * rate;
-
-    addLineTo(startPoint);
-
-    PathPoint endPoint;
-    rate = span / d21;
-    endPoint.m_x = p1.m_x + v21.m_x * rate;
-    endPoint.m_y = p1.m_y + v21.m_y * rate;
-
-    PathPoint midPoint;
-    midPoint.m_x = (startPoint.m_x + endPoint.m_x) * 0.5;
-    midPoint.m_y = (startPoint.m_y + endPoint.m_y) * 0.5;
-
-    PathVector vm1 = midPoint - p1;
-    double dm1 = vm1.length();
-    double d = _hypot(radius, span);
-
-    PathPoint centerPoint;
-    rate = d / dm1;
-    centerPoint.m_x = p1.m_x + vm1.m_x * rate;
-    centerPoint.m_y = p1.m_y + vm1.m_y * rate;
-
-    PlatformPathElement::ArcTo data = {
-        endPoint,
-        centerPoint,
-        { radius, radius },
-        cross < 0
-    };
-    PlatformPathElement pe(data);
-    append(pe);
-}
-
-void PlatformPath::closeSubpath()
-{
-    PlatformPathElement pe;
-    append(pe);
-}
-
-// add a circular arc centred at p with radius r from start angle sar (radians) to end angle ear
-void PlatformPath::addEllipse(const FloatPoint& p, float a, float b, float sar, float ear, bool anticlockwise)
-{
-    float startX, startY, endX, endY;
-
-    normalizeAngle(sar);
-    normalizeAngle(ear);
-
-    getEllipsePointByAngle(sar, a, b, startX, startY);
-    getEllipsePointByAngle(ear, a, b, endX, endY);
-
-    transformArcPoint(startX, startY, p);
-    transformArcPoint(endX, endY, p);
-
-    FloatPoint start(startX, startY);
-    moveTo(start);
-
-    PlatformPathElement::ArcTo data = { { endX, endY }, { p.x(), p.y() },  { a, b }, !anticlockwise };
-    PlatformPathElement pe(data);
-    append(pe);
-}
-
-
-void PlatformPath::addRect(const FloatRect& r)
-{
-    moveTo(r.location());
-
-    float right = r.maxX() - 1;
-    float bottom = r.maxY() - 1;
-    addLineTo(FloatPoint(right, r.y()));
-    addLineTo(FloatPoint(right, bottom));
-    addLineTo(FloatPoint(r.x(), bottom));
-    addLineTo(r.location());
-}
-
-void PlatformPath::addEllipse(const FloatRect& r)
-{
-    FloatSize radius(r.width() * 0.5, r.height() * 0.5);
-    addEllipse(r.location() + radius, radius.width(), radius.height(), 0, 0, true);
-}
-
-void PlatformPath::apply(void* info, PathApplierFunction function) const
-{
-    PathElement pelement;
-    FloatPoint points[3];
-    pelement.points = points;
-
-    for (PlatformPathElements::const_iterator it(m_elements.begin()); it != m_elements.end(); ++it) {
-        pelement.type = it->type();
-        int n = it->numPoints();
-        for (int i = 0; i < n; ++i)
-            points[i] = it->pointAt(i);
-        function(info, &pelement);
-    }
-}
-
-} // namespace Webcore
diff --git a/Source/WebCore/platform/graphics/wince/PlatformPathWinCE.h b/Source/WebCore/platform/graphics/wince/PlatformPathWinCE.h
deleted file mode 100644 (file)
index ae9243f..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile, Inc.
- *
- *  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 PlatformPathWinCE_h
-#define PlatformPathWinCE_h
-
-#include "FloatPoint.h"
-#include "FloatRect.h"
-#include "Path.h"
-#include <windows.h>
-#include <wtf/Vector.h>
-
-namespace WebCore {
-
-    class GraphicsContext;
-
-    struct PathPoint {
-        float m_x;
-        float m_y;
-        const float& x() const { return m_x; }
-        const float& y() const { return m_y; }
-        void set(float x, float y)
-        {
-            m_x = x;
-            m_y = y;
-        };
-        operator FloatPoint() const { return FloatPoint(m_x, m_y); }
-        void move(const FloatSize& offset)
-        {
-            m_x += offset.width();
-            m_y += offset.height();
-        }
-        PathPoint& operator=(const FloatPoint& p)
-        {
-            m_x = p.x();
-            m_y = p.y();
-            return *this;
-        }
-        void clear() { m_x = m_y = 0; }
-    };
-
-    struct PathPolygon: public Vector<PathPoint> {
-        void move(const FloatSize& offset);
-        void transform(const AffineTransform& t);
-        bool contains(const FloatPoint& point) const;
-    };
-
-    class PlatformPathElement {
-    public:
-        enum PlaformPathElementType {
-            PathMoveTo,
-            PathLineTo,
-            PathArcTo,
-            PathQuadCurveTo,
-            PathBezierCurveTo,
-            PathCloseSubpath,
-        };
-
-        struct MoveTo {
-            PathPoint m_end;
-        };
-
-        struct LineTo {
-            PathPoint m_end;
-        };
-
-        struct ArcTo {
-            PathPoint m_end;
-            PathPoint m_center;
-            PathPoint m_radius;
-            bool m_clockwise;
-        };
-
-        struct QuadCurveTo {
-            PathPoint m_point0;
-            PathPoint m_point1;
-        };
-
-        struct BezierCurveTo {
-            PathPoint m_point0;
-            PathPoint m_point1;
-            PathPoint m_point2;
-        };
-
-        PlatformPathElement(): m_type(PathCloseSubpath) { m_data.m_points[0].set(0, 0);    }
-        PlatformPathElement(const MoveTo& data): m_type(PathMoveTo) { m_data.m_moveToData = data; }
-        PlatformPathElement(const LineTo& data): m_type(PathLineTo) { m_data.m_lineToData = data; }
-        PlatformPathElement(const ArcTo& data): m_type(PathArcTo) { m_data.m_arcToData = data; }
-        PlatformPathElement(const QuadCurveTo& data): m_type(PathQuadCurveTo) { m_data.m_quadCurveToData = data; }
-        PlatformPathElement(const BezierCurveTo& data): m_type(PathBezierCurveTo) { m_data.m_bezierCurveToData = data; }
-
-        const MoveTo& moveTo() const { return m_data.m_moveToData; }
-        const LineTo& lineTo() const { return m_data.m_lineToData; }
-        const ArcTo& arcTo() const { return m_data.m_arcToData; }
-        const QuadCurveTo& quadCurveTo() const { return m_data.m_quadCurveToData; }
-        const BezierCurveTo& bezierCurveTo() const { return m_data.m_bezierCurveToData; }
-        const PathPoint& lastPoint() const
-        {
-            int n = numPoints();
-            return n > 1 ? m_data.m_points[n - 1] : m_data.m_points[0];
-        }
-        const PathPoint& pointAt(int index) const { return m_data.m_points[index]; }
-        int numPoints() const;
-        int numControlPoints() const;
-        void move(const FloatSize& offset);
-        void transform(const AffineTransform& t);
-        PathElementType type() const;
-        PlaformPathElementType platformType() const { return m_type; }
-        void inflateRectToContainMe(FloatRect& r, const FloatPoint& lastPoint) const;
-
-    private:
-        PlaformPathElementType m_type;
-        union {
-            MoveTo m_moveToData;
-            LineTo m_lineToData;
-            ArcTo m_arcToData;
-            QuadCurveTo m_quadCurveToData;
-            BezierCurveTo m_bezierCurveToData;
-            PathPoint m_points[4];
-        } m_data;
-    };
-
-    typedef Vector<PlatformPathElement> PlatformPathElements;
-
-    class PlatformPath {
-    public:
-        PlatformPath();
-        const PlatformPathElements& elements() const { return m_elements; }
-        void append(const PlatformPathElement& e);
-        void append(const PlatformPath& p);
-        void clear();
-        bool isEmpty() const { return m_elements.isEmpty(); }
-
-        void strokePath(HDC, const AffineTransform* tr) const;
-        void fillPath(HDC, const AffineTransform* tr) const;
-        FloatPoint lastPoint() const { return m_elements.isEmpty() ? FloatPoint(0, 0) : m_elements.last().lastPoint(); }
-
-        const FloatRect& boundingRect() const { return m_boundingRect; }
-        bool contains(const FloatPoint& point, WindRule rule) const;
-        void translate(const FloatSize& size);
-        void transform(const AffineTransform& t);
-
-        void moveTo(const FloatPoint&);
-        void addLineTo(const FloatPoint&);
-        void addQuadCurveTo(const FloatPoint& controlPoint, const FloatPoint& point);
-        void addBezierCurveTo(const FloatPoint& controlPoint1, const FloatPoint& controlPoint2, const FloatPoint&);
-        void addArcTo(const FloatPoint&, const FloatPoint&, float radius);
-        void closeSubpath();
-        void addEllipse(const FloatPoint& p, float a, float b, float sar, float ear, bool anticlockwise);
-        void addRect(const FloatRect& r);
-        void addEllipse(const FloatRect& r);
-        void apply(void* info, PathApplierFunction function) const;
-
-    private:
-        void ensureSubpath();
-        void addToSubpath(const PlatformPathElement& e);
-
-        PlatformPathElements m_elements;
-        FloatRect m_boundingRect;
-        Vector<PathPolygon> m_subpaths;
-        PathPoint m_currentPoint;
-        bool m_penLifted;
-    };
-
-}
-
-#endif // PlatformPathWinCE_h
diff --git a/Source/WebCore/platform/graphics/wince/SharedBitmap.cpp b/Source/WebCore/platform/graphics/wince/SharedBitmap.cpp
deleted file mode 100644 (file)
index 349858d..0000000
+++ /dev/null
@@ -1,613 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile, Inc. All rights reserved.
- *  Copyright (C) 2010 Patrick Gansterer <paroga@paroga.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 "SharedBitmap.h"
-
-#include "GDIExtras.h"
-#include "GraphicsContext.h"
-#include "GraphicsTypes.h"
-#include "TransformationMatrix.h"
-#include "WinCEGraphicsExtras.h"
-#include <wtf/HashSet.h>
-#include <wtf/OwnPtr.h>
-#include <wtf/RefCountedLeakCounter.h>
-#include <wtf/StdLibExtras.h>
-
-#include <windows.h>
-
-namespace WebCore {
-
-#ifndef NDEBUG
-static WTF::RefCountedLeakCounter sharedBitmapLeakCounter("SharedBitmap");
-#endif
-
-
-PassRefPtr<SharedBitmap> SharedBitmap::create(const IntSize& size, BitmapInfo::BitCount bitCount, bool initPixels)
-{
-    RefPtr<SharedBitmap> resultantBitmap = adoptRef(new SharedBitmap(size, bitCount, initPixels));
-    if (resultantBitmap && !resultantBitmap->bytes())
-        return 0;
-    return resultantBitmap.release();
-}
-
-PassRefPtr<SharedBitmap> SharedBitmap::create(const Vector<unsigned>& data, const IntSize& size, bool hasAlpha)
-{
-    RefPtr<SharedBitmap> result = create(size, BitmapInfo::BitCount32, false);
-    if (!result)
-        return 0;
-    memcpy(result->bytes(), data.data(), data.size() * sizeof(unsigned));
-    result->setHasAlpha(hasAlpha);
-    return result.release();
-}
-
-SharedBitmap::SharedBitmap(const IntSize& size, BitmapInfo::BitCount bitCount, bool initPixels)
-    : m_bmpInfo(BitmapInfo::createBottomUp(size, bitCount))
-    , m_locked(false)
-    , m_usesTransparentColor(false)
-    , m_transparentColor(RGB(0, 0, 0))
-    , m_pixels(0)
-    , m_hasAlpha(false)
-    , m_validHeight(abs(size.height()))
-{
-#ifndef NDEBUG
-    sharedBitmapLeakCounter.increment();
-#endif
-
-    unsigned bufferSize = m_bmpInfo.numPixels();
-    if (bitCount == BitmapInfo::BitCount16)
-        bufferSize /= 2;
-
-    m_pixelData = std::make_unique<unsigned[]>(bufferSize);
-    m_pixels = m_pixelData.get();
-
-    if (initPixels)
-        resetPixels();
-}
-
-SharedBitmap::~SharedBitmap()
-{
-#ifndef NDEBUG
-    sharedBitmapLeakCounter.decrement();
-#endif
-}
-
-void SharedBitmap::resetPixels(bool black)
-{
-    if (!m_pixels)
-        return;
-
-    unsigned bufferSize = m_bmpInfo.numPixels();
-    if (black) {
-        unsigned bufferSizeInBytes = bufferSize * (is16bit() ? 2 : 4);
-        memset(m_pixels, 0, bufferSizeInBytes);
-        return;
-    }
-
-    if (is16bit()) {
-        // Fill it with white color
-        wmemset(static_cast<wchar_t*>(m_pixels), 0xFFFF, bufferSize);
-        return;
-    }
-
-    // Make it white but transparent
-    unsigned* pixel = static_cast<unsigned*>(m_pixels);
-    const unsigned* bufferEnd = pixel + bufferSize;
-    while (pixel < bufferEnd)
-        *pixel++ = 0x00FFFFFF;
-}
-
-static inline unsigned short convert32To16(unsigned pixel)
-{
-    unsigned short r = static_cast<unsigned short>((pixel & 0x00F80000) >> 8);
-    unsigned short g = static_cast<unsigned short>((pixel & 0x0000FC00) >> 5);
-    unsigned short b = static_cast<unsigned short>((pixel & 0x000000F8) >> 3);
-    return r | g | b;
-}
-
-bool SharedBitmap::to16bit()
-{
-    if (m_locked)
-        return false;
-    if (is16bit())
-        return true;
-
-    BitmapInfo newBmpInfo = BitmapInfo::create(m_bmpInfo.size(), BitmapInfo::BitCount16);
-
-    int width = newBmpInfo.width();
-    int paddedWidth = newBmpInfo.paddedWidth();
-    int bufferSize = paddedWidth * newBmpInfo.height();
-    auto newPixelData = std::make_unique<unsigned[]>(bufferSize / 2);
-    void* newPixels = newPixelData.get();
-
-    if (!newPixels)
-        return false;
-
-    unsigned short* p16 = static_cast<unsigned short*>(newPixels);
-    const unsigned* p32 = static_cast<const unsigned*>(m_pixels);
-
-    bool skips = paddedWidth != width;
-
-    const unsigned short* p16end = p16 + bufferSize;
-    while (p16 < p16end) {
-        for (unsigned short* p16lineEnd = p16 + width; p16 < p16lineEnd; )
-            *p16++ = convert32To16(*p32++);
-
-        if (skips)
-            *p16++ = 0;
-    }
-
-    if (m_hbitmap)
-        m_hbitmap = nullptr;
-    else
-        m_pixelData = newPixelData.release();
-
-    m_pixels = newPixels;
-    m_bmpInfo = newBmpInfo;
-
-    setHasAlpha(false);
-    return true;
-}
-
-bool SharedBitmap::freeMemory()
-{
-    if (m_locked)
-        return false;
-
-    if (m_hbitmap) {
-        m_hbitmap = nullptr;
-        m_pixels = 0;
-        return true;
-    }
-
-    if (m_pixels) {
-        m_pixelData = nullptr;
-        m_pixels = 0;
-        return true;
-    }
-
-    return false;
-}
-
-GDIObject<HBITMAP> SharedBitmap::createHandle(void** pixels, BitmapInfo* bmpInfo, int height, bool use16bit) const
-{
-    if (!m_pixels)
-        return nullptr;
-
-    if (height == -1)
-        height = this->height();
-    *bmpInfo = BitmapInfo::createBottomUp(IntSize(width(), height), (use16bit || is16bit()) ? BitmapInfo::BitCount16 : BitmapInfo::BitCount32);
-
-    auto hbmp = adoptGDIObject(::CreateDIBSection(0, bmpInfo, DIB_RGB_COLORS, pixels, 0, 0));
-
-    if (!hbmp)
-        return nullptr;
-
-    auto bmpDC = adoptGDIObject(::CreateCompatibleDC(0));
-    HGDIOBJ hOldBmp = SelectObject(bmpDC.get(), hbmp.get());
-
-    StretchDIBits(bmpDC.get(), 0, 0, width(), height, 0, 0, width(), height, m_pixels, &m_bmpInfo, DIB_RGB_COLORS, SRCCOPY);
-
-    SelectObject(bmpDC.get(), hOldBmp);
-
-    return hbmp;
-}
-
-bool SharedBitmap::ensureHandle()
-{
-    if (m_hbitmap)
-        return true;
-
-    if (!m_pixels)
-        return false;
-
-    if (m_locked)
-        return false;
-
-    BitmapInfo bmpInfo;
-    void* pixels;
-    m_hbitmap = createHandle(&pixels, &bmpInfo, -1, !hasAlpha());
-
-    if (!m_hbitmap)
-        return false;
-
-    m_pixelData = nullptr;
-    m_pixels = pixels;
-    m_bmpInfo = bmpInfo;
-
-    return true;
-}
-
-void SharedBitmap::draw(GraphicsContext* ctxt, const IntRect& dstRect, const IntRect& srcRect, ColorSpace styleColorSpace, CompositeOperator compositeOp, BlendMode blendMode)
-{
-    if (!m_pixels)
-        return;
-    ctxt->drawBitmap(this, dstRect, srcRect, styleColorSpace, compositeOp, blendMode);
-}
-
-void SharedBitmap::draw(HDC hdc, const IntRect& dstRect, const IntRect& srcRect, CompositeOperator compositeOp, BlendMode blendMode)
-{
-    if (!m_pixels)
-        return;
-
-    if (dstRect.isEmpty() || srcRect.isEmpty())
-        return;
-
-    HBITMAP hbitmap = 0;
-    GDIObject<HBITMAP> hTempBitmap;
-    bool usingHandle = compositeOp == CompositeSourceOver && (hasAlpha() && hasAlphaBlendSupport() || usesTransparentColor());
-
-    if (usingHandle) {
-        if (ensureHandle())
-            hbitmap = m_hbitmap.get();
-        else {
-            void* pixels;
-            BitmapInfo bmpInfo;
-            hTempBitmap = createHandle(&pixels, &bmpInfo, -1, usesTransparentColor());
-            hbitmap = hTempBitmap.get();
-        }
-    }
-    if (!hbitmap) {
-        // FIXME: handle other composite operation types?
-        DWORD rop = compositeOp == CompositeCopy ? SRCCOPY
-            : compositeOp == CompositeXOR ? PATINVERT
-            : compositeOp == CompositeClear ? WHITENESS
-            : SRCCOPY;
-
-        StretchDIBits(hdc, dstRect.x(), dstRect.y(), dstRect.width(), dstRect.height(),
-            srcRect.x(), srcRect.y(), srcRect.width(), srcRect.height(), m_pixels, &m_bmpInfo, DIB_RGB_COLORS, rop);
-        return;
-    }
-
-    auto hmemdc = adoptGDIObject(::CreateCompatibleDC(hdc));
-    HGDIOBJ hOldBmp = SelectObject(hmemdc.get(), hbitmap);
-
-    if (!usesTransparentColor() && hasAlphaBlendSupport()) {
-        static const BLENDFUNCTION blend = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
-        bool success = alphaBlendIfSupported(hdc, dstRect.x(), dstRect.y(), dstRect.width(), dstRect.height(), hmemdc.get(),
-            srcRect.x(), srcRect.y(), srcRect.width(), srcRect.height(), blend);
-        ASSERT_UNUSED(success, success);
-    } else {
-        TransparentBlt(hdc, dstRect.x(), dstRect.y(), dstRect.width(), dstRect.height(), hmemdc.get(),
-            srcRect.x(), srcRect.y(), srcRect.width(), srcRect.height(), transparentColor());
-    }
-
-    SelectObject(hmemdc.get(), hOldBmp);
-}
-
-GDIObject<HBITMAP> SharedBitmap::clipBitmap(const IntRect& rect, bool useAlpha, BitmapInfo& bmpInfo, void*& pixels)
-{
-    if (!bytes())
-        return nullptr;
-
-    int oldWidth = width();
-    int oldHeight = height();
-    int copyWidth = std::min<int>(rect.width(), oldWidth - rect.x());
-    int copyHeight = std::min<int>(rect.height(), oldHeight - rect.y());
-    if (!copyWidth || !copyHeight)
-        return nullptr;
-
-    bmpInfo = BitmapInfo::createBottomUp(IntSize(copyWidth, copyHeight), (useAlpha && is32bit()) ? BitmapInfo::BitCount32 : BitmapInfo::BitCount16);
-    auto newBmp = adoptGDIObject(::CreateDIBSection(0, &bmpInfo, DIB_RGB_COLORS, &pixels, 0, 0));
-
-    if (!newBmp)
-        return nullptr;
-
-    auto dcNew = adoptGDIObject(::CreateCompatibleDC(0));
-    HGDIOBJ tmpNew = SelectObject(dcNew.get(), newBmp.get());
-
-    StretchDIBits(dcNew.get(), 0, 0, copyWidth, copyHeight, rect.x(), rect.y(), copyWidth, copyHeight,
-        bytes(), &bitmapInfo(), DIB_RGB_COLORS, SRCCOPY);
-
-    SelectObject(dcNew.get(), tmpNew);
-    return newBmp;
-}
-
-PassRefPtr<SharedBitmap> SharedBitmap::clipBitmap(const IntRect& rect, bool useAlpha)
-{
-    int oldWidth = width();
-    int oldHeight = height();
-    int copyWidth = std::min<int>(rect.width(), oldWidth - rect.x());
-    int copyHeight = std::min<int>(rect.height(), oldHeight - rect.y());
-    if (!copyWidth || !copyHeight)
-        return 0;
-
-    RefPtr<SharedBitmap> newBmp = create(IntSize(copyWidth, copyHeight), useAlpha && is32bit() ? BitmapInfo::BitCount32 : BitmapInfo::BitCount16, false);
-
-    if (!newBmp || !newBmp->bytes())
-        return 0;
-
-    DCHolder dcNew(newBmp.get());
-
-    StretchDIBits(dcNew.get(), 0, 0, copyWidth, copyHeight, rect.x(), rect.y(), copyWidth, copyHeight,
-        bytes(), &bitmapInfo(), DIB_RGB_COLORS, SRCCOPY);
-
-    return newBmp;
-}
-
-static void drawPatternSimple(HDC hdc, const RECT& destRect, HBITMAP hbmp, const POINT& phase)
-{
-    auto hBrush = adoptGDIObject(::CreatePatternBrush(hbmp));
-    if (!hBrush)
-        return;
-
-    POINT oldOrg;
-    SetBrushOrgEx(hdc, destRect.left - phase.x, destRect.top - phase.y, &oldOrg);
-    FillRect(hdc, &destRect, hBrush.get());
-    SetBrushOrgEx(hdc, oldOrg.x, oldOrg.y, 0);
-}
-
-static void drawPatternSimple(HDC hdc, const RECT& destRect, const SharedBitmap* bmp, const SIZE& bmpSize, const POINT& phase)
-{
-    int dstY = destRect.top;
-    for (int sourceY = phase.y; dstY < destRect.bottom; ) {
-        int sourceH = std::min<int>(bmpSize.cy - sourceY, destRect.bottom - dstY);
-        int dstX = destRect.left;
-        for (int sourceX = phase.x; dstX < destRect.right; ) {
-            int sourceW = std::min<int>(bmpSize.cx - sourceX, destRect.right - dstX);
-
-            StretchDIBits(hdc, dstX, dstY, sourceW, sourceH, sourceX, sourceY, sourceW, sourceH,
-                bmp->bytes(), &bmp->bitmapInfo(), DIB_RGB_COLORS, SRCCOPY);
-
-            dstX += sourceW;
-            sourceX = 0;
-        }
-
-        dstY += sourceH;
-        sourceY = 0;
-    }
-}
-
-static LONG normalizePhase(LONG phase, int limit)
-{
-    if (!phase || limit < 2)
-        return 0;
-
-    if (limit == 2)
-        return phase & 1;
-
-    if (phase < 0) {
-        phase = -phase;
-        if (phase > limit)
-            phase = static_cast<LONG>(static_cast<unsigned>(phase) % static_cast<unsigned>(limit));
-        if (phase)
-            phase = limit - phase;
-        return phase;
-    }
-
-    if (phase < limit)
-        return phase;
-
-    return static_cast<LONG>(static_cast<unsigned>(phase) % static_cast<unsigned>(limit));
-}
-
-void SharedBitmap::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRectIn, const AffineTransform& patternTransform,
-                        const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRect, const IntSize& origSourceSize)
-{
-    if (!m_pixels)
-        return;
-    ctxt->drawBitmapPattern(this, tileRectIn, patternTransform, phase, styleColorSpace, op, destRect, origSourceSize);
-}
-
-void SharedBitmap::drawPattern(HDC hdc, const AffineTransform& transform, const FloatRect& tileRectIn, const AffineTransform& patternTransform,
-                        const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRect, const IntSize& origSourceSize)
-{
-    if (!m_pixels)
-        return;
-
-    if (tileRectIn.width() <= 0 || tileRectIn.height() <= 0)
-        return;
-
-    bool useAlpha = op == CompositeSourceOver && hasAlpha() && is32bit();
-
-    int bmpWidth = width();
-    int bmpHeight = height();
-
-    FloatRect tileRect(tileRectIn);
-    if (bmpWidth != origSourceSize.width()) {
-        double rate = static_cast<double>(bmpWidth) / origSourceSize.width();
-        double temp = tileRect.width() * rate;
-        tileRect.setX(tileRect.x() * rate);
-        tileRect.setWidth(temp);
-        temp = tileRect.height() * rate;
-        tileRect.setY(tileRect.y() * rate);
-        tileRect.setHeight(temp);
-    }
-
-    GDIObject<HBITMAP> clippedBmp;
-
-    if (tileRect.x() || tileRect.y() || tileRect.width() != bmpWidth || tileRect.height() != bmpHeight) {
-        BitmapInfo patternBmpInfo;
-        void* patternPixels;
-        clippedBmp = clipBitmap(IntRect(tileRect), useAlpha, patternBmpInfo, patternPixels);
-        if (!clippedBmp)
-            return;
-
-        bmpWidth = tileRect.width();
-        bmpHeight = tileRect.height();
-    }
-
-    AffineTransform tf = patternTransform * transform;
-
-    FloatRect trRect = tf.mapRect(destRect);
-
-    RECT clipBox;
-    int clipType = GetClipBox(hdc, &clipBox);
-    if (clipType == SIMPLEREGION)
-        trRect.intersect(FloatRect(clipBox.left, clipBox.top, clipBox.right - clipBox.left, clipBox.bottom - clipBox.top));
-    else if (clipType == COMPLEXREGION) {
-        auto clipRgn = adoptGDIObject(::CreateRectRgn(0, 0, 0, 0));
-        if (GetClipRgn(hdc, clipRgn.get()) > 0) {
-            DWORD regionDataSize = GetRegionData(clipRgn.get(), sizeof(RGNDATA), 0);
-            if (regionDataSize) {
-                Vector<RGNDATA> regionData(regionDataSize);
-                GetRegionData(clipRgn.get(), regionDataSize, regionData.data());
-                RECT* rect = reinterpret_cast<RECT*>(regionData[0].Buffer);
-                for (DWORD i = 0; i < regionData[0].rdh.nCount; ++i, ++rect)
-                    trRect.intersect(FloatRect(rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top));
-            }
-        }
-    }
-
-    if (trRect.width() <= 0 || trRect.height() <= 0)
-        return;
-
-    trRect.inflate(1);
-    IntRect visibleDstRect = enclosingIntRect(tf.inverse().mapRect(trRect));
-    visibleDstRect.intersect(IntRect(destRect));
-
-    if (visibleDstRect.width() <= 0 || visibleDstRect.height() <= 0)
-        return;
-
-    trRect = tf.mapRect(visibleDstRect);
-    RECT dstRectWin = {
-        stableRound(trRect.x()),
-        stableRound(trRect.y()),
-        stableRound(trRect.maxX()),
-        stableRound(trRect.maxY()),
-    };
-    if (dstRectWin.right <= dstRectWin.left || dstRectWin.bottom <= dstRectWin.top)
-        return;
-
-    SIZE bmpSize = { bmpWidth, bmpHeight };
-
-    // Relative to destination, in bitmap pixels
-    POINT phaseWin = { stableRound(visibleDstRect.x() - phase.x()), stableRound(visibleDstRect.y() - phase.y()) };
-    phaseWin.x = normalizePhase(phaseWin.x, bmpSize.cx);
-    phaseWin.y = normalizePhase(phaseWin.y, bmpSize.cy);
-
-    RECT srcRectWin = {
-        0,
-        0,
-        stableRound(visibleDstRect.maxX()) - stableRound(visibleDstRect.x()),
-        stableRound(visibleDstRect.maxY()) - stableRound(visibleDstRect.y())
-    };
-    if (srcRectWin.right <= 0 || srcRectWin.bottom <= 0)
-        return;
-
-    BitmapInfo bmpInfo = BitmapInfo::createBottomUp(IntSize(srcRectWin.right, srcRectWin.bottom), useAlpha ? BitmapInfo::BitCount32 : BitmapInfo::BitCount16);
-    void* pixels;
-    auto hbmpTemp = adoptGDIObject(::CreateDIBSection(0, &bmpInfo, DIB_RGB_COLORS, &pixels, 0, 0));
-
-    if (!hbmpTemp)
-        return;
-
-    auto hmemdc = adoptGDIObject(::CreateCompatibleDC(hdc));
-    HGDIOBJ oldBmp = SelectObject(hmemdc.get(), hbmpTemp.get());
-    if (clippedBmp)
-        drawPatternSimple(hmemdc.get(), srcRectWin, clippedBmp.get(), phaseWin);
-    else if ((op != CompositeSourceOver || canUseDIBits()) && srcRectWin.right <= bmpSize.cx * 2 && srcRectWin.bottom <= bmpSize.cy * 2)
-        drawPatternSimple(hmemdc.get(), srcRectWin, this, bmpSize, phaseWin);
-    else if (ensureHandle())
-        drawPatternSimple(hmemdc.get(), srcRectWin, getHandle(), phaseWin);
-    else {
-        void* pixels;
-        BitmapInfo bmpInfo;
-        auto hbmp = createHandle(&pixels, &bmpInfo, -1, false);
-        if (hbmp)
-            drawPatternSimple(hmemdc.get(), srcRectWin, hbmp.get(), phaseWin);
-        else {
-            SelectObject(hmemdc.get(), oldBmp);
-            return;
-        }
-    }
-
-    if (useAlpha && hasAlphaBlendSupport()) {
-        static const BLENDFUNCTION blend = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
-        bool success = alphaBlendIfSupported(hdc, dstRectWin.left, dstRectWin.top, dstRectWin.right - dstRectWin.left, dstRectWin.bottom - dstRectWin.top,
-            hmemdc.get(), 0, 0, srcRectWin.right, srcRectWin.bottom, blend);
-        ASSERT_UNUSED(success, success);
-    } else if (useAlpha && !hasAlphaBlendSupport() || op == CompositeSourceOver && usesTransparentColor()) {
-        TransparentBlt(hdc, dstRectWin.left, dstRectWin.top, dstRectWin.right - dstRectWin.left,
-            dstRectWin.bottom - dstRectWin.top, hmemdc.get(), 0, 0, srcRectWin.right, srcRectWin.bottom, transparentColor());
-    } else {
-        DWORD bmpOp = op == CompositeCopy ? SRCCOPY
-                    : op == CompositeSourceOver ? SRCCOPY
-                    : op == CompositeXOR ? PATINVERT
-                    : op == CompositeClear ? WHITENESS
-                    : SRCCOPY; // FIXEME: other types?
-
-        StretchDIBits(hdc, dstRectWin.left, dstRectWin.top, dstRectWin.right - dstRectWin.left,
-            dstRectWin.bottom - dstRectWin.top, 0, 0, srcRectWin.right, srcRectWin.bottom,
-            pixels, &bmpInfo, DIB_RGB_COLORS, bmpOp);
-    }
-    SelectObject(hmemdc.get(), oldBmp);
-}
-
-SharedBitmap::DCProvider* SharedBitmap::s_dcProvider = new SharedBitmap::DCProvider;
-
-HDC SharedBitmap::DCProvider::getDC(SharedBitmap* bmp, unsigned* key)
-{
-    if (!bmp || !bmp->ensureHandle())
-        return 0;
-
-    HDC hdc = CreateCompatibleDC(0);
-    if (!hdc)
-        return 0;
-
-    *key = reinterpret_cast<unsigned>(SelectObject(hdc, bmp->getHandle()));
-    RECT rect = { 0, 0, bmp->width(), bmp->height() };
-    auto clipRgn = adoptGDIObject(::CreateRectRgnIndirect(&rect));
-    SelectClipRgn(hdc, clipRgn.get());
-
-    return hdc;
-}
-
-void SharedBitmap::DCProvider::releaseDC(SharedBitmap*, HDC hdc, unsigned key1)
-{
-    if (!hdc)
-        return;
-
-    SelectObject(hdc, reinterpret_cast<HGDIOBJ>(key1));
-    DeleteDC(hdc);
-}
-
-void SharedBitmap::clearPixels(const IntRect& rect)
-{
-    if (!m_pixels)
-        return;
-
-    IntRect bmpRect(0, 0, width(), height());
-    bmpRect.intersect(rect);
-    if (is16bit()) {
-        unsigned w = m_bmpInfo.paddedWidth();
-        unsigned short* dst = static_cast<unsigned short*>(m_pixels);
-        dst += bmpRect.y() * w + bmpRect.x();
-        int wordsToSet = bmpRect.width();
-        const unsigned short* dstEnd = dst + bmpRect.height() * w;
-        while (dst < dstEnd) {
-            wmemset(reinterpret_cast<wchar_t*>(dst), 0, wordsToSet);
-            dst += w;
-        }
-        return;
-    }
-
-    unsigned w = width();
-    unsigned* dst = static_cast<unsigned*>(m_pixels);
-    dst += bmpRect.y() * w + bmpRect.x();
-    int wordsToSet = bmpRect.width() * 2;
-    const unsigned* dstEnd = dst + bmpRect.height() * w;
-    while (dst < dstEnd) {
-        wmemset(reinterpret_cast<wchar_t*>(dst), 0, wordsToSet);
-        dst += w;
-    }
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/SharedBitmap.h b/Source/WebCore/platform/graphics/wince/SharedBitmap.h
deleted file mode 100644 (file)
index b6895b3..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile, Inc. All rights reserved.
- *  Copyright (C) 2010 Patrick Gansterer <paroga@paroga.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 SharedBitmap_h
-#define SharedBitmap_h
-
-#include "AffineTransform.h"
-#include "BitmapInfo.h"
-#include "ColorSpace.h"
-#include "GraphicsTypes.h"
-#include <memory>
-#include <wtf/PassOwnPtr.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefCounted.h>
-#include <wtf/Vector.h>
-#include <wtf/win/GDIObject.h>
-
-namespace WebCore {
-
-class FloatPoint;
-class FloatRect;
-class GraphicsContext;
-class IntRect;
-class IntSize;
-class TransformationMatrix;
-
-class SharedBitmap: public RefCounted<SharedBitmap> {
-public:
-    ~SharedBitmap();
-    static PassRefPtr<SharedBitmap> create(const IntSize&, BitmapInfo::BitCount = BitmapInfo::BitCount32, bool initPixels = true);
-    static PassRefPtr<SharedBitmap> create(const Vector<unsigned>&, const IntSize&, bool hasAlpha = true);
-
-    const BitmapInfo& bitmapInfo() const { return m_bmpInfo; }
-    void* bytes() { return m_pixels; }
-    const void* bytes() const { return m_pixels; }
-    unsigned width() const { return m_bmpInfo.width(); }
-    unsigned height() const { return m_bmpInfo.height(); }
-    unsigned validHeight() const { return m_validHeight; }
-    void setValidHeight(unsigned validHeight) { m_validHeight = validHeight; }
-    void resetPixels(bool black = false);
-    void clearPixels(const IntRect& r);
-    bool locked() const { return m_locked; }
-    void lock() { m_locked = true; }
-    void unlock() { m_locked = false; }
-    bool freeMemory();
-    bool is16bit() const { return m_bmpInfo.is16bit(); }
-    bool is32bit() const { return m_bmpInfo.is32bit(); }
-    bool to16bit();
-    bool hasAlpha() const { return m_hasAlpha; }
-    void setHasAlpha(bool alpha) { m_hasAlpha = alpha; }
-    bool ensureHandle();
-    HBITMAP getHandle() { return m_hbitmap.get(); }
-    GDIObject<HBITMAP> createHandle(void** pixels, BitmapInfo* bmpInfo, int h = -1, bool use16bit = true) const;
-    bool usesTransparentColor() const { return m_usesTransparentColor; }
-    COLORREF transparentColor() const { return m_transparentColor; }
-    void setTransparentColor(COLORREF c)
-    {
-        m_usesTransparentColor = true;
-        m_transparentColor = c;
-    }
-    bool canUseDIBits() const { return !hasAlpha() && !usesTransparentColor(); }
-
-    GDIObject<HBITMAP> clipBitmap(const IntRect&, bool useAlpha, BitmapInfo&, void*& pixels);
-
-    PassRefPtr<SharedBitmap> clipBitmap(const IntRect& rect, bool useAlpha);
-
-    void draw(GraphicsContext* ctxt, const IntRect& dstRect, const IntRect& srcRect, ColorSpace styleColorSpace, CompositeOperator compositeOp, BlendMode blendMode);
-    void drawPattern(GraphicsContext* ctxt, const FloatRect& tileRectIn, const AffineTransform& patternTransform,
-                    const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRect, const IntSize& origSourceSize);
-    void draw(HDC, const IntRect& dstRect, const IntRect& srcRect, CompositeOperator compositeOp, BlendMode blendMode);
-    void drawPattern(HDC, const AffineTransform&, const FloatRect& tileRectIn, const AffineTransform& patternTransform,
-                    const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator op, const FloatRect& destRect, const IntSize& origSourceSize);
-
-    class DCProvider {
-    public:
-        virtual HDC getDC(SharedBitmap*, unsigned*);
-        virtual void releaseDC(SharedBitmap*, HDC, unsigned);
-    };
-
-    static DCProvider* s_dcProvider;
-
-    HDC getDC(unsigned* key1) { return s_dcProvider->getDC(this, key1); }
-    void releaseDC(HDC hdc, unsigned key1) { s_dcProvider->releaseDC(this, hdc, key1); }
-
-    class DCHolder {
-    public:
-        DCHolder(SharedBitmap* bmp = 0) { setInternal(bmp); }
-        ~DCHolder() { clearInternal(); }
-        void set(SharedBitmap* bmp = 0)
-        {
-            clearInternal();
-            setInternal(bmp);
-        }
-        HDC get() const { return m_hdc; }
-    private:
-        DCHolder& operator=(const DCHolder&);
-        DCHolder(const DCHolder&);
-        void clearInternal()
-        {
-            if (m_hdc)
-                m_bitmap->releaseDC(m_hdc, m_key);
-        }
-        void setInternal(SharedBitmap* bmp)
-        {
-            m_bitmap = bmp;
-            m_hdc = bmp ? bmp->getDC(&m_key) : 0;
-        }
-        SharedBitmap* m_bitmap;
-        HDC m_hdc;
-        unsigned m_key;
-    };
-
-private:
-    SharedBitmap(const IntSize&, BitmapInfo::BitCount, bool initPixels);
-    BitmapInfo m_bmpInfo;
-    GDIObject<HBITMAP> m_hbitmap;
-    void* m_pixels;
-    std::unique_ptr<unsigned[]> m_pixelData;
-    COLORREF m_transparentColor;
-    int m_validHeight;
-    bool m_locked;
-    bool m_usesTransparentColor;
-    bool m_hasAlpha;
-};
-
-} // namespace WebCore
-
-#endif // SharedBitmap_h
diff --git a/Source/WebCore/platform/graphics/wince/SimpleFontDataWinCE.cpp b/Source/WebCore/platform/graphics/wince/SimpleFontDataWinCE.cpp
deleted file mode 100644 (file)
index bcb8f8c..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
- * Copyright (C) 2007-2009 Torch Mobile, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution. 
- * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "SimpleFontData.h"
-
-#include "FloatRect.h"
-#include "Font.h"
-#include "FontCache.h"
-#include "FontDescription.h"
-#include <mlang.h>
-#include <wtf/MathExtras.h>
-
-namespace WebCore {
-
-extern HDC g_screenDC;
-
-void SimpleFontData::platformInit()
-{
-    if (!m_platformData.isValid())
-        return;
-
-    const TEXTMETRIC& tm = m_platformData.metrics();
-    m_isSystemFont = m_platformData.isSystemFont();
-
-    float ascent = (tm.tmAscent * m_platformData.size() + 36) / 72.0f;
-    float descent = (tm.tmDescent * m_platformData.size() + 36) / 72.0f;
-    float lineGap = (tm.tmExternalLeading * m_platformData.size() + 36) / 72.0f;
-    m_fontMetrics.setAscent(ascent);
-    m_fontMetrics.setDescent(descent);
-    m_fontMetrics.setLineGap(lineGap);
-    m_fontMetrics.setLineSpacing(lroundf(ascent) + lroundf(descent) + lroundf(lineGap));
-    m_fontMetrics.setXHeight(ascent * 0.56f);
-}
-
-void SimpleFontData::platformDestroy()
-{
-}
-
-PassRefPtr<SimpleFontData> SimpleFontData::platformCreateScaledFontData(const FontDescription& fontDescription, float scaleFactor) const
-{
-    FontDescription fontDesc(fontDescription);
-    fontDesc.setComputedSize(lroundf(scaleFactor * fontDesc.computedSize()));
-    fontDesc.setSpecifiedSize(lroundf(scaleFactor * fontDesc.specifiedSize()));
-    fontDesc.setKeywordSize(lroundf(scaleFactor * fontDesc.keywordSize()));
-    FontPlatformData* result = fontCache().getCachedFontPlatformData(fontDesc, m_platformData.family());
-    if (!result)
-        return 0;
-    return SimpleFontData::create(*result);
-}
-
-DWORD getKnownFontCodePages(const wchar_t* family);
-
-bool SimpleFontData::containsCharacters(const UChar* characters, int length) const
-{
-    if (m_platformData.isDisabled())
-        return true;
-
-    // FIXME: Microsoft documentation seems to imply that characters can be output using a given font and DC
-    // merely by testing code page intersection.  This seems suspect though.  Can't a font only partially
-    // cover a given code page?
-
-    // FIXME: in the case that we failed to get the interface, still use the font.
-    IMLangFontLinkType* langFontLink = fontCache().getFontLinkInterface();
-    if (!langFontLink)
-        return true;
-
-    DWORD fontCodePages = m_platformData.codePages();
-    if (!fontCodePages)
-        return false;
-
-    DWORD acpCodePages = 0;
-    langFontLink->CodePageToCodePages(CP_ACP, &acpCodePages);
-
-    DWORD actualCodePages;
-    long numCharactersProcessed;
-    while (length) {
-        langFontLink->GetStrCodePages(characters, length, acpCodePages, &actualCodePages, &numCharactersProcessed);
-        if (actualCodePages && !(actualCodePages & fontCodePages))
-            return false;
-
-        length -= numCharactersProcessed;
-        characters += numCharactersProcessed;
-    }
-
-    return true;
-}
-
-void SimpleFontData::determinePitch()
-{
-    if (!m_platformData.isValid())
-        return;
-
-    const TEXTMETRIC& tm = m_platformData.metrics();
-
-    // Yes, this looks backwards, but the fixed pitch bit is actually set if the font
-    // is *not* fixed pitch.  Unbelievable but true.
-    m_treatAsFixedPitch = !(tm.tmPitchAndFamily & TMPF_FIXED_PITCH);
-}
-
-FloatRect SimpleFontData::platformBoundsForGlyph(Glyph) const
-{
-    return FloatRect();
-}
-    
-float SimpleFontData::platformWidthForGlyph(Glyph glyph) const
-{
-    if (m_platformData.isDisabled())
-        return 0;
-
-    HGDIOBJ hOldFont = SelectObject(g_screenDC, m_platformData.hfont());
-
-    SIZE fontSize;
-    wchar_t c = glyph;
-    GetTextExtentPoint32(g_screenDC, &c, 1, &fontSize);
-
-    SelectObject(g_screenDC, hOldFont);
-
-    return (float)fontSize.cx * (float)m_platformData.size() / 72.f;
-}
-
-
-void SimpleFontData::platformCharWidthInit()
-{
-    if (!m_platformData.isValid())
-        return;
-
-    const TEXTMETRIC& tm = m_platformData.metrics();
-    m_avgCharWidth = (tm.tmAveCharWidth * m_platformData.size() + 36) / 72;
-    m_maxCharWidth = (tm.tmMaxCharWidth * m_platformData.size() + 36) / 72;
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/platform/graphics/wince/WinCEGraphicsExtras.h b/Source/WebCore/platform/graphics/wince/WinCEGraphicsExtras.h
deleted file mode 100644 (file)
index 4cab21c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *  Copyright (C) 2007-2009 Torch Mobile, Inc.
- *
- *  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 WinCEGraphicsExtras_h
-#define WinCEGraphicsExtras_h
-
-// This file is used to contain small utilities used by WINCE graphics code.
-
-namespace WebCore {
-    // Always round to same direction. 0.5 is rounded to 1,
-    // and -0.5 (0.5 - 1) is rounded to 0 (1 - 1), so that it
-    // is consistent when transformation shifts.
-    static inline int stableRound(double d)
-    {