diff options
Diffstat (limited to 'WebKit/chromium/src/ChromiumBridge.cpp')
-rw-r--r-- | WebKit/chromium/src/ChromiumBridge.cpp | 70 |
1 files changed, 63 insertions, 7 deletions
diff --git a/WebKit/chromium/src/ChromiumBridge.cpp b/WebKit/chromium/src/ChromiumBridge.cpp index b906575..1af32cf 100644 --- a/WebKit/chromium/src/ChromiumBridge.cpp +++ b/WebKit/chromium/src/ChromiumBridge.cpp @@ -63,10 +63,11 @@ #if OS(WINDOWS) #include "WebRect.h" -#include "WebThemeEngine.h" +#include "win/WebThemeEngine.h" #endif #if OS(LINUX) || OS(FREEBSD) +#include "linux/WebThemeEngine.h" #include "WebFontInfo.h" #include "WebFontRenderStyle.h" #endif @@ -85,7 +86,11 @@ #include "PlatformContextSkia.h" #include "PluginData.h" #include "SharedBuffer.h" + +#if !ENABLE(CLIENT_BASED_GEOLOCATION) #include "WebGeolocationServiceBridgeImpl.h" +#endif + #include "Worker.h" #include "WorkerContextProxy.h" #include <wtf/Assertions.h> @@ -464,12 +469,14 @@ bool ChromiumBridge::loadFont(NSFont* srcFont, ATSFontContainerRef* out) } #endif +#if !ENABLE(CLIENT_BASED_GEOLOCATION) // Geolocation ---------------------------------------------------------------- GeolocationServiceBridge* ChromiumBridge::createGeolocationServiceBridge(GeolocationServiceChromium* geolocationServiceChromium) { return createGeolocationServiceBridgeImpl(geolocationServiceChromium); } +#endif // Databases ------------------------------------------------------------------ @@ -584,14 +591,9 @@ bool ChromiumBridge::plugins(bool refresh, Vector<PluginInfo>* results) NPObject* ChromiumBridge::pluginScriptableObject(Widget* widget) { - if (!widget) + if (!widget || !widget->isPluginContainer()) return 0; - ASSERT(!widget->isFrameView()); - - // NOTE: We have to trust that the widget passed to us here is a - // WebPluginContainerImpl. There isn't a way to dynamically verify it, - // since the derived class (Widget) has no identifier. return static_cast<WebPluginContainerImpl*>(widget)->scriptableObject(); } @@ -739,6 +741,60 @@ void ChromiumBridge::paintProgressBar( gc->platformContext()->canvas(), barRect, valueRect, determinate, animatedSeconds); } +#elif OS(LINUX) + +static WebThemeEngine::Part WebThemePart(ChromiumBridge::ThemePart part) +{ + switch (part) { + case ChromiumBridge::PartScrollbarDownArrow: return WebThemeEngine::PartScrollbarDownArrow; + case ChromiumBridge::PartScrollbarLeftArrow: return WebThemeEngine::PartScrollbarLeftArrow; + case ChromiumBridge::PartScrollbarRightArrow: return WebThemeEngine::PartScrollbarRightArrow; + case ChromiumBridge::PartScrollbarUpArrow: return WebThemeEngine::PartScrollbarUpArrow; + case ChromiumBridge::PartScrollbarHorizontalThumb: return WebThemeEngine::PartScrollbarHorizontalThumb; + case ChromiumBridge::PartScrollbarVerticalThumb: return WebThemeEngine::PartScrollbarVerticalThumb; + case ChromiumBridge::PartScrollbarHoriztonalTrack: return WebThemeEngine::PartScrollbarHoriztonalTrack; + case ChromiumBridge::PartScrollbarVerticalTrack: return WebThemeEngine::PartScrollbarVerticalTrack; + } + ASSERT_NOT_REACHED(); + return WebThemeEngine::PartScrollbarDownArrow; +} + +static WebThemeEngine::State WebThemeState(ChromiumBridge::ThemePaintState state) +{ + switch (state) { + case ChromiumBridge::StateDisabled: return WebThemeEngine::StateDisabled; + case ChromiumBridge::StateHover: return WebThemeEngine::StateHover; + case ChromiumBridge::StateNormal: return WebThemeEngine::StateNormal; + case ChromiumBridge::StatePressed: return WebThemeEngine::StatePressed; + } + ASSERT_NOT_REACHED(); + return WebThemeEngine::StateDisabled; +} + +static void GetWebThemeExtraParams(ChromiumBridge::ThemePart part, ChromiumBridge::ThemePaintState state, const ChromiumBridge::ThemePaintExtraParams* extraParams, WebThemeEngine::ExtraParams* webThemeExtraParams) +{ + if (part == ChromiumBridge::PartScrollbarHoriztonalTrack || part == ChromiumBridge::PartScrollbarVerticalTrack) { + webThemeExtraParams->scrollbarTrack.trackX = extraParams->scrollbarTrack.trackX; + webThemeExtraParams->scrollbarTrack.trackY = extraParams->scrollbarTrack.trackY; + webThemeExtraParams->scrollbarTrack.trackWidth = extraParams->scrollbarTrack.trackWidth; + webThemeExtraParams->scrollbarTrack.trackHeight = extraParams->scrollbarTrack.trackHeight; + } +} + +IntSize ChromiumBridge::getThemePartSize(ThemePart part) +{ + return webKitClient()->themeEngine()->getSize(WebThemePart(part)); +} + +void ChromiumBridge::paintThemePart( + GraphicsContext* gc, ThemePart part, ThemePaintState state, const IntRect& rect, const ThemePaintExtraParams* extraParams) +{ + WebThemeEngine::ExtraParams webThemeExtraParams; + GetWebThemeExtraParams(part, state, extraParams, &webThemeExtraParams); + webKitClient()->themeEngine()->paint( + gc->platformContext()->canvas(), WebThemePart(part), WebThemeState(state), rect, &webThemeExtraParams); +} + #endif // Trace Event ---------------------------------------------------------------- |