diff options
author | Steve Block <steveblock@google.com> | 2009-10-08 17:19:54 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2009-10-20 00:41:58 +0100 |
commit | 231d4e3152a9c27a73b6ac7badbe6be673aa3ddf (patch) | |
tree | a6c7e2d6cd7bfa7011cc39abbb436142d7a4a7c8 /WebCore/platform/wx | |
parent | e196732677050bd463301566a68a643b6d14b907 (diff) | |
download | external_webkit-231d4e3152a9c27a73b6ac7badbe6be673aa3ddf.zip external_webkit-231d4e3152a9c27a73b6ac7badbe6be673aa3ddf.tar.gz external_webkit-231d4e3152a9c27a73b6ac7badbe6be673aa3ddf.tar.bz2 |
Merge webkit.org at R49305 : Automatic merge by git.
Change-Id: I8968561bc1bfd72b8923b7118d3728579c6dbcc7
Diffstat (limited to 'WebCore/platform/wx')
22 files changed, 1166 insertions, 36 deletions
diff --git a/WebCore/platform/wx/CursorWx.cpp b/WebCore/platform/wx/CursorWx.cpp index 7175b01..ed7f86b 100644 --- a/WebCore/platform/wx/CursorWx.cpp +++ b/WebCore/platform/wx/CursorWx.cpp @@ -298,4 +298,10 @@ const Cursor& grabbingCursor() return pointerCursor(); } +const Cursor& moveCursor() +{ + static Cursor c = new wxCursor(wxCURSOR_SIZING); + return c; +} + } diff --git a/WebCore/platform/wx/FileChooserWx.cpp b/WebCore/platform/wx/FileChooserWx.cpp new file mode 100644 index 0000000..34065f3 --- /dev/null +++ b/WebCore/platform/wx/FileChooserWx.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2009 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "FileChooser.h" + +#include "NotImplemented.h" + +namespace WebCore { + +String FileChooser::basenameForWidth(const Font&, int width) const +{ + notImplemented(); + return String(); +} + +} + diff --git a/WebCore/platform/wx/FileSystemWx.cpp b/WebCore/platform/wx/FileSystemWx.cpp index 7de425e..109278f 100644 --- a/WebCore/platform/wx/FileSystemWx.cpp +++ b/WebCore/platform/wx/FileSystemWx.cpp @@ -40,50 +40,50 @@ namespace WebCore { bool fileExists(const String& path) { - notImplemented(); - return true; + return wxFileName::FileExists(path); } bool deleteFile(const String& path) { - notImplemented(); - return false; + return wxRemoveFile(path); } bool deleteEmptyDirectory(const String& path) { - notImplemented(); - return false; + return wxFileName::Rmdir(path); } bool getFileSize(const String& path, long long& resultSize) { - notImplemented(); + wxULongLong size = wxFileName::GetSize(path); + if (wxInvalidSize != size) { + // TODO: why is FileSystem::getFileSize signed? + resultSize = (long long)size.GetValue(); + return true; + } + return false; } -bool getFileModificationTime(const String&, time_t&) +bool getFileModificationTime(const String& path, time_t& t) { - notImplemented(); - return false; + t = wxFileName(path).GetModificationTime().GetTicks(); + return true; } bool makeAllDirectories(const String& path) { - notImplemented(); - return false; + return wxFileName::Mkdir(path, 0777, wxPATH_MKDIR_FULL); } String pathByAppendingComponent(const String& path, const String& component) { - notImplemented(); - return String(); + return wxFileName(path, component).GetFullPath(); } String homeDirectoryPath() { - notImplemented(); - return String(); + return wxFileName::GetHomeDir(); } String pathGetFileName(const String& path) @@ -93,8 +93,7 @@ String pathGetFileName(const String& path) String directoryName(const String& path) { - notImplemented(); - return String(); + return wxFileName(path).GetPath(); } CString openTemporaryFile(const char* prefix, PlatformFileHandle& handle) diff --git a/WebCore/platform/wx/KURLWx.cpp b/WebCore/platform/wx/KURLWx.cpp new file mode 100644 index 0000000..a2be103 --- /dev/null +++ b/WebCore/platform/wx/KURLWx.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2009 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "KURL.h" + +#include "NotImplemented.h" + +namespace WebCore { + +String KURL::fileSystemPath() const +{ + notImplemented(); + return String(); +} + +} + diff --git a/WebCore/platform/wx/PasteboardWx.cpp b/WebCore/platform/wx/PasteboardWx.cpp index 67697de..207c63c 100644 --- a/WebCore/platform/wx/PasteboardWx.cpp +++ b/WebCore/platform/wx/PasteboardWx.cpp @@ -52,13 +52,20 @@ Pasteboard* Pasteboard::generalPasteboard() void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame) { - if (wxTheClipboard->Open()) - { + if (wxTheClipboard->Open()) { wxTheClipboard->SetData( new wxTextDataObject(frame->selectedText()) ); wxTheClipboard->Close(); } } +void Pasteboard::writePlainText(const String& text) +{ + if (wxTheClipboard->Open()) { + wxTheClipboard->SetData( new wxTextDataObject(text) ); + wxTheClipboard->Close(); + } +} + bool Pasteboard::canSmartReplace() { notImplemented(); @@ -92,8 +99,7 @@ PassRefPtr<DocumentFragment> Pasteboard::documentFragment(Frame* frame, PassRefP void Pasteboard::writeURL(const KURL& url, const String&, Frame*) { - if (wxTheClipboard->Open()) - { + if (wxTheClipboard->Open()) { wxTheClipboard->SetData( new wxTextDataObject( url.string() ) ); wxTheClipboard->Close(); } diff --git a/WebCore/platform/wx/PopupMenuWx.cpp b/WebCore/platform/wx/PopupMenuWx.cpp index 660282c..9b0deba 100644 --- a/WebCore/platform/wx/PopupMenuWx.cpp +++ b/WebCore/platform/wx/PopupMenuWx.cpp @@ -88,7 +88,7 @@ void PopupMenu::OnMenuItemSelected(wxCommandEvent& event) { if (client()) { client()->valueChanged(event.GetId() - s_menuStartId); - client()->hidePopup(); + client()->popupDidHide(); } // TODO: Do we need to call Disconnect here? Do we have a ref to the native window still? } diff --git a/WebCore/platform/wx/RenderThemeWx.cpp b/WebCore/platform/wx/RenderThemeWx.cpp index f2ced9e..c66ff87 100644 --- a/WebCore/platform/wx/RenderThemeWx.cpp +++ b/WebCore/platform/wx/RenderThemeWx.cpp @@ -29,6 +29,7 @@ #include "Document.h" #include "FrameView.h" #include "GraphicsContext.h" +#include "HostWindow.h" #include "NotImplemented.h" #include "RenderView.h" @@ -138,6 +139,15 @@ PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) return rt; } +wxWindow* nativeWindowForRenderObject(RenderObject* o) +{ + FrameView* frameView = o->view()->frameView(); + ASSERT(frameView); + ASSERT(frameView->hostWindow()); + return frameView->hostWindow()->platformPageClient(); +} + + bool RenderThemeWx::isControlStyled(const RenderStyle* style, const BorderData& border, const FillLayer& background, const Color& backgroundColor) const { @@ -251,10 +261,23 @@ void RenderThemeWx::adjustButtonStyle(CSSStyleSelector* selector, RenderStyle* s bool RenderThemeWx::paintButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { - wxWindow* window = o->view()->frameView()->platformWidget(); + wxWindow* window = nativeWindowForRenderObject(o); wxDC* dc = static_cast<wxDC*>(i.context->platformContext()); int flags = 0; + IntRect rect = r; + +#if USE(WXGC) + double xtrans = 0; + double ytrans = 0; + + wxGCDC* gcdc = static_cast<wxGCDC*>(dc); + wxGraphicsContext* gc = gcdc->GetGraphicsContext(); + gc->GetTransform().TransformPoint(&xtrans, &ytrans); + rect.setX(r.x() + (int)xtrans); + rect.setY(r.y() + (int)ytrans); +#endif + if (!isEnabled(o)) flags |= wxCONTROL_DISABLED; @@ -266,20 +289,22 @@ bool RenderThemeWx::paintButton(RenderObject* o, const RenderObject::PaintInfo& flags |= wxCONTROL_PRESSED; if (part == PushButtonPart || part == ButtonPart) - wxRendererNative::Get().DrawPushButton(window, *dc, r, flags); + wxRendererNative::Get().DrawPushButton(window, *dc, rect, flags); else if(part == RadioPart) { if (isChecked(o)) flags |= wxCONTROL_CHECKED; -#if wxCHECK_VERSION(2,9,0) - wxRendererNative::Get().DrawRadioButton(window, *dc, r, flags); +#if wxCHECK_VERSION(2,9,1) + wxRendererNative::Get().DrawRadioBitmap(window, *dc, r, flags); +#elif wxCHECK_VERSION(2,9,0) + wxRendererNative::Get().DrawRadioButton(window, *dc, rect, flags); #else - wxRenderer_DrawRadioButton(window, *dc, r, flags); + wxRenderer_DrawRadioButton(window, *dc, rect, flags); #endif } else if(part == CheckboxPart) { if (isChecked(o)) flags |= wxCONTROL_CHECKED; - wxRendererNative::Get().DrawCheckBox(window, *dc, r, flags); + wxRendererNative::Get().DrawCheckBox(window, *dc, rect, flags); } return false; } @@ -291,7 +316,7 @@ void RenderThemeWx::adjustTextFieldStyle(CSSStyleSelector*, RenderStyle* style, bool RenderThemeWx::paintTextField(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { - wxWindow* window = o->view()->frameView()->platformWidget(); + wxWindow* window = nativeWindowForRenderObject(o); wxDC* dc = static_cast<wxDC*>(i.context->platformContext()); #if wxCHECK_VERSION(2,9,0) wxRendererNative::Get().DrawTextCtrl(window, *dc, r, 0); @@ -313,7 +338,7 @@ void RenderThemeWx::adjustMenuListStyle(CSSStyleSelector*, RenderStyle* style, E bool RenderThemeWx::paintMenuList(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { - wxWindow* window = o->view()->frameView()->platformWidget(); + wxWindow* window = nativeWindowForRenderObject(o); wxDC* dc = static_cast<wxDC*>(i.context->platformContext()); int flags = 0; @@ -342,7 +367,7 @@ void RenderThemeWx::adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, E bool RenderThemeWx::paintMenuListButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { - wxWindow* window = o->view()->frameView()->platformWidget(); + wxWindow* window = nativeWindowForRenderObject(o); wxDC* dc = static_cast<wxDC*>(i.context->platformContext()); int flags = 0; diff --git a/WebCore/platform/wx/SSLKeyGeneratorWx.cpp b/WebCore/platform/wx/SSLKeyGeneratorWx.cpp new file mode 100644 index 0000000..7d076e7 --- /dev/null +++ b/WebCore/platform/wx/SSLKeyGeneratorWx.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2009 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "SSLKeyGenerator.h" + +#include "NotImplemented.h" + +namespace WebCore { + +void getSupportedKeySizes(Vector<String>&) +{ + notImplemented(); +} + +String signedPublicKeyAndChallengeString(unsigned keySizeIndex, const String &challengeString, const KURL &url) +{ + return String(); +} + +} + diff --git a/WebCore/platform/wx/ScrollbarThemeWx.cpp b/WebCore/platform/wx/ScrollbarThemeWx.cpp new file mode 100644 index 0000000..6904f41 --- /dev/null +++ b/WebCore/platform/wx/ScrollbarThemeWx.cpp @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2008 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "ScrollbarThemeWx.h" + +#include "HostWindow.h" +#include "NotImplemented.h" +#include "Scrollbar.h" +#include "ScrollbarClient.h" +#include "scrollbar_render.h" +#include "ScrollbarThemeComposite.h" +#include "ScrollView.h" + +#include <wx/defs.h> +#include <wx/dcgraph.h> +#include <wx/settings.h> + +const int cMacButtonOverlap = 4; + +namespace WebCore { + +ScrollbarTheme* ScrollbarTheme::nativeTheme() +{ + static ScrollbarThemeWx theme; + return &theme; +} + +ScrollbarThemeWx::~ScrollbarThemeWx() +{ +} + +int ScrollbarThemeWx::scrollbarThickness(ScrollbarControlSize size) +{ + int thickness = wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); + + // fallback for when a platform doesn't define this metric + if (thickness <= 0) + thickness = 20; + + return thickness; +} + +bool ScrollbarThemeWx::hasThumb(Scrollbar* scrollbar) +{ + // This method is just called as a paint-time optimization to see if + // painting the thumb can be skipped. We don't have to be exact here. + return thumbLength(scrollbar) > 0; +} + +IntSize ScrollbarThemeWx::buttonSize(Scrollbar*) +{ +#ifdef __WXMAC__ + return IntSize(20,20); +#else + return IntSize(16,16); +#endif +} + + +IntRect ScrollbarThemeWx::backButtonRect(Scrollbar* scrollbar, ScrollbarPart part, bool) +{ + // FIXME: Handling this case is needed when there are two sets of arrow buttons + // on Mac, one at the top and one at the bottom. + if (part == BackButtonEndPart) + return IntRect(); + + IntSize size = buttonSize(scrollbar); + int x = scrollbar->x(); + int y = scrollbar->y(); + +#if __WXMAC__ + if (scrollbar->orientation() == HorizontalScrollbar) + x += scrollbar->width() - (size.width() * 2) + cMacButtonOverlap; + else + y += scrollbar->height() - (size.height() * 2) + cMacButtonOverlap; +#endif + + return IntRect(x, y, size.width(), size.height()); +} + +IntRect ScrollbarThemeWx::forwardButtonRect(Scrollbar* scrollbar, ScrollbarPart part, bool) +{ + // FIXME: Handling this case is needed when there are two sets of arrow buttons + // on Mac, one at the top and one at the bottom. + if (part == ForwardButtonStartPart) + return IntRect(); + + IntSize size = buttonSize(scrollbar); + int x, y; + if (scrollbar->orientation() == HorizontalScrollbar) { + x = scrollbar->x() + scrollbar->width() - size.width(); + y = scrollbar->y(); + } else { + x = scrollbar->x(); + y = scrollbar->y() + scrollbar->height() - size.height(); + } + return IntRect(x, y, size.width(), size.height()); +} + +IntRect ScrollbarThemeWx::trackRect(Scrollbar* scrollbar, bool) +{ + IntSize bs = buttonSize(scrollbar); + int trackStart = 0; + if (scrollbar->orientation() == HorizontalScrollbar) + trackStart = bs.width(); + else + trackStart = bs.height(); + +#if __WXMAC__ + trackStart = 0; +#endif + + int thickness = scrollbarThickness(scrollbar->controlSize()); + if (scrollbar->orientation() == HorizontalScrollbar) { + if (scrollbar->width() < 2 * thickness) + return IntRect(); + return IntRect(scrollbar->x() + trackStart, scrollbar->y(), scrollbar->width() - 2 * bs.width(), thickness); + } + if (scrollbar->height() < 2 * thickness) + return IntRect(); + return IntRect(scrollbar->x(), scrollbar->y() + trackStart, thickness, scrollbar->height() - 2 * bs.height()); +} + +void ScrollbarThemeWx::paintScrollCorner(ScrollView* view, GraphicsContext* context, const IntRect& cornerRect) +{ + // ScrollbarThemeComposite::paintScrollCorner incorrectly assumes that the + // ScrollView is a FrameView (see FramelessScrollView), so we cannot let + // that code run. For FrameView's this is correct since we don't do custom + // scrollbar corner rendering, which ScrollbarThemeComposite supports. + ScrollbarTheme::paintScrollCorner(view, context, cornerRect); +} + +bool ScrollbarThemeWx::paint(Scrollbar* scrollbar, GraphicsContext* context, const IntRect& rect) +{ + wxOrientation orientation = (scrollbar->orientation() == HorizontalScrollbar) ? wxHORIZONTAL : wxVERTICAL; + int flags = 0; + if (scrollbar->client()->isActive()) + flags |= wxCONTROL_FOCUSED; + + if (!scrollbar->enabled()) + flags |= wxCONTROL_DISABLED; + + wxDC* dc = static_cast<wxDC*>(context->platformContext()); + + context->save(); + ScrollView* root = scrollbar->root(); + ASSERT(root); + if (!root) + return false; + + wxWindow* webview = root->hostWindow()->platformPageClient(); + + wxRenderer_DrawScrollbar(webview, *dc, scrollbar->frameRect(), orientation, scrollbar->currentPos(), static_cast<wxScrollbarPart>(scrollbar->pressedPart()), + static_cast<wxScrollbarPart>(scrollbar->hoveredPart()), scrollbar->maximum(), scrollbar->pageStep(), flags); + + context->restore(); + return true; +} + +} + diff --git a/WebCore/platform/wx/ScrollbarThemeWx.h b/WebCore/platform/wx/ScrollbarThemeWx.h new file mode 100644 index 0000000..2b3bff0 --- /dev/null +++ b/WebCore/platform/wx/ScrollbarThemeWx.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2008 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ScrollbarThemeWx_h +#define ScrollbarThemeWx_h + +#include "ScrollbarTheme.h" +#include "ScrollbarThemeComposite.h" + +namespace WebCore { + +class ScrollbarThemeWx : public ScrollbarThemeComposite { +public: + virtual ~ScrollbarThemeWx(); + virtual int scrollbarThickness(ScrollbarControlSize = RegularScrollbar); + virtual bool paint(Scrollbar*, GraphicsContext*, const IntRect&); + + virtual void paintScrollCorner(ScrollView*, GraphicsContext*, const IntRect& cornerRect); + +protected: + virtual bool hasButtons(Scrollbar*) { return true; } + virtual bool hasThumb(Scrollbar*); + + virtual IntSize buttonSize(Scrollbar*); + + virtual IntRect backButtonRect(Scrollbar*, ScrollbarPart, bool painting = false); + virtual IntRect forwardButtonRect(Scrollbar*, ScrollbarPart, bool painting = false); + virtual IntRect trackRect(Scrollbar*, bool painting = false); +}; + +} +#endif diff --git a/WebCore/platform/wx/SearchPopupMenuWx.cpp b/WebCore/platform/wx/SearchPopupMenuWx.cpp new file mode 100644 index 0000000..dbbe339 --- /dev/null +++ b/WebCore/platform/wx/SearchPopupMenuWx.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2009 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "SearchPopupMenu.h" + +#include "NotImplemented.h" + +namespace WebCore { + +SearchPopupMenu::SearchPopupMenu(PopupMenuClient* client) + : PopupMenu(client) +{ + notImplemented(); +} + +void SearchPopupMenu::saveRecentSearches(const AtomicString& name, const Vector<String>& searchItems) +{ + notImplemented(); +} + +void SearchPopupMenu::loadRecentSearches(const AtomicString& name, Vector<String>& searchItems) +{ + notImplemented(); +} + +bool SearchPopupMenu::enabled() +{ + return true; +} + +} + diff --git a/WebCore/platform/wx/SharedBufferWx.cpp b/WebCore/platform/wx/SharedBufferWx.cpp new file mode 100644 index 0000000..a9203ba --- /dev/null +++ b/WebCore/platform/wx/SharedBufferWx.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2009 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "SharedBuffer.h" + +#include "NotImplemented.h" + +namespace WebCore { + +PassRefPtr<SharedBuffer> SharedBuffer::createWithContentsOfFile(const String&) +{ + notImplemented(); + return 0; +} + +} + diff --git a/WebCore/platform/wx/SystemTimeWx.cpp b/WebCore/platform/wx/SystemTimeWx.cpp new file mode 100644 index 0000000..f607cba --- /dev/null +++ b/WebCore/platform/wx/SystemTimeWx.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2009 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "SystemTime.h" + +#include <float.h> + +#include "NotImplemented.h" + +namespace WebCore { + +float userIdleTime() +{ + notImplemented(); + // return an arbitrarily high userIdleTime so that releasing pages from the page cache isn't postponed + return FLT_MAX; +} + +} + diff --git a/WebCore/platform/wx/TemporaryLinkStubs.cpp b/WebCore/platform/wx/TemporaryLinkStubs.cpp index 2403527..5aa6e2c 100644 --- a/WebCore/platform/wx/TemporaryLinkStubs.cpp +++ b/WebCore/platform/wx/TemporaryLinkStubs.cpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD:WebCore/platform/wx/TemporaryLinkStubs.cpp /* * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. * Copyright (C) 2008 Collabora, Ltd. All rights reserved. @@ -178,3 +179,5 @@ PassRefPtr<SharedBuffer> SharedBuffer::createWithContentsOfFile(const String&) { void prefetchDNS(const String& hostname) { notImplemented(); } } +======= +>>>>>>> webkit.org at 49305:WebCore/platform/wx/TemporaryLinkStubs.cpp diff --git a/WebCore/platform/wx/TextBreakIteratorInternalICUWx.cpp b/WebCore/platform/wx/TextBreakIteratorInternalICUWx.cpp new file mode 100644 index 0000000..f840e13 --- /dev/null +++ b/WebCore/platform/wx/TextBreakIteratorInternalICUWx.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2009 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "TextBreakIteratorInternalICU.h" + +namespace WebCore { + +const char* currentSearchLocaleID() +{ + return ""; +} + +const char* currentTextBreakLocaleID() +{ + return "en_us"; +} + +} + diff --git a/WebCore/platform/wx/WidgetWx.cpp b/WebCore/platform/wx/WidgetWx.cpp index bb4fd2a..a384914 100644 --- a/WebCore/platform/wx/WidgetWx.cpp +++ b/WebCore/platform/wx/WidgetWx.cpp @@ -28,6 +28,7 @@ #include "Cursor.h" #include "GraphicsContext.h" #include "IntRect.h" +#include "NotImplemented.h" #include <wx/defs.h> #include <wx/scrolwin.h> @@ -96,4 +97,9 @@ void Widget::paint(GraphicsContext*,const IntRect& r) widget->Update(); } +void Widget::setIsSelected(bool) +{ + notImplemented(); +} + } diff --git a/WebCore/platform/wx/wxcode/gtk/scrollbar_render.cpp b/WebCore/platform/wx/wxcode/gtk/scrollbar_render.cpp new file mode 100644 index 0000000..f74b076 --- /dev/null +++ b/WebCore/platform/wx/wxcode/gtk/scrollbar_render.cpp @@ -0,0 +1,166 @@ +/* + * Copyright (C) 2009 Kevin Ollivier All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" + +#include "scrollbar_render.h" + +#include <wx/defs.h> +#include <wx/dc.h> +#include <wx/dcgraph.h> +#include <wx/renderer.h> +#include <wx/settings.h> +#include <wx/window.h> + +#include <gtk/gtk.h> + +#if wxCHECK_VERSION(2, 9, 0) + #include <wx/gtk/dc.h> +#else + #include "wx/gtk/win_gtk.h" +#endif + +int wxStyleForPart(wxScrollbarPart part, wxScrollbarPart focusPart, wxScrollbarPart hoverPart, int flags) +{ + int style = 0; + if (flags == wxCONTROL_DISABLED) + style = wxCONTROL_DISABLED; + else if (part == focusPart) + style = wxCONTROL_PRESSED; + else if (part == hoverPart) + style = wxCONTROL_CURRENT; + + return style; +} + +GtkWidget* GetButtonWidget() +{ + static GtkWidget *s_button = NULL; + static GtkWidget *s_window = NULL; + + if ( !s_button ) + { + s_window = gtk_window_new( GTK_WINDOW_POPUP ); + gtk_widget_realize( s_window ); + s_button = gtk_button_new(); + gtk_container_add( GTK_CONTAINER(s_window), s_button ); + gtk_widget_realize( s_button ); + } + + return s_button; +} + + +GdkWindow* wxGetGdkWindowForDC(wxWindow* win, wxDC& dc) +{ + GdkWindow* gdk_window = NULL; +#if wxCHECK_VERSION(2, 9, 0) + if ( dc.IsKindOf( CLASSINFO(wxGCDC) ) ) + gdk_window = win->GTKGetDrawingWindow(); + else + { + wxGTKDCImpl *impl = wxDynamicCast(dc.GetImpl(), wxGTKDCImpl); + if ( impl ) + gdk_window = impl->GetGDKWindow(); + } +#else // wx < 2.9 + // The way to get a GdkWindow* from a wxWindow is to use + // GTK_PIZZA(win->m_wxwindow)->bin_window, but this approach + // won't work when drawing to a wxMemoryDC as it has its own + // GdkWindow* for its bitmap. wxWindowDC's GetGDKWindow() was + // designed to create a solution for all DCs, but we can't + // implement it with wxGCDC since it doesn't retain its wxWindow. + // So, to work around this, we use GetGDKWindow whenever possible + // and use bin_window for wxGCDC. +#if wxUSE_GRAPHICS_CONTEXT + if ( dc.IsKindOf( CLASSINFO(wxGCDC) ) ) + gdk_window = GTK_PIZZA(win->m_wxwindow)->bin_window; + else +#endif + gdk_window = dc.GetGDKWindow(); + wxASSERT_MSG( gdk_window, + wxT("cannot use wxRendererNative on wxDC of this type") ); +#endif // wx 2.9/2.8 + + return gdk_window; +} + +void wxRenderer_DrawScrollbar(wxWindow* window, wxDC& dc, const wxRect& rect, wxOrientation orient, + int current, wxScrollbarPart focusPart, wxScrollbarPart hoverPart, int max, int step, int flags) +{ + bool horiz = orient == wxHORIZONTAL; + wxColour scrollbar_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_SCROLLBAR); + dc.SetBrush(wxBrush(scrollbar_colour)); + dc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW))); + dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); + + wxRendererNative& renderer = wxRendererNative::Get(); + int x = rect.x; + int y = rect.y; + + int buttonLength = 16; + + renderer.DrawPushButton(window, dc, wxRect(x,y,buttonLength,buttonLength), wxStyleForPart(wxSCROLLPART_BACKBTNSTART, focusPart, hoverPart, flags)); + + GtkWidget* button = GetButtonWidget(); + GdkWindow* gdk_window = wxGetGdkWindowForDC(window, dc); + + GtkArrowType arrowType = GTK_ARROW_UP; + if (horiz) + arrowType = GTK_ARROW_LEFT; + + gtk_paint_arrow( button->style, gdk_window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, button, "arrow", arrowType, false, x + 4, y + 4, 8, 8); + + wxRect buttonRect = rect; + int physicalLength = horiz ? rect.width : rect.height; + physicalLength -= buttonLength*2; + int thumbStart = 0; + int thumbLength = 0; + calcThumbStartAndLength(physicalLength, max + step, current, step, &thumbStart, &thumbLength); + + if (horiz) { + buttonRect.x = thumbStart + buttonLength; + buttonRect.width = thumbLength; + } else { + buttonRect.y = thumbStart + buttonLength; + buttonRect.height = thumbLength; + } + + renderer.DrawPushButton(window, dc, buttonRect, wxStyleForPart(wxSCROLLPART_THUMB, focusPart, hoverPart, flags)); + + if (horiz) + x += rect.width - buttonLength; + else + y += rect.height - buttonLength; + + renderer.DrawPushButton(window, dc, wxRect(x,y,buttonLength,buttonLength), wxStyleForPart(wxSCROLLPART_FWDBTNEND, focusPart, hoverPart, flags)); + + if (horiz) + arrowType = GTK_ARROW_RIGHT; + else + arrowType = GTK_ARROW_DOWN; + + gtk_paint_arrow( button->style, gdk_window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, button, "arrow", arrowType, false, x + 4, y + 4, 8, 8); +} diff --git a/WebCore/platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp b/WebCore/platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp index e5c60d6..c4c4d48 100644 --- a/WebCore/platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp +++ b/WebCore/platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp @@ -63,7 +63,7 @@ void drawTextWithSpacing(GraphicsContext* graphicsContext, const SimpleFontData* CGFontRef cgFont; #ifdef wxOSX_USE_CORE_TEXT && wxOSX_USE_CORE_TEXT - cgFont = CTFontCopyGraphicsFont((CTFontRef)font->OSXGetCTFont(), NULL); + cgFont = CTFontCopyGraphicsFont((CTFontRef)wxfont->OSXGetCTFont(), NULL); #else ATSFontRef fontRef; diff --git a/WebCore/platform/wx/wxcode/mac/carbon/scrollbar_render.cpp b/WebCore/platform/wx/wxcode/mac/carbon/scrollbar_render.cpp new file mode 100644 index 0000000..5169601 --- /dev/null +++ b/WebCore/platform/wx/wxcode/mac/carbon/scrollbar_render.cpp @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2009 Kevin Ollivier All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include "config.h" + +#include "scrollbar_render.h" + +#include <wx/defs.h> +#include <wx/dc.h> +#include <wx/dcgraph.h> +#include <wx/renderer.h> + +#include <Carbon/Carbon.h> + +static int wxScrollbarPartToHIPressedState(wxScrollbarPart part) +{ + switch (part) { + case wxSCROLLPART_BACKBTNSTART: + return kThemeTopOutsideArrowPressed; + case wxSCROLLPART_BACKBTNEND: + return kThemeTopOutsideArrowPressed; // This does not make much sense. For some reason the outside constant is required. + case wxSCROLLPART_FWDBTNSTART: + return kThemeTopInsideArrowPressed; + case wxSCROLLPART_FWDBTNEND: + return kThemeBottomOutsideArrowPressed; + case wxSCROLLPART_THUMB: + return kThemeThumbPressed; + default: + return 0; + } +} + +void wxRenderer_DrawScrollbar(wxWindow* WXUNUSED(window), wxDC& dc, + const wxRect& rect, wxOrientation orient, int current, + wxScrollbarPart focusPart, wxScrollbarPart hoverPart, int max, int step, int flags) +{ + const wxCoord x = rect.x; + const wxCoord y = rect.y; + const wxCoord w = rect.width; + const wxCoord h = rect.height; + + dc.SetBrush( *wxWHITE_BRUSH ); + dc.SetPen( *wxTRANSPARENT_PEN ); + dc.DrawRectangle(rect); + + dc.SetBrush( *wxTRANSPARENT_BRUSH ); + + HIRect hiRect = CGRectMake( x, y, w, h ); + + CGContextRef cgContext = NULL; + wxGraphicsContext* gc = NULL; +#if wxCHECK_VERSION(2,9,0) + wxGCDCImpl *impl = dynamic_cast<wxGCDCImpl*> (dc.GetImpl()); + if (impl) + gc = impl->GetGraphicsContext(); +#else + gc = dc.GetGraphicsContext(); +#endif + if (gc) + cgContext = (CGContextRef) gc->GetNativeContext(); + + if (cgContext) + { + HIThemeTrackDrawInfo trackInfo; + trackInfo.version = 0; + trackInfo.kind = kThemeMediumScrollBar; + trackInfo.bounds = hiRect; + trackInfo.min = 0; + trackInfo.max = max; + trackInfo.value = current; + trackInfo.trackInfo.scrollbar.viewsize = step; + trackInfo.attributes = 0; + if (orient == wxHORIZONTAL) + trackInfo.attributes |= kThemeTrackHorizontal; + trackInfo.enableState = (flags & wxCONTROL_FOCUSED) ? kThemeTrackActive : kThemeTrackInactive; + trackInfo.trackInfo.scrollbar.pressState = wxScrollbarPartToHIPressedState(focusPart); + trackInfo.attributes |= kThemeTrackShowThumb; + + if (flags & wxCONTROL_DISABLED) + trackInfo.enableState = kThemeTrackDisabled; + + HIThemeDrawTrack(&trackInfo, 0, cgContext, kHIThemeOrientationNormal); + } +} diff --git a/WebCore/platform/wx/wxcode/scrollbar_render.h b/WebCore/platform/wx/wxcode/scrollbar_render.h new file mode 100644 index 0000000..7a0ba1c --- /dev/null +++ b/WebCore/platform/wx/wxcode/scrollbar_render.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2009 Kevin Ollivier All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef scrollbar_render_h +#define scrollbar_render_h + +#include <wx/defs.h> +#include <wx/dc.h> +#include <wx/renderer.h> + +enum wxScrollbarPart { + wxSCROLLPART_NONE = 0, + wxSCROLLPART_BACKBTNSTART = 1, + wxSCROLLPART_FWDBTNSTART = 1 << 1, + wxSCROLLPART_BACKTRACK = 1 << 2, + wxSCROLLPART_THUMB = 1 << 3, + wxSCROLLPART_FWDTRACK = 1 << 4, + wxSCROLLPART_BACKBTNEND = 1 << 5, + wxSCROLLPART_FWDBTNEND = 1 << 6, + wxSCROLLPART_SCROLLBARBG = 1 << 7, + wxSCROLLPART_TRACKBG = 1 << 8, + wxSCROLLPART_ALL = 0xffffffff, +}; + +void wxRenderer_DrawScrollbar(wxWindow* window, wxDC& dc, + const wxRect& rect, + wxOrientation orientation, + int current, wxScrollbarPart focusPart, wxScrollbarPart hoverPart, + int max, int step, int flags=0); + +inline void calcThumbStartAndLength(int physicalLength, int virtualLength, int current, + int step, int *thumbStart, int *thumbLength) +{ + float proportion = (float)physicalLength / virtualLength; + float scale = (float)virtualLength / physicalLength; + int thumbSize = proportion * physicalLength; + int currentPos = current / scale; + + if (thumbStart) + *thumbStart = currentPos; + + if (thumbLength) + *thumbLength = thumbSize; +} +#endif diff --git a/WebCore/platform/wx/wxcode/win/non-kerned-drawing.cpp b/WebCore/platform/wx/wxcode/win/non-kerned-drawing.cpp index d2513d7..72fcc54 100644 --- a/WebCore/platform/wx/wxcode/win/non-kerned-drawing.cpp +++ b/WebCore/platform/wx/wxcode/win/non-kerned-drawing.cpp @@ -79,13 +79,24 @@ void drawTextWithSpacing(GraphicsContext* graphicsContext, const SimpleFontData* // get the native HDC handle to draw using native APIs HDC hdc = 0; + float y = point.y() - font->ascent(); + float x = point.x(); + #if USE(WXGC) + // when going from GdiPlus -> Gdi, any GdiPlus transformations are lost + // so we need to alter the coordinates to reflect their transformed point. + double xtrans = 0; + double ytrans = 0; + wxGraphicsContext* gc = dc->GetGraphicsContext(); + gc->GetTransform().TransformPoint(&xtrans, &ytrans); Gdiplus::Graphics* g; if (gc) { g = (Gdiplus::Graphics*)gc->GetNativeContext(); hdc = g->GetHDC(); } + x += (int)xtrans; + y += (int)ytrans; #else hdc = static_cast<HDC>(dc->GetHDC()); #endif @@ -95,9 +106,6 @@ void drawTextWithSpacing(GraphicsContext* graphicsContext, const SimpleFontData* const GlyphBufferGlyph* glyphs = glyphBuffer.glyphs(from); const GlyphBufferAdvance* advances = glyphBuffer.advances(from); - float y = point.y() - font->ascent(); - float x = point.x(); - int* spacing = new int[numGlyphs - from]; for (unsigned i = 0; i < numGlyphs; ++i) spacing[i] = advances[i].width(); diff --git a/WebCore/platform/wx/wxcode/win/scrollbar_render.cpp b/WebCore/platform/wx/wxcode/win/scrollbar_render.cpp new file mode 100644 index 0000000..4d6bbc0 --- /dev/null +++ b/WebCore/platform/wx/wxcode/win/scrollbar_render.cpp @@ -0,0 +1,195 @@ +/* + * Copyright (C) 2009 Kevin Ollivier All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" + +#include "scrollbar_render.h" + +#include <wx/defs.h> + +#include <wx/dc.h> +#include <wx/renderer.h> +#include <wx/window.h> + +#include <wx/msw/private.h> +#include <wx/msw/uxtheme.h> + +// constants +#define SP_BUTTON 1 +#define SP_THUMBHOR 2 +#define SP_THUMBVERT 3 +#define SP_TRACKENDHOR 4 +#define SP_TRACKENDVERT 7 +#define SP_GRIPPERHOR 8 +#define SP_GRIPPERVERT 9 + +#define TS_NORMAL 1 +#define TS_HOVER 2 +#define TS_ACTIVE 3 +#define TS_DISABLED 4 + +#define TS_UP_BUTTON 0 +#define TS_DOWN_BUTTON 4 +#define TS_LEFT_BUTTON 8 +#define TS_RIGHT_BUTTON 12 + +#if wxUSE_GRAPHICS_CONTEXT +// TODO remove this dependency (gdiplus needs the macros) +// we need to undef because the macros are being defined in WebCorePrefix.h +// but GdiPlus.h is not accepting them +#undef max +#define max(a,b) (((a) > (b)) ? (a) : (b)) + +#undef min +#define min(a,b) (((a) < (b)) ? (a) : (b)) + +#include <wx/dcgraph.h> +#include "gdiplus.h" +using namespace Gdiplus; +#endif // wxUSE_GRAPHICS_CONTEXT + +class GraphicsHDC +{ +public: + GraphicsHDC(wxDC* dc) + { +#if wxUSE_GRAPHICS_CONTEXT + m_graphics = NULL; + wxGCDC* gcdc = wxDynamicCast(dc, wxGCDC); + if (gcdc) { + m_graphics = (Graphics*)gcdc->GetGraphicsContext()->GetNativeContext(); + m_hdc = m_graphics->GetHDC(); + } + else +#endif + m_hdc = GetHdcOf(*dc); + } + + ~GraphicsHDC() + { +#if wxUSE_GRAPHICS_CONTEXT + if (m_graphics) + m_graphics->ReleaseHDC(m_hdc); +#endif + } + + operator HDC() const { return m_hdc; } + +private: + HDC m_hdc; +#if wxUSE_GRAPHICS_CONTEXT + Graphics* m_graphics; +#endif +}; + +int getTSStateForPart(wxScrollbarPart part, wxScrollbarPart focusPart, wxScrollbarPart hoverPart, int flags = 0) +{ + int xpState = TS_NORMAL; + if (flags & wxCONTROL_DISABLED) + xpState = TS_DISABLED; + else if (part == focusPart) + xpState = TS_ACTIVE; + else if (part == hoverPart) + xpState = TS_HOVER; + + return xpState; +} + +void wxRenderer_DrawScrollbar(wxWindow* window, wxDC& dc, + const wxRect& rect, wxOrientation orient, int current, wxScrollbarPart focusPart, wxScrollbarPart hoverPart, int max, int step, int flags) +{ + wxUxThemeEngine *engine = wxUxThemeEngine::Get(); + HTHEME hTheme = (HTHEME)engine->OpenThemeData(0, L"SCROLLBAR"); + + bool horiz = orient == wxHORIZONTAL; + int part = 0; + if (horiz) + part = SP_TRACKENDHOR; + else + part = SP_TRACKENDVERT; + + int xpState = TS_NORMAL; + RECT r; + wxCopyRectToRECT(rect, r); + + // Unlike Mac, on MSW you draw the scrollbar piece by piece. + // so we draw the track first, then the buttons + if (hTheme) + { + engine->DrawThemeBackground(hTheme, GraphicsHDC(&dc), part, xpState, &r, 0); + + int buttonSize = 16; + + part = SP_BUTTON; + xpState = getTSStateForPart(wxSCROLLPART_BACKBTNSTART, focusPart, hoverPart, flags); + xpState += horiz ? TS_LEFT_BUTTON : TS_UP_BUTTON; + RECT buttonRect = r; + buttonRect.bottom = buttonRect.top + buttonSize; + buttonRect.right = buttonRect.left + buttonSize; + engine->DrawThemeBackground(hTheme, GraphicsHDC(&dc), part, xpState, &buttonRect, 0); + + xpState = getTSStateForPart(wxSCROLLPART_FWDBTNEND, focusPart, hoverPart, flags); + xpState += horiz ? TS_RIGHT_BUTTON : TS_DOWN_BUTTON; + buttonRect = r; + buttonRect.top = buttonRect.bottom - buttonSize; + buttonRect.left = buttonRect.right - buttonSize; + engine->DrawThemeBackground(hTheme, GraphicsHDC(&dc), part, xpState, &buttonRect, 0); + + part = horiz ? SP_THUMBHOR : SP_THUMBVERT; + + int physicalLength = horiz ? rect.width : rect.height; + physicalLength -= buttonSize*2; + int thumbStart = 0; + int thumbLength = 0; + calcThumbStartAndLength(physicalLength, max + step, + current, step, &thumbStart, &thumbLength); + buttonRect = r; + if (horiz) { + buttonRect.left = thumbStart + buttonSize; + buttonRect.right = buttonRect.left + thumbLength; + } else { + buttonRect.top = thumbStart + buttonSize; + buttonRect.bottom = buttonRect.top + thumbLength; + } + + xpState = getTSStateForPart(wxSCROLLPART_THUMB, focusPart, hoverPart, flags); + engine->DrawThemeBackground(hTheme, GraphicsHDC(&dc), part, xpState, &buttonRect, 0); + + // draw the gripper + int thickness = ::GetSystemMetrics(SM_CXVSCROLL) / 2; + + buttonRect.left += ((buttonRect.right - buttonRect.left) - thickness) / 2; + buttonRect.top += ((buttonRect.bottom - buttonRect.top) - thickness) / 2; + buttonRect.right = buttonRect.left + thickness; + buttonRect.bottom = buttonRect.top + thickness; + + if (horiz) + part = SP_GRIPPERHOR; + else + part = SP_GRIPPERVERT; + + engine->DrawThemeBackground(hTheme, GraphicsHDC(&dc), part, xpState, &buttonRect, 0); + } +} |