From 6fb113f0e892dec0a7cc5f02cfa5a0805b133621 Mon Sep 17 00:00:00 2001 From: darin Date: Sat, 1 Jul 2006 04:39:50 +0000 Subject: [PATCH] Reviewed and worked over a lot by Darin. - check in first set of GDK-specific sources * platform/gdk/BrowserExtensionGdk.h: Added. * platform/gdk/CookieJarGdk.cpp: Added. * platform/gdk/CursorGdk.cpp: Added. * platform/gdk/FontCacheGdk.cpp: Added. * platform/gdk/FontDataGdk.cpp: Added. * platform/gdk/FontGdk.cpp: Added. * platform/gdk/FontPlatformData.h: Added. * platform/gdk/FontPlatformDataGdk.cpp: Added. * platform/gdk/FrameGdk.cpp: Added. * platform/gdk/FrameGdk.h: Added. * platform/gdk/GlyphMapGdk.cpp: Added. * platform/gdk/KeyEventGdk.cpp: Added. * platform/gdk/KeyboardCodes.h: Added. * platform/gdk/MouseEventGdk.cpp: Added. * platform/gdk/PageGdk.cpp: Added. * platform/gdk/RenderThemeGdk.cpp: Added. * platform/gdk/RenderThemeGdk.h: Added. * platform/gdk/ScreenGdk.cpp: Added. * platform/gdk/ScrollViewGdk.cpp: Added. * platform/gdk/SharedTimerLinux.cpp: Added. * platform/gdk/SystemTimeLinux.cpp: Added. * platform/gdk/TemporaryLinkStubs.cpp: Added. * platform/gdk/TransferJobCurl.cpp: Added. * platform/gdk/TransferJobManager.cpp: Added. * platform/gdk/TransferJobManager.h: Added. * platform/gdk/WheelEventGdk.cpp: Added. * platform/gdk/WidgetGdk.cpp: Added. * platform/gdk/gdk-encodings.txt: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@15124 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- WebCore/ChangeLog | 35 ++ WebCore/platform/gdk/BrowserExtensionGdk.h | 62 +++ WebCore/platform/gdk/CookieJarGdk.cpp | 56 ++ WebCore/platform/gdk/CursorGdk.cpp | 180 ++++++ WebCore/platform/gdk/FontCacheGdk.cpp | 74 +++ WebCore/platform/gdk/FontDataGdk.cpp | 108 ++++ WebCore/platform/gdk/FontGdk.cpp | 63 +++ WebCore/platform/gdk/FontPlatformData.h | 74 +++ WebCore/platform/gdk/FontPlatformDataGdk.cpp | 188 +++++++ WebCore/platform/gdk/FrameGdk.cpp | 364 +++++++++++++ WebCore/platform/gdk/FrameGdk.h | 145 +++++ WebCore/platform/gdk/GlyphMapGdk.cpp | 45 ++ WebCore/platform/gdk/KeyEventGdk.cpp | 479 ++++++++++++++++ WebCore/platform/gdk/KeyboardCodes.h | 543 +++++++++++++++++++ WebCore/platform/gdk/MouseEventGdk.cpp | 83 +++ WebCore/platform/gdk/PageGdk.cpp | 81 +++ WebCore/platform/gdk/RenderThemeGdk.cpp | 158 ++++++ WebCore/platform/gdk/RenderThemeGdk.h | 73 +++ WebCore/platform/gdk/ScreenGdk.cpp | 59 ++ WebCore/platform/gdk/ScrollViewGdk.cpp | 262 +++++++++ WebCore/platform/gdk/SharedTimerLinux.cpp | 82 +++ WebCore/platform/gdk/SystemTimeLinux.cpp | 42 ++ WebCore/platform/gdk/TemporaryLinkStubs.cpp | 374 +++++++++++++ WebCore/platform/gdk/TransferJobCurl.cpp | 57 ++ WebCore/platform/gdk/TransferJobManager.cpp | 221 ++++++++ WebCore/platform/gdk/TransferJobManager.h | 71 +++ WebCore/platform/gdk/WheelEventGdk.cpp | 60 ++ WebCore/platform/gdk/WidgetGdk.cpp | 178 ++++++ WebCore/platform/gdk/gdk-encodings.txt | 12 + 29 files changed, 4229 insertions(+) create mode 100644 WebCore/platform/gdk/BrowserExtensionGdk.h create mode 100644 WebCore/platform/gdk/CookieJarGdk.cpp create mode 100644 WebCore/platform/gdk/CursorGdk.cpp create mode 100644 WebCore/platform/gdk/FontCacheGdk.cpp create mode 100644 WebCore/platform/gdk/FontDataGdk.cpp create mode 100644 WebCore/platform/gdk/FontGdk.cpp create mode 100644 WebCore/platform/gdk/FontPlatformData.h create mode 100644 WebCore/platform/gdk/FontPlatformDataGdk.cpp create mode 100644 WebCore/platform/gdk/FrameGdk.cpp create mode 100644 WebCore/platform/gdk/FrameGdk.h create mode 100644 WebCore/platform/gdk/GlyphMapGdk.cpp create mode 100644 WebCore/platform/gdk/KeyEventGdk.cpp create mode 100644 WebCore/platform/gdk/KeyboardCodes.h create mode 100644 WebCore/platform/gdk/MouseEventGdk.cpp create mode 100644 WebCore/platform/gdk/PageGdk.cpp create mode 100644 WebCore/platform/gdk/RenderThemeGdk.cpp create mode 100644 WebCore/platform/gdk/RenderThemeGdk.h create mode 100644 WebCore/platform/gdk/ScreenGdk.cpp create mode 100644 WebCore/platform/gdk/ScrollViewGdk.cpp create mode 100644 WebCore/platform/gdk/SharedTimerLinux.cpp create mode 100644 WebCore/platform/gdk/SystemTimeLinux.cpp create mode 100644 WebCore/platform/gdk/TemporaryLinkStubs.cpp create mode 100644 WebCore/platform/gdk/TransferJobCurl.cpp create mode 100644 WebCore/platform/gdk/TransferJobManager.cpp create mode 100644 WebCore/platform/gdk/TransferJobManager.h create mode 100644 WebCore/platform/gdk/WheelEventGdk.cpp create mode 100644 WebCore/platform/gdk/WidgetGdk.cpp create mode 100644 WebCore/platform/gdk/gdk-encodings.txt diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index 04f8801239e..42d290d6f1b 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,38 @@ +2006-06-30 Mike Emmel + + Reviewed and worked over a lot by Darin. + + - check in first set of GDK-specific sources + + * platform/gdk/BrowserExtensionGdk.h: Added. + * platform/gdk/CookieJarGdk.cpp: Added. + * platform/gdk/CursorGdk.cpp: Added. + * platform/gdk/FontCacheGdk.cpp: Added. + * platform/gdk/FontDataGdk.cpp: Added. + * platform/gdk/FontGdk.cpp: Added. + * platform/gdk/FontPlatformData.h: Added. + * platform/gdk/FontPlatformDataGdk.cpp: Added. + * platform/gdk/FrameGdk.cpp: Added. + * platform/gdk/FrameGdk.h: Added. + * platform/gdk/GlyphMapGdk.cpp: Added. + * platform/gdk/KeyEventGdk.cpp: Added. + * platform/gdk/KeyboardCodes.h: Added. + * platform/gdk/MouseEventGdk.cpp: Added. + * platform/gdk/PageGdk.cpp: Added. + * platform/gdk/RenderThemeGdk.cpp: Added. + * platform/gdk/RenderThemeGdk.h: Added. + * platform/gdk/ScreenGdk.cpp: Added. + * platform/gdk/ScrollViewGdk.cpp: Added. + * platform/gdk/SharedTimerLinux.cpp: Added. + * platform/gdk/SystemTimeLinux.cpp: Added. + * platform/gdk/TemporaryLinkStubs.cpp: Added. + * platform/gdk/TransferJobCurl.cpp: Added. + * platform/gdk/TransferJobManager.cpp: Added. + * platform/gdk/TransferJobManager.h: Added. + * platform/gdk/WheelEventGdk.cpp: Added. + * platform/gdk/WidgetGdk.cpp: Added. + * platform/gdk/gdk-encodings.txt: Added. + 2006-06-30 Mike Emmel Reviewed by Darin. diff --git a/WebCore/platform/gdk/BrowserExtensionGdk.h b/WebCore/platform/gdk/BrowserExtensionGdk.h new file mode 100644 index 00000000000..6fc58ccad25 --- /dev/null +++ b/WebCore/platform/gdk/BrowserExtensionGdk.h @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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 BrowserExtensionGdk_H_ +#define BrowserExtensionGdk_H_ + +#include "BrowserExtension.h" + +namespace WebCore { + +class Frame; +class FrameGdk; + +class BrowserExtensionGdk : public BrowserExtension { +public: + BrowserExtensionGdk(Frame*); + + virtual void createNewWindow(const ResourceRequest&); + virtual void createNewWindow(const ResourceRequest&, const WindowArgs&, Frame*&); + + virtual void setIconURL(const KURL&); + virtual void setTypedIconURL(const KURL&, const String& type); + + virtual int getHistoryLength(); + virtual void goBackOrForward(int distance); + virtual KURL historyURL(int distance); + + virtual bool canRunModal(); + virtual bool canRunModalNow(); + virtual void runModal(); + +private: + FrameGdk* m_frame; +}; + +} + +#endif diff --git a/WebCore/platform/gdk/CookieJarGdk.cpp b/WebCore/platform/gdk/CookieJarGdk.cpp new file mode 100644 index 00000000000..67015077e6f --- /dev/null +++ b/WebCore/platform/gdk/CookieJarGdk.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "CookieJar.h" + +#include "DeprecatedString.h" +#include "KURL.h" +#include "PlatformString.h" +#include "StringHash.h" +#include + +namespace WebCore { + +static HashMap cookieJar; + +void setCookies(const KURL& url, const KURL& /*policyURL*/, const String& value) +{ + cookieJar.set(url.url(), value); +} + +String cookies(const KURL& url) +{ + return cookieJar.get(url.url()); +} + +bool cookiesEnabled() +{ + return true; +} + +} diff --git a/WebCore/platform/gdk/CursorGdk.cpp b/WebCore/platform/gdk/CursorGdk.cpp new file mode 100644 index 00000000000..d463ab6d2d0 --- /dev/null +++ b/WebCore/platform/gdk/CursorGdk.cpp @@ -0,0 +1,180 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "Cursor.h" + +#include "DeprecatedString.h" +#include +#include + +namespace WebCore { + +Cursor::Cursor(const Cursor& other) + : m_impl(other.m_impl) +{ + if (m_impl) + gdk_cursor_ref(m_impl); +} + +Cursor::~Cursor() +{ + if (m_impl) + gdk_cursor_unref(m_impl); +} + +Cursor& Cursor::operator=(const Cursor& other) +{ + gdk_cursor_ref(other.m_impl); + gdk_cursor_unref(m_impl); + m_impl = other.m_impl; + return *this; +} + +Cursor::Cursor(GdkCursor* c) + : m_impl(c) +{ + m_impl = c; + ASSERT(c); + gdk_cursor_ref(c); +} + +const Cursor& crossCursor() +{ + static Cursor c = gdk_cursor_new(GDK_CROSS); + return c; +} + +const Cursor& handCursor() +{ + static Cursor c = gdk_cursor_new(GDK_HAND2); + return c; +} + +const Cursor& iBeamCursor() +{ + static Cursor c = gdk_cursor_new(GDK_XTERM); + return c; +} + +const Cursor& waitCursor() +{ + static Cursor c = gdk_cursor_new(GDK_WATCH); + return c; +} + +const Cursor& helpCursor() +{ + static Cursor c = gdk_cursor_new(GDK_QUESTION_ARROW); + return c; +} + +const Cursor& eastResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_RIGHT_SIDE); + return c; +} + +const Cursor& northResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_TOP_SIDE); + return c; +} + +const Cursor& northEastResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_TOP_RIGHT_CORNER); + return c; +} + +const Cursor& northWestResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_TOP_LEFT_CORNER); + return c; +} + +const Cursor& southResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_BOTTOM_SIDE); + return c; +} + +const Cursor& southEastResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_BOTTOM_RIGHT_CORNER); + return c; +} + +const Cursor& southWestResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_BOTTOM_LEFT_CORNER); + return c; +} + +const Cursor& westResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_LEFT_SIDE); + return c; +} + +const Cursor& northSouthResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_TOP_TEE); + return c; +} + +const Cursor& eastWestResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_LEFT_SIDE); + return c; +} + +const Cursor& northEastSouthWestResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_SIZING); + return c; +} + +const Cursor& northWestSouthEastResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_SIZING); + return c; +} + +const Cursor& columnResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_DOUBLE_ARROW); + return c; +} + +const Cursor& rowResizeCursor() +{ + static Cursor c = gdk_cursor_new(GDK_DOUBLE_ARROW); + return c; +} + +} diff --git a/WebCore/platform/gdk/FontCacheGdk.cpp b/WebCore/platform/gdk/FontCacheGdk.cpp new file mode 100644 index 00000000000..66a438b01b3 --- /dev/null +++ b/WebCore/platform/gdk/FontCacheGdk.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + * 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 "Font.h" +#include "FontPlatformData.h" + +namespace WebCore { + +void FontCache::platformInit() +{ + if (!FontPlatformData::init()) { + assert(0); + fprintf(stderr, "no fonts found exiting\n"); + exit(-1); + } +} + +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("Times New Roman"); + return getCachedFontPlatformData(font.fontDescription(), timesStr); +} + +FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family) +{ + return new FontPlatformData(fontDescription, family); +} + +} diff --git a/WebCore/platform/gdk/FontDataGdk.cpp b/WebCore/platform/gdk/FontDataGdk.cpp new file mode 100644 index 00000000000..7881ab605b7 --- /dev/null +++ b/WebCore/platform/gdk/FontDataGdk.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + * 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 "FloatRect.h" +#include "Font.h" +#include "FontCache.h" +#include "FontDescription.h" +#include "GlyphBuffer.h" +#include +#include +#include +#include + +namespace WebCore { + +void FontData::platformInit() +{ + cairo_font_extents_t font_extents; + cairo_text_extents_t text_extents; + cairo_scaled_font_extents(m_font.m_scaledFont, &font_extents); + m_ascent = static_cast(font_extents.ascent); + m_descent = static_cast(font_extents.descent); + m_lineSpacing = static_cast(font_extents.height); + cairo_scaled_font_text_extents(m_font.m_scaledFont, "x", &text_extents); + m_xHeight = text_extents.height; + cairo_scaled_font_text_extents(m_font.m_scaledFont, " ", &text_extents); + m_spaceWidth = static_cast(text_extents.x_advance); + assert(m_spaceWidth != 0); + m_lineGap = m_lineSpacing - m_ascent - m_descent; +} + +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 +{ + for (unsigned i = 0; i < length; i++) + if (getGlyphIndex(characters[i]) == 0) + return false; + return true; +} + +void FontData::determinePitch() +{ + m_treatAsFixedPitch = m_font.isFixedPitch(); +} + +float FontData::platformWidthForGlyph(Glyph glyph) const +{ + cairo_glyph_t cglyph; + cglyph.index = (int)glyph; + cairo_text_extents_t extents; + cairo_scaled_font_glyph_extents(m_font.m_scaledFont, &cglyph, 1, &extents); + float w = extents.x_advance; + if (w == 0) + w = m_spaceWidth; + return w; +} + +void FontData::setFont(cairo_t* cr) const +{ + m_font.setFont(cr); +} + +} diff --git a/WebCore/platform/gdk/FontGdk.cpp b/WebCore/platform/gdk/FontGdk.cpp new file mode 100644 index 00000000000..4a60fe338fa --- /dev/null +++ b/WebCore/platform/gdk/FontGdk.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "Font.h" + +#include "FontData.h" +#include "GraphicsContext.h" +#include + +namespace WebCore { + +void Font::drawGlyphs(GraphicsContext* graphicsContext, const FontData* font, const GlyphBuffer& glyphBuffer, + int from, int numGlyphs, const FloatPoint& point) const +{ + cairo_t* context = graphicsContext->platformContext(); + + // Set the text color to use for drawing. + float red, green, blue, alpha; + Color penColor = graphicsContext->pen().color(); + penColor.getRGBA(red, green, blue, alpha); + cairo_set_source_rgba(context, red, green, blue, alpha); + + // Select the scaled font. + font->setFont(context); + + GlyphBufferGlyph* glyphs = glyphBuffer.glyphs(from); + + float offset = point.x(); + + for (unsigned i = 0; i < numGlyphs; i++) { + glyphs[i].x = offset; + glyphs[i].y = point.y(); + offset += glyphBuffer.advanceAt(from + i); + } + cairo_show_glyphs(context, glyphs, numGlyphs); +} + +} diff --git a/WebCore/platform/gdk/FontPlatformData.h b/WebCore/platform/gdk/FontPlatformData.h new file mode 100644 index 00000000000..6bd20628e01 --- /dev/null +++ b/WebCore/platform/gdk/FontPlatformData.h @@ -0,0 +1,74 @@ +/* + * This file is part of the internal font implementation. It should not be included by anyone other than + * FontMac.cpp, FontWin.cpp and Font.cpp. + * + * Copyright (C) 2006 Apple Computer, Inc. + * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com + * All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ + +#ifndef FontPlatformData_H +#define FontPlatformData_H + +#include "GlyphBuffer.h" +#include "FontDescription.h" +#include +#include +#include + +namespace WebCore { + +class FontPlatformData { +public: + class Deleted {}; + FontPlatformData(Deleted) : m_pattern((FcPattern*)-1) { } + + FontPlatformData() : m_pattern(0) { } + + FontPlatformData(const FontDescription&, const AtomicString& family); + ~FontPlatformData(); + + static bool init(); + + static cairo_font_face_t** list(FontDescription&, const AtomicString& familyName, int* length); + Glyph index(unsigned ucs4) const; + + bool isFixedPitch(); + + void setFont(cairo_t*) const; + + unsigned hash() const + { + return StringImpl::computeHash((UChar*)&m_fontDescription, sizeof(FontDescription) / sizeof(UChar)); + } + + bool operator==(const FontPlatformData&) const; + + FcPattern* m_pattern; + FontDescription m_fontDescription; + cairo_matrix_t* m_fontMatrix; + cairo_font_face_t* m_fontFace; + cairo_font_options_t* m_options; + cairo_scaled_font_t* m_scaledFont; + +}; + +} + +#endif diff --git a/WebCore/platform/gdk/FontPlatformDataGdk.cpp b/WebCore/platform/gdk/FontPlatformDataGdk.cpp new file mode 100644 index 00000000000..865775ba1d0 --- /dev/null +++ b/WebCore/platform/gdk/FontPlatformDataGdk.cpp @@ -0,0 +1,188 @@ +/* + * This file is part of the internal font implementation. It should not be included by anyone other than + * FontMac.cpp, FontWin.cpp and Font.cpp. + * + * Copyright (C) 2006 Apple Computer, Inc. + * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com + * All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ + +#include "config.h" +#include "FontPlatformData.h" + +#include "PlatformString.h" +#include "DeprecatedString.h" +#include "FontDescription.h" +#include "cairo-ft.h" +#include "cairo.h" +#include +#include + +namespace WebCore { + +FontPlatformData::FontPlatformData(const FontDescription& fontDescription, const AtomicString& familyName) + : m_fontDescription(fontDescription) +{ + init(); + + FcChar8* family = (FcChar8*)((const char*)(familyName.deprecatedString().utf8())); + int fcslant = FC_SLANT_ROMAN; + int fcweight = FC_WEIGHT_NORMAL; + int fcsize = (int)fontDescription.computedSize(); + if (fontDescription.italic()) + fcslant = FC_SLANT_ITALIC; + if (fontDescription.weight() == cBoldWeight) + fcweight = FC_WEIGHT_BOLD; + + int type = fontDescription.genericFamily(); + switch (type) { + case FontDescription::SerifFamily: + family = (FcChar8*)"sans-serif"; + break; + case FontDescription::SansSerifFamily: + family = (FcChar8*)"sans-serif"; + break; + case FontDescription::NoFamily: + case FontDescription::StandardFamily: + default: + family = (FcChar8*)"sans-serif"; + } + FcPattern* pattern = FcPatternCreate(); + assert(pattern != 0); + if (!FcPatternAddString(pattern, FC_FAMILY, family)) + goto freePattern; + if (!FcPatternAddInteger(pattern, FC_SLANT, fcslant)) + goto freePattern; + if (!FcPatternAddInteger(pattern, FC_WEIGHT, fcweight)) + goto freePattern; + if (!FcPatternAddInteger(pattern, FC_PIXEL_SIZE, fcsize)) + goto freePattern; + + + FcConfigSubstitute(NULL, pattern, FcMatchPattern); + FcDefaultSubstitute(pattern); + + FcResult fcresult; + m_pattern = FcFontMatch(NULL, pattern, &fcresult); + if (!m_pattern) + goto freePattern; + + m_fontFace = cairo_ft_font_face_create_for_pattern(m_pattern); + m_fontMatrix = (cairo_matrix_t*)malloc(sizeof(cairo_matrix_t)); + cairo_matrix_t ctm; + cairo_font_extents_t font_extents; + cairo_text_extents_t text_extents; + cairo_matrix_init_scale(m_fontMatrix, m_fontDescription.computedPixelSize(), m_fontDescription.computedPixelSize()); + cairo_matrix_init_identity(&ctm); + m_options = cairo_font_options_create(); + m_scaledFont = cairo_scaled_font_create(m_fontFace, m_fontMatrix, &ctm, m_options); + + assert(m_scaledFont != 0); + +freePattern: + FcPatternDestroy(pattern); +} + +bool FontPlatformData::init() +{ + static FcBool FCInitialized; + if (FCInitialized) + return true; + FCInitialized = FcTrue; + if (!FcInit()) { + fprintf(stderr, "Can't init font config library\n"); + return false; + } + return true; +} + +FontPlatformData::~FontPlatformData() +{ + FcPatternDestroy(m_pattern); + cairo_font_face_destroy(m_fontFace); + cairo_scaled_font_destroy(m_scaledFont); + cairo_font_options_destroy(m_options); +} + +bool FontPlatformData::isFixedPitch() +{ + int spacing; + if (FcPatternGetInteger(m_pattern, FC_SPACING, 0, &spacing) == FcResultMatch) + return spacing == FC_MONO; + return false; +} + +// length is a out value giving the length of the list +cairo_font_face_t** FontPlatformData::list(FontDescription& fontDescription, const AtomicString& familyName, int* length) +{ + init(); + + FcPattern* pattern = FcPatternCreate(); + if (!pattern) + return NULL; + + FcObjectSet* os = FcObjectSetCreate(); + FcObjectSetAdd(os, FC_FAMILY); + FcObjectSetAdd(os, FC_STYLE); + FcFontSet* fs = FcFontList(0, pattern, os); + if (length) + *length = fs->nfont; + if (pattern) + FcPatternDestroy (pattern); + if (os) + FcObjectSetDestroy (os); + cairo_font_face_t** result = (cairo_font_face_t**)malloc((fs->nfont + 1) * sizeof(cairo_font_face_t*)); + for (int i = 0; i < fs->nfont; i++) { + FcChar8* font = FcNameUnparse(fs->fonts[i]); + printf("%s\n", font); + result[i] = cairo_ft_font_face_create_for_pattern(fs->fonts[i]); + } + result[fs->nfont] = NULL; + return result; +} + +Glyph FontPlatformData::index(unsigned ucs4) const +{ + ucs4 = (0xff & ucs4); + FT_Face face = cairo_ft_scaled_font_lock_face(m_scaledFont); + assert(face != 0); + int index = FcFreeTypeCharIndex(face, ucs4); + cairo_ft_scaled_font_unlock_face(m_scaledFont); + return index; +} + + +void FontPlatformData::setFont(cairo_t* cr) const +{ + cairo_set_font_face(cr, m_fontFace); + cairo_set_font_matrix(cr, m_fontMatrix); + cairo_set_font_options(cr, m_options); +} + +bool FontPlatformData::operator==(const FontPlatformData& other) const +{ + if (m_pattern == other.m_pattern) + return true; + if (m_pattern == 0 || m_pattern == (FcPattern*)-1 + || other.m_pattern == 0 || other.m_pattern == (FcPattern*)-1) + return false; + return FcPatternEqual(m_pattern, other.m_pattern); +} + +} diff --git a/WebCore/platform/gdk/FrameGdk.cpp b/WebCore/platform/gdk/FrameGdk.cpp new file mode 100644 index 00000000000..e24c1e1f36b --- /dev/null +++ b/WebCore/platform/gdk/FrameGdk.cpp @@ -0,0 +1,364 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "FrameGdk.h" +#include "Element.h" +#include "RenderObject.h" +#include "RenderWidget.h" +#include "RenderLayer.h" +#include "Page.h" +#include "Document.h" +#include "DOMWindow.h" +#include "DOMImplementation.h" +#include "BrowserExtensionGdk.h" +#include "Document.h" +#include "KWQKHTMLSettings.h" +#include "Plugin.h" +#include "FramePrivate.h" +#include "GraphicsContext.h" +#include "HTMLDocument.h" +#include "TransferJob.h" +#include "PlatformMouseEvent.h" +#include "PlatformKeyboardEvent.h" +#include "PlatformWheelEvent.h" +#include "MouseEventWithHitTestResults.h" +#include "SelectionController.h" +#include "TypingCommand.h" +#include "KWQKSSLKeyGen.h" +#include "KeyboardCodes.h" +#include + +DeprecatedStringList KSSLKeyGen::supportedKeySizes(){return DeprecatedStringList();}; +DeprecatedString KSSLKeyGen::signedPublicKeyAndChallengeString(unsigned keySizeIndex, const DeprecatedString &challengeString, const KURL &url){return DeprecatedString();}; + +// This function loads resources from WebKit +// This does not belong here and I'm not sure where +// it should go +// I don't know what the plans or design is +// for none code resources +Vector loadResourceIntoArray(const char* resourceName) +{ + Vector resource; + //if (strcmp(resourceName,"missingImage") == 0) { + //} + return resource; +} + +namespace WebCore { + + +static void doScroll(const RenderObject* r, bool isHorizontal, int multiplier) +{ + // FIXME: The scrolling done here should be done in the default handlers + // of the elements rather than here in the part. + if (!r) + return; + + //broken since it calls scroll on scrollbars + //and we have none now + //r->scroll(direction, KWQScrollWheel, multiplier); + if (!r->layer()) + return; + int x = r->layer()->scrollXOffset(); + int y = r->layer()->scrollYOffset(); + if (isHorizontal) + x += multiplier; + else + y += multiplier; + r->layer()->scrollToOffset(x, y, true, true); +} + +bool FrameView::isFrameView() const +{ + return true; +} + +FrameGdk::FrameGdk(GdkDrawable* gdkdrawable) + : Frame(new Page, 0), m_drawable(gdkdrawable) +{ + d->m_extension = new BrowserExtensionGdk(this); + KHTMLSettings* settings = new KHTMLSettings; + settings->setAutoLoadImages(true); + settings->setMinFontSize(5); + settings->setMinLogicalFontSize(5); + settings->setShouldPrintBackgrounds(true); + + settings->setMediumFixedFontSize(14); + settings->setMediumFontSize(14); + settings->setSerifFontName("Times New Roman"); + settings->setSansSerifFontName("Arial"); + settings->setFixedFontName("Courier"); + settings->setStdFontName("Arial"); + setSettings(settings); + page()->setMainFrame(this); + FrameView* view = new FrameView(this); + setView(view); + IntRect geom = frameGeometry(); + view->resize(geom.width(), geom.height()); + view->ScrollView::setDrawable(gdkdrawable); +} + +FrameGdk::FrameGdk(Page* page, RenderPart* renderPart, FrameGdkClient* client) + : Frame(page, renderPart) +{ + d->m_extension = new BrowserExtensionGdk(this); + KHTMLSettings* settings = new KHTMLSettings; + settings->setAutoLoadImages(true); + setSettings(settings); +} + +FrameGdk::~FrameGdk() +{ +} + +bool FrameGdk::openURL(const KURL& url) +{ + didOpenURL(url); + begin(url); + TransferJob* job = new TransferJob(this, "GET", url); + job->start(document()->docLoader()); + return true; +} + +void FrameGdk::submitForm(const ResourceRequest&) +{ +} + +void FrameGdk::urlSelected(const ResourceRequest& request) +{ + //need to potentially updateLocationBar(str.ascii()); or notify sys of new url mybe event or callback + const KURL url = request.url(); + printf("------------------> LOADING NEW URL %s \n", url.url().ascii()); + didOpenURL(url); + begin(url); + TransferJob* job = new TransferJob(this, "GET", url); + job->start(document()->docLoader()); +} + +String FrameGdk::userAgent() const +{ + return "Mozilla/5.0 (PC; U; Intel; Linux; en) AppleWebKit/420+ (KHTML, like Gecko)"; +} + +void FrameGdk::runJavaScriptAlert(String const& message) +{ +} + +bool FrameGdk::runJavaScriptConfirm(String const& message) +{ + return true; +} + +void FrameGdk::setTitle(const String &title) +{ +} + +void FrameGdk::handleGdkEvent(GdkEvent* event) +{ + switch (event->type) { + case GDK_EXPOSE: { + GdkRectangle clip; + gdk_region_get_clipbox(event->expose.region, &clip); + gdk_window_begin_paint_region (event->any.window, event->expose.region); + cairo_t* cr = gdk_cairo_create (event->any.window); + GraphicsContext* ctx = new GraphicsContext(cr); + paint(ctx, IntRect(clip.x, clip.y, clip.width, clip.height)); + delete ctx; + gdk_window_end_paint (event->any.window); + break; + } + case GDK_SCROLL: { + PlatformWheelEvent wheelEvent(event); + view()->handleWheelEvent(wheelEvent); + if (wheelEvent.isAccepted()) { + return; + } + RenderObject::NodeInfo nodeInfo(true, true); + renderer()->layer()->hitTest(nodeInfo, wheelEvent.pos()); + Node* node = nodeInfo.innerNode(); + if (!node) + return; + //Default to scrolling the page + //not sure why its null + //broke anyway when its not null + doScroll(renderer(), wheelEvent.isHorizontal(), wheelEvent.delta()); + break; + } + case GDK_DRAG_ENTER: + case GDK_DRAG_LEAVE: + case GDK_DRAG_MOTION: + case GDK_DRAG_STATUS: + case GDK_DROP_START: + case GDK_DROP_FINISHED: { + //bool updateDragAndDrop(const PlatformMouseEvent&, Clipboard*); + //void cancelDragAndDrop(const PlatformMouseEvent&, Clipboard*); + //bool performDragAndDrop(const PlatformMouseEvent&, Clipboard*); + break; + } + case GDK_MOTION_NOTIFY: + view()->handleMouseMoveEvent(event); + break; + case GDK_BUTTON_PRESS: + case GDK_2BUTTON_PRESS: + case GDK_3BUTTON_PRESS: + view()->handleMousePressEvent(event); + break; + case GDK_BUTTON_RELEASE: + view()->handleMouseReleaseEvent(event); + break; + case GDK_KEY_PRESS: + case GDK_KEY_RELEASE: { + PlatformKeyboardEvent kevent(event); + bool handled = false; + if (!kevent.isKeyUp()) { + Node* start = selection().start().node(); + if (start && start->isContentEditable()) { + switch(kevent.WindowsKeyCode()) { + case VK_BACK: + TypingCommand::deleteKeyPressed(document()); + break; + case VK_DELETE: + TypingCommand::forwardDeleteKeyPressed(document()); + break; + case VK_LEFT: + selection().modify(SelectionController::MOVE, SelectionController::LEFT, CharacterGranularity); + break; + case VK_RIGHT: + selection().modify(SelectionController::MOVE, SelectionController::RIGHT, CharacterGranularity); + break; + case VK_UP: + selection().modify(SelectionController::MOVE, SelectionController::BACKWARD, ParagraphGranularity); + break; + case VK_DOWN: + selection().modify(SelectionController::MOVE, SelectionController::FORWARD, ParagraphGranularity); + break; + default: + TypingCommand::insertText(document(), kevent.text(), false); + + } + handled = true; + } + if (!handled) { + switch (kevent.WindowsKeyCode()) { + case VK_LEFT: + doScroll(renderer(), true, -120); + break; + case VK_RIGHT: + doScroll(renderer(), true, 120); + break; + case VK_UP: + doScroll(renderer(), false, -120); + break; + case VK_PRIOR: + //return SB_PAGEUP; + break; + case VK_NEXT: + //return SB_PAGEDOWN; + break; + case VK_DOWN: + doScroll(renderer(), false, 120); + break; + case VK_HOME: + renderer()->layer()->scrollToOffset(0, 0, true, true); + doScroll(renderer(), false, 120); + break; + case VK_END: + renderer()->layer()->scrollToOffset(0, + renderer()->height(), true, true); + break; + case VK_SPACE: + if (kevent.shiftKey()) + doScroll(renderer(), false, -120); + else + doScroll(renderer(), false, 120); + break; + } + + } + } + } + default: + break; + } +} + +void FrameGdk::receivedData(TransferJob* job, const char* data, int length) +{ + write(data, length); +} + +void FrameGdk::receivedAllData(TransferJob* job, PlatformData data) +{ + end(); +} + +void FrameGdk::setFrameGeometry(const IntRect &r) +{ + if (!m_drawable || !GDK_IS_WINDOW(m_drawable)) + return; + GdkWindow* window = GDK_WINDOW(m_drawable); + gdk_window_move_resize(window, r.x(), r.y(), r.width(), r.height()); +} + +IntRect FrameGdk::frameGeometry() const +{ + gint x, y, width, height, depth; + if (!m_drawable) + return IntRect(); + + if (!GDK_IS_WINDOW(m_drawable)) { + gdk_drawable_get_size(m_drawable, &width, &height); + return IntRect(0, 0, width, height); + } + + GdkWindow* window = GDK_WINDOW(m_drawable); + gdk_window_get_geometry(window, &x, &y, &width, &height, &depth); + return IntRect(x, y, width, height); +} + +bool FrameGdk::passWheelEventToChildWidget(Node* node) +{ + if (!node) + return false; + RenderObject* renderer = node->renderer(); + if (!renderer || !renderer->isWidget()) + return false; + Widget* widget = static_cast(renderer)->widget(); + if (!widget) + return false; + return true; +} + +bool FrameGdk::passSubframeEventToSubframe(MouseEventWithHitTestResults& mev, Frame*) +{ + if (mev.targetNode() == 0) + return true; + return false; +} + +} diff --git a/WebCore/platform/gdk/FrameGdk.h b/WebCore/platform/gdk/FrameGdk.h new file mode 100644 index 00000000000..4f14dbbef11 --- /dev/null +++ b/WebCore/platform/gdk/FrameGdk.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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 FrameGdk_H_ +#define FrameGdk_H_ + +#include "Frame.h" +#include "TransferJobClient.h" +#include + +namespace WebCore { + +class FrameGdkClient { +public: + virtual void openURL(const DeprecatedString&) = 0; +}; + +class FrameGdk : public Frame, TransferJobClient { +public: + FrameGdk(Page*, RenderPart*, FrameGdkClient*); + FrameGdk(GdkDrawable*); + ~FrameGdk(); + + void handleGdkEvent(GdkEvent*); + virtual bool openURL(const KURL&); + virtual void openURLRequest(const ResourceRequest&); + virtual void submitForm(const ResourceRequest&); + virtual void urlSelected(const ResourceRequest&); + + virtual void setTitle(const String&); + + virtual ObjectContentType objectContentType(const KURL&, const String& mimeType); + virtual Plugin* createPlugin(Element*, const KURL&, const Vector&, const Vector&, const String&); + virtual Frame* createFrame(const KURL&, const String& name, RenderPart*, const String& referrer); + + virtual void scheduleClose(); + + virtual void unfocusWindow(); + + virtual void focusWindow(); + + virtual void saveDocumentState(); + virtual void restoreDocumentState(); + + virtual void addMessageToConsole(const String& message, unsigned lineNumber, const String& sourceID); + + virtual void runJavaScriptAlert(const String& message); + virtual bool runJavaScriptConfirm(const String& message); + virtual bool runJavaScriptPrompt(const String& message, const String& defaultValue, String& result); + virtual bool locationbarVisible(); + virtual bool menubarVisible(); + virtual bool personalbarVisible(); + virtual bool statusbarVisible(); + virtual bool toolbarVisible(); + + virtual void createEmptyDocument(); + virtual Range* markedTextRange() const; + + virtual String incomingReferrer() const; + virtual String userAgent() const; + + virtual String mimeTypeForFileName(const String&) const; + + virtual void markMisspellingsInAdjacentWords(const VisiblePosition&); + virtual void markMisspellings(const SelectionController&); + + virtual bool lastEventIsMouseUp() const; + + virtual bool passSubframeEventToSubframe(MouseEventWithHitTestResults &, Frame* subframe = 0); + virtual bool passWheelEventToChildWidget(Node*); + + virtual String overrideMediaType() const; + + virtual KJS::Bindings::Instance* getEmbedInstanceForWidget(Widget*); + virtual KJS::Bindings::Instance* getObjectInstanceForWidget(Widget*); + virtual KJS::Bindings::Instance* getAppletInstanceForWidget(Widget*); + + virtual void registerCommandForUndo(const EditCommandPtr&); + virtual void registerCommandForRedo(const EditCommandPtr&); + virtual void clearUndoRedoOperations(); + virtual void issueUndoCommand(); + virtual void issueRedoCommand(); + virtual void issueCutCommand(); + virtual void issueCopyCommand(); + virtual void issuePasteCommand(); + virtual void issuePasteAndMatchStyleCommand(); + virtual void issueTransposeCommand(); + virtual void respondToChangedSelection(const SelectionController& oldSelection, bool closeTyping); + virtual void respondToChangedContents(); + virtual bool shouldChangeSelection(const SelectionController& oldSelection, const SelectionController& newSelection, EAffinity affinity, bool stillSelecting) const; + virtual void partClearedInBegin(); + + virtual bool canGoBackOrForward(int distance) const; + virtual void handledOnloadEvents(); + + virtual bool canPaste() const; + virtual bool canRedo() const; + virtual bool canUndo() const; + virtual void print(); + virtual bool shouldInterruptJavaScript(); + + bool keyPress(const PlatformKeyboardEvent&); + + virtual void receivedData(TransferJob*, const char*, int); + virtual void receivedAllData(TransferJob*,PlatformData); + + IntRect frameGeometry() const; + void setFrameGeometry(const IntRect&); + +private: + virtual bool passMouseDownEventToWidget(Widget*); + FrameGdkClient* m_client; + GdkDrawable* m_drawable; +}; + +inline FrameGdk* Win(Frame* frame) { return static_cast(frame); } +inline const FrameGdk* Win(const Frame* frame) { return static_cast(frame); } + +} + +#endif diff --git a/WebCore/platform/gdk/GlyphMapGdk.cpp b/WebCore/platform/gdk/GlyphMapGdk.cpp new file mode 100644 index 00000000000..c77d64bacea --- /dev/null +++ b/WebCore/platform/gdk/GlyphMapGdk.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + * 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 "GlyphMap.h" + +#include "FontData.h" + +namespace WebCore { + +bool GlyphMap::fillPage(GlyphPage* page, UChar* buffer, unsigned bufferLength, const FontData* fontData) +{ + for (unsigned i = 0; i < bufferLength; i++) + page->setGlyphDataForIndex(i, fontData->getGlyphIndex(buffer[i]), fontData); + return true; +} + +} diff --git a/WebCore/platform/gdk/KeyEventGdk.cpp b/WebCore/platform/gdk/KeyEventGdk.cpp new file mode 100644 index 00000000000..e7cdd0636dd --- /dev/null +++ b/WebCore/platform/gdk/KeyEventGdk.cpp @@ -0,0 +1,479 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "PlatformKeyboardEvent.h" + +#include "DeprecatedString.h" +#include "KeyboardCodes.h" +#include +#include + +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 keyIdentifierForGdkKeyCode(guint keyCode) +{ + switch (keyCode) { + case GDK_Menu: + case GDK_Alt_L: + case GDK_Alt_R: + return "Alt"; + case GDK_Clear: + return "Clear"; + case GDK_Down: + return "Down"; + // "End" + case GDK_End: + return "End"; + // "Enter" + case GDK_ISO_Enter: + case GDK_KP_Enter: + return "Enter"; + case GDK_Execute: + return "Execute"; + case GDK_F1: + return "F1"; + case GDK_F2: + return "F2"; + case GDK_F3: + return "F3"; + case GDK_F4: + return "F4"; + case GDK_F5: + return "F5"; + case GDK_F6: + return "F6"; + case GDK_F7: + return "F7"; + case GDK_F8: + return "F8"; + case GDK_F9: + return "F9"; + case GDK_F10: + return "F10"; + case GDK_F11: + return "F11"; + case GDK_F12: + return "F12"; + case GDK_F13: + return "F13"; + case GDK_F14: + return "F14"; + case GDK_F15: + return "F15"; + case GDK_F16: + return "F16"; + case GDK_F17: + return "F17"; + case GDK_F18: + return "F18"; + case GDK_F19: + return "F19"; + case GDK_F20: + return "F20"; + case GDK_F21: + return "F21"; + case GDK_F22: + return "F22"; + case GDK_F23: + return "F23"; + case GDK_F24: + return "F24"; + case GDK_Help: + return "Help"; + case GDK_Home: + return "Home"; + case GDK_Insert: + return "Insert"; + case GDK_Left: + return "Left"; + case GDK_Page_Down: + return "PageDown"; + case GDK_Page_Up: + return "PageUp"; + case GDK_Pause: + return "Pause"; + case GDK_3270_PrintScreen: + return "PrintScreen"; + case GDK_Right: + return "Right"; + case GDK_Select: + return "Select"; + case GDK_Up: + return "Up"; + // Standard says that DEL becomes U+00007F. + case GDK_Delete: + return "U+00007F"; + default: + return String::sprintf("U+%06X", toupper(keyCode)); + } +} + +static int windowsKeyCodeForKeyEvent(unsigned int keycode) +{ + switch (keycode) { + case GDK_KP_0: + return VK_NUMPAD0;// (60) Numeric keypad 0 key + case GDK_KP_1: + return VK_NUMPAD1;// (61) Numeric keypad 1 key + case GDK_KP_2: + return VK_NUMPAD2; // (62) Numeric keypad 2 key + case GDK_KP_3: + return VK_NUMPAD3; // (63) Numeric keypad 3 key + case GDK_KP_4: + return VK_NUMPAD4; // (64) Numeric keypad 4 key + case GDK_KP_5: + return VK_NUMPAD5; //(65) Numeric keypad 5 key + case GDK_KP_6: + return VK_NUMPAD6; // (66) Numeric keypad 6 key + case GDK_KP_7: + return VK_NUMPAD7; // (67) Numeric keypad 7 key + case GDK_KP_8: + return VK_NUMPAD8; // (68) Numeric keypad 8 key + case GDK_KP_9: + return VK_NUMPAD9; // (69) Numeric keypad 9 key + case GDK_KP_Multiply: + return VK_MULTIPLY; // (6A) Multiply key + case GDK_KP_Add: + return VK_ADD; // (6B) Add key + case GDK_KP_Subtract: + return VK_SUBTRACT; // (6D) Subtract key + case GDK_KP_Decimal: + return VK_DECIMAL; // (6E) Decimal key + case GDK_KP_Divide: + return VK_DIVIDE; // (6F) Divide key + + case GDK_BackSpace: + return VK_BACK; // (08) BACKSPACE key + case GDK_Tab: + return VK_TAB; // (09) TAB key + case GDK_Clear: + return VK_CLEAR; // (0C) CLEAR key + case GDK_Return: + return VK_RETURN; //(0D) Return key + case GDK_Shift_L: + case GDK_Shift_R: + return VK_SHIFT; // (10) SHIFT key + case GDK_Control_L: + case GDK_Control_R: + return VK_CONTROL; // (11) CTRL key + case GDK_Menu: + case GDK_Alt_L: + case GDK_Alt_R: + return VK_MENU; // (12) ALT key + + case GDK_Pause: + return VK_PAUSE; // (13) PAUSE key + case GDK_Caps_Lock: + return VK_CAPITAL; // (14) CAPS LOCK key + case GDK_Kana_Lock: + case GDK_Kana_Shift: + return VK_KANA; // (15) Input Method Editor (IME) Kana mode + case GDK_Hangul: + return VK_HANGUL; // VK_HANGUL (15) IME Hangul mode + // VK_JUNJA (17) IME Junja mode + // VK_FINAL (18) IME final mode + case GDK_Hangul_Hanja: + return VK_HANJA; // (19) IME Hanja mode + case GDK_Kanji: + return VK_KANJI; // (19) IME Kanji mode + case GDK_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 GDK_space: + return VK_SPACE; // (20) SPACEBAR + case GDK_Page_Up: + return VK_PRIOR; // (21) PAGE UP key + case GDK_Page_Down: + return VK_NEXT; // (22) PAGE DOWN key + case GDK_End: + return VK_END; // (23) END key + case GDK_Home: + return VK_HOME; // (24) HOME key + case GDK_Left: + return VK_LEFT; // (25) LEFT ARROW key + case GDK_Up: + return VK_UP; // (26) UP ARROW key + case GDK_Right: + return VK_RIGHT; // (27) RIGHT ARROW key + case GDK_Down: + return VK_DOWN; // (28) DOWN ARROW key + case GDK_Select: + return VK_SELECT; // (29) SELECT key + case GDK_Print: + return VK_PRINT; // (2A) PRINT key + case GDK_Execute: + return VK_EXECUTE;// (2B) EXECUTE key + //dunno on this + //case GDK_PrintScreen: + // return VK_SNAPSHOT; // (2C) PRINT SCREEN key + case GDK_Insert: + return VK_INSERT; // (2D) INS key + case GDK_Delete: + return VK_DELETE; // (2E) DEL key + case GDK_Help: + return VK_HELP; // (2F) HELP key + case GDK_0: + case GDK_parenleft: + return VK_0; // (30) 0) key + case GDK_1: + return VK_1; // (31) 1 ! key + case GDK_2: + case GDK_at: + return VK_2; // (32) 2 & key + case GDK_3: + case GDK_numbersign: + return VK_3; //case '3': case '#'; + case GDK_4: + case GDK_dollar: // (34) 4 key '$'; + return VK_4; + case GDK_5: + case GDK_percent: + return VK_5; // (35) 5 key '%' + case GDK_6: + case GDK_asciicircum: + return VK_6; // (36) 6 key '^' + case GDK_7: + case GDK_ampersand: + return VK_7; // (37) 7 key case '&' + case GDK_8: + case GDK_asterisk: + return VK_8; // (38) 8 key '*' + case GDK_9: + case GDK_parenright: + return VK_9; // (39) 9 key '(' + case GDK_a: + case GDK_A: + return VK_A; // (41) A key case 'a': case 'A': return 0x41; + case GDK_b: + case GDK_B: + return VK_B; // (42) B key case 'b': case 'B': return 0x42; + case GDK_c: + case GDK_C: + return VK_C; // (43) C key case 'c': case 'C': return 0x43; + case GDK_d: + case GDK_D: + return VK_D; // (44) D key case 'd': case 'D': return 0x44; + case GDK_e: + case GDK_E: + return VK_E; // (45) E key case 'e': case 'E': return 0x45; + case GDK_f: + case GDK_F: + return VK_F; // (46) F key case 'f': case 'F': return 0x46; + case GDK_g: + case GDK_G: + return VK_G; // (47) G key case 'g': case 'G': return 0x47; + case GDK_h: + case GDK_H: + return VK_H; // (48) H key case 'h': case 'H': return 0x48; + case GDK_i: + case GDK_I: + return VK_I; // (49) I key case 'i': case 'I': return 0x49; + case GDK_j: + case GDK_J: + return VK_J; // (4A) J key case 'j': case 'J': return 0x4A; + case GDK_k: + case GDK_K: + return VK_K; // (4B) K key case 'k': case 'K': return 0x4B; + case GDK_l: + case GDK_L: + return VK_L; // (4C) L key case 'l': case 'L': return 0x4C; + case GDK_m: + case GDK_M: + return VK_M; // (4D) M key case 'm': case 'M': return 0x4D; + case GDK_n: + case GDK_N: + return VK_N; // (4E) N key case 'n': case 'N': return 0x4E; + case GDK_o: + case GDK_O: + return VK_O; // (4F) O key case 'o': case 'O': return 0x4F; + case GDK_p: + case GDK_P: + return VK_P; // (50) P key case 'p': case 'P': return 0x50; + case GDK_q: + case GDK_Q: + return VK_Q; // (51) Q key case 'q': case 'Q': return 0x51; + case GDK_r: + case GDK_R: + return VK_R; // (52) R key case 'r': case 'R': return 0x52; + case GDK_s: + case GDK_S: + return VK_S; // (53) S key case 's': case 'S': return 0x53; + case GDK_t: + case GDK_T: + return VK_T; // (54) T key case 't': case 'T': return 0x54; + case GDK_u: + case GDK_U: + return VK_U; // (55) U key case 'u': case 'U': return 0x55; + case GDK_v: + case GDK_V: + return VK_V; // (56) V key case 'v': case 'V': return 0x56; + case GDK_w: + case GDK_W: + return VK_W; // (57) W key case 'w': case 'W': return 0x57; + case GDK_x: + case GDK_X: + return VK_X; // (58) X key case 'x': case 'X': return 0x58; + case GDK_y: + case GDK_Y: + return VK_Y; // (59) Y key case 'y': case 'Y': return 0x59; + case GDK_z: + case GDK_Z: + return VK_Z; // (5A) Z key case 'z': case 'Z': return 0x5A; + case GDK_Meta_L: + return VK_LWIN; // (5B) Left Windows key (Microsoft Natural keyboard) + case GDK_Meta_R: + return VK_RWIN; // (5C) Right Windows key (Natural keyboard) + // VK_APPS (5D) Applications key (Natural keyboard) + // VK_SLEEP (5F) Computer Sleep key + // VK_SEPARATOR (6C) Separator key + // VK_SUBTRACT (6D) Subtract key + // VK_DECIMAL (6E) Decimal key + // VK_DIVIDE (6F) Divide key + // handled by key code above + + case GDK_Num_Lock: + return VK_NUMLOCK; // (90) NUM LOCK key + + case GDK_Scroll_Lock: + return VK_SCROLL; // (91) SCROLL LOCK key + + // VK_LSHIFT (A0) Left SHIFT key + // VK_RSHIFT (A1) Right SHIFT key + // VK_LCONTROL (A2) Left CONTROL key + // VK_RCONTROL (A3) Right CONTROL key + // VK_LMENU (A4) Left MENU key + // VK_RMENU (A5) Right MENU key + // VK_BROWSER_BACK (A6) Windows 2000/XP: Browser Back key + // VK_BROWSER_FORWARD (A7) Windows 2000/XP: Browser Forward key + // VK_BROWSER_REFRESH (A8) Windows 2000/XP: Browser Refresh key + // VK_BROWSER_STOP (A9) Windows 2000/XP: Browser Stop key + // VK_BROWSER_SEARCH (AA) Windows 2000/XP: Browser Search key + // VK_BROWSER_FAVORITES (AB) Windows 2000/XP: Browser Favorites key + // VK_BROWSER_HOME (AC) Windows 2000/XP: Browser Start and Home key + // VK_VOLUME_MUTE (AD) Windows 2000/XP: Volume Mute key + // VK_VOLUME_DOWN (AE) Windows 2000/XP: Volume Down key + // VK_VOLUME_UP (AF) Windows 2000/XP: Volume Up key + // VK_MEDIA_NEXT_TRACK (B0) Windows 2000/XP: Next Track key + // VK_MEDIA_PREV_TRACK (B1) Windows 2000/XP: Previous Track key + // VK_MEDIA_STOP (B2) Windows 2000/XP: Stop Media key + // VK_MEDIA_PLAY_PAUSE (B3) Windows 2000/XP: Play/Pause Media key + // VK_LAUNCH_MAIL (B4) Windows 2000/XP: Start Mail key + // VK_LAUNCH_MEDIA_SELECT (B5) Windows 2000/XP: Select Media key + // VK_LAUNCH_APP1 (B6) Windows 2000/XP: Start Application 1 key + // VK_LAUNCH_APP2 (B7) Windows 2000/XP: Start Application 2 key + + // VK_OEM_1 (BA) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ';:' key + case GDK_semicolon: + case GDK_colon: + return VK_OEM_1; //case ';': case ':': return 0xBA; + // VK_OEM_PLUS (BB) Windows 2000/XP: For any country/region, the '+' key + case GDK_plus: + case GDK_equal: + return VK_OEM_PLUS; //case '=': case '+': return 0xBB; + // VK_OEM_COMMA (BC) Windows 2000/XP: For any country/region, the ',' key + case GDK_comma: + case GDK_less: + return VK_OEM_COMMA; //case ',': case '<': return 0xBC; + // VK_OEM_MINUS (BD) Windows 2000/XP: For any country/region, the '-' key + case GDK_minus: + case GDK_underscore: + return VK_OEM_MINUS; //case '-': case '_': return 0xBD; + // VK_OEM_PERIOD (BE) Windows 2000/XP: For any country/region, the '.' key + case GDK_period: + case GDK_greater: + return VK_OEM_PERIOD; //case '.': case '>': return 0xBE; + // VK_OEM_2 (BF) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '/?' key + case GDK_slash: + case GDK_question: + return VK_OEM_2; //case '/': case '?': return 0xBF; + // VK_OEM_3 (C0) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '`~' key + case GDK_asciitilde: + case GDK_quoteleft: + return VK_OEM_3; //case '`': case '~': return 0xC0; + // VK_OEM_4 (DB) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '[{' key + case GDK_bracketleft: + case GDK_braceleft: + return VK_OEM_4; //case '[': case '{': return 0xDB; + // VK_OEM_5 (DC) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '\|' key + case GDK_backslash: + case GDK_bar: + return VK_OEM_5; //case '\\': case '|': return 0xDC; + // VK_OEM_6 (DD) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ']}' key + case GDK_bracketright: + case GDK_braceright: + return VK_OEM_6; // case ']': case '}': return 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 + case GDK_quoteright: + case GDK_quotedbl: + return VK_OEM_7; // case '\'': case '"': return 0xDE; + // VK_OEM_8 (DF) Used for miscellaneous characters; it can vary by keyboard. + // VK_OEM_102 (E2) Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard + // VK_PROCESSKEY (E5) Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key + // 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 + // VK_ATTN (F6) Attn key + // VK_CRSEL (F7) CrSel key + // VK_EXSEL (F8) ExSel key + // VK_EREOF (F9) Erase EOF key + // VK_PLAY (FA) Play key + // VK_ZOOM (FB) Zoom key + // VK_NONAME (FC) Reserved for future use + // VK_PA1 (FD) PA1 key + // VK_OEM_CLEAR (FE) Clear key + default: + return 0; + } + +} + +PlatformKeyboardEvent::PlatformKeyboardEvent(GdkEvent* event) +{ + m_isKeyUp = event->type == GDK_KEY_RELEASE; + m_shiftKey = event->key.state & GDK_SHIFT_MASK != 0; + m_ctrlKey = event->key.state & GDK_CONTROL_MASK != 0; + m_altKey = event->key.state & GDK_MOD1_MASK != 0; + m_metaKey = event->key.state & GDK_MOD2_MASK != 0; + m_text = event->key.string; + m_unmodifiedText = event->key.string; + m_keyIdentifier = keyIdentifierForGdkKeyCode(event->key.keyval); + m_WindowsKeyCode = windowsKeyCodeForKeyEvent(event->key.keyval); + m_autoRepeat = false; + m_isKeypad = false; + + if (!m_shiftKey) { + UChar character = tolower(m_text[0]); + m_text = String(&character, 1); + } +} + +} diff --git a/WebCore/platform/gdk/KeyboardCodes.h b/WebCore/platform/gdk/KeyboardCodes.h new file mode 100644 index 00000000000..60c589da28b --- /dev/null +++ b/WebCore/platform/gdk/KeyboardCodes.h @@ -0,0 +1,543 @@ +/* + * 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/gdk/MouseEventGdk.cpp b/WebCore/platform/gdk/MouseEventGdk.cpp new file mode 100644 index 00000000000..93ee9348130 --- /dev/null +++ b/WebCore/platform/gdk/MouseEventGdk.cpp @@ -0,0 +1,83 @@ +/* +* 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. +*/ + +#include "config.h" +#include "PlatformMouseEvent.h" + +#include +#include + +namespace WebCore { + +// FIXME: Would be even better to figure out which modifier is Alt instead of always using GDK_MOD1_MASK. + +PlatformMouseEvent::PlatformMouseEvent(GdkEvent* event) +{ + switch (event->type) { + case GDK_MOTION_NOTIFY: + m_position = IntPoint((int)event->motion.x, (int)event->motion.y); + m_globalPosition = IntPoint((int)event->motion.x_root, (int)event->motion.y_root); + m_button = (MouseButton)(-1); + m_clickCount = 0; + m_shiftKey = event->motion.state & GDK_SHIFT_MASK != 0; + m_ctrlKey = event->motion.state & GDK_CONTROL_MASK != 0; + m_altKey = event->motion.state & GDK_MOD1_MASK != 0; + m_metaKey = event->motion.state & GDK_MOD2_MASK != 0; + break; + + case GDK_BUTTON_PRESS: + case GDK_2BUTTON_PRESS: + case GDK_3BUTTON_PRESS: + case GDK_BUTTON_RELEASE: + if (event->type == GDK_BUTTON_PRESS) + m_clickCount = 1; + else if (event->type == GDK_2BUTTON_PRESS) + m_clickCount = 2; + else if (event->type == GDK_3BUTTON_PRESS) + m_clickCount = 3; + + if (event->button.button == 1) + m_button = LeftButton; + else if (event->button.button == 2) + m_button = MiddleButton; + else if (event->button.button == 3) + m_button = RightButton; + + m_position = IntPoint((int)event->button.x, (int)event->button.y); + m_globalPosition = IntPoint((int)event->button.x_root, (int)event->button.y_root); + m_shiftKey = event->button.state & GDK_SHIFT_MASK != 0; + m_ctrlKey = event->button.state & GDK_CONTROL_MASK != 0; + m_altKey = event->button.state & GDK_MOD1_MASK != 0; + m_metaKey = event->button.state & GDK_MOD2_MASK != 0; + break; + + default: + fprintf(stderr, "Unknown mouse event\n"); + assert(0); + } +} + +} diff --git a/WebCore/platform/gdk/PageGdk.cpp b/WebCore/platform/gdk/PageGdk.cpp new file mode 100644 index 00000000000..d261fd13a3c --- /dev/null +++ b/WebCore/platform/gdk/PageGdk.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "Page.h" + +#include "FloatRect.h" +#include "Frame.h" +#include "FrameView.h" +#include + +namespace WebCore { + +static GdkDrawable* rootWindowForFrame(Frame* frame) +{ + if (!frame) + return 0; + FrameView* frameView = frame->view(); + if (!frameView) + return 0; + GdkDrawable* drawable = frameView->drawable(); + if (!drawable) + return 0; + if (!GDK_WINDOW(drawable)) + return drawable; + GdkWindow* window = GDK_WINDOW(drawable); + return gdk_window_get_toplevel(window); +} + +FloatRect Page::windowRect() const +{ + GdkDrawable* drawable = rootWindowForFrame(mainFrame()); + if (!drawable) + return FloatRect(); + + gint x, y, width, height, depth; + + if (!GDK_IS_WINDOW(drawable)) { + gdk_drawable_get_size(drawable, &width, &height); + return FloatRect(0, 0, width, height); + } + + GdkWindow* window = GDK_WINDOW(drawable); + gdk_window_get_geometry(window, &x, &y, &width, &height, &depth); + return FloatRect(x, y, width, height); +} + +void Page::setWindowRect(const FloatRect& r) +{ + GdkDrawable* drawable = rootWindowForFrame(mainFrame()); + if (!drawable || !GDK_IS_WINDOW(drawable)) + return; + GdkWindow* window = GDK_WINDOW(drawable); + gdk_window_move_resize(window, (int)r.x(), (int)r.y(), (int)r.width(), (int)r.height()); +} + +} diff --git a/WebCore/platform/gdk/RenderThemeGdk.cpp b/WebCore/platform/gdk/RenderThemeGdk.cpp new file mode 100644 index 00000000000..5a9703b68c6 --- /dev/null +++ b/WebCore/platform/gdk/RenderThemeGdk.cpp @@ -0,0 +1,158 @@ +/* + * This file is part of the WebKit project. + * + * Copyright (C) 2006 Apple Computer, Inc. + * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com + * All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ + +#include "config.h" +#include "RenderThemeGdk.h" + +#include "GraphicsContext.h" +#include + +#define THEME_COLOR 204 +#define THEME_FONT 210 + +// Generic state constants +#define TS_NORMAL 1 +#define TS_HOVER 2 +#define TS_ACTIVE 3 +#define TS_DISABLED 4 +#define TS_FOCUSED 5 + +// Button constants +#define BP_BUTTON 1 +#define BP_RADIO 2 +#define BP_CHECKBOX 3 + +// Textfield constants +#define TFP_TEXTFIELD 1 +#define TFS_READONLY 6 + +namespace WebCore { + +RenderTheme* theme() +{ + static RenderThemeGdk gdkTheme; + return &gdkTheme; +} + +RenderThemeGdk::RenderThemeGdk() +{ +} + +RenderThemeGdk::~RenderThemeGdk() +{ +} + +void RenderThemeGdk::close() +{ +} + +void RenderThemeGdk::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)); + } +} + +bool RenderThemeGdk::supportsFocus(EAppearance appearance) +{ + switch (appearance) { + case PushButtonAppearance: + case ButtonAppearance: + case TextFieldAppearance: + return true; + default: + return false; + } + + return false; +} + +unsigned RenderThemeGdk::determineState(RenderObject* o) +{ + unsigned result = TS_NORMAL; + if (!isEnabled(o)) + result = TS_DISABLED; + else if (isReadOnlyControl(o)) + result = TFS_READONLY; // Readonly is supported on textfields. + else if (supportsFocus(o->style()->appearance()) && isFocused(o)) + result = TS_FOCUSED; + else if (isHovered(o)) + result = TS_HOVER; + else if (isPressed(o)) + result = TS_ACTIVE; + if (isChecked(o)) + result += 4; // 4 unchecked states, 4 checked states. + return result; +} + +ThemeData RenderThemeGdk::getThemeData(RenderObject* o) +{ + ThemeData result; + switch (o->style()->appearance()) { + case PushButtonAppearance: + case ButtonAppearance: + result.m_part = BP_BUTTON; + result.m_state = determineState(o); + break; + case CheckboxAppearance: + result.m_part = BP_CHECKBOX; + result.m_state = determineState(o); + break; + case RadioAppearance: + result.m_part = BP_RADIO; + result.m_state = determineState(o); + break; + case TextFieldAppearance: + result.m_part = TFP_TEXTFIELD; + result.m_state = determineState(o); + break; + } + + return result; +} + +void RenderThemeGdk::adjustButtonStyle(CSSStyleSelector* selector, RenderStyle* style, WebCore::Element* e) const +{ + addIntrinsicMargins(style); +} + +} diff --git a/WebCore/platform/gdk/RenderThemeGdk.h b/WebCore/platform/gdk/RenderThemeGdk.h new file mode 100644 index 00000000000..dfc40de22d4 --- /dev/null +++ b/WebCore/platform/gdk/RenderThemeGdk.h @@ -0,0 +1,73 @@ +/* + * This file is part of the WebKit project. + * + * Copyright (C) 2006 Apple Computer, Inc. + * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com + * All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + */ + +#ifndef RenderThemeGdk_H_ +#define RenderThemeGdk_H_ + +#include "RenderTheme.h" + +namespace WebCore { + +struct ThemeData { + ThemeData() : m_part(0), m_state(0) {} + + unsigned m_part; + unsigned m_state; +}; + +class RenderThemeGdk : public RenderTheme { +public: + RenderThemeGdk(); + ~RenderThemeGdk(); + + // A method asking if the theme's controls actually care about redrawing when hovered. + virtual bool supportsHover(const RenderStyle* style) const { return true; } + + virtual bool paintCheckbox(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) + { return paintButton(o, i, r); } + virtual void setCheckboxSize(RenderStyle* style) const; + + virtual bool paintRadio(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) + { return paintButton(o, i, r); } + virtual void setRadioSize(RenderStyle* style) 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&); + +private: + void addIntrinsicMargins(RenderStyle*) const; + void close(); + + unsigned determineState(RenderObject*); + bool supportsFocus(EAppearance); + + ThemeData getThemeData(RenderObject*); +}; + +} + +#endif diff --git a/WebCore/platform/gdk/ScreenGdk.cpp b/WebCore/platform/gdk/ScreenGdk.cpp new file mode 100644 index 00000000000..4461c46ad7b --- /dev/null +++ b/WebCore/platform/gdk/ScreenGdk.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "Screen.h" + +#include "FloatRect.h" +#include "Widget.h" +#include + +namespace WebCore { + +FloatRect screenRect(Widget* widget) +{ + GdkDrawable* drawable = widget->drawable(); + if (!drawable) + return FloatRect(); + GdkScreen* screen = gdk_drawable_get_screen(drawable); + return FloatRect(0, 0, gdk_screen_get_width(screen), gdk_screen_get_height(screen)); +} + +int screenDepth(Widget* widget) +{ + GdkDrawable* drawable = widget->drawable(); + if (!drawable) + return 32; + return gdk_drawable_get_depth(drawable); +} + +FloatRect usableScreenRect(Widget* widget) +{ + return screenRect(widget); +} + +} diff --git a/WebCore/platform/gdk/ScrollViewGdk.cpp b/WebCore/platform/gdk/ScrollViewGdk.cpp new file mode 100644 index 00000000000..ba72ff1c1e5 --- /dev/null +++ b/WebCore/platform/gdk/ScrollViewGdk.cpp @@ -0,0 +1,262 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "ScrollView.h" + +#include "FloatRect.h" +#include "Frame.h" +#include "FrameView.h" +#include "GraphicsContext.h" +#include "IntRect.h" +#include "RenderLayer.h" +#include "assert.h" +#include +#include + +using namespace std; + +namespace WebCore { + +const int scrollbarSize = 10; + +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; + IntRect visibleContentArea; + IntRect viewportArea; + IntRect scrollViewArea; +}; + + +ScrollView::ScrollView() + : m_data(new ScrollViewPrivate) +{} + +ScrollView::~ScrollView() +{ + delete m_data; +} + +void ScrollView::updateView(const IntRect& updateRect, bool now) +{ + GdkRectangle rect = { updateRect.x(), updateRect.y(), updateRect.width(), updateRect.height() }; + GdkDrawable* gdkdrawable = Widget::drawable(); + if (GDK_IS_WINDOW(gdkdrawable)) { + GdkWindow* window = GDK_WINDOW(gdkdrawable); + gdk_window_invalidate_rect(window, &rect, true); + if (now) + gdk_window_process_updates(window, true); + } +} + +void ScrollView::updateContents(const IntRect& updateRect, bool now) +{ + IntRect adjustedDirtyRect(updateRect); + adjustedDirtyRect.move(-m_data->scrollOffset); + updateView(adjustedDirtyRect, now); +} + +int ScrollView::visibleWidth() const +{ + return m_data->viewportArea.width(); +} + +int ScrollView::visibleHeight() const +{ + return m_data->viewportArea.height(); +} + +// Region of the content currently visible in the viewport in the content view's coordinate system. +FloatRect ScrollView::visibleContentRect() const +{ + FloatRect contentRect = FloatRect(m_data->viewportArea); + contentRect.move(m_data->scrollOffset); + return contentRect; +} + +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) +{ + IntSize newSize(w, h); + if (m_data->contentsSize != newSize) { + m_data->contentsSize = newSize; + updateScrollBars(); + } +} + +int ScrollView::contentsX() const +{ + return scrollOffset().width(); +} + +int ScrollView::contentsY() const +{ + return scrollOffset().height(); +} + +int ScrollView::contentsWidth() const +{ + return m_data->contentsSize.width(); +} + +int ScrollView::contentsHeight() const +{ + return m_data->contentsSize.height(); +} + +IntPoint ScrollView::viewportToContents(const IntPoint& contentsPoint) +{ + return contentsPoint + scrollOffset(); +} + +IntPoint ScrollView::contentsToViewport(const IntPoint& viewportPoint) +{ + return IntPoint(viewportPoint) - scrollOffset(); +} + +IntSize ScrollView::scrollOffset() const +{ + return m_data->scrollOffset; +} + +IntSize ScrollView::maximumScroll() const +{ + IntSize delta = m_data->contentsSize - m_data->scrollOffset; + delta.clampNegativeToZero(); + return delta; + +} +void ScrollView::scrollBy(int dx, int dy) +{ + IntSize scrollOffset = m_data->scrollOffset; + IntSize maxScroll = maximumScroll(); + IntSize newScrollOffset = scrollOffset + IntSize(dx, dy); + newScrollOffset.clampNegativeToZero(); + newScrollOffset = newScrollOffset.shrunkTo(maxScroll); + + if (newScrollOffset != scrollOffset) { + m_data->scrollOffset = newScrollOffset; + updateScrollBars(); + // ScrollBar updates can fail, so we check the final delta before scrolling + IntSize scrollDelta = m_data->scrollOffset - scrollOffset; + if (scrollDelta == IntSize()) + return; + if (isFrameView()) { + FrameView* f = static_cast(this); + f->frame()->renderer()->layer()->scrollToOffset + (newScrollOffset.width(), newScrollOffset.height(), true, true); + } else { + printf("FIXME ScrollViewGdk Unsupported Scroll operation !!!\n"); + updateView(m_data->viewportArea, true); + } + } +} + +ScrollBarMode ScrollView::hScrollBarMode() const +{ + return m_data->hScrollBarMode; +} + +ScrollBarMode ScrollView::vScrollBarMode() const +{ + return m_data->vScrollBarMode; +} + +void ScrollView::suppressScrollBars(bool suppressed, bool repaintOnSuppress) +{ + m_data->suppressScrollBars = suppressed; + if (repaintOnSuppress) + updateScrollBars(); +} + +void ScrollView::setHScrollBarMode(ScrollBarMode newMode) +{ + if (m_data->hScrollBarMode != newMode) { + m_data->hScrollBarMode = newMode; + updateScrollBars(); + } +} + +void ScrollView::setVScrollBarMode(ScrollBarMode newMode) +{ + if (m_data->vScrollBarMode != newMode) { + m_data->vScrollBarMode = newMode; + updateScrollBars(); + } +} + +void ScrollView::setScrollBarsMode(ScrollBarMode newMode) +{ + m_data->hScrollBarMode = m_data->vScrollBarMode = newMode; + updateScrollBars(); +} + +void ScrollView::setStaticBackground(bool flag) +{ + m_data->hasStaticBackground = flag; +} + +void ScrollView::setFrameGeometry(const IntRect& r) +{ + Widget::setFrameGeometry(r); + m_data->scrollViewArea = IntRect(0, 0, r.width(), r.height()); + m_data->viewportArea = IntRect(0, 0, r.width() - scrollbarSize, r.height() - scrollbarSize); +} + +void ScrollView::setDrawable(GdkDrawable* gdkdrawable) +{ + Widget::setDrawable(gdkdrawable); + if (!GDK_IS_WINDOW(gdkdrawable)) { + LOG_ERROR("image scrollview not supported"); + return; + } + GdkWindow* frame = GDK_WINDOW(gdkdrawable); + gint x, y, width, height, depth; + gdk_window_get_geometry(frame, &x, &y, &width, &height, &depth); + m_data->scrollViewArea = IntRect(0, 0, width, height); + m_data->viewportArea = IntRect(0, 0, width - SCROLLBAR_SIZE, height - SCROLLBAR_SIZE); +} + +} diff --git a/WebCore/platform/gdk/SharedTimerLinux.cpp b/WebCore/platform/gdk/SharedTimerLinux.cpp new file mode 100644 index 00000000000..f3178587f32 --- /dev/null +++ b/WebCore/platform/gdk/SharedTimerLinux.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "SharedTimer.h" + +#include "SystemTime.h" +#include +#include + +namespace WebCore { + +static guint sharedTimer; +static void (*sharedTimerFiredFunction)(); + +void setSharedTimerFiredFunction(void (*f)()) +{ + sharedTimerFiredFunction = f; +} + +static gboolean timeout_cb(gpointer) +{ + if (sharedTimerFiredFunction) + sharedTimerFiredFunction(); + return FALSE; +} + +void setSharedTimerFireTime(double fireTime) +{ + ASSERT(sharedTimerFiredFunction); + + double interval = fireTime - currentTime(); + guint intervalInMS; + if (interval < 0) + intervalInMS = 0; + else { + interval *= 1000; + intervalInMS = (guint)interval; + } + + stopSharedTimer(); + if (intervalInMS == 0) + sharedTimer = g_idle_add_full(G_PRIORITY_DEFAULT, timeout_cb, NULL, NULL); + else + sharedTimer = g_timeout_add_full(G_PRIORITY_DEFAULT, intervalInMS, timeout_cb, NULL, NULL); +} + +void stopSharedTimer() +{ + if (sharedTimer == 0) + return; + + gboolean s = g_source_remove(sharedTimer); + ASSERT(s); + sharedTimer = 0; +} + +} diff --git a/WebCore/platform/gdk/SystemTimeLinux.cpp b/WebCore/platform/gdk/SystemTimeLinux.cpp new file mode 100644 index 00000000000..cbdba91134f --- /dev/null +++ b/WebCore/platform/gdk/SystemTimeLinux.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "SystemTime.h" + +#include + +namespace WebCore { + +double currentTime() +{ + time_t ttime; + time(&ttime); + return (double)ttime; +} + +} diff --git a/WebCore/platform/gdk/TemporaryLinkStubs.cpp b/WebCore/platform/gdk/TemporaryLinkStubs.cpp new file mode 100644 index 00000000000..635b6c8944f --- /dev/null +++ b/WebCore/platform/gdk/TemporaryLinkStubs.cpp @@ -0,0 +1,374 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" + +#define WIN32_COMPILE_HACK + +#include +#include +#include "Node.h" +#include "KWQLineEdit.h" +#include "Font.h" +#include "KWQFileButton.h" +#include "KWQTextEdit.h" +#include "KWQComboBox.h" +#include "IntPoint.h" +#include "Widget.h" +#include "GraphicsContext.h" +#include "KWQSlider.h" +#include "Cursor.h" +#include "loader.h" +#include "FrameView.h" +#include "KURL.h" +#include "KWQScrollBar.h" +#include "JavaAppletWidget.h" +#include "KWQScrollBar.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 "FrameGdk.h" +#include "BrowserExtensionGdk.h" +#include "TransferJob.h" +#include "RenderThemeGdk.h" +#include "TextBoundaries.h" +#include "AccessibilityObjectCache.h" + +using namespace WebCore; + +static void notImplemented() { puts("Not yet implemented"); } + + +void FrameView::updateBorder() { notImplemented(); } +//bool FrameView::isFrameView() const { notImplemented(); return 0; } + +QTextEdit::QTextEdit(Widget*) { notImplemented(); } +QTextEdit::~QTextEdit() { notImplemented(); } +String QTextEdit::textWithHardLineBreaks() const { notImplemented(); return String(); } +IntSize QTextEdit::sizeWithColumnsAndRows(int, int) const { notImplemented(); return IntSize(); } +void QTextEdit::setText(String const&) { notImplemented(); } +void QTextEdit::setColors(Color const&, Color const&) { notImplemented(); } +void QTextEdit::setFont(WebCore::Font const&) { notImplemented(); } +void QTextEdit::setWritingDirection(enum WebCore::TextDirection) { notImplemented(); } +bool QTextEdit::checksDescendantsForFocus() const { notImplemented(); return false; } +int QTextEdit::selectionStart() { notImplemented(); return 0; } +bool QTextEdit::hasSelectedText() const { notImplemented(); return 0; } +int QTextEdit::selectionEnd() { notImplemented(); return 0; } +void QTextEdit::setScrollBarModes(ScrollBarMode, ScrollBarMode) { notImplemented(); } +void QTextEdit::setReadOnly(bool) { notImplemented(); } +void QTextEdit::selectAll() { notImplemented(); } +void QTextEdit::setDisabled(bool) { notImplemented(); } +void QTextEdit::setLineHeight(int) { notImplemented(); } +void QTextEdit::setSelectionStart(int) { notImplemented(); } +void QTextEdit::setCursorPosition(int, int) { notImplemented(); } +String QTextEdit::text() const { notImplemented(); return String(); } +void QTextEdit::setWordWrap(QTextEdit::WrapStyle) { notImplemented(); } +void QTextEdit::setAlignment(HorizontalAlignment) { notImplemented(); } +void QTextEdit::setSelectionEnd(int) { notImplemented(); } +void QTextEdit::getCursorPosition(int*, int*) const { notImplemented(); } +void QTextEdit::setSelectionRange(int, int) { notImplemented(); } + +Widget::FocusPolicy QComboBox::focusPolicy() const { notImplemented(); return NoFocus; } +void QComboBox::populate() { notImplemented(); } + +void Widget::enableFlushDrawing() { notImplemented(); } +bool Widget::isEnabled() const { notImplemented(); return 0; } +Widget::FocusPolicy Widget::focusPolicy() const { notImplemented(); return NoFocus; } +void Widget::disableFlushDrawing() { notImplemented(); } +GraphicsContext* Widget::lockDrawingFocus() { notImplemented(); return 0; } +void Widget::unlockDrawingFocus(GraphicsContext*) { notImplemented(); } + +JavaAppletWidget::JavaAppletWidget(IntSize const&, Element*, WTF::HashMap const&) { notImplemented(); } + +void QLineEdit::selectAll() { notImplemented(); } +void QLineEdit::addSearchResult() { notImplemented(); } +int QLineEdit::selectionStart() const { notImplemented(); return 0; } +bool QLineEdit::hasSelectedText() const { notImplemented(); return 0; } +String QLineEdit::selectedText() const { notImplemented(); return String(); } +void QLineEdit::setAutoSaveName(String const&) { notImplemented(); } +bool QLineEdit::checksDescendantsForFocus() const { notImplemented(); return false; } +void QLineEdit::setSelection(int, int) { notImplemented(); } +void QLineEdit::setMaxResults(int) { notImplemented(); } +bool QLineEdit::edited() const { notImplemented(); return 0; } + +QSlider::QSlider() { notImplemented(); } +IntSize QSlider::sizeHint() const { notImplemented(); return IntSize(); } +void QSlider::setValue(double) { notImplemented(); } +void QSlider::setMaxValue(double) { notImplemented(); } +void QSlider::setMinValue(double) { notImplemented(); } +QSlider::~QSlider() { notImplemented(); } +void QSlider::setFont(WebCore::Font const&) { notImplemented(); } +double QSlider::value() const { notImplemented(); return 0; } + +void QListBox::setSelected(int, bool) { notImplemented(); } +IntSize QListBox::sizeForNumberOfLines(int) const { notImplemented(); return IntSize(); } +bool QListBox::isSelected(int) const { notImplemented(); return 0; } +void QListBox::appendItem(DeprecatedString const&, KWQListBoxItemType, bool) { notImplemented(); } +void QListBox::doneAppendingItems() { notImplemented(); } +void QListBox::setWritingDirection(TextDirection) { notImplemented(); } +void QListBox::setEnabled(bool) { notImplemented(); } +void QListBox::clear() { notImplemented(); } +bool QListBox::checksDescendantsForFocus() const { notImplemented(); return 0; } + +KWQFileButton::KWQFileButton(Frame*) { notImplemented(); } +void KWQFileButton::click(bool) { notImplemented(); } +IntSize KWQFileButton::sizeForCharacterWidth(int) const { notImplemented(); return IntSize(); } +Widget::FocusPolicy KWQFileButton::focusPolicy() const { notImplemented(); return NoFocus; } +WebCore::IntRect KWQFileButton::frameGeometry() const { notImplemented(); return IntRect(); } +void KWQFileButton::setFilename(DeprecatedString const&) { notImplemented(); } +int KWQFileButton::baselinePosition(int) const { notImplemented(); return 0; } +void KWQFileButton::setFrameGeometry(WebCore::IntRect const&) { notImplemented(); } +void KWQFileButton::setDisabled(bool) { notImplemented(); } + +Widget::FocusPolicy QTextEdit::focusPolicy() const { notImplemented(); return NoFocus; } +Widget::FocusPolicy QSlider::focusPolicy() const { notImplemented(); return NoFocus; } +Widget::FocusPolicy QListBox::focusPolicy() const { notImplemented(); return NoFocus; } +Widget::FocusPolicy QLineEdit::focusPolicy() const { notImplemented(); return NoFocus; } + +Cursor::Cursor(Image*) { notImplemented(); } + +PlatformMouseEvent::PlatformMouseEvent() { notImplemented(); } +String WebCore::searchableIndexIntroduction() { notImplemented(); return String(); } + +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; } + +DeprecatedArray KWQServeSynchronousRequest(Loader*, DocLoader*, TransferJob*, KURL&, DeprecatedString&) { notImplemented(); return 0; } + +void FrameGdk::focusWindow() { notImplemented(); } +void FrameGdk::unfocusWindow() { notImplemented(); } +bool FrameGdk::locationbarVisible() { notImplemented(); return 0; } +void FrameGdk::issueRedoCommand(void) { notImplemented(); } +KJS::Bindings::Instance* FrameGdk::getObjectInstanceForWidget(Widget *) { notImplemented(); return 0; } +KJS::Bindings::Instance* FrameGdk::getEmbedInstanceForWidget(Widget *) { notImplemented(); return 0; } +bool FrameGdk::canRedo() const { notImplemented(); return 0; } +bool FrameGdk::canUndo() const { notImplemented(); return 0; } +void FrameGdk::registerCommandForRedo(WebCore::EditCommandPtr const&) { notImplemented(); } +bool FrameGdk::runJavaScriptPrompt(String const&, String const&, String &) { notImplemented(); return 0; } +bool FrameGdk::shouldInterruptJavaScript() { notImplemented(); return false; } +//bool FrameWin::openURL(KURL const&) { notImplemented(); return 0; } +void FrameGdk::print() { notImplemented(); } +KJS::Bindings::Instance* FrameGdk::getAppletInstanceForWidget(Widget*) { notImplemented(); return 0; } +bool FrameGdk::passMouseDownEventToWidget(Widget*) { notImplemented(); return 0; } +void FrameGdk::issueCutCommand() { notImplemented(); } +void FrameGdk::issueCopyCommand() { notImplemented(); } +void FrameGdk::openURLRequest(struct WebCore::ResourceRequest const&) { notImplemented(); } +//bool FrameWin::passWheelEventToChildWidget(Node*) { notImplemented(); return 0; } +void FrameGdk::issueUndoCommand() { notImplemented(); } +String FrameGdk::mimeTypeForFileName(String const&) const { notImplemented(); return String(); } +void FrameGdk::issuePasteCommand() { notImplemented(); } +void FrameGdk::scheduleClose() { notImplemented(); } +void FrameGdk::markMisspellings(WebCore::SelectionController const&) { notImplemented(); } +bool FrameGdk::menubarVisible() { notImplemented(); return 0; } +bool FrameGdk::personalbarVisible() { notImplemented(); return 0; } +bool FrameGdk::statusbarVisible() { notImplemented(); return 0; } +bool FrameGdk::toolbarVisible() { notImplemented(); return 0; } +void FrameGdk::issueTransposeCommand() { notImplemented(); } +bool FrameGdk::canPaste() const { notImplemented(); return 0; } +enum WebCore::ObjectContentType FrameGdk::objectContentType(KURL const&, String const&) { notImplemented(); return (ObjectContentType)0; } +bool FrameGdk::canGoBackOrForward(int) const { notImplemented(); return 0; } +void FrameGdk::issuePasteAndMatchStyleCommand() { notImplemented(); } +Plugin* FrameGdk::createPlugin(Element*, KURL const&, const Vector&, const Vector&, String const&) { notImplemented(); return 0; } + +bool BrowserExtensionGdk::canRunModal() { notImplemented(); return 0; } +void BrowserExtensionGdk::createNewWindow(struct WebCore::ResourceRequest const&, struct WebCore::WindowArgs const&, Frame*&) { notImplemented(); } +bool BrowserExtensionGdk::canRunModalNow() { notImplemented(); return 0; } +void BrowserExtensionGdk::runModal() { notImplemented(); } +void BrowserExtensionGdk::goBackOrForward(int) { notImplemented(); } +KURL BrowserExtensionGdk::historyURL(int distance) { notImplemented(); return KURL(); } +void BrowserExtensionGdk::createNewWindow(struct WebCore::ResourceRequest const&) { notImplemented(); } + +int WebCore::screenDepthPerComponent(Widget*) { notImplemented(); return 0; } +bool WebCore::screenIsMonochrome(Widget*) { notImplemented(); return false; } + +/********************************************************/ +/* Completely empty stubs (mostly to allow DRT to run): */ +/********************************************************/ +static Cursor localCursor; +const Cursor& WebCore::moveCursor() { return localCursor; } + +bool AccessibilityObjectCache::gAccessibilityEnabled = false; + +bool WebCore::historyContains(DeprecatedString const&) { return false; } +String WebCore::submitButtonDefaultLabel() { return "Submit"; } +String WebCore::inputElementAltText() { return DeprecatedString(); } +String WebCore::resetButtonDefaultLabel() { return "Reset"; } +String WebCore::defaultLanguage() { return "en"; } + +void WebCore::findWordBoundary(UChar const* str, int len, int position, int* start, int* end) {*start = position; *end = position; } + +PluginInfo*PlugInInfoStore::createPluginInfoForPluginAtIndex(unsigned) { return 0;} +unsigned PlugInInfoStore::pluginCount() const { return 0; } +bool WebCore::PlugInInfoStore::supportsMIMEType(const WebCore::String&) { return false; } +void WebCore::refreshPlugins(bool) { } + +void WebCore::TransferJob::assembleResponseHeaders() const { } +void WebCore::TransferJob::retrieveCharset() const { } + +void FrameGdk::restoreDocumentState() { } +void FrameGdk::partClearedInBegin() { } +void FrameGdk::createEmptyDocument() { } +String FrameGdk::overrideMediaType() const { return String(); } +void FrameGdk::handledOnloadEvents() { } +Range* FrameGdk::markedTextRange() const { return 0; } +bool FrameGdk::lastEventIsMouseUp() const { return false; } +void FrameGdk::addMessageToConsole(String const&, unsigned int, String const&) { } +bool FrameGdk::shouldChangeSelection(SelectionController const&, SelectionController const&, WebCore::EAffinity, bool) const { return true; } +void FrameGdk::respondToChangedSelection(WebCore::SelectionController const&, bool) { } +static int frameNumber = 0; +Frame* FrameGdk::createFrame(KURL const&, String const&, RenderPart*, String const&) { return 0; } +void FrameGdk::saveDocumentState() { } +void FrameGdk::registerCommandForUndo(WebCore::EditCommandPtr const&) { } +void FrameGdk::clearUndoRedoOperations(void) { } +String FrameGdk::incomingReferrer() const { return String(); } +void FrameGdk::markMisspellingsInAdjacentWords(WebCore::VisiblePosition const&) { } +void FrameGdk::respondToChangedContents() { } + +BrowserExtensionGdk::BrowserExtensionGdk(WebCore::Frame*) { } +void BrowserExtensionGdk::setTypedIconURL(KURL const&, const String&) { } +void BrowserExtensionGdk::setIconURL(KURL const&) { } +int BrowserExtensionGdk::getHistoryLength() { return 0; } + +bool KWQCheckIfReloading(WebCore::DocLoader*) { return false; } +void KWQCheckCacheObjectStatus(DocLoader*, CachedObject*) { } + +void Widget::setEnabled(bool) { } +void Widget::paint(GraphicsContext*, IntRect const&) { } +void Widget::setIsSelected(bool) { } + +void ScrollView::addChild(Widget*, int, int) { } +void ScrollView::removeChild(Widget*) { } +void ScrollView::scrollPointRecursively(int x, int y) { } +bool ScrollView::inWindow() const { return true; } +void ScrollView::updateScrollBars() { } +int ScrollView::updateScrollInfo(short type, int current, int max, int pageSize) { 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(); } +void GraphicsContext::setShadow(IntSize const&, int, Color const&) { } +void GraphicsContext::clearShadow() { } +void GraphicsContext::beginTransparencyLayer(float) { } +void GraphicsContext::endTransparencyLayer() { } +void GraphicsContext::clearRect(const FloatRect&) { } +void GraphicsContext::strokeRect(const FloatRect&, float) { } +void GraphicsContext::setLineWidth(float) { } +void GraphicsContext::setLineCap(LineCap) { } +void GraphicsContext::setLineJoin(LineJoin) { } +void GraphicsContext::setMiterLimit(float) { } +void GraphicsContext::setAlpha(float) { } +void GraphicsContext::setCompositeOperation(CompositeOperator) { } +void GraphicsContext::clip(const Path&) { } +void GraphicsContext::translate(const FloatSize&) { } +void GraphicsContext::rotate(float) { } +void GraphicsContext::scale(const FloatSize&) { } + +Path::Path(){ } +Path::~Path(){ } +Path::Path(const Path&){ } +bool Path::contains(const FloatPoint&) const{ return false; } +void Path::translate(const FloatSize&){ } +FloatRect Path::boundingRect() const { return FloatRect(); } +Path& Path::operator=(const Path&){ return * this; } +void Path::clear() { } +void Path::moveTo(const FloatPoint&) { } +void Path::addLineTo(const FloatPoint&) { } +void Path::addQuadCurveTo(const FloatPoint&, const FloatPoint&) { } +void Path::addBezierCurveTo(const FloatPoint&, const FloatPoint&, const FloatPoint&) { } +void Path::addArcTo(const FloatPoint&, const FloatPoint&, float) { } +void Path::closeSubpath() { } +void Path::addArc(const FloatPoint&, float, float, float, bool) { } +void Path::addRect(const FloatRect&) { } +void Path::addEllipse(const FloatRect&) { } + +QLineEdit::QLineEdit(QLineEdit::Type) { } +QLineEdit::~QLineEdit() { } +void QLineEdit::setFont(WebCore::Font const&) { } +void QLineEdit::setAlignment(HorizontalAlignment) { } +void QLineEdit::setWritingDirection(TextDirection) { } +int QLineEdit::maxLength() const { return 0; } +void QLineEdit::setMaxLength(int) { } +String QLineEdit::text() const { return String(); } +void QLineEdit::setText(String const&) { } +int QLineEdit::cursorPosition() const { return 0; } +void QLineEdit::setCursorPosition(int) { } +void QLineEdit::setEdited(bool) { } +void QLineEdit::setReadOnly(bool) { } +void QLineEdit::setPlaceholderString(String const&) { } +void QLineEdit::setColors(Color const&, Color const&) { } +IntSize QLineEdit::sizeForCharacterWidth(int) const { return IntSize(); } +int QLineEdit::baselinePosition(int) const { return 0; } +void QLineEdit::setLiveSearch(bool) { } + +QComboBox::QComboBox() { } +QComboBox::~QComboBox() { } +void QComboBox::setFont(WebCore::Font const&) { } +int QComboBox::baselinePosition(int) const { return 0; } +void QComboBox::setWritingDirection(TextDirection) { } +void QComboBox::clear() { } +void QComboBox::appendItem(DeprecatedString const&, KWQListBoxItemType, bool) { } +void QComboBox::setCurrentItem(int) { } +IntSize QComboBox::sizeHint() const { return IntSize(); } +IntRect QComboBox::frameGeometry() const { return IntRect(); } +void QComboBox::setFrameGeometry(IntRect const&) { } + +QScrollBar::QScrollBar(ScrollBarOrientation) { } +QScrollBar::~QScrollBar() { } +void QScrollBar::setSteps(int, int) { } +bool QScrollBar::scroll(KWQScrollDirection, KWQScrollGranularity, float) { return 0; } +bool QScrollBar::setValue(int) { return 0; } +void QScrollBar::setKnobProportion(int, int) { } + +QListBox::QListBox() { } +QListBox::~QListBox() { } +void QListBox::setSelectionMode(QListBox::SelectionMode) { } +void QListBox::setFont(WebCore::Font const&) { } + +Color WebCore::focusRingColor() { return 0xFF0000FF; } +void WebCore::setFocusRingColorChangeFunction(void (*)()) { } + +void Frame::setNeedsReapplyStyles() { } + +void Image::drawTiled(GraphicsContext*, const FloatRect&, const FloatRect&, TileRule, TileRule) { } + +void RenderThemeGdk::setCheckboxSize(RenderStyle*) const { } +bool RenderThemeGdk::paintButton(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return false; } +void RenderThemeGdk::setRadioSize(RenderStyle*) const { } +void RenderThemeGdk::adjustTextFieldStyle(CSSStyleSelector*, RenderStyle*, Element* e) const {} +bool RenderThemeGdk::paintTextField(RenderObject*, const RenderObject::PaintInfo&, const IntRect&) { return false; } + +FloatRect Font::selectionRectForComplexText(const TextRun&, const TextStyle&, const IntPoint&, int) const { return FloatRect(); } +void Font::drawComplexText(GraphicsContext*, const TextRun&, const TextStyle&, const FloatPoint&) const { notImplemented(); } +float Font::floatWidthForComplexText(const TextRun&, const TextStyle&) const { notImplemented(); return 0; } +int Font::offsetForPositionForComplexText(const TextRun&, const TextStyle&, int, bool) const { notImplemented(); return 0; } diff --git a/WebCore/platform/gdk/TransferJobCurl.cpp b/WebCore/platform/gdk/TransferJobCurl.cpp new file mode 100644 index 00000000000..c8271a9cb59 --- /dev/null +++ b/WebCore/platform/gdk/TransferJobCurl.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved. + * Copyright (C) 2005, 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. + */ + +#include "config.h" +#include "TransferJob.h" + +#include "DocLoader.h" +#include "TransferJobInternal.h" +#include "TransferJobManager.h" + +namespace WebCore { + +TransferJobInternal::~TransferJobInternal() +{ +} + +TransferJob::~TransferJob() +{ + cancel(); +} + +bool TransferJob::start(DocLoader* docLoader) +{ + TransferJobManager::get()->add(this); + return true; +} + +void TransferJob::cancel() +{ + TransferJobManager::get()->cancel(this); +} + +} // namespace WebCore diff --git a/WebCore/platform/gdk/TransferJobManager.cpp b/WebCore/platform/gdk/TransferJobManager.cpp new file mode 100644 index 00000000000..18e452749af --- /dev/null +++ b/WebCore/platform/gdk/TransferJobManager.cpp @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "TransferJobManager.h" + +#include "TransferJob.h" +#include "TransferJobInternal.h" + +namespace WebCore { + +const int selectTimeoutMS = 5; +const double pollTimeSeconds = 0.05; + +TransferJobManager::TransferJobManager() + : m_useSimple(false) + , jobs(new HashSet) + , m_downloadTimer(this, &TransferJobManager::downloadTimerCallback) +{ + curl_global_init(CURL_GLOBAL_ALL); + curlMultiHandle = curl_multi_init(); +} + +TransferJobManager* TransferJobManager::get() +{ + static TransferJobManager* singleton; + if (!singleton) + singleton = new TransferJobManager; + return singleton; +} + +void TransferJobManager::useSimpleTransfer(bool useSimple) +{ + m_useSimple = useSimple; +} + +static size_t writeCallback(void* ptr, size_t size, size_t nmemb, void* obj) +{ + TransferJob* job = static_cast(obj); + TransferJobInternal* d = job->getInternal(); + int totalSize = size * nmemb; + d->client->receivedData(job, static_catptr, totalSize); + return totalSize; +} + +static size_t headerCallback(char* ptr, size_t size, size_t nmemb, void* data) +{ + int totalSize = size * nmemb; + return totalSize; +} + +void TransferJobManager::downloadTimerCallback(Timer* timer) +{ + if (jobs->isEmpty()) { + m_downloadTimer.stop(); + return; + } + + if (m_useSimple) { + for (HashSet::iterator it = jobs->begin(); it != jobs->end(); ++it) { + TransferJob* job = *it; + TransferJobInternal* d = job->getInternal(); + CURLcode res = curl_easy_perform(d->m_handle); + if (res != CURLE_OK) + printf("Error WITH JOB %d\n", res); + d->client->receivedAllData(job, 0); + d->client->receivedAllData(job); + curl_easy_cleanup(d->m_handle); + d->m_handle = 0; + } + jobs->clear(); + m_downloadTimer.stop(); + } else { + FD_ZERO(&fdread); + FD_ZERO(&fdwrite); + FD_ZERO(&fdexcep); + curl_multi_fdset(curlMultiHandle, &fdread, &fdwrite, &fdexcep, &maxfd); + int nrunning; + struct timeval timeout; + int retval; + timeout.tv_sec = 0; + timeout.tv_usec = selectTimeoutMS * 1000; // select waits microseconds + retval = ::select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout); + switch (retval) { + case -1: // select error +#ifndef NDEBUG + printf("%s, select error(?)\n", __PRETTY_FUNCTION__); +#endif + /* fallthrough*/ + case 0: // select timeout + printf("%s, select timout\n", __PRETTY_FUNCTION__); + /* fallthrough. this can be the first perform to be made */ + default: // 1+ descriptors have data + while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curlMultiHandle, &nrunning)) + { } + } + + // check the curl messages indicating completed transfers + // and free their resources + TransferJob* job; + int nmsgs; + while (CURLMsg* msg = curl_multi_info_read(curlMultiHandle, &nmsgs)) { + if (msg->msg == CURLMSG_DONE) { + // find the node which has same d->m_handle as completed transfer + CURL* chandle = msg->easy_handle; + assert(chandle); + TransferJob *job; + curl_easy_getinfo(chandle, CURLINFO_PRIVATE, &job); + assert(job); //fixme: assert->if ? + // if found, delete it + if (job) { + TransferJobInternal *d = job->getInternal(); + switch (msg->data.result) { + case CURLE_OK: { + // use this to authenticate + int respCode = -1; + curl_easy_getinfo(d->m_handle, CURLINFO_RESPONSE_CODE, &respCode); + remove(job); + break; + } + default: + printf("Curl ERROR %s\n", curl_easy_strerror(msg->data.result)); + job->setError(msg->data.result); + remove(job); + break; + } + } else { + printf("CurlRequest not found, eventhough curl d->m_handle finished\n"); + assert(0); + } + } + + if (!jobs->isEmpty()) + m_downloadTimer.startOneShot(pollTimeSeconds); + } + } +} + +void TransferJobManager::remove(TransferJob* job) +{ + TransferJobInternal* d = job->getInternal(); + if (!d->m_handle) + return; + if (jobs->contains(job)) + jobs->remove(job); + if (jobs->isEmpty()) + m_downloadTimer.stop(); + d->client->receivedAllData(job, 0); + d->client->receivedAllData(job); + if (d->m_handle) { + curl_multi_remove_handle(curlMultiHandle, d->m_handle); + curl_easy_cleanup(d->m_handle); + d->m_handle = NULL; + } +} + +void TransferJobManager::add(TransferJob* job) +{ + bool startTimer = jobs->isEmpty(); + TransferJobInternal* d = job->getInternal(); + DeprecatedString url = d->URL.url(); + d->m_handle = curl_easy_init(); + curl_easy_setopt(d->m_handle, CURLOPT_PRIVATE, job); + curl_easy_setopt(d->m_handle, CURLOPT_ERRORBUFFER, error_buffer); + curl_easy_setopt(d->m_handle, CURLOPT_WRITEFUNCTION, writeCallback); + curl_easy_setopt(d->m_handle, CURLOPT_WRITEDATA, job); + curl_easy_setopt(d->m_handle, CURLOPT_HEADERFUNCTION, headerCallback); + curl_easy_setopt(d->m_handle, CURLOPT_WRITEHEADER, job); + curl_easy_setopt(d->m_handle, CURLOPT_FOLLOWLOCATION, 1); + curl_easy_setopt(d->m_handle, CURLOPT_MAXREDIRS, 10); + curl_easy_setopt(d->m_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY); + // url ptr must remain valid through the request + curl_easy_setopt(d->m_handle, CURLOPT_URL, url.ascii()); + + if (m_useSimple) + jobs->add(job); + else { + CURLMcode ret = curl_multi_add_handle(curlMultiHandle, d->m_handle); + // don't call perform, because events must be async + // timeout will occur and do curl_multi_perform + if (ret && ret != CURLM_CALL_MULTI_PERFORM) { + printf("Error %d starting job %s\n", ret, d->URL.url().ascii()); + cancel(job); + } else + jobs->add(job); + } + if (!jobs->isEmpty()) + m_downloadTimer.startOneShot(pollTimeSeconds); +} + +void TransferJobManager::cancel(TransferJob* job) +{ + remove(job); + job->setError(1); +} + +} // namespace WebCore diff --git a/WebCore/platform/gdk/TransferJobManager.h b/WebCore/platform/gdk/TransferJobManager.h new file mode 100644 index 00000000000..e607a2e09c0 --- /dev/null +++ b/WebCore/platform/gdk/TransferJobManager.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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 TransferJobManager_H_ +#define TransferJobManager_H_ + +#include "Frame.h" +#include "Timer.h" +#include "TransferJobClient.h" +#include + +namespace WebCore { + +class TransferJobManager { +public: + static TransferJobManager* get(); + void add(TransferJob*); + void cancel(TransferJob*); + + // If true, don't multiplex downloads: download completely one at a time. + void useSimpleTransfer(bool useSimple); + +private: + TransferJobManager(); + void downloadTimerCallback(Timer*); + void remove(TransferJob*); + + bool m_useSimple; + HashSet* jobs; + Timer m_downloadTimer; + CURLM* curlMultiHandle; // not freed + + // curl filehandles to poll with select + fd_set fdread; + fd_set fdwrite; + fd_set fdexcep; + + int maxfd; + char error_buffer[CURL_ERROR_SIZE]; + + // NULL-terminated list of supported protocols + const char* const* curl_protocols; // not freed +}; + +} + +#endif diff --git a/WebCore/platform/gdk/WheelEventGdk.cpp b/WebCore/platform/gdk/WheelEventGdk.cpp new file mode 100644 index 00000000000..f280553a971 --- /dev/null +++ b/WebCore/platform/gdk/WheelEventGdk.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "PlatformWheelEvent.h" + +#include + +namespace WebCore { + +PlatformWheelEvent::PlatformWheelEvent(GdkEvent* event) +{ + if (event->scroll.direction == GDK_SCROLL_UP) { + m_delta = -120; + m_isHorizontal = false; + } else if (event->scroll.direction == GDK_SCROLL_LEFT) { + m_delta = -120; + m_isHorizontal = true; + } else if (event->scroll.direction == GDK_SCROLL_RIGHT) { + m_delta = 120; + m_isHorizontal = true; + } else { + m_delta = 120; + m_isHorizontal = false; + } + + m_position = IntPoint((int)event->scroll.x, (int)event->scroll.y); + m_globalPosition = IntPoint((int)event->scroll.x_root, (int)event->scroll.y_root); + m_isAccepted = false; + m_shiftKey = event->button.state & GDK_SHIFT_MASK; + m_ctrlKey = event->button.state & GDK_CONTROL_MASK; + m_altKey = event->button.state & GDK_MOD1_MASK; + m_metaKey = event->button.state & GDK_MOD2_MASK; +} + +} diff --git a/WebCore/platform/gdk/WidgetGdk.cpp b/WebCore/platform/gdk/WidgetGdk.cpp new file mode 100644 index 00000000000..97b6844b59a --- /dev/null +++ b/WebCore/platform/gdk/WidgetGdk.cpp @@ -0,0 +1,178 @@ +/* + * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. + * 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. + */ + +#include "config.h" +#include "Widget.h" + +#include "Cursor.h" +#include "Font.h" +#include "FrameGdk.h" +#include "GraphicsContext.h" +#include "IntRect.h" +#include "RenderObject.h" +#include + +namespace WebCore { + +class WidgetPrivate { +public: + GdkDrawable* drawable; + WidgetClient* client; + IntRect geometry; + Font font; +}; + +Widget::Widget() + : data(new WidgetPrivate) +{ + data->drawable = 0; +} + +Widget::Widget(GdkDrawable* drawable) + : data(new WidgetPrivate) +{ + setDrawable(drawable); +} + +GdkDrawable* Widget::drawable() const +{ + return data->drawable; +} + +void Widget::setDrawable(GdkDrawable* drawable) +{ + data->drawable = drawable; +} + +Widget::~Widget() +{ + delete data; +} + +void Widget::setClient(WidgetClient* c) +{ + data->client = c; +} + +WidgetClient* Widget::client() const +{ + return data->client; +} + +IntRect Widget::frameGeometry() const +{ + return data->geometry; +} + +bool Widget::hasFocus() const +{ + return false; +} + +void Widget::setFocus() +{ + GdkDrawable* drawable = data->drawable; + if (!drawable || !GDK_IS_WINDOW(drawable)) + return; + GdkWindow* window = GDK_WINDOW(drawable); + gdk_window_focus(window, GDK_CURRENT_TIME); +} + +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) +{ + GdkCursor* pcur = cursor.impl(); + if (!pcur) + return; + + GdkDrawable* drawable = data->drawable; + if (!drawable || !GDK_IS_WINDOW(drawable)) + return; + GdkWindow* window = GDK_WINDOW(drawable); + gdk_window_set_cursor(window, pcur); + +} + +void Widget::show() +{ + GdkDrawable* drawable = data->drawable; + if (!drawable || !GDK_IS_WINDOW(drawable)) + return; + GdkWindow* window = GDK_WINDOW(drawable); + gdk_window_show(window); +} + +void Widget::hide() +{ + GdkDrawable* drawable = data->drawable; + if (!drawable || !GDK_IS_WINDOW(drawable)) + return; + GdkWindow* window = GDK_WINDOW(drawable); + gdk_window_hide(window); +} + +void Widget::setFrameGeometry(const IntRect& r) +{ + data->geometry = r; + GdkDrawable* drawable = data->drawable; + if (!drawable || !GDK_IS_WINDOW(drawable)) + return; + GdkWindow* window = GDK_WINDOW(drawable); + gdk_window_move_resize(window, r.x(), r.y(), r.width(), r.height()); +} + +IntPoint Widget::mapFromGlobal(const IntPoint& p) const +{ + GdkDrawable* drawable = data->drawable; + if (!drawable || !GDK_IS_WINDOW(drawable)) + return p; + GdkWindow* window = GDK_WINDOW(drawable); + gint x, y; + gdk_window_get_origin(window, &x, &y); + return IntPoint(p.x() - x, p.y() - y); +} + +float Widget::scaleFactor() const +{ + return 1.0f; + +} + +} diff --git a/WebCore/platform/gdk/gdk-encodings.txt b/WebCore/platform/gdk/gdk-encodings.txt new file mode 100644 index 00000000000..0b9bfc72c7e --- /dev/null +++ b/WebCore/platform/gdk/gdk-encodings.txt @@ -0,0 +1,12 @@ +# The items on the left are names of TextEncodingID values +# The items on the right are IANA character set names. Names listed in character-sets.txt are not +# repeated here; mentioning any one character set from a group in there pulls in all the aliases in +# that group. + +WinLatin1Encoding: windows-1252, winlatin1, xansi +Latin1Encoding: ISO-8859-1, 88591 +ASCIIEncoding: US-ASCII, isoir6us +UTF16Encoding: ISO-10646-UCS-2, ucs2, unicode, utf16 +UTF16Encoding, BigEndian: UTF-16BE, unicodefffe +UTF16Encoding, LittleEndian: UTF-16LE, unicodefeff +UTF8Encoding: UTF-8, unicode11utf8, unicode20utf8, xunicode20utf8 -- GitLab