Adding wx sources and changes to wxWebKit branch.
authorkevino <kevino@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Apr 2007 22:33:17 +0000 (22:33 +0000)
committerkevino <kevino@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 14 Apr 2007 22:33:17 +0000 (22:33 +0000)
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@20893 268f45cc-cd09-0410-ab3c-d52691b4dbfc

33 files changed:
WebCore/platform/wx/ClipboardWx.cpp [new file with mode: 0644]
WebCore/platform/wx/ClipboardWx.h [new file with mode: 0644]
WebCore/platform/wx/CursorWx.cpp [new file with mode: 0644]
WebCore/platform/wx/DragDataWx.cpp [new file with mode: 0644]
WebCore/platform/wx/DragImageWx.cpp [new file with mode: 0644]
WebCore/platform/wx/FontCacheWx.cpp [new file with mode: 0755]
WebCore/platform/wx/FontDataWx.cpp [new file with mode: 0755]
WebCore/platform/wx/FontPlatformData.h [new file with mode: 0644]
WebCore/platform/wx/FontPlatformDataWx.cpp [new file with mode: 0755]
WebCore/platform/wx/FontWx.cpp [new file with mode: 0644]
WebCore/platform/wx/GlyphMapWx.cpp [new file with mode: 0755]
WebCore/platform/wx/KeyEventWin.cpp [new file with mode: 0644]
WebCore/platform/wx/KeyboardCodes.h [new file with mode: 0644]
WebCore/platform/wx/KeyboardEventWx.cpp [new file with mode: 0644]
WebCore/platform/wx/MimeTypeRegistryWx.cpp [new file with mode: 0644]
WebCore/platform/wx/MouseEventWx.cpp [new file with mode: 0644]
WebCore/platform/wx/MouseWheelEventWx.cpp [new file with mode: 0644]
WebCore/platform/wx/PasteboardWx.cpp [new file with mode: 0644]
WebCore/platform/wx/PlatformScrollBar.h [new file with mode: 0644]
WebCore/platform/wx/RenderThemeWx.cpp [new file with mode: 0644]
WebCore/platform/wx/ScreenWx.cpp [new file with mode: 0644]
WebCore/platform/wx/ScrollViewWx.cpp [new file with mode: 0644]
WebCore/platform/wx/SharedTimerWx.cpp [new file with mode: 0644]
WebCore/platform/wx/SoundWx.cpp [new file with mode: 0644]
WebCore/platform/wx/StringWx.cpp [new file with mode: 0644]
WebCore/platform/wx/SystemTimeWx.cpp [new file with mode: 0644]
WebCore/platform/wx/TemporaryLinkStubs.cpp [new file with mode: 0755]
WebCore/platform/wx/WidgetWx.cpp [new file with mode: 0755]
WebCore/platform/wx/wxcode/fontprops.cpp [new file with mode: 0644]
WebCore/platform/wx/wxcode/fontprops.h [new file with mode: 0644]
WebCore/platform/wx/wxcode/gtk/fontprops.cpp [new file with mode: 0644]
WebCore/platform/wx/wxcode/mac/carbon/fontprops.cpp [new file with mode: 0644]
WebCore/platform/wx/wxcode/win/fontprops.cpp [new file with mode: 0644]

diff --git a/WebCore/platform/wx/ClipboardWx.cpp b/WebCore/platform/wx/ClipboardWx.cpp
new file mode 100644 (file)
index 0000000..82a415d
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ *  Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "HashTable.h"
+#include "ClipboardWx.h"
+#include "IntPoint.h"
+#include "PlatformString.h"
+#include "StringHash.h"
+#include "Pasteboard.h"
+
+#define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d (%s)\n", __FILE__, __LINE__, __FUNCTION__); } while(0)
+
+namespace WebCore {
+    
+ClipboardWx::ClipboardWx(ClipboardAccessPolicy policy, bool forDragging) 
+    : Clipboard(policy, forDragging)
+{
+}
+
+void ClipboardWx::clearData(const String& type)
+{
+    notImplemented();
+}
+
+void ClipboardWx::clearAllData() 
+{
+    Pasteboard::generalPasteboard()->clear();
+}
+
+String ClipboardWx::getData(const String& type, bool& success) const 
+{
+    notImplemented();
+    return ""; 
+}
+
+bool ClipboardWx::setData(const String& type, const String& data) 
+{
+    notImplemented();
+    return false;
+}
+
+// extensions beyond IE's API
+HashSet<String> ClipboardWx::types() const 
+{
+    notImplemented();
+    HashSet<String> result;
+    return result;
+}
+
+IntPoint ClipboardWx::dragLocation() const 
+{ 
+    notImplemented();
+    return IntPoint(0,0);
+}
+
+CachedImage* ClipboardWx::dragImage() const 
+{
+    notImplemented();
+    return 0; 
+}
+
+void ClipboardWx::setDragImage(CachedImage*, const IntPoint&) 
+{
+    notImplemented();
+}
+
+Node* ClipboardWx::dragImageElement() 
+{
+    notImplemented();
+    return 0; 
+}
+
+void ClipboardWx::setDragImageElement(Node*, const IntPoint&)
+{
+    notImplemented();
+}
+
+DragImageRef ClipboardWx::createDragImage(IntPoint& dragLoc) const
+{ 
+    notImplemented();
+    return 0;
+}
+
+void ClipboardWx::declareAndWriteDragImage(Element*, const KURL&, const String&, Frame*) 
+{
+    notImplemented();
+}
+
+void ClipboardWx::writeURL(const KURL& url, const String& string, Frame* frame) 
+{
+    Pasteboard::generalPasteboard()->writeURL(url, string, frame);
+}
+
+void ClipboardWx::writeRange(Range*, Frame*) 
+{
+    notImplemented();
+}
+
+bool ClipboardWx::hasData() 
+{
+    notImplemented();
+    return false;
+}
+
+}
diff --git a/WebCore/platform/wx/ClipboardWx.h b/WebCore/platform/wx/ClipboardWx.h
new file mode 100644 (file)
index 0000000..90b7894
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 ClipboardWx_h
+#define ClipboardWx_h
+
+#include "Clipboard.h"
+
+namespace WebCore {
+
+    class CachedImage;
+
+    // State available during IE's events for drag and drop and copy/paste
+    class ClipboardWx : public Clipboard {
+    public:
+        ClipboardWx(ClipboardAccessPolicy policy, bool forDragging);
+        ~ClipboardWx() { }
+    
+        void clearData(const String& type);
+        void clearAllData();
+        String getData(const String& type, bool& success) const;
+        bool setData(const String& type, const String& data);
+    
+        // extensions beyond IE's API
+        HashSet<String> types() const;
+    
+        IntPoint dragLocation() const;
+        CachedImage* dragImage() const;
+        void setDragImage(CachedImage*, const IntPoint&);
+        Node* dragImageElement();
+        void setDragImageElement(Node*, const IntPoint&);
+
+        virtual DragImageRef createDragImage(IntPoint& dragLoc) const;
+        virtual void declareAndWriteDragImage(Element*, const KURL&, const String& title, Frame*);
+        virtual void writeURL(const KURL&, const String&, Frame*);
+        virtual void writeRange(Range*, Frame*);
+
+        virtual bool hasData();
+    };
+} 
+
+#endif // ClipboardWx_h
diff --git a/WebCore/platform/wx/CursorWx.cpp b/WebCore/platform/wx/CursorWx.cpp
new file mode 100644 (file)
index 0000000..4fa85a3
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "Cursor.h"
+
+#include <wx/defs.h>
+#include <wx/cursor.h>
+
+namespace WebCore {
+
+Cursor::Cursor(const Cursor& other)
+    : m_impl(other.m_impl)
+{
+}
+
+Cursor::Cursor(Image*, const IntPoint&) { }
+
+Cursor::~Cursor()
+{
+}
+
+Cursor& Cursor::operator=(const Cursor& other)
+{
+    m_impl = other.m_impl;
+    return *this;
+}
+
+Cursor::Cursor(wxCursor* c)
+    : m_impl(c)
+{
+}
+
+const Cursor& pointerCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_ARROW);
+    return c;
+}
+
+const Cursor& crossCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_CROSS);
+    return c;
+}
+
+const Cursor& handCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_HAND);
+    return c;
+}
+
+const Cursor& iBeamCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_IBEAM);
+    return c;
+}
+
+const Cursor& waitCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_WAIT);
+    return c;
+}
+
+const Cursor& helpCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_QUESTION_ARROW);
+    return c;
+}
+
+const Cursor& eastResizeCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_SIZEWE);
+    return c;
+}
+
+const Cursor& northResizeCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_SIZENS);
+    return c;
+}
+
+const Cursor& northEastResizeCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_SIZENESW);
+    return c;
+}
+
+const Cursor& northWestResizeCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_SIZENWSE);
+    return c;
+}
+
+const Cursor& southResizeCursor()
+{
+    static Cursor c = northResizeCursor();
+    return c;
+}
+
+const Cursor& southEastResizeCursor()
+{
+    static Cursor c = northWestResizeCursor();
+    return c;
+}
+
+const Cursor& southWestResizeCursor()
+{
+    static Cursor c = northEastResizeCursor();
+    return c;
+}
+
+const Cursor& westResizeCursor()
+{
+    static Cursor c = eastResizeCursor();
+    return c;
+}
+
+const Cursor& northSouthResizeCursor()
+{
+    static Cursor c = northResizeCursor();
+    return c;
+}
+
+const Cursor& eastWestResizeCursor()
+{
+    static Cursor c = eastResizeCursor();
+    return c;
+}
+
+const Cursor& northEastSouthWestResizeCursor()
+{
+    static Cursor c = northEastResizeCursor();
+    return c;
+}
+
+const Cursor& northWestSouthEastResizeCursor()
+{
+    static Cursor c = northWestResizeCursor();
+    return c;
+}
+
+const Cursor& columnResizeCursor()
+{
+    // FIXME: Windows does not have a standard column resize cursor
+    static Cursor c = new wxCursor(wxCURSOR_SIZING);
+    return c;
+}
+
+const Cursor& rowResizeCursor()
+{
+    // FIXME: Windows does not have a standard row resize cursor
+    static Cursor c = new wxCursor(wxCURSOR_SIZING);
+    return c;
+}
+
+const Cursor& verticalTextCursor()
+{
+    return iBeamCursor();
+}
+
+const Cursor& cellCursor()
+{
+    return pointerCursor();
+}
+
+const Cursor& contextMenuCursor()
+{
+    return handCursor();
+}
+
+const Cursor& noDropCursor()
+{
+    return pointerCursor();
+}
+
+const Cursor& progressCursor()
+{
+    return waitCursor();
+}
+
+const Cursor& aliasCursor()
+{
+    return pointerCursor();
+}
+
+const Cursor& copyCursor()
+{
+    return pointerCursor();
+}
+
+const Cursor& noneCursor()
+{
+    // fix me
+    return NULL;
+}
+
+const Cursor& notAllowedCursor()
+{
+    static Cursor c = new wxCursor(wxCURSOR_NO_ENTRY);
+    return c;
+}
+}
diff --git a/WebCore/platform/wx/DragDataWx.cpp b/WebCore/platform/wx/DragDataWx.cpp
new file mode 100644 (file)
index 0000000..73b5620
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2007 Apple 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 COMPUTER, 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 COMPUTER, 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 "DragData.h"
+
+#include "Document.h"
+#include "DocumentFragment.h"
+
+namespace WebCore {
+
+bool DragData::canSmartReplace() const
+{
+    return false;
+}
+    
+bool DragData::containsColor() const
+{
+    return false;
+}
+
+bool DragData::containsPlainText() const
+{
+    return false;
+}
+
+String DragData::asPlainText() const
+{
+    return String();
+}
+    
+Color DragData::asColor() const
+{
+    return Color();
+}
+
+Clipboard* DragData::createClipboard(ClipboardAccessPolicy) const
+{
+    return 0;
+}
+    
+bool DragData::containsCompatibleContent() const
+{
+    return false;
+}
+    
+bool DragData::containsURL() const
+{
+    return false;
+}
+    
+String DragData::asURL(String* title) const
+{
+    return String();
+}
+    
+    
+PassRefPtr<DocumentFragment> DragData::asFragment(Document*) const
+{
+    return 0;
+}
+    
+}
+
diff --git a/WebCore/platform/wx/DragImageWx.cpp b/WebCore/platform/wx/DragImageWx.cpp
new file mode 100644 (file)
index 0000000..017258c
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2007 Apple 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 COMPUTER, 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 COMPUTER, 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 "DragImage.h"
+
+#include "CachedImage.h"
+#include "Image.h"
+
+namespace WebCore {
+
+IntSize dragImageSize(DragImageRef)
+{
+    return IntSize(0, 0);
+}
+
+void deleteDragImage(DragImageRef)
+{
+}
+
+DragImageRef scaleDragImage(DragImageRef image, float)
+{
+    return image;
+}
+    
+DragImageRef dissolveDragImageToFraction(DragImageRef image, float)
+{
+    return image;
+}
+        
+DragImageRef createDragImageFromImage(Image*)
+{
+    return 0;
+}
+    
+DragImageRef createDragImageIconForCachedImage(CachedImage*)
+{
+    return 0;     
+}
+    
+}
diff --git a/WebCore/platform/wx/FontCacheWx.cpp b/WebCore/platform/wx/FontCacheWx.cpp
new file mode 100755 (executable)
index 0000000..ce73006
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2006 Apple Computer, 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. 
+ * 3.  Neither the name of Apple Computer, 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 "FontPlatformData.h"
+#include "Font.h"
+#include "FontData.h"
+
+namespace WebCore
+{
+
+void FontCache::platformInit()
+{
+}
+
+const FontData* FontCache::getFontDataForCharacters(const Font& font, const UChar* characters, int length)
+{
+    FontData* fontData = 0;
+    fontData = new FontData(FontPlatformData(font.fontDescription(), font.family().family()));
+    return fontData;
+}
+
+FontPlatformData* FontCache::getSimilarFontPlatformData(const Font& font)
+{
+    return new FontPlatformData(font.fontDescription(), font.family().family());
+}
+
+FontPlatformData* FontCache::getLastResortFallbackFont(const Font& font)
+{
+    // 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.
+    static AtomicString timesStr("systemfont");
+    return getCachedFontPlatformData(font.fontDescription(), timesStr);
+}
+
+FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family)
+{
+    return new FontPlatformData(fontDescription,family);
+}
+
+}
diff --git a/WebCore/platform/wx/FontDataWx.cpp b/WebCore/platform/wx/FontDataWx.cpp
new file mode 100755 (executable)
index 0000000..88647d5
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2006 Apple Computer, 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. 
+ * 3.  Neither the name of Apple Computer, 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 "FontData.h"
+#include "FontCache.h"
+#include "FloatRect.h"
+#include "FontDescription.h"
+#include <wtf/MathExtras.h>
+#include <unicode/uchar.h>
+#include <unicode/unorm.h>
+
+#include <wx/defs.h>
+#include <wx/dcscreen.h>
+#include "fontprops.h"
+
+namespace WebCore
+{
+
+void FontData::platformInit()
+{    
+    wxFont* font = m_font.font();
+    wxFontProperties props = wxFontProperties(font);
+    m_ascent = props.GetAscent();
+    m_descent = props.GetDescent();
+    m_lineSpacing = props.GetLineSpacing();
+    m_xHeight = props.GetXHeight();
+    m_lineGap = props.GetLineGap();
+}
+
+void FontData::platformDestroy()
+{
+    delete m_smallCapsFontData;
+}
+
+FontData* FontData::smallCapsFontData(const FontDescription& fontDescription) const
+{
+    if (!m_smallCapsFontData){
+        FontDescription desc = FontDescription(fontDescription);
+        desc.setSpecifiedSize(0.70f*fontDescription.computedSize());
+        const FontPlatformData* pdata = new FontPlatformData(desc, desc.family().family());
+        m_smallCapsFontData = new FontData(*pdata);
+    }
+    return m_smallCapsFontData;
+}
+
+bool FontData::containsCharacters(const UChar* characters, int length) const
+{
+    // FIXME: We will need to implement this to load non-ASCII encoding sites
+    return true;
+}
+
+void FontData::determinePitch()
+{
+    if (m_font.font() && m_font.font()->Ok())
+        m_treatAsFixedPitch = m_font.font()->IsFixedWidth();
+    else
+        m_treatAsFixedPitch = false;
+}
+
+float FontData::platformWidthForGlyph(Glyph glyph) const
+{
+    // TODO: fix this! Make GetTextExtents a method of wxFont in 2.9
+    int width = 10;
+    GetTextExtent(*m_font.font(), (wxChar)glyph, &width, NULL);
+    return width;
+}
+
+}
diff --git a/WebCore/platform/wx/FontPlatformData.h b/WebCore/platform/wx/FontPlatformData.h
new file mode 100644 (file)
index 0000000..e78bd04
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2006 Kevin Ollivier  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. 
+ * 3.  Neither the name of Apple Computer, 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.
+ */
+ #ifndef FontPlatformData_H
+#define FontPlatformData_H
+
+#include "config.h"
+#include "FontDescription.h"
+#include "AtomicString.h"
+#include "StringImpl.h"
+
+class wxFont;
+
+namespace WebCore {
+
+struct FontPlatformData {
+    class Deleted {};
+
+    FontPlatformData(Deleted)
+    : m_font(NULL)
+    { }
+
+    ~FontPlatformData();
+
+    FontPlatformData(wxFont* f) 
+    : m_font(f)
+    {
+    }
+    
+    FontPlatformData(const FontDescription&, const AtomicString&);
+    
+    FontPlatformData() 
+    : m_font(NULL)
+    {
+    }
+    
+    wxFont* font() const { return m_font; }
+    
+    unsigned hash() const
+    { 
+        return StringImpl::computeHash((UChar*)0, 0);
+    }
+
+    bool operator==(const FontPlatformData& other) const
+    { 
+        return m_font == other.m_font;
+    }
+
+private:
+    wxFont* m_font;
+};
+
+}
+
+#endif
diff --git a/WebCore/platform/wx/FontPlatformDataWx.cpp b/WebCore/platform/wx/FontPlatformDataWx.cpp
new file mode 100755 (executable)
index 0000000..401bb6d
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "FontPlatformData.h"
+#include "FontDescription.h"
+
+#include <wx/defs.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+
+namespace WebCore {
+
+static wxFontFamily fontFamilyToWxFontFamily(const int family)
+{
+    switch (family){
+        case FontDescription::StandardFamily:
+            return wxFONTFAMILY_DEFAULT;
+        case FontDescription::SerifFamily:
+            return wxFONTFAMILY_ROMAN;
+        case FontDescription::SansSerifFamily:
+            return wxFONTFAMILY_MODERN;
+        case FontDescription::MonospaceFamily:
+            return wxFONTFAMILY_TELETYPE; // TODO: Check these are equivalent
+        case FontDescription::CursiveFamily:
+            return wxFONTFAMILY_SCRIPT;
+        case FontDescription::FantasyFamily:
+            return wxFONTFAMILY_DECORATIVE;
+        default:
+            return wxFONTFAMILY_DEFAULT;
+    }
+}
+
+static wxFontWeight fontWeightToWxFontWeight(bool isBold)
+{
+    if (isBold)
+        return wxFONTWEIGHT_BOLD;
+    
+    return wxFONTWEIGHT_NORMAL;
+} 
+
+static int italicToWxFontStyle(bool isItalic)
+{
+    if (isItalic)
+        return wxFONTSTYLE_ITALIC;
+    
+    return wxFONTSTYLE_NORMAL;
+}
+
+FontPlatformData::FontPlatformData(const FontDescription& desc, const AtomicString& family)
+{
+// NB: The Windows wxFont constructor has two forms, one taking a wxSize (with pixels)
+// and one taking an int (points). When points are used, Windows calculates
+// a pixel size using an algorithm which causes the size to be way off. However,
+// this is a moot issue on Linux and Mac as they only accept the point argument. So,
+// we use the pixel size constructor on Windows, but we use point size on Linux and Mac.
+#if __WXMSW__
+    m_font = new wxFont(   wxSize(0, desc.computedPixelSize()), 
+                                fontFamilyToWxFontFamily(desc.genericFamily()), 
+                                italicToWxFontStyle(desc.italic()),
+                                fontWeightToWxFontWeight(desc.bold()),
+                                false,
+                                family.domString()
+                            ); 
+#else
+    m_font = new wxFont(   desc.computedPixelSize(), 
+                                fontFamilyToWxFontFamily(desc.genericFamily()), 
+                                italicToWxFontStyle(desc.italic()),
+                                fontWeightToWxFontWeight(desc.bold()),
+                                false,
+                                family.domString()
+                            ); 
+#endif
+}
+    
+FontPlatformData::~FontPlatformData()
+{
+}
+
+}
diff --git a/WebCore/platform/wx/FontWx.cpp b/WebCore/platform/wx/FontWx.cpp
new file mode 100644 (file)
index 0000000..c170a2f
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier.  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 COMPUTER, 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 COMPUTER, 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 "FontData.h"
+#include "FontFallbackList.h"
+#include "GraphicsContext.h"
+#include "IntRect.h"
+#include "GlyphBuffer.h"
+#include "fontprops.h"
+
+#include <wx/defs.h>
+#include <wx/dcclient.h>
+
+namespace WebCore {
+
+#define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d (%s)\n", __FILE__, __LINE__, __FUNCTION__); } while(0)
+
+void Font::drawGlyphs(GraphicsContext* graphicsContext, const FontData* font, const GlyphBuffer& glyphBuffer, 
+                      int from, int numGlyphs, const FloatPoint& point) const
+{
+    // prepare DC
+    Color color = graphicsContext->fillColor();
+
+#if USE(WXGC)
+    wxGraphicsContext* dc = (wxGraphicsContext*)graphicsContext->platformContext();
+    dc->SetFont(*font->getWxFont(), color);
+#else
+    wxDC* dc = graphicsContext->platformContext();
+    dc->SetTextBackground(color);
+    dc->SetTextForeground(color);
+    dc->SetFont(*font->getWxFont());
+#endif
+
+    // convert glyphs to wxString
+    GlyphBufferGlyph* glyphs = const_cast<GlyphBufferGlyph*>(glyphBuffer.glyphs(from));
+    int offset = point.x();
+    wxString text = wxEmptyString;
+    for (unsigned i = 0; i < numGlyphs; i++) {
+        text = text.Append((wxChar)glyphs[i]);
+        offset += glyphBuffer.advanceAt(from + i);
+    }
+    
+    // the y point is actually the bottom point of the text, turn it into the top
+    float height = font->ascent() - font->descent();
+    wxCoord ypoint = (wxCoord) (point.y() - height);
+     
+    dc->DrawText(text, (wxCoord)point.x(), ypoint);
+}
+
+FloatRect Font::selectionRectForComplexText(const TextRun& run, const TextStyle& style, const IntPoint& point, int h, int from, int to) const
+{
+    notImplemented();
+    return FloatRect();
+}
+
+void Font::drawComplexText(GraphicsContext* graphicsContext, const TextRun& run, const TextStyle& style, const FloatPoint& point, int from, int to) const
+{
+    notImplemented();
+}
+
+float Font::floatWidthForComplexText(const TextRun& run, const TextStyle& style) const
+{
+    notImplemented();
+    return 0;
+}
+
+int Font::offsetForPositionForComplexText(const TextRun& run, const TextStyle& style, int x, bool includePartialGlyphs) const
+{
+    notImplemented();
+    return 0;
+}
+
+}
diff --git a/WebCore/platform/wx/GlyphMapWx.cpp b/WebCore/platform/wx/GlyphMapWx.cpp
new file mode 100755 (executable)
index 0000000..908ad1e
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2006 Apple Computer, 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. 
+ * 3.  Neither the name of Apple Computer, 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 "GlyphPageTreeNode.h"
+#include "FontData.h"
+#include <unicode/utf16.h>
+
+namespace WebCore
+{
+
+bool GlyphPage::fill(UChar* buffer, unsigned bufferLength, const FontData* fontData)
+{
+    bool isUtf16 = bufferLength != GlyphPage::size;
+
+    for (unsigned i = 0; i < GlyphPage::size; i++) {
+        UChar32 character;
+
+        if(isUtf16) {
+            UChar lead = buffer[i * 2];
+            UChar trail = buffer[i * 2 + 1];
+            character = U16_GET_SUPPLEMENTARY(lead, trail);
+        } else {
+            character = buffer[i];
+        }
+
+        setGlyphDataForIndex(i, character, fontData);
+    }
+
+    return true;
+}
+
+}
\ No newline at end of file
diff --git a/WebCore/platform/wx/KeyEventWin.cpp b/WebCore/platform/wx/KeyEventWin.cpp
new file mode 100644 (file)
index 0000000..0dd90f5
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2006 Apple Computer, 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 COMPUTER, 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 COMPUTER, 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 "PlatformKeyboardEvent.h"
+#include <windows.h>
+
+#define REPEAT_COUNT_MASK           0x0000FFFF
+#define NEW_RELEASE_STATE_MASK      0x80000000
+#define PREVIOUS_DOWN_STATE_MASK    0x40000000
+#define ALT_KEY_DOWN_MASK           0x20000000
+
+#define HIGH_BIT_MASK_SHORT         0x8000
+
+namespace WebCore {
+
+// FIXME: This is incomplete.  We should change this to mirror
+// more like what Firefox does, and generate these switch statements
+// at build time.
+static String keyIdentifierForWindowsKeyCode(short keyCode)
+{
+    switch (keyCode) {
+        case VK_MENU:
+            return "Alt";
+        case VK_CLEAR:
+            return "Clear";
+        case VK_DOWN:
+            return "Down";
+        // "End"
+        case VK_END:
+            return "End";
+        // "Enter"
+        case VK_RETURN:
+            return "Enter";
+        case VK_EXECUTE:
+            return "Execute";
+        case VK_F1:
+            return "F1";
+        case VK_F2:
+            return "F2";
+        case VK_F3:
+            return "F3";
+        case VK_F4:
+            return "F4";
+        case VK_F5:
+            return "F5";
+        case VK_F6:
+            return "F6";
+        case VK_F7:
+            return "F7";
+        case VK_F8:
+            return "F8";
+        case VK_F9:
+            return "F9";
+        case VK_F10:
+            return "F11";
+        case VK_F12:
+            return "F12";
+        case VK_F13:
+            return "F13";
+        case VK_F14:
+            return "F14";
+        case VK_F15:
+            return "F15";
+        case VK_F16:
+            return "F16";
+        case VK_F17:
+            return "F17";
+        case VK_F18:
+            return "F18";
+        case VK_F19:
+            return "F19";
+        case VK_F20:
+            return "F20";
+        case VK_F21:
+            return "F21";
+        case VK_F22:
+            return "F22";
+        case VK_F23:
+            return "F23";
+        case VK_F24:
+            return "F24";
+        case VK_HELP:
+            return "Help";
+        case VK_HOME:
+            return "Home";
+        case VK_INSERT:
+            return "Insert";
+        case VK_LEFT:
+            return "Left";
+        case VK_NEXT:
+            return "PageDown";
+        case VK_PRIOR:
+            return "PageUp";
+        case VK_PAUSE:
+            return "Pause";
+        case VK_SNAPSHOT:
+            return "PrintScreen";
+        case VK_RIGHT:
+            return "Right";
+        case VK_SCROLL:
+            return "Scroll";
+        case VK_SELECT:
+            return "Select";
+        case VK_UP:
+            return "Up";
+        // Standard says that DEL becomes U+00007F.
+        case VK_DELETE:
+            return "U+00007F";
+        default:
+            return String::sprintf("U+%06X", toupper(keyCode));
+    }
+}
+
+static String singleCharacterString(UChar c) { return String(&c, 1); }
+
+PlatformKeyboardEvent::PlatformKeyboardEvent(HWND hWnd, WPARAM wParam, LPARAM lParam)
+    : m_text(singleCharacterString(wParam))
+    , m_unmodifiedText(singleCharacterString(wParam))
+    , m_keyIdentifier(keyIdentifierForWindowsKeyCode(wParam))
+    , m_isKeyUp((lParam & NEW_RELEASE_STATE_MASK))
+    , m_autoRepeat(lParam & REPEAT_COUNT_MASK)
+    , m_WindowsKeyCode(wParam)
+    , m_isKeypad(false) // FIXME
+    , m_shiftKey(GetAsyncKeyState(VK_SHIFT) & HIGH_BIT_MASK_SHORT)
+    , m_ctrlKey(GetAsyncKeyState(VK_CONTROL) & HIGH_BIT_MASK_SHORT)
+    , m_altKey(lParam & ALT_KEY_DOWN_MASK)
+    , m_metaKey(lParam & ALT_KEY_DOWN_MASK) // FIXME: Is this right?
+{
+    if (!m_shiftKey)
+        m_text = String(singleCharacterString(tolower(wParam)));
+}
+
+}
diff --git a/WebCore/platform/wx/KeyboardCodes.h b/WebCore/platform/wx/KeyboardCodes.h
new file mode 100644 (file)
index 0000000..86ee48c
--- /dev/null
@@ -0,0 +1,544 @@
+/*
+ * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com 
+ *
+ * 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 COMPUTER, 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 COMPUTER, 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 KeyboardCodes_h
+#define KeyboardCodes_h
+
+namespace WebCore {
+
+// VK_LBUTTON (01) Left mouse button
+// VK_RBUTTON (02) Right mouse button
+// VK_CANCEL (03) Control-break processing
+// VK_MBUTTON (04) Middle mouse button (three-button mouse)
+// VK_XBUTTON1 (05)
+// VK_XBUTTON2 (06)
+
+// VK_BACK (08) BACKSPACE key
+const int VK_BACK = 0x08;
+
+// VK_TAB (09) TAB key
+const int VK_TAB = 0x09;
+
+// VK_CLEAR (0C) CLEAR key
+const int VK_CLEAR = 0x0C;
+
+// VK_RETURN (0D)
+const int VK_RETURN = 0x0D;
+
+// VK_SHIFT (10) SHIFT key
+const int VK_SHIFT = 0x10;
+
+// VK_CONTROL (11) CTRL key
+const int VK_CONTROL = 0x11;
+
+// VK_MENU (12) ALT key
+const int VK_MENU = 0x12;
+
+// VK_PAUSE (13) PAUSE key
+const int VK_PAUSE = 0x13;
+
+// VK_CAPITAL (14) CAPS LOCK key
+const int VK_CAPITAL = 0x14;
+
+// VK_KANA (15) Input Method Editor (IME) Kana mode
+const int VK_KANA = 0x15;
+
+// VK_HANGUEL (15) IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
+// VK_HANGUL (15) IME Hangul mode
+const int VK_HANGUL = 0x15;
+
+// VK_JUNJA (17) IME Junja mode
+const int VK_JUNJA = 0x17;
+
+// VK_FINAL (18) IME final mode
+const int VK_FINAL = 0x18;
+
+// VK_HANJA (19) IME Hanja mode
+const int VK_HANJA = 0x19;
+
+// VK_KANJI (19) IME Kanji mode
+const int VK_KANJI = 0x19;
+
+// VK_ESCAPE (1B) ESC key
+const int VK_ESCAPE = 0x1B;
+
+// VK_CONVERT (1C) IME convert
+const int VK_CONVERT = 0x1C;
+
+// VK_NONCONVERT (1D) IME nonconvert
+const int VK_NONCONVERT = 0x1D;
+
+// VK_ACCEPT (1E) IME accept
+const int VK_ACCEPT = 0x1E;
+
+// VK_MODECHANGE (1F) IME mode change request
+const int VK_MODECHANGE = 0x1F;
+
+// VK_SPACE (20) SPACEBAR
+const int VK_SPACE = 0x20;
+
+// VK_PRIOR (21) PAGE UP key
+const int VK_PRIOR = 0x21;
+
+// VK_NEXT (22) PAGE DOWN key
+const int VK_NEXT = 0x22;
+
+// VK_END (23) END key
+const int VK_END = 0x23;
+
+// VK_HOME (24) HOME key
+const int VK_HOME = 0x24;
+
+// VK_LEFT (25) LEFT ARROW key
+const int VK_LEFT = 0x25;
+
+// VK_UP (26) UP ARROW key
+const int VK_UP = 0x26;
+
+// VK_RIGHT (27) RIGHT ARROW key
+const int VK_RIGHT = 0x27;
+
+// VK_DOWN (28) DOWN ARROW key
+const int VK_DOWN = 0x28;
+
+// VK_SELECT (29) SELECT key
+const int VK_SELECT = 0x29;
+
+// VK_PRINT (2A) PRINT key
+const int VK_PRINT = 0x2A;
+
+// VK_EXECUTE (2B) EXECUTE key
+const int VK_EXECUTE = 0x2B;
+
+// VK_SNAPSHOT (2C) PRINT SCREEN key
+const int VK_SNAPSHOT = 0x2C;
+
+// VK_INSERT (2D) INS key
+const int VK_INSERT = 0x2D;
+
+// VK_DELETE (2E) DEL key
+const int VK_DELETE = 0x2E;
+
+// VK_HELP (2F) HELP key
+const int VK_HELP = 0x2F;
+
+// (30) 0 key
+const int VK_0 = 0x30;
+
+// (31) 1 key
+const int VK_1 = 0x31;
+
+// (32) 2 key
+const int VK_2 = 0x32;
+
+// (33) 3 key
+const int VK_3 = 0x33;
+
+// (34) 4 key
+const int VK_4 = 0x34;
+
+// (35) 5 key;
+
+const int VK_5 = 0x35;
+
+// (36) 6 key
+const int VK_6 = 0x36;
+
+// (37) 7 key
+const int VK_7 = 0x37;
+
+// (38) 8 key
+const int VK_8 = 0x38;
+
+// (39) 9 key
+const int VK_9 = 0x39;
+
+// (41) A key
+const int VK_A = 0x41;
+
+// (42) B key
+const int VK_B = 0x42;
+
+// (43) C key
+const int VK_C = 0x43;
+
+// (44) D key
+const int VK_D = 0x44;
+
+// (45) E key
+const int VK_E = 0x45;
+
+// (46) F key
+const int VK_F = 0x46;
+
+// (47) G key
+const int VK_G = 0x47;
+
+// (48) H key
+const int VK_H = 0x48;
+
+// (49) I key
+const int VK_I = 0x49;
+
+// (4A) J key
+const int VK_J = 0x4A;
+
+// (4B) K key
+const int VK_K = 0x4B;
+
+// (4C) L key
+const int VK_L = 0x4C;
+
+// (4D) M key
+const int VK_M = 0x4D;
+
+// (4E) N key
+const int VK_N = 0x4E;
+
+// (4F) O key
+const int VK_O = 0x4F;
+
+// (50) P key
+const int VK_P = 0x50;
+
+// (51) Q key
+const int VK_Q = 0x51;
+
+// (52) R key
+const int VK_R = 0x52;
+
+// (53) S key
+const int VK_S = 0x53;
+
+// (54) T key
+const int VK_T = 0x54;
+
+// (55) U key
+const int VK_U = 0x55;
+
+// (56) V key
+const int VK_V = 0x56;
+
+// (57) W key
+const int VK_W = 0x57;
+
+// (58) X key
+const int VK_X = 0x58;
+
+// (59) Y key
+const int VK_Y = 0x59;
+
+// (5A) Z key
+const int VK_Z = 0x5A;
+
+// VK_LWIN (5B) Left Windows key (Microsoft Natural keyboard)
+const int VK_LWIN = 0x5B;
+
+// VK_RWIN (5C) Right Windows key (Natural keyboard)
+const int VK_RWIN = 0x5C;
+
+// VK_APPS (5D) Applications key (Natural keyboard)
+const int VK_APPS = 0x5D;
+
+// VK_SLEEP (5F) Computer Sleep key
+const int VK_SLEEP = 0x5F;
+
+// VK_NUMPAD0 (60) Numeric keypad 0 key
+const int VK_NUMPAD0 = 0x60;
+
+// VK_NUMPAD1 (61) Numeric keypad 1 key
+const int VK_NUMPAD1 = 0x61;
+
+// VK_NUMPAD2 (62) Numeric keypad 2 key
+const int VK_NUMPAD2 = 0x62;
+
+// VK_NUMPAD3 (63) Numeric keypad 3 key
+const int VK_NUMPAD3 = 0x63;
+
+// VK_NUMPAD4 (64) Numeric keypad 4 key
+const int VK_NUMPAD4 = 0x64;
+
+// VK_NUMPAD5 (65) Numeric keypad 5 key
+const int VK_NUMPAD5 = 0x65;
+
+// VK_NUMPAD6 (66) Numeric keypad 6 key
+const int VK_NUMPAD6 = 0x66;
+
+// VK_NUMPAD7 (67) Numeric keypad 7 key
+const int VK_NUMPAD7 = 0x67;
+
+// VK_NUMPAD8 (68) Numeric keypad 8 key
+const int VK_NUMPAD8 = 0x68;
+
+// VK_NUMPAD9 (69) Numeric keypad 9 key
+const int VK_NUMPAD9 = 0x69;
+
+// VK_MULTIPLY (6A) Multiply key
+const int VK_MULTIPLY = 0x6A;
+
+// VK_ADD (6B) Add key
+const int VK_ADD = 0x6B;
+
+// VK_SEPARATOR (6C) Separator key
+const int VK_SEPARATOR = 0x6C;
+
+// VK_SUBTRACT (6D) Subtract key
+const int VK_SUBTRACT = 0x6D;
+
+// VK_DECIMAL (6E) Decimal key
+const int VK_DECIMAL = 0x6E;
+
+// VK_DIVIDE (6F) Divide key
+const int VK_DIVIDE = 0x6F;
+
+// VK_F1 (70) F1 key
+const int VK_F1 = 0x70;
+
+// VK_F2 (71) F2 key
+const int VK_F2 = 0x71;
+
+// VK_F3 (72) F3 key
+const int VK_F3 = 0x72;
+
+// VK_F4 (73) F4 key
+const int VK_F4 = 0x73;
+
+// VK_F5 (74) F5 key
+const int VK_F5 = 0x74;
+
+// VK_F6 (75) F6 key
+const int VK_F6 = 0x75;
+
+// VK_F7 (76) F7 key
+const int VK_F7 = 0x76;
+
+// VK_F8 (77) F8 key
+const int VK_F8 = 0x77;
+
+// VK_F9 (78) F9 key
+const int VK_F9 = 0x78;
+
+// VK_F10 (79) F10 key
+const int VK_F10 = 0x79;
+
+// VK_F11 (7A) F11 key
+const int VK_F11 = 0x7A;
+
+// VK_F12 (7B) F12 key
+const int VK_F12 = 0x7B;
+
+// VK_F13 (7C) F13 key
+const int VK_F13 = 0x7C;
+
+// VK_F14 (7D) F14 key
+const int VK_F14 = 0x7D;
+
+// VK_F15 (7E) F15 key
+const int VK_F15 = 0x7E;
+
+// VK_F16 (7F) F16 key
+const int VK_F16 = 0x7F;
+
+// VK_F17 (80H) F17 key
+const int VK_F17 = 0x80;
+
+// VK_F18 (81H) F18 key
+const int VK_F18 = 0x81;
+
+// VK_F19 (82H) F19 key
+const int VK_F19 = 0x82;
+
+// VK_F20 (83H) F20 key
+const int VK_F20 = 0x83;
+
+// VK_F21 (84H) F21 key
+const int VK_F21 = 0x84;
+
+// VK_F22 (85H) F22 key
+const int VK_F22 = 0x85;
+
+// VK_F23 (86H) F23 key
+const int VK_F23 = 0x86;
+
+// VK_F24 (87H) F24 key
+const int VK_F24 = 0x87;
+
+// VK_NUMLOCK (90) NUM LOCK key
+const int VK_NUMLOCK = 0x90;
+
+// VK_SCROLL (91) SCROLL LOCK key
+const int VK_SCROLL = 0x91;
+
+// VK_LSHIFT (A0) Left SHIFT key
+const int VK_LSHIFT = 0xA0;
+
+// VK_RSHIFT (A1) Right SHIFT key
+const int VK_RSHIFT = 0xA1;
+
+// VK_LCONTROL (A2) Left CONTROL key
+const int VK_LCONTROL = 0xA2;
+
+// VK_RCONTROL (A3) Right CONTROL key
+const int VK_RCONTROL = 0xA3;
+
+// VK_LMENU (A4) Left MENU key
+const int VK_LMENU = 0xA4;
+
+// VK_RMENU (A5) Right MENU key
+const int VK_RMENU = 0xA5;
+
+// VK_BROWSER_BACK (A6) Windows 2000/XP: Browser Back key
+const int VK_BROWSER_BACK = 0xA6;
+
+// VK_BROWSER_FORWARD (A7) Windows 2000/XP: Browser Forward key
+const int VK_BROWSER_FORWARD = 0xA7;
+
+// VK_BROWSER_REFRESH (A8) Windows 2000/XP: Browser Refresh key
+const int VK_BROWSER_REFRESH = 0xA8;
+
+// VK_BROWSER_STOP (A9) Windows 2000/XP: Browser Stop key
+const int VK_BROWSER_STOP = 0xA9;
+
+// VK_BROWSER_SEARCH (AA) Windows 2000/XP: Browser Search key
+const int VK_BROWSER_SEARCH = 0xAA;
+
+// VK_BROWSER_FAVORITES (AB) Windows 2000/XP: Browser Favorites key
+const int VK_BROWSER_FAVORITES = 0xAB;
+
+// VK_BROWSER_HOME (AC) Windows 2000/XP: Browser Start and Home key
+const int VK_BROWSER_HOME = 0xAC;
+
+// VK_VOLUME_MUTE (AD) Windows 2000/XP: Volume Mute key
+const int VK_VOLUME_MUTE = 0xAD;
+
+// VK_VOLUME_DOWN (AE) Windows 2000/XP: Volume Down key
+const int VK_VOLUME_DOWN = 0xAE;
+
+// VK_VOLUME_UP (AF) Windows 2000/XP: Volume Up key
+const int VK_VOLUME_UP = 0xAF;
+
+// VK_MEDIA_NEXT_TRACK (B0) Windows 2000/XP: Next Track key
+const int VK_MEDIA_NEXT_TRACK = 0xB0;
+
+// VK_MEDIA_PREV_TRACK (B1) Windows 2000/XP: Previous Track key
+const int VK_MEDIA_PREV_TRACK = 0xB1;
+
+// VK_MEDIA_STOP (B2) Windows 2000/XP: Stop Media key
+const int VK_MEDIA_STOP = 0xB2;
+
+// VK_MEDIA_PLAY_PAUSE (B3) Windows 2000/XP: Play/Pause Media key
+const int VK_MEDIA_PLAY_PAUSE = 0xB3;
+
+// VK_LAUNCH_MAIL (B4) Windows 2000/XP: Start Mail key
+const int VK_MEDIA_LAUNCH_MAIL = 0xB4;
+
+// VK_LAUNCH_MEDIA_SELECT (B5) Windows 2000/XP: Select Media key
+const int VK_MEDIA_LAUNCH_MEDIA_SELECT = 0xB5;
+
+// VK_LAUNCH_APP1 (B6) Windows 2000/XP: Start Application 1 key
+const int VK_MEDIA_LAUNCH_APP1 = 0xB6;
+
+// VK_LAUNCH_APP2 (B7) Windows 2000/XP: Start Application 2 key
+const int VK_MEDIA_LAUNCH_APP2 = 0xB7;
+
+// VK_OEM_1 (BA) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ';:' key
+const int VK_OEM_1 = 0xBA;
+
+// VK_OEM_PLUS (BB) Windows 2000/XP: For any country/region, the '+' key
+const int VK_OEM_PLUS = 0xBB;
+
+// VK_OEM_COMMA (BC) Windows 2000/XP: For any country/region, the ',' key
+const int VK_OEM_COMMA = 0xBC;
+
+// VK_OEM_MINUS (BD) Windows 2000/XP: For any country/region, the '-' key
+const int VK_OEM_MINUS = 0xBD;
+
+// VK_OEM_PERIOD (BE) Windows 2000/XP: For any country/region, the '.' key
+const int VK_OEM_PERIOD = 0xBE;
+
+// VK_OEM_2 (BF) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '/?' key
+const int VK_OEM_2 = 0xBF;
+
+// VK_OEM_3 (C0) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '`~' key
+const int VK_OEM_3 = 0xC0;
+
+// VK_OEM_4 (DB) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '[{' key
+const int VK_OEM_4 = 0xDB;
+
+// VK_OEM_5 (DC) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '\|' key
+const int VK_OEM_5 = 0xDC;
+
+// VK_OEM_6 (DD) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ']}' key
+const int VK_OEM_6 = 0xDD;
+
+// VK_OEM_7 (DE) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key
+const int VK_OEM_7 = 0xDE;
+
+// VK_OEM_8 (DF) Used for miscellaneous characters; it can vary by keyboard.
+const int VK_OEM_8 = 0xDF;
+
+// VK_OEM_102 (E2) Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
+const int VK_OEM_102 = 0xE2;
+
+// VK_PROCESSKEY (E5) Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
+const int VK_PROCESSKEY = 0xE5;
+
+// VK_PACKET (E7) Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT,SendInput, WM_KEYDOWN, and WM_KEYUP
+const int VK_PACKET = 0xE7;
+
+// VK_ATTN (F6) Attn key
+const int VK_ATTN = 0xF6;
+
+// VK_CRSEL (F7) CrSel key
+const int VK_CRSEL = 0xF7;
+
+// VK_EXSEL (F8) ExSel key
+const int VK_EXSEL = 0xF8;
+
+// VK_EREOF (F9) Erase EOF key
+const int VK_EREOF = 0xF9;
+
+// VK_PLAY (FA) Play key
+const int VK_PLAY = 0xFA;
+
+// VK_ZOOM (FB) Zoom key
+const int VK_ZOOM = 0xFB;
+
+// VK_NONAME (FC) Reserved for future use
+const int VK_NONAME = 0xFC;
+
+// VK_PA1 (FD) PA1 key
+const int VK_PA1 = 0xFD;
+
+// VK_OEM_CLEAR (FE) Clear key
+const int VK_OEM_CLEAR = 0xFE;
+
+const int VK_UNKNOWN = 0;
+
+}
+
+#endif
diff --git a/WebCore/platform/wx/KeyboardEventWx.cpp b/WebCore/platform/wx/KeyboardEventWx.cpp
new file mode 100644 (file)
index 0000000..851dc1e
--- /dev/null
@@ -0,0 +1,341 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "KeyboardCodes.h"
+#include "PlatformKeyboardEvent.h"
+
+#include <wx/defs.h>
+#include <wx/event.h>
+
+namespace WebCore {
+
+static String keyIdentifierForWxKeyCode(int keyCode)
+{
+    switch (keyCode) {
+        case WXK_MENU:
+        case WXK_ALT:
+            return "Alt";
+        case WXK_CLEAR:
+            return "Clear";
+        case WXK_DOWN:
+            return "Down";
+        case WXK_END:
+            return "End";
+        case WXK_RETURN:
+            return "Enter";
+        case WXK_EXECUTE:
+            return "Execute";
+        case WXK_F1:
+            return "F1";
+        case WXK_F2:
+            return "F2";
+        case WXK_F3:
+            return "F3";
+        case WXK_F4:
+            return "F4";
+        case WXK_F5:
+            return "F5";
+        case WXK_F6:
+            return "F6";
+        case WXK_F7:
+            return "F7";
+        case WXK_F8:
+            return "F8";
+        case WXK_F9:
+            return "F9";
+        case WXK_F10:
+            return "F10";
+        case WXK_F11:
+            return "F11";
+        case WXK_F12:
+            return "F12";
+        case WXK_F13:
+            return "F13";
+        case WXK_F14:
+            return "F14";
+        case WXK_F15:
+            return "F15";
+        case WXK_F16:
+            return "F16";
+        case WXK_F17:
+            return "F17";
+        case WXK_F18:
+            return "F18";
+        case WXK_F19:
+            return "F19";
+        case WXK_F20:
+            return "F20";
+        case WXK_F21:
+            return "F21";
+        case WXK_F22:
+            return "F22";
+        case WXK_F23:
+            return "F23";
+        case WXK_F24:
+            return "F24";
+        case WXK_HELP:
+            return "Help";
+        case WXK_HOME:
+            return "Home";
+        case WXK_INSERT:
+            return "Insert";
+        case WXK_LEFT:
+            return "Left";
+        case WXK_PAGEDOWN:
+            return "PageDown";
+        case WXK_PAGEUP:
+            return "PageUp";
+        case WXK_PAUSE:
+            return "Pause";
+        case WXK_PRINT:
+            return "PrintScreen";
+        case WXK_RIGHT:
+            return "Right";
+        case WXK_SELECT:
+            return "Select";
+        case WXK_UP:
+            return "Up";
+            // Standard says that DEL becomes U+00007F.
+        case WXK_DELETE:
+            return "U+00007F";
+        default:
+            return String::format("U+%06X", toupper(keyCode));
+    }
+}
+
+static int windowsKeyCodeForKeyEvent(unsigned int keycode)
+{
+    switch (keycode) {
+        /* FIXME: Need to supply a bool in this func, to determine wheter the event comes from the keypad
+        */
+        case WXK_NUMPAD0:
+            return VK_NUMPAD0;// (60) Numeric keypad 0 key
+        case WXK_NUMPAD1:
+            return VK_NUMPAD1;// (61) Numeric keypad 1 key
+        case WXK_NUMPAD2:
+            return  VK_NUMPAD2; // (62) Numeric keypad 2 key
+        case WXK_NUMPAD3:
+            return VK_NUMPAD3; // (63) Numeric keypad 3 key
+        case WXK_NUMPAD4:
+            return VK_NUMPAD4; // (64) Numeric keypad 4 key
+        case WXK_NUMPAD5:
+            return VK_NUMPAD5; //(65) Numeric keypad 5 key
+        case WXK_NUMPAD6:
+            return VK_NUMPAD6; // (66) Numeric keypad 6 key
+        case WXK_NUMPAD7:
+            return VK_NUMPAD7; // (67) Numeric keypad 7 key
+        case WXK_NUMPAD8:
+            return VK_NUMPAD8; // (68) Numeric keypad 8 key
+        case WXK_NUMPAD9:
+            return VK_NUMPAD9; // (69) Numeric keypad 9 key
+        case WXK_NUMPAD_MULTIPLY:
+            return VK_MULTIPLY; // (6A) Multiply key
+        case WXK_NUMPAD_ADD:
+            return VK_ADD; // (6B) Add key
+        case WXK_NUMPAD_SUBTRACT:
+            return VK_SUBTRACT; // (6D) Subtract key
+        case WXK_NUMPAD_DECIMAL:
+            return VK_DECIMAL; // (6E) Decimal key
+        case WXK_DIVIDE:
+            return VK_DIVIDE; // (6F) Divide key
+
+        
+        case WXK_BACK:
+            return VK_BACK; // (08) BACKSPACE key
+        case WXK_TAB:
+            return VK_TAB; // (09) TAB key
+        case WXK_CLEAR:
+            return VK_CLEAR; // (0C) CLEAR key
+        case WXK_RETURN:
+            return VK_RETURN; //(0D) Return key
+        case WXK_SHIFT:
+            return VK_SHIFT; // (10) SHIFT key
+        case WXK_CONTROL:
+            return VK_CONTROL; // (11) CTRL key
+        case WXK_MENU:
+        case WXK_ALT:
+            return VK_MENU; // (12) ALT key
+
+        case WXK_PAUSE:
+            return VK_PAUSE; // (13) PAUSE key
+        case WXK_CAPITAL:
+            return VK_CAPITAL; // (14) CAPS LOCK key
+        /*
+        case WXK_Kana_Lock:
+        case WXK_Kana_Shift:
+            return VK_KANA; // (15) Input Method Editor (IME) Kana mode
+        case WXK_Hangul:
+            return VK_HANGUL; // VK_HANGUL (15) IME Hangul mode
+            // VK_JUNJA (17) IME Junja mode
+            // VK_FINAL (18) IME final mode
+        case WXK_Hangul_Hanja:
+            return VK_HANJA; // (19) IME Hanja mode
+        case WXK_Kanji:
+            return VK_KANJI; // (19) IME Kanji mode
+        */
+        case WXK_ESCAPE:
+            return VK_ESCAPE; // (1B) ESC key
+            // VK_CONVERT (1C) IME convert
+            // VK_NONCONVERT (1D) IME nonconvert
+            // VK_ACCEPT (1E) IME accept
+            // VK_MODECHANGE (1F) IME mode change request
+        case WXK_SPACE:
+            return VK_SPACE; // (20) SPACEBAR
+        case WXK_PAGEUP:
+            return VK_PRIOR; // (21) PAGE UP key
+        case WXK_PAGEDOWN:
+            return VK_NEXT; // (22) PAGE DOWN key
+        case WXK_END:
+            return VK_END; // (23) END key
+        case WXK_HOME:
+            return VK_HOME; // (24) HOME key
+        case WXK_LEFT:
+            return VK_LEFT; // (25) LEFT ARROW key
+        case WXK_UP:
+            return VK_UP; // (26) UP ARROW key
+        case WXK_RIGHT:
+            return VK_RIGHT; // (27) RIGHT ARROW key
+        case WXK_DOWN:
+            return VK_DOWN; // (28) DOWN ARROW key
+        case WXK_SELECT:
+            return VK_SELECT; // (29) SELECT key
+        case WXK_PRINT:
+            return VK_PRINT; // (2A) PRINT key
+        case WXK_EXECUTE:
+            return VK_EXECUTE;// (2B) EXECUTE key
+            //dunno on this
+            //case WXK_PrintScreen:
+            //      return VK_SNAPSHOT; // (2C) PRINT SCREEN key
+        case WXK_INSERT:
+            return VK_INSERT; // (2D) INS key
+        case WXK_DELETE:
+            return VK_DELETE; // (2E) DEL key
+        case WXK_HELP:
+            return VK_HELP; // (2F) HELP key
+        case '0':
+            return VK_0;    //  (30) 0) key
+        case '1':
+            return VK_1; //  (31) 1 ! key
+        case '2':
+            return VK_2; //  (32) 2 & key
+        case '3':
+            return VK_3; //case '3': case '#';
+        case '4':  //  (34) 4 key '$';
+            return VK_4;
+        case '5':
+            return VK_5; //  (35) 5 key  '%'
+        case '6':
+            return VK_6; //  (36) 6 key  '^'
+        case '7':
+            return VK_7; //  (37) 7 key  case '&'
+        case '8':
+            return VK_8; //  (38) 8 key  '*'
+        case '9':
+            return VK_9; //  (39) 9 key '('
+        case 'A':
+            return VK_A; //  (41) A key case 'a': case 'A': return 0x41;
+        case 'B':
+            return VK_B; //  (42) B key case 'b': case 'B': return 0x42;
+        case 'C':
+            return VK_C; //  (43) C key case 'c': case 'C': return 0x43;
+        case 'D':
+            return VK_D; //  (44) D key case 'd': case 'D': return 0x44;
+        case 'E':
+            return VK_E; //  (45) E key case 'e': case 'E': return 0x45;
+        case 'F':
+            return VK_F; //  (46) F key case 'f': case 'F': return 0x46;
+        case 'G':
+            return VK_G; //  (47) G key case 'g': case 'G': return 0x47;
+        case 'H':
+            return VK_H; //  (48) H key case 'h': case 'H': return 0x48;
+        case 'I':
+            return VK_I; //  (49) I key case 'i': case 'I': return 0x49;
+        case 'J':
+            return VK_J; //  (4A) J key case 'j': case 'J': return 0x4A;
+        case 'K':
+            return VK_K; //  (4B) K key case 'k': case 'K': return 0x4B;
+        case 'L':
+            return VK_L; //  (4C) L key case 'l': case 'L': return 0x4C;
+        case 'M':
+            return VK_M; //  (4D) M key case 'm': case 'M': return 0x4D;
+        case 'N':
+            return VK_N; //  (4E) N key case 'n': case 'N': return 0x4E;
+        case 'O':
+            return VK_O; //  (4F) O key case 'o': case 'O': return 0x4F;
+        case 'P':
+            return VK_P; //  (50) P key case 'p': case 'P': return 0x50;
+        case 'Q':
+            return VK_Q; //  (51) Q key case 'q': case 'Q': return 0x51;
+        case 'R':
+            return VK_R; //  (52) R key case 'r': case 'R': return 0x52;
+        case 'S':
+            return VK_S; //  (53) S key case 's': case 'S': return 0x53;
+        case 'T':
+            return VK_T; //  (54) T key case 't': case 'T': return 0x54;
+        case 'U':
+            return VK_U; //  (55) U key case 'u': case 'U': return 0x55;
+        case 'V':
+            return VK_V; //  (56) V key case 'v': case 'V': return 0x56;
+        case 'W':
+            return VK_W; //  (57) W key case 'w': case 'W': return 0x57;
+        case 'X':
+            return VK_X; //  (58) X key case 'x': case 'X': return 0x58;
+        case 'Y':
+            return VK_Y; //  (59) Y key case 'y': case 'Y': return 0x59;
+        case 'Z':
+            return VK_Z; //  (5A) Z key case 'z': case 'Z': return 0x5A;
+        case WXK_WINDOWS_LEFT:
+            return VK_LWIN; // (5B) Left Windows key (Microsoft Natural keyboard)
+
+        case WXK_NUMLOCK:
+            return VK_NUMLOCK; // (90) NUM LOCK key
+
+        case WXK_SCROLL:
+            return VK_SCROLL; // (91) SCROLL LOCK key
+
+        default:
+            return 0;
+    }
+}
+
+PlatformKeyboardEvent::PlatformKeyboardEvent(wxKeyEvent& event)
+{
+    m_text = wxString(event.GetUnicodeKey());
+    m_unmodifiedText = m_text;
+    m_keyIdentifier = keyIdentifierForWxKeyCode(event.GetKeyCode());
+    m_isKeyUp = event.GetEventType() == wxEVT_KEY_UP;
+    m_autoRepeat = false; // FIXME: not correct.
+    m_WindowsKeyCode = windowsKeyCodeForKeyEvent(event.GetKeyCode());
+    m_isKeypad = (event.GetKeyCode() >= WXK_NUMPAD_SPACE) && (event.GetKeyCode() <= WXK_NUMPAD_DIVIDE);
+    m_shiftKey = event.ShiftDown();
+    m_ctrlKey = event.CmdDown();
+    m_altKey = event.AltDown();
+    m_metaKey = event.MetaDown();    
+}
+
+}
+
+// vim: ts=4 sw=4 et
diff --git a/WebCore/platform/wx/MimeTypeRegistryWx.cpp b/WebCore/platform/wx/MimeTypeRegistryWx.cpp
new file mode 100644 (file)
index 0000000..dd55bd8
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2006 Zack Rusin <zack@kde.org>
+ * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2007 Trolltech ASA
+ *
+ * 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 COMPUTER, 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 COMPUTER, 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 "MimeTypeRegistry.h"
+
+namespace WebCore 
+{
+
+struct ExtensionMap {
+    const char* extension;
+    const char* mimeType;
+};
+static const ExtensionMap extensionMap [] = {
+    { "bmp", "image/bmp" },
+    { "gif", "image/gif" },
+    { "html", "text/html" },
+    { "ico", "image/x-icon" },   
+    { "jpeg", "image/jpeg" },
+    { "jpg", "image/jpeg" },
+    { "js", "application/x-javascript" },
+    { "pdf", "application/pdf" },
+    { "png", "image/png" },
+    { "rss", "application/rss+xml" },
+    { "svg", "image/svg+xml" },
+    { "text", "text/plain" },
+    { "txt", "text/plain" },
+    { "xbm", "image/x-xbitmap" },
+    { "xml", "text/xml" },
+    { "xsl", "text/xsl" },
+    { "xhtml", "application/xhtml+xml" },
+    { 0, 0 }
+};
+    
+String MimeTypeRegistry::getMIMETypeForExtension(const String &ext)
+{
+    String s = ext.lower();
+    const ExtensionMap *e = extensionMap;
+    while (e->extension) {
+        if (s == e->extension)
+            return e->mimeType;
+        ++e;
+    }
+    // unknown, let's just assume plain text
+    return "text/plain";
+}
+
+}
diff --git a/WebCore/platform/wx/MouseEventWx.cpp b/WebCore/platform/wx/MouseEventWx.cpp
new file mode 100644 (file)
index 0000000..5c841b8
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "PlatformMouseEvent.h"
+
+#include <wx/defs.h>
+#include <wx/event.h>
+
+namespace WebCore {
+
+PlatformMouseEvent::PlatformMouseEvent(wxMouseEvent& event, wxPoint& globalPoint)
+    : m_position(event.GetPosition())
+    , m_globalPosition(globalPoint)
+    , m_clickCount(event.ButtonDClick() ? 2 : 1)
+    , m_shiftKey(event.ShiftDown())
+    , m_ctrlKey(event.CmdDown())
+    , m_altKey(event.AltDown())
+    , m_metaKey(event.MetaDown()) // FIXME: We'll have to test other browsers
+{
+    wxEventType type = event.GetEventType();
+    m_eventType = MouseEventMoved;
+    
+    if (type == wxEVT_LEFT_DOWN || type == wxEVT_MIDDLE_DOWN || type == wxEVT_RIGHT_DOWN)
+        m_eventType = MouseEventPressed;
+    
+    else if (type == wxEVT_LEFT_UP || type == wxEVT_MIDDLE_UP || type == wxEVT_RIGHT_UP || 
+                type == wxEVT_LEFT_DCLICK || type == wxEVT_MIDDLE_DCLICK || type == wxEVT_RIGHT_DCLICK)
+        m_eventType = MouseEventReleased;
+
+    else if (type == wxEVT_MOTION)
+        m_eventType = MouseEventMoved;
+
+    if (event.LeftIsDown())
+        m_button = LeftButton;
+    else if (event.RightIsDown())
+        m_button = RightButton;
+    else if (event.MiddleIsDown())
+        m_button = MiddleButton;
+}
+
+}
diff --git a/WebCore/platform/wx/MouseWheelEventWx.cpp b/WebCore/platform/wx/MouseWheelEventWx.cpp
new file mode 100644 (file)
index 0000000..45ae8dc
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "PlatformWheelEvent.h"
+
+#include <wx/defs.h>
+#include <wx/event.h>
+
+namespace WebCore {
+
+PlatformWheelEvent::PlatformWheelEvent(const wxMouseEvent& event, const wxPoint& globalPoint)
+    : m_position(event.GetPosition())
+    , m_globalPosition(globalPoint)
+    , m_shiftKey(event.ShiftDown())
+    , m_ctrlKey(event.ControlDown())
+    , m_altKey(event.AltDown())
+    , m_metaKey(event.MetaDown()) // FIXME: We'll have to test other browsers
+    , m_deltaX(0) // wx doesn't support horizontal mouse wheel scrolling
+    , m_deltaY(event.GetWheelRotation())
+{
+
+}
+
+}
diff --git a/WebCore/platform/wx/PasteboardWx.cpp b/WebCore/platform/wx/PasteboardWx.cpp
new file mode 100644 (file)
index 0000000..506ef2c
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "Pasteboard.h"
+
+#include "DocumentFragment.h"
+#include "Editor.h"
+#include "markup.h"
+#include "PlatformString.h"
+#include "KURL.h"
+
+#include <wx/defs.h>
+#include <wx/dataobj.h>
+#include <wx/clipbrd.h>
+
+namespace WebCore {
+
+Pasteboard::Pasteboard()
+{
+}
+
+Pasteboard* Pasteboard::generalPasteboard()
+{
+    static Pasteboard* pasteboard = new Pasteboard();
+    return pasteboard;
+}
+
+void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame)
+{
+    if (wxTheClipboard->Open())
+    {
+        String text = frame->selectedText();
+        text.replace('\\', frame->backslashAsCurrencySymbol());
+        
+        wxTheClipboard->SetData( new wxTextDataObject(text) );
+        wxTheClipboard->Close();
+    }
+}
+
+bool Pasteboard::canSmartReplace()
+{
+    return false;
+}
+
+String Pasteboard::plainText(Frame* frame)
+{
+    return String();
+}
+
+PassRefPtr<DocumentFragment> Pasteboard::documentFragment(Frame* frame, PassRefPtr<Range> context,
+                                                          bool allowPlainText, bool& chosePlainText)
+{
+    return 0;
+}
+
+void Pasteboard::writeURL(const KURL& url, const String&, Frame*)
+{
+    if (wxTheClipboard->Open())
+    {
+        wxTheClipboard->SetData( new wxTextDataObject( url.url() ) );
+        wxTheClipboard->Close();
+    }
+}
+
+void Pasteboard::clear()
+{
+    wxTheClipboard->Clear();
+}
+
+void Pasteboard::writeImage(const HitTestResult&)
+{
+}
+    
+}
diff --git a/WebCore/platform/wx/PlatformScrollBar.h b/WebCore/platform/wx/PlatformScrollBar.h
new file mode 100644 (file)
index 0000000..ad0d1f9
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2004, 2006 Apple Computer, 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 COMPUTER, 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 COMPUTER, 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 PlatformScrollbar_h
+#define PlatformScrollbar_h
+
+#include "Widget.h"
+#include "ScrollBar.h"
+
+namespace WebCore {
+
+class PlatformScrollbar : public Widget, public Scrollbar {
+public:
+    PlatformScrollbar(ScrollbarClient*, ScrollbarOrientation, ScrollbarControlSize);
+    virtual ~PlatformScrollbar();
+
+    virtual bool isWidget() const { return true; }
+
+    virtual int width() const;
+    virtual int height() const;
+    virtual void setRect(const IntRect&);
+    virtual void setEnabled(bool);
+    virtual void paint(GraphicsContext*, const IntRect& damageRect);
+
+    virtual bool handleMouseMoveEvent(const PlatformMouseEvent&) { return false; };
+    virtual bool handleMouseOutEvent(const PlatformMouseEvent&) { return false; };
+
+    static int horizontalScrollbarHeight() { return 17; }
+    static int verticalScrollbarWidth() { return 17; }
+
+protected:    
+    virtual void updateThumbPosition();
+    virtual void updateThumbProportion();
+};
+
+}
+
+#endif // PlatformScrollbar_h
+
diff --git a/WebCore/platform/wx/RenderThemeWx.cpp b/WebCore/platform/wx/RenderThemeWx.cpp
new file mode 100644 (file)
index 0000000..e7632b0
--- /dev/null
@@ -0,0 +1,263 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "Document.h"
+#include "RenderTheme.h"
+#include "GraphicsContext.h"
+#include "RenderView.h"
+#include "FrameView.h"
+
+#include <wx/defs.h>
+#include <wx/renderer.h>
+#include <wx/dcclient.h>
+#include <wx/scrolwin.h>
+#include <wx/settings.h>
+
+namespace WebCore {
+
+class RenderThemeWx : public RenderTheme
+{
+public:
+    RenderThemeWx() : RenderTheme() { }
+
+    // A method asking if the theme's controls actually care about redrawing when hovered.
+    virtual bool supportsHover(const RenderStyle*) const { return true; }
+
+    virtual bool paintCheckbox(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
+    {
+        return paintButton(o, i, r);
+    }
+    virtual void setCheckboxSize(RenderStyle*) const;
+
+    virtual bool paintRadio(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
+    {
+        return paintButton(o, i, r);
+    }
+
+    virtual void setRadioSize(RenderStyle*) const;
+
+    virtual void adjustButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
+    virtual bool paintButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
+
+    virtual void adjustTextFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
+    virtual bool paintTextField(RenderObject*, const RenderObject::PaintInfo&, const IntRect&);
+
+    virtual bool isControlStyled(const RenderStyle*, const BorderData&,
+                                 const BackgroundLayer&, const Color&) const;
+
+    virtual bool controlSupportsTints(const RenderObject*) const;
+
+    virtual void systemFont(int propId, FontDescription&) const;
+
+    virtual Color platformActiveSelectionBackgroundColor() const;
+    virtual Color platformInactiveSelectionBackgroundColor() const;
+    
+    virtual Color platformActiveSelectionForegroundColor() const;
+    virtual Color platformInactiveSelectionForegroundColor() const;
+
+private:
+    void addIntrinsicMargins(RenderStyle*) const;
+    void close();
+
+    bool supportsFocus(EAppearance) const;
+};
+
+RenderTheme* theme()
+{
+    static RenderThemeWx rt;
+    return &rt;
+}
+
+bool RenderThemeWx::isControlStyled(const RenderStyle* style, const BorderData& border,
+                                     const BackgroundLayer& background, const Color& backgroundColor) const
+{
+    if (style->appearance() == TextFieldAppearance || style->appearance() == TextAreaAppearance)
+        return style->border() != border;
+
+    return RenderTheme::isControlStyled(style, border, background, backgroundColor);
+}
+
+bool RenderThemeWx::controlSupportsTints(const RenderObject* o) const
+{
+    if (!isEnabled(o))
+        return false;
+
+    // Checkboxes only have tint when checked.
+    if (o->style()->appearance() == CheckboxAppearance)
+        return isChecked(o);
+
+    // For now assume other controls have tint if enabled.
+    return true;
+}
+
+void RenderThemeWx::systemFont(int propId, FontDescription& fontDescription) const
+{
+    // no-op
+}
+
+void RenderThemeWx::addIntrinsicMargins(RenderStyle* style) const
+{
+    // Cut out the intrinsic margins completely if we end up using a small font size
+    if (style->fontSize() < 11)
+        return;
+
+    // Intrinsic margin value.
+    const int m = 2;
+
+    // FIXME: Using width/height alone and not also dealing with min-width/max-width is flawed.
+    if (style->width().isIntrinsicOrAuto()) {
+        if (style->marginLeft().quirk())
+            style->setMarginLeft(Length(m, Fixed));
+
+        if (style->marginRight().quirk())
+            style->setMarginRight(Length(m, Fixed));
+    }
+
+    if (style->height().isAuto()) {
+        if (style->marginTop().quirk())
+            style->setMarginTop(Length(m, Fixed));
+
+        if (style->marginBottom().quirk())
+            style->setMarginBottom(Length(m, Fixed));
+    }
+}
+
+void RenderThemeWx::setCheckboxSize(RenderStyle* style) const
+{
+    // If the width and height are both specified, then we have nothing to do.
+    if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto())
+        return;
+
+    // FIXME:  A hard-coded size of 13 is used.  This is wrong but necessary for now.  It matches Firefox.
+    // At different DPI settings on Windows, querying the theme gives you a larger size that accounts for
+    // the higher DPI.  Until our entire engine honors a DPI setting other than 96, we can't rely on the theme's
+    // metrics.
+    if (style->width().isIntrinsicOrAuto())
+        style->setWidth(Length(13, Fixed));
+
+    if (style->height().isAuto())
+        style->setHeight(Length(13, Fixed));
+}
+
+void RenderThemeWx::setRadioSize(RenderStyle* style) const
+{
+    // This is the same as checkboxes.
+    setCheckboxSize(style);
+}
+
+bool RenderThemeWx::supportsFocus(EAppearance appearance) const
+{
+    switch (appearance) {
+        case PushButtonAppearance:
+        case ButtonAppearance:
+        case TextFieldAppearance:
+            return true;
+        default: // No for all others...
+            return false;
+    }
+}
+
+void RenderThemeWx::adjustButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
+{
+    addIntrinsicMargins(style);
+}
+
+bool RenderThemeWx::paintButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
+{
+    wxScrolledWindow* window = o->view()->frameView()->nativeWindow();
+    wxPaintDC dc((wxWindow*)window);
+    window->DoPrepareDC(dc);
+
+    int flags = 0;
+    
+    if (!isEnabled(o))
+        flags |= wxCONTROL_DISABLED;
+
+    EAppearance appearance = o->style()->appearance();
+    if (supportsFocus(o->style()->appearance()) && isFocused(o))
+        flags |= wxCONTROL_FOCUSED;
+
+    if (isPressed(o))
+        flags |= wxCONTROL_PRESSED;
+    
+    if(appearance == PushButtonAppearance || appearance == ButtonAppearance)
+        wxRendererNative::Get().DrawPushButton(window, dc, r, flags);
+    // TODO: add a radio button rendering API to wx
+    //else if(appearance == RadioAppearance)
+    //    wxRendererNative::Get().
+    else if(appearance == CheckboxAppearance)
+        wxRendererNative::Get().DrawCheckBox(window, dc, r, flags);
+        
+    return false;
+}
+
+void RenderThemeWx::adjustTextFieldStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
+{
+    addIntrinsicMargins(style);
+}
+
+bool RenderThemeWx::paintTextField(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r)
+{
+    //wxPaintDC* dc = (wxPaintDC*)i.context->platformContext();
+    i.context->setStrokeThickness(1);
+    i.context->setStrokeColor(Color(0, 0, 0));
+    i.context->drawRect(r);
+    return false;
+}
+
+Color RenderThemeWx::platformActiveSelectionBackgroundColor() const
+{
+    return wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
+}
+
+Color RenderThemeWx::platformInactiveSelectionBackgroundColor() const
+{
+    return wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW);
+}
+
+Color RenderThemeWx::platformActiveSelectionForegroundColor() const
+{
+#if __WXGTK__
+    return Color(255, 255, 255);
+#else
+    return Color();
+#endif
+}
+
+Color RenderThemeWx::platformInactiveSelectionForegroundColor() const
+{
+#if __WXGTK__
+    return Color(255, 255, 255);
+#else
+    return Color();
+#endif
+}
+
+}
+
+// vim: ts=4 sw=4 et
diff --git a/WebCore/platform/wx/ScreenWx.cpp b/WebCore/platform/wx/ScreenWx.cpp
new file mode 100644 (file)
index 0000000..625f9e9
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2006 Apple Computer, 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 COMPUTER, 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 COMPUTER, 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 "Screen.h"
+
+#include "IntRect.h"
+#include "FloatRect.h"
+#include "Widget.h"
+#include "Widget.h"
+
+#include <wx/defs.h>
+#include <wx/display.h>
+#include <wx/gdicmn.h>
+
+namespace WebCore {
+
+FloatRect scaleScreenRectToWidget(FloatRect rect, Widget*)
+{
+    return rect;
+}
+
+FloatRect scaleWidgetRectToScreen(FloatRect rect, Widget*)
+{
+    return rect;
+}
+
+FloatRect screenRect(Widget* widget)
+{
+/*
+    int displayNum;
+    Widget* widget = widget->widget();
+    displayNum = wxDisplay::GetFromWindow(widget->nativeWindow());
+    if (displayNum != -1){
+        wxDisplay thisDisplay(displayNum);
+        return thisDisplay.GetGeometry();
+    }
+*/
+    return FloatRect();
+}
+
+int screenDepth(Widget* widget)
+{
+    return wxDisplayDepth();
+}
+
+int screenDepthPerComponent(Widget*)
+{
+    return wxDisplayDepth();
+}
+
+bool screenIsMonochrome(Widget* widget)
+{
+    return wxColourDisplay();
+}
+
+FloatRect screenAvailableRect(Widget* widget)
+{
+/*
+    Widget* widget = widget->widget();
+    displayNum = wxDisplay::GetFromWindow(widget->nativeWindow());
+    if (displayNum != -1){
+        wxDisplay thisDisplay(displayNum);
+        // FIXME: In 2.7 this method is gone? 
+        //return thisDisplay.GetClientArea();
+    }
+*/    
+    return FloatRect();
+}
+
+float scaleFactor(Widget*)
+{
+    return 1.0f;
+
+}
+
+}
diff --git a/WebCore/platform/wx/ScrollViewWx.cpp b/WebCore/platform/wx/ScrollViewWx.cpp
new file mode 100644 (file)
index 0000000..956f27d
--- /dev/null
@@ -0,0 +1,312 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "ScrollView.h"
+
+#include <algorithm>
+#include "FloatRect.h"
+#include "IntRect.h"
+
+#include <stdio.h>
+#define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d (%s)\n", __FILE__, __LINE__, __FUNCTION__); } while(0)
+
+#include <wx/defs.h>
+#include <wx/scrolwin.h>
+
+using namespace std;
+
+namespace WebCore {
+
+class ScrollView::ScrollViewPrivate {
+public:
+    ScrollViewPrivate()
+        : hasStaticBackground(false)
+        , suppressScrollbars(false)
+        , vScrollbarMode(ScrollbarAuto)
+        , hScrollbarMode(ScrollbarAuto)
+    {
+    }
+    IntSize scrollOffset;
+    IntSize contentsSize;
+    bool hasStaticBackground;
+    bool suppressScrollbars;
+    ScrollbarMode vScrollbarMode;
+    ScrollbarMode hScrollbarMode;
+};
+
+ScrollView::ScrollView()
+    : m_data(new ScrollViewPrivate())
+{
+}
+
+ScrollView::~ScrollView()
+{
+    delete m_data;
+}
+
+void ScrollView::updateContents(const IntRect& updateRect, bool now)
+{
+    // we need to convert coordinates to scrolled position
+    wxRect contentsRect = updateRect;
+    contentsRect.Offset(-contentsX(), -contentsY());
+    wxScrolledWindow* win = nativeWindow();
+    if (win){
+        win->RefreshRect(contentsRect, true);
+        if (now)
+            win->Update();
+    }
+}
+
+void ScrollView::update()
+{
+    wxScrolledWindow* win = nativeWindow();
+    if (win){
+        win->Update();
+    }
+}
+
+int ScrollView::visibleWidth() const
+{
+    int width = 0;
+    wxScrolledWindow* win = nativeWindow();
+    if (win)
+        win->GetClientSize(&width, NULL);
+    
+    return width;
+}
+
+int ScrollView::visibleHeight() const
+{
+    int height = 0;
+    wxScrolledWindow* win = nativeWindow();
+    if (win)
+        win->GetClientSize(NULL, &height);
+    
+    return height;
+}
+
+FloatRect ScrollView::visibleContentRect() const
+{
+    return FloatRect(contentsX(),contentsY(),visibleWidth(),visibleHeight());
+}
+
+void ScrollView::setContentsPos(int newX, int newY)
+{
+    int dx = newX - contentsX();
+    int dy = newY - contentsY();
+    scrollBy(dx, dy);
+}
+
+void ScrollView::resizeContents(int w,int h)
+{
+    wxScrolledWindow* win = nativeWindow();
+    if (win)
+    {
+        win->SetVirtualSize(w, h);
+        win->SetScrollRate(20, 20);
+    }
+}
+
+int ScrollView::contentsX() const
+{
+    int x = 0;
+    wxScrolledWindow* win = nativeWindow();
+    if (win)
+    {
+        int sUnitX = 1;
+        win->GetViewStart(&x, NULL);
+        win->GetScrollPixelsPerUnit(&sUnitX, NULL);
+        x *= sUnitX;
+    }
+    return x;
+}
+
+int ScrollView::contentsY() const
+{
+    int y = 0;
+    wxScrolledWindow* win = nativeWindow();
+    if (win)
+    {
+        int sUnitY = 1;
+        win->GetViewStart(NULL, &y);
+        win->GetScrollPixelsPerUnit(&sUnitY, NULL);
+        y *= sUnitY;
+    }
+    return y;
+}
+
+int ScrollView::contentsWidth() const
+{
+    int width = 0;
+    wxScrolledWindow* win = nativeWindow();
+    if (win)
+        win->GetVirtualSize(&width, NULL);
+    return width;
+}
+
+int ScrollView::contentsHeight() const
+{
+    int height = 0;
+    wxScrolledWindow* win = nativeWindow();
+    if (win)
+        win->GetVirtualSize(NULL, &height);
+    return height;
+}
+
+FloatRect ScrollView::visibleContentRectConsideringExternalScrollers() const
+{
+    // FIXME: clip this rect if parent scroll views cut off the visible
+    // area.
+    return visibleContentRect();
+}
+
+IntSize ScrollView::scrollOffset() const
+{
+    return IntSize(contentsX(), contentsY());
+}
+
+IntSize ScrollView::maximumScroll() const
+{
+    notImplemented();
+    return IntSize(0, 0);
+}
+
+void ScrollView::scrollBy(int dx, int dy)
+{
+    wxScrolledWindow* win = nativeWindow();
+    if (win)
+        win->Scroll(dx, dy);
+}
+
+WebCore::ScrollbarMode ScrollView::hScrollbarMode() const
+{
+    return m_data->hScrollbarMode;
+}
+
+WebCore::ScrollbarMode ScrollView::vScrollbarMode() const
+{
+    return m_data->vScrollbarMode;
+}
+
+void ScrollView::setHScrollbarMode(ScrollbarMode newMode)
+{
+    notImplemented();
+}
+
+void ScrollView::setVScrollbarMode(ScrollbarMode newMode)
+{
+    notImplemented();
+}
+
+void ScrollView::updateScrollBars()
+{
+    wxScrolledWindow* win = nativeWindow();
+    if (win)
+    {
+        //if (m_data->vScrollbarMode != ScrollBarMode::ScrollbarAlwaysOff)
+    }
+}
+
+void ScrollView::setStaticBackground(bool flag)
+{
+    m_data->hasStaticBackground = flag;
+}
+
+void ScrollView::suppressScrollbars(bool suppressed, bool repaintOnSuppress)
+{
+    m_data->suppressScrollbars = suppressed;
+}
+
+void ScrollView::setScrollbarsMode(ScrollbarMode newMode)
+{
+    m_data->hScrollbarMode = m_data->vScrollbarMode = newMode;
+}
+
+IntPoint ScrollView::contentsToWindow(const IntPoint& point) const
+{
+    return point - scrollOffset();
+}
+
+IntPoint ScrollView::windowToContents(const IntPoint& point) const
+{
+    return point + scrollOffset();
+}
+
+bool ScrollView::inWindow() const 
+{
+    // NB: This is called from RenderObject::willRenderImage
+    // and really seems to be more of a "is the window in a valid state" test,
+    // despite the API name.
+    return nativeWindow() != NULL; 
+}
+
+void ScrollView::wheelEvent(PlatformWheelEvent&)
+{ 
+    // do nothing, 
+    // FIXME: not sure if any ports need to handle this, actually...
+}
+
+// used for subframes support
+void ScrollView::addChild(Widget*) 
+{
+    // NB: In all cases I'm aware of,
+    // by the time this is called the ScrollView is already a child
+    // of its parent Widget by wx port APIs, so I don't think
+    // we need to do anything here.
+}
+
+void ScrollView::removeChild(Widget* widget) 
+{ 
+    if (nativeWindow() && widget->nativeWindow())
+    {
+        nativeWindow()->RemoveChild(widget->nativeWindow());
+        // FIXME: Is this the right place to do deletion? I see 
+        // detachFromParent2/3/4, initiated by FrameLoader::detachFromParent,
+        // but I'm not sure if it's better to handle there or not.
+        widget->nativeWindow()->Destroy();
+    }
+}
+
+void ScrollView::scrollRectIntoViewRecursively(const IntRect& rect) 
+{ 
+    // NB: This is used by RenderLayer::scrollRectToVisible and the idea
+    // is that if this position is not visible due to parent scroll views,
+    // those parents are scrolled as well to make it visible.
+    
+    // For now, just scroll the current window.
+    setContentsPos(rect.x(), rect.y());
+}
+
+
+PlatformScrollbar* ScrollView::scrollbarUnderMouse(const PlatformMouseEvent& mouseEvent) 
+{
+    // AFAICT this is only used for platforms that provide 
+    // feedback when mouse is hovered over.
+    return 0; 
+}
+
+
+}
diff --git a/WebCore/platform/wx/SharedTimerWx.cpp b/WebCore/platform/wx/SharedTimerWx.cpp
new file mode 100644 (file)
index 0000000..0abf140
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "SharedTimer.h"
+
+#include "SystemTime.h"
+#include "Widget.h"
+#include <wtf/Assertions.h>
+#include <stdio.h>
+
+#include "wx/defs.h"
+#include "wx/timer.h"
+
+#define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d (%s)\n", __FILE__, __LINE__, __FUNCTION__); } while(0)
+
+namespace WebCore {
+
+static void (*sharedTimerFiredFunction)();
+
+class WebKitTimer: public wxTimer
+{
+    public:
+        WebKitTimer();
+        ~WebKitTimer();
+        virtual void Notify();
+};
+
+WebKitTimer::WebKitTimer()
+{
+    wxTimer::wxTimer();
+}
+
+WebKitTimer::~WebKitTimer()
+{
+}
+
+void WebKitTimer::Notify()
+{
+    sharedTimerFiredFunction();
+}
+
+static WebKitTimer* wkTimer; 
+
+void setSharedTimerFiredFunction(void (*f)())
+{
+    sharedTimerFiredFunction = f;
+}
+
+void setSharedTimerFireTime(double fireTime)
+{
+    ASSERT(sharedTimerFiredFunction);
+    
+    double interval = fireTime - currentTime();
+    
+    if (!wkTimer)
+        wkTimer = new WebKitTimer();
+        
+    unsigned int intervalInMS = interval * 1000;
+    if (interval < 0)
+    {
+#ifndef NDEBUG
+        // TODO: We may eventually want to assert here, to track 
+        // what calls are leading to this condition. It seems to happen
+        // mostly with repeating timers.
+        fprintf(stderr, "WARNING: setSharedTimerFireTime: fire time is < 0 ms\n");
+#endif
+        intervalInMS = 0;
+    }
+    
+    fprintf(stderr, "Interval is %d\n", intervalInMS);
+
+    if (intervalInMS == 0)
+        wkTimer->Notify();
+    else
+        wkTimer->Start(intervalInMS+100, wxTIMER_ONE_SHOT);
+}
+
+void stopSharedTimer()
+{
+    if (wkTimer)
+        wkTimer->Stop();
+    // NYI
+}
+
+}
diff --git a/WebCore/platform/wx/SoundWx.cpp b/WebCore/platform/wx/SoundWx.cpp
new file mode 100644 (file)
index 0000000..c8d0e53
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2006 Kevin Ollivier <kevino@theolliviers.com>
+ *
+ * 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 COMPUTER, 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 COMPUTER, 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 <wx/defs.h>
+#include <wx/utils.h>
+
+#include "Sound.h"
+
+namespace WebCore {
+
+void systemBeep()
+{
+    wxBell();
+}
+
+}
+
+// vim: ts=4 sw=4 et
diff --git a/WebCore/platform/wx/StringWx.cpp b/WebCore/platform/wx/StringWx.cpp
new file mode 100644 (file)
index 0000000..32bbdd1
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "PlatformString.h"
+#include "DeprecatedString.h"
+#include "CString.h"
+#include "unicode/ustring.h"
+
+#include <wx/defs.h>
+#include <wx/string.h>
+
+namespace WebCore {
+
+// String conversions
+String::String(const wxString& wxstr)
+{
+    // FIXME: This probably needs to be more robust...
+    const UChar* str = reinterpret_cast<const UChar*>(wxstr.wc_str());
+
+    if (!str)
+        return;
+    
+    m_impl = new StringImpl(str, wxstr.length()*2);
+}
+
+String::operator wxString() const
+{
+    return wxString(utf8(), wxConvUTF8);
+}
+
+// DeprecatedString conversions
+DeprecatedString::operator wxString() const
+{
+    return wxString(utf8(), wxConvUTF8);
+}
+
+}
+
+// vim: ts=4 sw=4 et
diff --git a/WebCore/platform/wx/SystemTimeWx.cpp b/WebCore/platform/wx/SystemTimeWx.cpp
new file mode 100644 (file)
index 0000000..41e6ad7
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2007 Robin Dunn.  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 COMPUTER, 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 COMPUTER, 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 "SystemTime.h"
+
+#include <wx/datetime.h>
+
+namespace WebCore {
+
+double currentTime()
+{
+    wxDateTime now = wxDateTime::UNow();
+    return (double)now.GetTicks() + (double)(now.GetMillisecond() / 1000.0);
+}
+
+}
diff --git a/WebCore/platform/wx/TemporaryLinkStubs.cpp b/WebCore/platform/wx/TemporaryLinkStubs.cpp
new file mode 100755 (executable)
index 0000000..4a15f59
--- /dev/null
@@ -0,0 +1,323 @@
+/*
+ * Copyright (C) 2006 Apple Computer, 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 COMPUTER, 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 COMPUTER, 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 <stdio.h>
+#include <stdlib.h>
+#include "Node.h"
+#include "Font.h"
+#include "IntPoint.h"
+#include "Widget.h"
+#include "GraphicsContext.h"
+#include "loader.h"
+#include "FrameView.h"
+#include "KURL.h"
+#include "Path.h"
+#include "PlatformMouseEvent.h"
+#include "CookieJar.h"
+#include "Screen.h"
+#include "History.h"
+#include "Language.h"
+#include "LocalizedStrings.h"
+#include "PlugInInfoStore.h"
+#include "RenderTheme.h"
+#include "TextBoundaries.h"
+#include "SharedTimer.h"
+#include "ScrollBar.h"
+#include "PlatformScrollBar.h"
+#include "IconLoader.h"
+#include "IconDatabase.h"
+//#include "ResourceLoaderClient.h"
+#include "CachedResource.h"
+//#include "Slider.h"
+//#include "TextField.h"
+//#include "ListBox.h"
+#include "FileChooser.h"
+#include "Cursor.h"
+#include "PopupMenu.h"
+#include "AXObjectCache.h"
+#include "Icon.h"
+//#include "LoaderFunctions.h"
+#include "EditCommand.h"
+#include "Pasteboard.h"
+#include "ContextMenu.h"
+#include "ContextMenuItem.h"
+#include "PlatformMenuDescription.h"
+#include "DocumentFragment.h"
+#include "Editor.h"
+#include "Clipboard.h"
+#include "AffineTransform.h"
+#include "FrameLoader.h"
+#include "EventHandler.h"
+#include "SearchPopupMenu.h"
+#include "ResourceHandle.h"
+#include "ResourceLoader.h"
+#include "ResourceHandleInternal.h"
+#include "DocumentLoader.h"
+#include "PageCache.h"
+#include "BitmapImage.h"
+#include "DragController.h"
+
+using namespace WebCore;
+
+//static void notImplemented() { puts("Not yet implemented"); }
+#define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d (%s)\n", __FILE__, __LINE__, __FUNCTION__); } while(0)
+
+Vector<char> loadResourceIntoArray(const char* resourceName)
+{
+    Vector<char> resource;
+    //if(strcmp(resourceName,"missingImage") == 0 ) {
+    //}
+    return resource;
+}
+
+// FrameView functions
+void FrameView::updateBorder() { notImplemented(); }
+
+void Widget::enableFlushDrawing() { notImplemented(); }
+Widget::FocusPolicy Widget::focusPolicy() const { notImplemented(); return NoFocus; }
+void Widget::disableFlushDrawing() { notImplemented(); }
+GraphicsContext* Widget::lockDrawingFocus() { notImplemented(); return 0; }
+void Widget::unlockDrawingFocus(GraphicsContext*) { notImplemented(); }
+void Widget::removeFromParent() { notImplemented(); }
+
+int WebCore::findNextSentenceFromIndex(UChar const*,int,int,bool) { notImplemented(); return 0; }
+void WebCore::findSentenceBoundary(UChar const*,int,int,int*,int*) { notImplemented(); }
+int WebCore::findNextWordFromIndex(UChar const*,int,int,bool) { notImplemented(); return 0; }
+
+void Frame::print() { notImplemented(); }
+void Frame::cleanupPlatformScriptObjects() { notImplemented(); }
+bool Frame::isCharacterSmartReplaceExempt(UChar, bool) { notImplemented(); return true; }
+//void Frame::respondToChangedSelection(WebCore::Selection const&,bool) { }
+void Frame::issueTransposeCommand() { notImplemented(); }
+DragImageRef Frame::dragImageForSelection() { notImplemented(); return 0; }
+
+void GraphicsContext::addRoundedRectClip(const IntRect& rect, const IntSize& topLeft, const IntSize& topRight,
+    const IntSize& bottomLeft, const IntSize& bottomRight) { notImplemented(); }
+void GraphicsContext::addInnerRoundedRectClip(const IntRect& rect, int thickness) { notImplemented(); }
+
+// cookies (we'll need a place to store these
+void WebCore::setCookies(const KURL& url, const KURL& policyURL, const String& value) { notImplemented(); }
+String WebCore::cookies(const KURL& url) { notImplemented(); return String(); }
+bool WebCore::cookiesEnabled() { notImplemented(); return false; }
+
+/********************************************************/
+/* Completely empty stubs (mostly to allow DRT to run): */
+/********************************************************/
+static WebCore::Cursor localCursor;
+const WebCore::Cursor& WebCore::moveCursor() { return localCursor; }
+
+bool AXObjectCache::gAccessibilityEnabled = false;
+
+bool WebCore::historyContains(DeprecatedString const&) { return false; }
+
+void WebCore::findWordBoundary(UChar const* str,int len,int position,int* start, int* end) { notImplemented(); *start=position; *end=position; }
+
+PluginInfo*PlugInInfoStore::createPluginInfoForPluginAtIndex(unsigned) { notImplemented(); return 0;}
+unsigned PlugInInfoStore::pluginCount() const { notImplemented(); return 0; }
+bool WebCore::PlugInInfoStore::supportsMIMEType(const WebCore::String&) { notImplemented(); return false; }
+void WebCore::refreshPlugins(bool) { notImplemented(); }
+
+void Widget::setIsSelected(bool) { notImplemented(); }
+
+void GraphicsContext::setShadow(IntSize const&,int,Color const&) { notImplemented(); }
+void GraphicsContext::clearShadow() { notImplemented(); }
+void GraphicsContext::beginTransparencyLayer(float) { notImplemented(); }
+void GraphicsContext::endTransparencyLayer() { notImplemented(); }
+void GraphicsContext::clearRect(const FloatRect&) { notImplemented(); }
+void GraphicsContext::strokeRect(const FloatRect&, float) { notImplemented(); }
+void GraphicsContext::setLineCap(LineCap) { notImplemented(); }
+void GraphicsContext::setLineJoin(LineJoin) { notImplemented(); }
+void GraphicsContext::setMiterLimit(float) { notImplemented(); }
+void GraphicsContext::setAlpha(float) { notImplemented(); }
+
+Color WebCore::focusRingColor() { return 0xFF0000FF; }
+void WebCore::setFocusRingColorChangeFunction(void (*)()) { }
+
+void Frame::setNeedsReapplyStyles() { notImplemented(); }
+void Image::drawPattern(GraphicsContext*, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, CompositeOperator, const FloatRect& destRect) { notImplemented(); } 
+
+PlatformScrollbar::PlatformScrollbar(ScrollbarClient* client, ScrollbarOrientation orientation, ScrollbarControlSize controlSize) : Scrollbar(client, orientation, controlSize) { notImplemented(); }
+PlatformScrollbar::~PlatformScrollbar() { notImplemented(); }
+int PlatformScrollbar::width() const { notImplemented(); return 0; }
+int PlatformScrollbar::height() const { notImplemented(); return 0; }
+void PlatformScrollbar::setEnabled(bool) { notImplemented(); }
+void PlatformScrollbar::paint(GraphicsContext*, const IntRect& damageRect) { notImplemented(); }
+void PlatformScrollbar::updateThumbPosition() { notImplemented(); }
+void PlatformScrollbar::updateThumbProportion() { notImplemented(); }
+void PlatformScrollbar::setRect(const IntRect&) { notImplemented(); }
+
+//bool IconDatabase::isIconExpiredForIconURL(const String& url) { return false; }
+//bool IconDatabase::hasEntryForIconURL(const String& url) { return false; }
+//IconDatabase* IconDatabase::sharedIconDatabase() { return 0; }
+//bool IconDatabase::setIconURLForPageURL(const String& iconURL, const String& pageURL) { return false; }
+
+
+//const PlatformMouseEvent::CurrentEventTag PlatformMouseEvent::currentEvent = {};
+//PlatformMouseEvent::PlatformMouseEvent(const CurrentEventTag&) { notImplemented(); }
+
+
+FileChooser::FileChooser(FileChooserClient*, const String& initialFilename) { notImplemented(); }
+//PassRefPtr<FileChooser> FileChooser::create(FileChooserClient*, const String& initialFilename) { notImplemented(); return PassRefPtr<FileChooser>(); }
+FileChooser::~FileChooser() { notImplemented(); }
+void FileChooser::openFileChooser(Document*) { notImplemented(); }
+String FileChooser::basenameForWidth(const Font&, int width) const { notImplemented(); return String(); }
+
+PopupMenu::PopupMenu(PopupMenuClient*) { notImplemented(); }
+
+PopupMenu::~PopupMenu() { notImplemented(); }
+void PopupMenu::show(const IntRect&, FrameView*, int index) { notImplemented(); }
+void PopupMenu::hide() { notImplemented(); }
+void PopupMenu::updateFromElement() { notImplemented(); }
+
+Icon::Icon() { notImplemented(); }
+Icon::~Icon() { notImplemented(); }
+PassRefPtr<Icon> Icon::newIconForFile(const String& filename) { notImplemented(); return PassRefPtr<Icon>(new Icon()); }
+void Icon::paint(GraphicsContext*, const IntRect&) { notImplemented(); }
+
+ContextMenu::ContextMenu(const HitTestResult& result) : m_hitTestResult(result) { notImplemented(); }
+ContextMenu::~ContextMenu() { notImplemented(); }
+void ContextMenu::appendItem(ContextMenuItem&) { notImplemented(); }
+void ContextMenu::setPlatformDescription(PlatformMenuDescription) { notImplemented(); }
+
+ContextMenuItem::ContextMenuItem(PlatformMenuItemDescription) { notImplemented(); }
+ContextMenuItem::ContextMenuItem(ContextMenu*) { notImplemented(); }
+ContextMenuItem::ContextMenuItem(ContextMenuItemType type, ContextMenuAction action, const String& title, ContextMenu* subMenu) { notImplemented(); }
+ContextMenuItem::~ContextMenuItem() { notImplemented(); }
+PlatformMenuItemDescription ContextMenuItem::releasePlatformDescription() { notImplemented(); return m_platformDescription; }
+ContextMenuItemType ContextMenuItem::type() const { notImplemented(); return ActionType; }
+void ContextMenuItem::setType(ContextMenuItemType) { notImplemented(); }
+ContextMenuAction ContextMenuItem::action() const { notImplemented(); return ContextMenuItemTagNoAction; }
+void ContextMenuItem::setAction(ContextMenuAction) { notImplemented(); }
+String ContextMenuItem::title() const { notImplemented(); return String(); }
+void ContextMenuItem::setTitle(const String&) { notImplemented(); }
+//PlatformMenuDescription ContextMenuItem::platformSubMenu() const { notImplemented(); return 0; }
+void ContextMenuItem::setSubMenu(ContextMenu*) { notImplemented(); }
+void ContextMenuItem::setChecked(bool) { notImplemented(); }
+void ContextMenuItem::setEnabled(bool) { notImplemented(); }
+
+String WebCore::submitButtonDefaultLabel() { return "Submit"; }
+String WebCore::inputElementAltText() { return String(); }
+String WebCore::resetButtonDefaultLabel() { return "Reset"; }
+String WebCore::defaultLanguage() { return "en"; }
+String WebCore::searchableIndexIntroduction() { return "Searchable Index"; }
+String WebCore::fileButtonChooseFileLabel() { return "Choose File"; }
+String WebCore::fileButtonNoFileSelectedLabel() { return "No file selected"; }
+String WebCore::contextMenuItemTagOpenLinkInNewWindow() { return String(); }
+String WebCore::contextMenuItemTagDownloadLinkToDisk() { return String(); }
+String WebCore::contextMenuItemTagCopyLinkToClipboard() { return String(); }
+String WebCore::contextMenuItemTagOpenImageInNewWindow() { return String(); }
+String WebCore::contextMenuItemTagDownloadImageToDisk() { return String(); }
+String WebCore::contextMenuItemTagCopyImageToClipboard() { return String(); }
+String WebCore::contextMenuItemTagOpenFrameInNewWindow() { return String(); }
+String WebCore::contextMenuItemTagCopy() { return String(); }
+String WebCore::contextMenuItemTagGoBack() { return String(); }
+String WebCore::contextMenuItemTagGoForward() { return String(); }
+String WebCore::contextMenuItemTagStop() { return String(); }
+String WebCore::contextMenuItemTagReload() { return String(); }
+String WebCore::contextMenuItemTagCut() { return String(); }
+String WebCore::contextMenuItemTagPaste() { return String(); }
+String WebCore::contextMenuItemTagNoGuessesFound() { return String(); }
+String WebCore::contextMenuItemTagIgnoreSpelling() { return String(); }
+String WebCore::contextMenuItemTagLearnSpelling() { return String(); }
+String WebCore::contextMenuItemTagSearchWeb() { return String(); }
+String WebCore::contextMenuItemTagLookUpInDictionary() { return String(); }
+String WebCore::contextMenuItemTagOpenLink() { return String(); }
+String WebCore::contextMenuItemTagIgnoreGrammar() { return String(); }
+String WebCore::contextMenuItemTagSpellingMenu() { return String(); }
+String WebCore::contextMenuItemTagShowSpellingPanel(bool show) { return String(); }
+String WebCore::contextMenuItemTagCheckSpelling() { return String(); }
+String WebCore::contextMenuItemTagCheckSpellingWhileTyping() { return String(); }
+String WebCore::contextMenuItemTagCheckGrammarWithSpelling() { return String(); }
+String WebCore::contextMenuItemTagFontMenu() { return String(); }
+String WebCore::contextMenuItemTagBold() { return String(); }
+String WebCore::contextMenuItemTagItalic() { return String(); }
+String WebCore::contextMenuItemTagUnderline() { return String(); }
+String WebCore::contextMenuItemTagOutline() { return String(); }
+String WebCore::contextMenuItemTagWritingDirectionMenu() { return String(); }
+String WebCore::contextMenuItemTagDefaultDirection() { return String(); }
+String WebCore::contextMenuItemTagLeftToRight() { return String(); }
+String WebCore::contextMenuItemTagRightToLeft() { return String(); }
+String WebCore::searchMenuNoRecentSearchesText() { return String("No recent searches"); }
+String WebCore::searchMenuRecentSearchesText() { return String("Recent searches"); }
+String WebCore::searchMenuClearRecentSearchesText() { return String("Clear recent searches"); }
+
+void Editor::ignoreSpelling() { notImplemented(); }
+void Editor::learnSpelling() { notImplemented(); }
+bool Editor::isSelectionUngrammatical() { notImplemented(); return false; }
+bool Editor::isSelectionMisspelled() { notImplemented(); return false; }
+Vector<String> Editor::guessesForMisspelledSelection() { notImplemented(); return Vector<String>(); }
+Vector<String> Editor::guessesForUngrammaticalSelection() { notImplemented(); return Vector<String>(); }
+void Editor::markMisspellingsAfterTypingToPosition(const VisiblePosition&) { notImplemented(); }
+void Editor::showColorPanel() { notImplemented(); }
+void Editor::showFontPanel() { notImplemented(); }
+void Editor::showStylesPanel() { notImplemented(); }
+void Editor::showSpellingGuessPanel() { notImplemented(); }
+void Editor::advanceToNextMisspelling(bool) { notImplemented(); }
+
+String FrameLoader::overrideMediaType() const { notImplemented(); return String(); }
+
+bool EventHandler::tabsToAllControls(KeyboardEvent* event) const { notImplemented(); return false; }
+bool EventHandler::passSubframeEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe) { notImplemented(); return false; }
+bool EventHandler::passMouseDownEventToWidget(Widget*) { notImplemented(); return false; }
+bool EventHandler::passWheelEventToWidget(Widget*) { notImplemented(); return false; }
+
+// FIXME: All this IconDatabase stuff could go away if much of
+// WebCore/loader/icon was linked in.  Unfortunately that requires SQLite,
+// which isn't currently part of the build.
+//Image* IconDatabase::iconForPageURL(const String&, const IntSize&, bool cache) { notImplemented(); return 0; }
+//Image* IconDatabase::defaultIcon(const IntSize&) { notImplemented(); return 0; }
+//void IconDatabase::retainIconForPageURL(const String&) { notImplemented(); }
+//void IconDatabase::releaseIconForPageURL(const String&) { notImplemented(); }
+//void IconDatabase::setIconDataForIconURL(PassRefPtr<SharedBuffer> data, const String&) { notImplemented(); }
+
+void SearchPopupMenu::saveRecentSearches(const AtomicString& name, const Vector<String>& searchItems) { notImplemented(); }
+void SearchPopupMenu::loadRecentSearches(const AtomicString& name, Vector<String>& searchItems) { notImplemented(); }
+SearchPopupMenu::SearchPopupMenu(PopupMenuClient* client) : PopupMenu(client) { notImplemented(); }
+bool SearchPopupMenu::enabled() { return true; }
+
+bool ResourceHandle::willLoadFromCache(ResourceRequest&) { notImplemented(); return false; }
+bool ResourceHandle::loadsBlocked() { notImplemented(); return false; }
+void ResourceHandle::loadResourceSynchronously(const ResourceRequest& request, ResourceError& e, ResourceResponse& r, Vector<char>& data) { notImplemented(); }
+
+
+// bool SharedBuffer::hasPlatformData() const { notImplemented(); return false; }
+// const char* SharedBuffer::platformData() const { notImplemented(); return NULL; }
+// unsigned SharedBuffer::platformDataSize() const { notImplemented(); return 0; }
+// void SharedBuffer::maybeTransferPlatformData() { notImplemented(); }
+// void SharedBuffer::clearPlatformData() { notImplemented(); }
+
+//const KURL DocumentLoader::unreachableURL() const { notImplemented(); return KURL(); }
+bool DocumentLoader::getResponseModifiedHeader(WebCore::String&) const { notImplemented(); return false; }
+
+void PageCache::close() { notImplemented(); }
+
+
+namespace WebCore {
+float userIdleTime() { notImplemented(); return 0; }
+Vector<String> supportedKeySizes() { notImplemented(); return Vector<String>(); }
+String signedPublicKeyAndChallengeString(unsigned keySizeIndex, const String &challengeString, const KURL &url) { return String(); }
+}
diff --git a/WebCore/platform/wx/WidgetWx.cpp b/WebCore/platform/wx/WidgetWx.cpp
new file mode 100755 (executable)
index 0000000..4221367
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 "Widget.h"
+
+#include "Cursor.h"
+#include "GraphicsContext.h"
+#include "IntRect.h"
+#include "Font.h"
+
+#include <wx/defs.h>
+#include <wx/scrolwin.h>
+
+namespace WebCore {
+
+class WidgetPrivate
+{
+public:
+    wxScrolledWindow* nativeWindow;
+    Font font;
+    WidgetClient* client;
+};
+
+Widget::Widget()
+    : data(new WidgetPrivate)
+{
+    data->nativeWindow = 0;
+    data->client = 0;
+}
+
+Widget::Widget(wxScrolledWindow* win)
+    : data(new WidgetPrivate)
+{
+    data->nativeWindow = win;
+}
+
+Widget::~Widget() 
+{
+    delete data;
+}
+
+wxScrolledWindow* Widget::nativeWindow() const
+{
+    return data->nativeWindow;
+}
+
+void Widget::setNativeWindow(wxScrolledWindow* win)
+{
+    data->nativeWindow = win;
+}
+
+void Widget::setClient(WidgetClient* c)
+{
+    data->client = c;
+}
+
+WidgetClient* Widget::client() const
+{
+    return data->client;
+}
+
+IntRect Widget::frameGeometry() const
+{   
+    if (data->nativeWindow)
+        return IntRect(data->nativeWindow->GetRect());
+
+    return IntRect();
+}
+
+bool Widget::hasFocus() const
+{
+    wxWindow* focus = wxWindow::FindFocus();
+    return (data->nativeWindow == focus);
+}
+
+void Widget::setFocus()
+{
+    if (data->nativeWindow)
+        data->nativeWindow->SetFocus();
+}
+
+void Widget::clearFocus()
+{
+}
+
+const Font& Widget::font() const
+{
+    return data->font;
+}
+
+void Widget::setFont(const Font& font)
+{
+    data->font = font;
+}
+
+void Widget::setCursor(const Cursor& cursor)
+{
+    if (data->nativeWindow)
+        data->nativeWindow->SetCursor(*cursor.impl());
+}
+
+void Widget::show()
+{
+    if (data->nativeWindow)
+        data->nativeWindow->Show();
+}
+
+void Widget::hide()
+{
+    if (data->nativeWindow)
+        data->nativeWindow->Hide();
+}
+
+void Widget::setFrameGeometry(const IntRect &rect)
+{
+    if (data->nativeWindow)
+        data->nativeWindow->SetSize(rect);
+}
+
+void Widget::setEnabled(bool enabled)
+{
+    if (data->nativeWindow)
+        data->nativeWindow->Enable(enabled);
+}
+
+bool Widget::isEnabled() const
+{
+    if (data->nativeWindow)
+        return data->nativeWindow->IsEnabled();
+        
+    return false;
+}
+
+void Widget::invalidate()
+{
+    if (data->nativeWindow)
+        data->nativeWindow->Refresh();
+}
+
+void Widget::invalidateRect(const IntRect& r)
+{
+    if (data->nativeWindow)
+        data->nativeWindow->RefreshRect(r);
+}
+
+void Widget::paint(GraphicsContext*,const IntRect& r)
+{
+    invalidateRect(r);
+    if (data->nativeWindow)
+        data->nativeWindow->Refresh();
+}
+
+}
\ No newline at end of file
diff --git a/WebCore/platform/wx/wxcode/fontprops.cpp b/WebCore/platform/wx/wxcode/fontprops.cpp
new file mode 100644 (file)
index 0000000..56d21bd
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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.
+ */
+// this is a hacky way of doing it, but we don't
+// currently have info on which platform we're being
+// compiled for directly.
+#if __WXMAC__
+#include "mac/carbon/fontprops.cpp"
+#elif __WXMSW__
+#include "win/fontprops.cpp"
+#else
+#include "gtk/fontprops.cpp"
+#endif
diff --git a/WebCore/platform/wx/wxcode/fontprops.h b/WebCore/platform/wx/wxcode/fontprops.h
new file mode 100644 (file)
index 0000000..e6f0b16
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 <wx/defs.h>
+#include <wx/font.h>
+
+void GetTextExtent( const wxFont& font, const wxString& str, wxCoord *width, wxCoord *height,
+                            wxCoord *descent = NULL, wxCoord *externalLeading = NULL );
+
+class wxFontProperties{
+
+public:
+    wxFontProperties(wxFont* font);
+    float GetAscent() { return m_ascent; }
+    float GetDescent() { return m_descent; }
+    float GetLineGap() { return m_lineGap; }
+    float GetLineSpacing() { return m_lineSpacing; }
+    float GetXHeight() { return m_xHeight; }
+
+private:
+    float m_ascent;
+    float m_descent;
+    float m_lineGap;
+    float m_lineSpacing;
+    float m_xHeight;
+        
+};
\ No newline at end of file
diff --git a/WebCore/platform/wx/wxcode/gtk/fontprops.cpp b/WebCore/platform/wx/wxcode/gtk/fontprops.cpp
new file mode 100644 (file)
index 0000000..369fcc5
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 <wx/defs.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/fontutil.h>
+#include "fontprops.h"
+
+#include <gdk/gdk.h>
+
+wxFontProperties::wxFontProperties(wxFont* font):
+m_ascent(0), m_descent(0), m_lineGap(0), m_lineSpacing(0), m_xHeight(0)
+{
+    PangoContext* context = gdk_pango_context_get_for_screen( gdk_screen_get_default() );
+    PangoLayout* layout = pango_layout_new(context);
+    // and use it if it's valid
+    if ( font && font->Ok() )
+    {
+        pango_layout_set_font_description
+        (
+            layout,
+            font->GetNativeFontInfo()->description
+        );
+    }
+    
+    PangoFontMetrics* metrics = pango_context_get_metrics (context, font->GetNativeFontInfo()->description, NULL);
+
+    int height = font->GetPixelSize().GetHeight();
+
+    m_ascent = PANGO_PIXELS(pango_font_metrics_get_ascent(metrics)); 
+    m_descent = PANGO_PIXELS(pango_font_metrics_get_descent(metrics));
+    
+    int h;
+
+    const char* x = "x";
+    pango_layout_set_text( layout, x, strlen(x) );
+    pango_layout_get_pixel_size( layout, NULL, &h );
+            
+    m_xHeight = h;
+    m_lineGap = (m_ascent + m_descent) / 4; // FIXME: How can we calculate this via Pango? 
+    m_lineSpacing = m_ascent + m_descent;
+
+    pango_font_metrics_unref(metrics);
+}
+
+void GetTextExtent( const wxFont& font, const wxString& str, wxCoord *width, wxCoord *height,
+                            wxCoord *descent, wxCoord *externalLeading )
+{
+    if ( width )
+        *width = 0;
+    if ( height )
+        *height = 0;
+    if ( descent )
+        *descent = 0;
+    if ( externalLeading )
+        *externalLeading = 0;
+
+    if (str.empty())
+        return;
+        
+    PangoContext* context = gdk_pango_context_get_for_screen( gdk_screen_get_default() );
+    PangoLayout* m_layout = pango_layout_new(context);
+    // and use it if it's valid
+    if ( font != wxNullFont )
+    {
+        pango_layout_set_font_description
+        (
+            m_layout,
+            font.GetNativeFontInfo()->description
+        );
+    }
+
+    // Set layout's text
+    const wxCharBuffer dataUTF8 = wxConvUTF8.cWX2MB(str);
+    if ( !dataUTF8 )
+    {
+        // hardly ideal, but what else can we do if conversion failed?
+        return;
+    }
+
+    pango_layout_set_text( m_layout, dataUTF8, strlen(dataUTF8) );
+
+    if (descent)
+    {
+        int h;
+        pango_layout_get_pixel_size( m_layout, width, &h );
+        PangoLayoutIter *iter = pango_layout_get_iter(m_layout);
+        int baseline = pango_layout_iter_get_baseline(iter);
+        pango_layout_iter_free(iter);
+        *descent = h - PANGO_PIXELS(baseline);
+
+        if (height)
+            *height = (wxCoord) h;
+    }
+    else
+    {
+        pango_layout_get_pixel_size( m_layout, width, height );
+    }
+
+    // Reset old font description
+    //if (font != wxNullFont)
+    //    pango_layout_set_font_description( m_layout, m_fontdesc );
+}
\ No newline at end of file
diff --git a/WebCore/platform/wx/wxcode/mac/carbon/fontprops.cpp b/WebCore/platform/wx/wxcode/mac/carbon/fontprops.cpp
new file mode 100644 (file)
index 0000000..57eafad
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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.
+ */
+
+#if __WXMAC__
+#include <ApplicationServices/ApplicationServices.h>
+#endif
+
+#include <wx/defs.h>
+#include <wx/gdicmn.h>
+#include "fontprops.h"
+
+const float smallCapsFontSizeMultiplier = 0.7f;
+const float contextDPI = 72.0f;
+static inline float scaleEmToUnits(float x, unsigned unitsPerEm) { return x * (contextDPI / (contextDPI * unitsPerEm)); }
+
+wxFontProperties::wxFontProperties(wxFont* font):
+m_ascent(0), m_descent(0), m_lineGap(0), m_lineSpacing(0), m_xHeight(0)
+{
+    ATSFontRef fontRef;
+    
+    fontRef = FMGetATSFontRefFromFont(font->MacGetATSUFontID());
+    if (fontRef){
+        ATSFontMetrics vMetrics;
+        OSStatus err;
+        
+        int height = font->GetPointSize(); //.GetHeight();
+        err = ATSFontGetHorizontalMetrics(fontRef, 0, &vMetrics);
+        if (err != noErr)
+            fprintf(stderr, "Error number is %d\n", err);
+        m_ascent = lroundf(vMetrics.ascent * height);
+        m_descent = lroundf(vMetrics.descent * height);
+        m_lineGap = lroundf(vMetrics.leading * height);
+        wxCoord xHeight = 0;
+        GetTextExtent(*font, wxT("x"), NULL, &xHeight, NULL, NULL);
+        m_xHeight = lroundf(xHeight);
+        m_lineSpacing = m_ascent - m_descent + m_lineGap;
+
+    }
+
+}
+
+void GetTextExtent( const wxFont& font, const wxString& str, wxCoord *width, wxCoord *height,
+                            wxCoord *descent, wxCoord *externalLeading )
+{
+    ATSUStyle* ATSUIStyle;
+
+    if ( font.Ok() )
+    {
+        OSStatus status ;
+
+        status = ATSUCreateAndCopyStyle( (ATSUStyle) font.MacGetATSUStyle() , (ATSUStyle*) &ATSUIStyle ) ;
+
+        wxASSERT_MSG( status == noErr, wxT("couldn't create ATSU style") ) ;
+
+        // we need the scale here ...
+
+        Fixed atsuSize = IntToFixed( int( /*m_scaleY*/ 1 * font.MacGetFontSize()) ) ;
+        //RGBColor atsuColor = MAC_WXCOLORREF( m_textForegroundColor.GetPixel() ) ;
+        ATSUAttributeTag atsuTags[] =
+        {
+                kATSUSizeTag //,
+        //        kATSUColorTag ,
+        } ;
+        ByteCount atsuSizes[sizeof(atsuTags) / sizeof(ATSUAttributeTag)] =
+        {
+                sizeof( Fixed ) //,
+        //        sizeof( RGBColor ) ,
+        } ;
+        ATSUAttributeValuePtr atsuValues[sizeof(atsuTags) / sizeof(ATSUAttributeTag)] =
+        {
+                &atsuSize //,
+        //        &atsuColor ,
+        } ;
+
+        status = ::ATSUSetAttributes(
+            (ATSUStyle)ATSUIStyle, sizeof(atsuTags) / sizeof(ATSUAttributeTag) ,
+            atsuTags, atsuSizes, atsuValues);
+
+        wxASSERT_MSG( status == noErr , wxT("couldn't modify ATSU style") ) ;
+    }
+    
+    wxCHECK_RET( ATSUIStyle != NULL, wxT("GetTextExtent - no valid font set") ) ;
+
+    OSStatus status = noErr ;
+
+    ATSUTextLayout atsuLayout ;
+    UniCharCount chars = str.length() ;
+    UniChar* ubuf = NULL ;
+
+#if SIZEOF_WCHAR_T == 4
+    wxMBConvUTF16 converter ;
+#if wxUSE_UNICODE
+    size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
+    ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
+    converter.WC2MB( (char*) ubuf , str.wc_str(), unicharlen + 2 ) ;
+#else
+    const wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
+    size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ;
+    ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
+    converter.WC2MB( (char*) ubuf , wchar.data() , unicharlen + 2 ) ;
+#endif
+    chars = unicharlen / 2 ;
+#else
+#if wxUSE_UNICODE
+    ubuf = (UniChar*) str.wc_str() ;
+#else
+    wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
+    chars = wxWcslen( wchar.data() ) ;
+    ubuf = (UniChar*) wchar.data() ;
+#endif
+#endif
+
+    status = ::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) ubuf , 0 , chars , chars , 1 ,
+        &chars , (ATSUStyle*) &ATSUIStyle , &atsuLayout ) ;
+
+    wxASSERT_MSG( status == noErr , wxT("couldn't create the layout of the text") );
+
+    ATSUTextMeasurement textBefore, textAfter ;
+    ATSUTextMeasurement textAscent, textDescent ;
+
+    status = ::ATSUGetUnjustifiedBounds( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
+        &textBefore , &textAfter, &textAscent , &textDescent );
+
+    if ( height )
+        *height = FixedToInt(textAscent + textDescent) ;
+    if ( descent )
+        *descent = FixedToInt(textDescent) ;
+    if ( externalLeading )
+        *externalLeading = 0 ;
+    if ( width )
+        *width = FixedToInt(textAfter - textBefore) ;
+
+    ::ATSUDisposeTextLayout(atsuLayout);
+}
diff --git a/WebCore/platform/wx/wxcode/win/fontprops.cpp b/WebCore/platform/wx/wxcode/win/fontprops.cpp
new file mode 100644 (file)
index 0000000..c24d1cc
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.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 COMPUTER, 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 COMPUTER, 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 <wx/defs.h>
+#include <wx/gdicmn.h>
+#include "fontprops.h"
+#include "math.h"
+#include "MathExtras.h"
+
+#include <wx/wx.h>
+#include "wx/msw/private.h"
+
+inline long  my_round(double x)
+{
+    return (long)(x < 0 ? x - 0.5 : x + 0.5);
+}
+
+wxFontProperties::wxFontProperties(wxFont* font):
+m_ascent(0), m_descent(0), m_lineGap(0), m_lineSpacing(0), m_xHeight(0)
+{
+    HDC dc = GetDC(0);
+    WXHFONT hFont = font->GetHFONT();
+    ::SelectObject(dc, hFont);
+    if (font){
+       
+        int height = font->GetPointSize();
+
+        TEXTMETRIC tm;
+        GetTextMetrics(dc, &tm);
+        m_ascent = lroundf(tm.tmAscent);
+        m_descent = lroundf(tm.tmDescent);
+        m_xHeight = m_ascent * 0.56f;  // Best guess for xHeight for non-Truetype fonts.
+        m_lineGap = lroundf(tm.tmExternalLeading);
+        m_lineSpacing = m_lineGap + m_ascent + m_descent;
+    }
+    RestoreDC(dc, -1);
+    ReleaseDC(0, dc);
+}
+
+void GetTextExtent( const wxFont& font, const wxString& str, wxCoord *width, wxCoord *height,
+                            wxCoord *descent, wxCoord *externalLeading )
+{
+    HDC dc = GetDC(0);
+    WXHFONT hFont = font.GetHFONT();
+    ::SelectObject(dc, hFont);
+
+    HFONT hfontOld;
+    if ( font != wxNullFont )
+    {
+        wxASSERT_MSG( font.Ok(), _T("invalid font in wxDC::GetTextExtent") );
+
+        hfontOld = (HFONT)::SelectObject(dc, hFont);
+    }
+    else // don't change the font
+    {
+        hfontOld = 0;
+    }
+
+    SIZE sizeRect;
+    const size_t len = str.length();
+    if ( !::GetTextExtentPoint32(dc, str, len, &sizeRect) )
+    {
+        wxLogLastError(_T("GetTextExtentPoint32()"));
+    }
+
+#if !defined(_WIN32_WCE) || (_WIN32_WCE >= 400)
+    // the result computed by GetTextExtentPoint32() may be too small as it
+    // accounts for under/overhang of the first/last character while we want
+    // just the bounding rect for this string so adjust the width as needed
+    // (using API not available in 2002 SDKs of WinCE)
+    if ( len > 0 )
+    {
+        ABC width;
+        const wxChar chFirst = *str.begin();
+        if ( ::GetCharABCWidths(dc, chFirst, chFirst, &width) )
+        {
+            if ( width.abcA < 0 )
+                sizeRect.cx -= width.abcA;
+
+            if ( len > 1 )
+            {
+                const wxChar chLast = *str.rbegin();
+                ::GetCharABCWidths(dc, chLast, chLast, &width);
+            }
+            //else: we already have the width of the last character
+
+            if ( width.abcC < 0 )
+                sizeRect.cx -= width.abcC;
+        }
+        //else: GetCharABCWidths() failed, not a TrueType font?
+    }
+#endif // !defined(_WIN32_WCE) || (_WIN32_WCE >= 400)
+
+    TEXTMETRIC tm;
+    ::GetTextMetrics(dc, &tm);
+
+    if (width)
+        *width = sizeRect.cx;
+    if (height)
+        *height = sizeRect.cy;
+    if (descent)
+        *descent = tm.tmDescent;
+    if (externalLeading)
+        *externalLeading = tm.tmExternalLeading;
+
+    if ( hfontOld )
+    {
+        ::SelectObject(dc, hfontOld);
+    }
+}