[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-1049-g2e11a8e

mihaip at chromium.org mihaip at chromium.org
Fri Jan 21 14:49:14 UTC 2011


The following commit has been merged in the debian/experimental branch:
commit 593f77205860183f547ea8758b025afe2e99a7de
Author: mihaip at chromium.org <mihaip at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Dec 31 04:02:37 2010 +0000

    2010-12-30  Mihai Parparita  <mihaip at chromium.org>
    
            Reviewed by Kent Tamura.
    
            [Chromium] Add WebThemeEngineDRTMac so that Chromium DRT scrollbar rendering can match the Mac port's
            https://bugs.webkit.org/show_bug.cgi?id=51728
    
            Add implementation of the Mac WebThemeEngine that uses an NSScroller
            to render top-level scrollbars. This makes them match the Mac port's
            use of an NSScrollView, which means that we'll be able to share more
            pixel baselines.
    
            The new rendering code will not be activated until the
            USE_WEB_THEME_ENGINE_TO_PAINT_THUMB #define is fliped in
            ScrollbarThemeChromiumMac.
    
            * DumpRenderTree/DumpRenderTree.gypi:
            * DumpRenderTree/chromium/TestShellMac.mm:
            (platformInit):
            * DumpRenderTree/chromium/WebThemeEngineDRTMac.h: Added.
            * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm: Added.
            (+[FakeActiveWindow alwaysActiveWindow]):
            (+[FakeActiveWindow alwaysInactiveWindow]):
            (-[FakeActiveWindow initWithActiveControls:]):
            (-[FakeActiveWindow _hasActiveControls]):
            (WebThemeEngineDRTMac::paintScrollbarThumb):
            (stateToHIEnableState):
            (WebThemeEngineDRTMac::paintHIThemeScrollbarThumb):
            (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):
    2010-12-30  Mihai Parparita  <mihaip at chromium.org>
    
            Reviewed by Kent Tamura.
    
            [Chromium] Add WebThemeEngineDRTMac so that Chromium DRT scrollbar rendering can match the Mac port's
            https://bugs.webkit.org/show_bug.cgi?id=51728
    
            Roll DEPS to pick up WebThemeEngine changes.
    
            * DEPS:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@74821 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 4b017be..7cbafdc 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,33 @@
+2010-12-30  Mihai Parparita  <mihaip at chromium.org>
+
+        Reviewed by Kent Tamura.
+
+        [Chromium] Add WebThemeEngineDRTMac so that Chromium DRT scrollbar rendering can match the Mac port's
+        https://bugs.webkit.org/show_bug.cgi?id=51728
+        
+        Add implementation of the Mac WebThemeEngine that uses an NSScroller
+        to render top-level scrollbars. This makes them match the Mac port's
+        use of an NSScrollView, which means that we'll be able to share more
+        pixel baselines.
+        
+        The new rendering code will not be activated until the 
+        USE_WEB_THEME_ENGINE_TO_PAINT_THUMB #define is fliped in
+        ScrollbarThemeChromiumMac.
+
+        * DumpRenderTree/DumpRenderTree.gypi:
+        * DumpRenderTree/chromium/TestShellMac.mm:
+        (platformInit):
+        * DumpRenderTree/chromium/WebThemeEngineDRTMac.h: Added.
+        * DumpRenderTree/chromium/WebThemeEngineDRTMac.mm: Added.
+        (+[FakeActiveWindow alwaysActiveWindow]):
+        (+[FakeActiveWindow alwaysInactiveWindow]):
+        (-[FakeActiveWindow initWithActiveControls:]):
+        (-[FakeActiveWindow _hasActiveControls]):
+        (WebThemeEngineDRTMac::paintScrollbarThumb):
+        (stateToHIEnableState):
+        (WebThemeEngineDRTMac::paintHIThemeScrollbarThumb):
+        (WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb):
+
 2010-12-30  Konstantin Tokarev  <annulen at yandex.ru>
 
         Reviewed by David Kilzer.
diff --git a/Tools/DumpRenderTree/DumpRenderTree.gypi b/Tools/DumpRenderTree/DumpRenderTree.gypi
index 04caee7..b7de580 100644
--- a/Tools/DumpRenderTree/DumpRenderTree.gypi
+++ b/Tools/DumpRenderTree/DumpRenderTree.gypi
@@ -67,6 +67,12 @@
                     'chromium/WebThemeEngineDRTWin.h',
                 ],
             }],
+            ['OS=="mac"', {
+                'drt_files': [
+                    'chromium/WebThemeEngineDRTMac.mm',
+                    'chromium/WebThemeEngineDRTMac.h',
+                ],
+            }],            
         ],
     }
 }
diff --git a/Tools/DumpRenderTree/chromium/TestShellMac.mm b/Tools/DumpRenderTree/chromium/TestShellMac.mm
index 53ede56..d79a8c8 100644
--- a/Tools/DumpRenderTree/chromium/TestShellMac.mm
+++ b/Tools/DumpRenderTree/chromium/TestShellMac.mm
@@ -31,9 +31,12 @@
 #include "config.h"
 
 #include "TestShell.h"
+#include "WebThemeEngineDRTMac.h"
 #include "webkit/support/webkit_support.h"
 #import <AppKit/AppKit.h>
 
+static WebThemeEngineDRTMac themeEngine;
+
 // A class to be the target/selector of the "watchdog" thread that ensures
 // pages timeout if they take too long and tells the test harness via stdout.
 @interface WatchDogTarget : NSObject {
@@ -126,6 +129,7 @@ void TestShell::waitTestFinished()
 
 void platformInit(int*, char***)
 {
+    webkit_support::SetThemeEngine(&themeEngine);
 }
 
 void openStartupDialog()
diff --git a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.h b/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.h
new file mode 100644
index 0000000..a59e207
--- /dev/null
+++ b/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2010 Google 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.
+ */
+
+// This implements the WebThemeEngine API in such a way that we match the Mac
+// port rendering more than usual Chromium path, thus allowing us to share
+// more pixel baselines.
+
+#ifndef WebThemeEngineDRTMac_h
+#define WebThemeEngineDRTMac_h
+
+#include "third_party/WebKit/WebKit/chromium/public/mac/WebThemeEngine.h"
+
+class WebThemeEngineDRTMac : public WebKit::WebThemeEngine {
+public:
+    virtual void paintScrollbarThumb(
+        WebKit::WebCanvas*,
+        WebKit::WebThemeEngine::State,
+        WebKit::WebThemeEngine::Size,
+        const WebKit::WebRect&,
+        const WebKit::WebThemeEngine::ScrollbarInfo&);
+private:
+    virtual void paintHIThemeScrollbarThumb(
+        WebKit::WebCanvas*,
+        WebKit::WebThemeEngine::State,
+        WebKit::WebThemeEngine::Size,
+        const WebKit::WebRect&,
+        const WebKit::WebThemeEngine::ScrollbarInfo&);
+    virtual void paintNSScrollerScrollbarThumb(
+        WebKit::WebCanvas*,
+        WebKit::WebThemeEngine::State,
+        WebKit::WebThemeEngine::Size,
+        const WebKit::WebRect&,
+        const WebKit::WebThemeEngine::ScrollbarInfo&);
+};
+
+#endif // WebThemeEngineDRTMac_h
diff --git a/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.mm b/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.mm
new file mode 100644
index 0000000..6333a37
--- /dev/null
+++ b/Tools/DumpRenderTree/chromium/WebThemeEngineDRTMac.mm
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2010 Google 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:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * 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.
+ *     * Neither the name of Google Inc. 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
+ * OWNER 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 "WebThemeEngineDRTMac.h"
+
+#include "third_party/WebKit/WebKit/chromium/public/WebCanvas.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
+#import <AppKit/NSAffineTransform.h>
+#import <AppKit/NSGraphicsContext.h>
+#import <AppKit/NSScroller.h>
+#import <AppKit/NSWindow.h>
+#include <Carbon/Carbon.h>
+
+using WebKit::WebCanvas;
+using WebKit::WebRect;
+using WebKit::WebThemeEngine;
+
+// We can't directly tell the NSScroller to draw itself as active or inactive,
+// instead we have to make it a child of an (in)active window. This class lets
+// us fake that parent window.
+ at interface FakeActiveWindow : NSWindow {
+ at private
+    BOOL hasActiveControls;
+}
++ (NSWindow*)alwaysActiveWindow;
++ (NSWindow*)alwaysInactiveWindow;
+- (id)initWithActiveControls:(BOOL)_hasActiveControls;
+- (BOOL)_hasActiveControls;
+ at end
+
+ at implementation FakeActiveWindow
+
+static NSWindow* alwaysActiveWindow = nil;
+static NSWindow* alwaysInactiveWindow = nil;
+
++ (NSWindow*)alwaysActiveWindow
+{
+    if (alwaysActiveWindow == nil)
+        alwaysActiveWindow = [[self alloc] initWithActiveControls:YES];
+    return alwaysActiveWindow;
+}
+
++ (NSWindow*)alwaysInactiveWindow
+{
+    if (alwaysInactiveWindow == nil)
+        alwaysInactiveWindow = [[self alloc] initWithActiveControls:NO];
+    return alwaysInactiveWindow;
+}
+
+- (id)initWithActiveControls:(BOOL)_hasActiveControls
+{
+    self = [super init];
+    hasActiveControls = _hasActiveControls;
+    return self;
+}
+
+- (BOOL)_hasActiveControls
+{
+    return hasActiveControls;
+}
+
+ at end
+
+void WebThemeEngineDRTMac::paintScrollbarThumb(
+    WebCanvas* canvas,
+    WebThemeEngine::State state,
+    WebThemeEngine::Size size,
+    const WebRect& rect,
+    const WebThemeEngine::ScrollbarInfo& scrollbarInfo)
+{
+    // To match the Mac port, we still use HITheme for inner scrollbars.
+    if (scrollbarInfo.parent == WebThemeEngine::ScrollbarParentRenderLayer)
+        paintHIThemeScrollbarThumb(canvas, state, size, rect, scrollbarInfo);
+    else
+        paintNSScrollerScrollbarThumb(canvas, state, size, rect, scrollbarInfo);
+}
+
+static ThemeTrackEnableState stateToHIEnableState(WebThemeEngine::State state)
+{
+    switch (state) {
+    case WebThemeEngine::StateDisabled:
+        return kThemeTrackDisabled;
+    case WebThemeEngine::StateInactive:
+        return kThemeTrackInactive;
+    default:
+        return kThemeTrackActive;
+    }
+}
+
+// Duplicated from webkit/glue/webthemeengine_impl_mac.cc in the downstream
+// Chromium WebThemeEngine implementation.
+void WebThemeEngineDRTMac::paintHIThemeScrollbarThumb(
+    WebCanvas* canvas,
+    WebThemeEngine::State state,
+    WebThemeEngine::Size size,
+    const WebRect& rect,
+    const WebThemeEngine::ScrollbarInfo& scrollbarInfo)
+{
+    HIThemeTrackDrawInfo trackInfo;
+    trackInfo.version = 0;
+    trackInfo.kind = size == WebThemeEngine::SizeRegular ? kThemeMediumScrollBar : kThemeSmallScrollBar;
+    trackInfo.bounds = CGRectMake(rect.x, rect.y, rect.width, rect.height);
+    trackInfo.min = 0;
+    trackInfo.max = scrollbarInfo.maxValue;
+    trackInfo.value = scrollbarInfo.currentValue;
+    trackInfo.trackInfo.scrollbar.viewsize = scrollbarInfo.visibleSize;
+    trackInfo.attributes = 0;
+    if (scrollbarInfo.orientation == WebThemeEngine::ScrollbarOrientationHorizontal)
+        trackInfo.attributes |= kThemeTrackHorizontal;
+
+    trackInfo.enableState = stateToHIEnableState(state);
+
+    trackInfo.trackInfo.scrollbar.pressState =
+        state == WebThemeEngine::StatePressed ? kThemeThumbPressed : 0;
+    trackInfo.attributes |= (kThemeTrackShowThumb | kThemeTrackHideTrack);
+    HIThemeDrawTrack(&trackInfo, 0, canvas, kHIThemeOrientationNormal);
+}
+
+void WebThemeEngineDRTMac::paintNSScrollerScrollbarThumb(
+    WebCanvas* canvas,
+    WebThemeEngine::State state,
+    WebThemeEngine::Size size,
+    const WebRect& rect,
+    const WebThemeEngine::ScrollbarInfo& scrollbarInfo)
+{
+    NSScroller* scroller = [[NSScroller alloc] initWithFrame:NSMakeRect(rect.x, rect.y, rect.width, rect.height)];
+    [scroller setEnabled:state != WebThemeEngine::StateDisabled];
+    if (state == WebThemeEngine::StateInactive)
+        [[[FakeActiveWindow alwaysInactiveWindow] contentView] addSubview:scroller];
+    else
+        [[[FakeActiveWindow alwaysActiveWindow] contentView] addSubview:scroller];
+
+    [scroller setControlSize:size == WebThemeEngine::SizeRegular ? NSRegularControlSize : NSSmallControlSize];
+
+    double value = double(scrollbarInfo.currentValue) / double(scrollbarInfo.maxValue);
+    [scroller setDoubleValue: value];
+
+    float knobProportion = float(scrollbarInfo.visibleSize) / float(scrollbarInfo.totalSize);
+    [scroller setKnobProportion: knobProportion];
+
+    NSGraphicsContext* previousGraphicsContext = [NSGraphicsContext currentContext];
+    NSGraphicsContext* nsGraphicsContext = [NSGraphicsContext graphicsContextWithGraphicsPort:canvas flipped:YES];
+    [NSGraphicsContext setCurrentContext:nsGraphicsContext];
+
+    // Despite passing in frameRect() to the scroller, it always draws at (0, 0).
+    // Force it to draw in the right location by translating the whole graphics
+    // context.
+    [nsGraphicsContext saveGraphicsState];
+    NSAffineTransform *transform = [NSAffineTransform transform];
+    [transform translateXBy:rect.x yBy:rect.y];
+    [transform concat];
+
+    [scroller drawKnob];
+
+    [scroller release];
+
+    [nsGraphicsContext restoreGraphicsState];
+    [NSGraphicsContext setCurrentContext:previousGraphicsContext];
+}
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index cf4ce7c..5980e8d 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,14 @@
+2010-12-30  Mihai Parparita  <mihaip at chromium.org>
+
+        Reviewed by Kent Tamura.
+
+        [Chromium] Add WebThemeEngineDRTMac so that Chromium DRT scrollbar rendering can match the Mac port's
+        https://bugs.webkit.org/show_bug.cgi?id=51728
+        
+        Roll DEPS to pick up WebThemeEngine changes.
+
+        * DEPS:
+
 2010-12-29  Sheriff Bot  <webkit.review.bot at gmail.com>
 
         Unreviewed, rolling out r74735.
diff --git a/WebKit/chromium/DEPS b/WebKit/chromium/DEPS
index 0992f31..3d91c0b 100644
--- a/WebKit/chromium/DEPS
+++ b/WebKit/chromium/DEPS
@@ -32,7 +32,7 @@
 
 vars = {
   'chromium_svn': 'http://src.chromium.org/svn/trunk/src',
-  'chromium_rev': '68558'
+  'chromium_rev': '70319'
 }
 
 deps = {

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list