Changeset 56429 in webkit


Ignore:
Timestamp:
Mar 23, 2010 5:27:12 PM (14 years ago)
Author:
mitz@apple.com
Message:

WebCore: WebCore part of
<rdar://problem/7197736> Plug-in clip rect does not update when overflow
clip changes
https://bugs.webkit.org/show_bug.cgi?id=36479.

Reviewed by John Sullivan.

  • manual-tests/plugin-visible-rect-change.html: Added.
  • platform/mac/WidgetMac.mm:

(WebCore::WidgetPrivate::WidgetPrivate): Added previousVisibleRect.
(WebCore::Widget::setFrameRect): If the visible rect changed but the
frame rect did not, send a -visibleRectDidChange message to the view,
if it responds to it.
(WebCore::Widget::releasePlatformWidget): Reset previousVisibleRect.

  • rendering/RenderWidget.cpp:

(WebCore::RenderWidget::setWidgetGeometry): Track changes to the clip rect
imposed by the enclosing layer. Call Widget::setFrameRect when it changes,
even if the frame rect did not.

  • rendering/RenderWidget.h:

(WebCore::RenderWidget::windowClipRect): Added this accessor.

WebKit/mac: WebKit part of
<rdar://problem/7197736> Plug-in clip rect does not update when overflow
clip changes
https://bugs.webkit.org/show_bug.cgi?id=36479.

Reviewed by John Sullivan.

  • Plugins/Hosted/WebHostedNetscapePluginView.mm:

(-[WebHostedNetscapePluginView visibleRectDidChange]): Added. Calls
WKSyncSurfaceToView().

  • Plugins/WebBaseNetscapePluginView.h:
  • Plugins/WebBaseNetscapePluginView.mm:

(-[WebBaseNetscapePluginView _windowClipRect]): Changed to use Widget::windowClipRect().
(-[WebBaseNetscapePluginView visibleRectDidChange]): Added. Invokes -renewGState.

WebKitLibraries: WebKitSystemInterface part of
<rdar://problem/7197736> Plug-in clip rect does not update when overflow
clip changes
https://bugs.webkit.org/show_bug.cgi?id=36479.

Reviewed by John Sullivan.

  • WebKitSystemInterface.h: Added WKSyncSurfaceToView().
  • libWebKitSystemInterfaceSnowLeopard.a: Updated
Location:
trunk
Files:
1 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r56428 r56429  
     12010-03-23  Dan Bernstein  <mitz@apple.com>
     2
     3        Reviewed by John Sullivan.
     4
     5        WebCore part of
     6        <rdar://problem/7197736> Plug-in clip rect does not update when overflow
     7        clip changes
     8        https://bugs.webkit.org/show_bug.cgi?id=36479.
     9
     10        * manual-tests/plugin-visible-rect-change.html: Added.
     11        * platform/mac/WidgetMac.mm:
     12        (WebCore::WidgetPrivate::WidgetPrivate): Added previousVisibleRect.
     13        (WebCore::Widget::setFrameRect): If the visible rect changed but the
     14        frame rect did not, send a -visibleRectDidChange message to the view,
     15        if it responds to it.
     16        (WebCore::Widget::releasePlatformWidget): Reset previousVisibleRect.
     17        * rendering/RenderWidget.cpp:
     18        (WebCore::RenderWidget::setWidgetGeometry): Track changes to the clip rect
     19        imposed by the enclosing layer. Call Widget::setFrameRect when it changes,
     20        even if the frame rect did not.
     21        * rendering/RenderWidget.h:
     22        (WebCore::RenderWidget::windowClipRect): Added this accessor.
     23
    1242010-03-23  Simon Fraser  <simon.fraser@apple.com>
    225
  • trunk/WebCore/platform/mac/WidgetMac.mm

    r53637 r56429  
    5757@end
    5858
     59@interface NSView (Widget)
     60- (void)visibleRectDidChange;
     61@end
     62
    5963namespace WebCore {
    6064
    6165class WidgetPrivate {
    6266public:
     67    WidgetPrivate()
     68        : previousVisibleRect(NSZeroRect)
     69    {
     70    }
     71
    6372    bool mustStayInWindow;
    6473    bool removeFromSuperviewSoon;
     74    NSRect previousVisibleRect;
    6575};
    6676
     
    163173        return;
    164174
     175    NSRect visibleRect = [v visibleRect];
    165176    NSRect f = rect;
    166177    if (!NSEqualRects(f, [v frame])) {
    167178        [v setFrame:f];
    168         [v setNeedsDisplay: NO];
    169     }
     179        [v setNeedsDisplay:NO];
     180    } else if (!NSEqualRects(visibleRect, m_data->previousVisibleRect) && [v respondsToSelector:@selector(visibleRectDidChange)])
     181        [v visibleRectDidChange];
     182
     183    m_data->previousVisibleRect = visibleRect;
    170184    END_BLOCK_OBJC_EXCEPTIONS;
    171185}
     
    340354{
    341355    HardRelease(m_widget);
     356    m_data->previousVisibleRect = NSZeroRect;
    342357}
    343358
  • trunk/WebCore/rendering/RenderWidget.cpp

    r55381 r56429  
    152152{
    153153    ASSERT(!widgetHierarchyUpdateSuspendCount);
    154     if (!node() || m_widget->frameRect() == frame)
     154    if (!node())
    155155        return false;
     156
     157    IntRect windowClipRect = m_frameView ? m_frameView->windowClipRectForLayer(enclosingLayer(), true) : IntRect();
     158    bool clipChanged = m_windowClipRect != windowClipRect;
     159    bool boundsChanged = m_widget->frameRect() != frame;
     160
     161    if (!boundsChanged && !clipChanged)
     162        return false;
     163
     164    m_windowClipRect = windowClipRect;
    156165
    157166    RenderWidgetProtector protector(this);
    158167    RefPtr<Node> protectedNode(node());
    159168    m_widget->setFrameRect(frame);
    160     return true;
     169    return boundsChanged;
    161170}
    162171
  • trunk/WebCore/rendering/RenderWidget.h

    r56352 r56429  
    4141    void updateWidgetPosition();
    4242    void widgetPositionsUpdated();
     43    IntRect windowClipRect() const { return m_windowClipRect; }
    4344
    4445    void showSubstituteImage(PassRefPtr<Image>);
     
    7576    RefPtr<Image> m_substituteImage;
    7677    FrameView* m_frameView;
     78    IntRect m_windowClipRect;
    7779    int m_refCount;
    7880};
  • trunk/WebKit/mac/ChangeLog

    r56362 r56429  
     12010-03-23  Dan Bernstein  <mitz@apple.com>
     2
     3        Reviewed by John Sullivan.
     4
     5        WebKit part of
     6        <rdar://problem/7197736> Plug-in clip rect does not update when overflow
     7        clip changes
     8        https://bugs.webkit.org/show_bug.cgi?id=36479.
     9
     10        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
     11        (-[WebHostedNetscapePluginView visibleRectDidChange]): Added. Calls
     12        WKSyncSurfaceToView().
     13        * Plugins/WebBaseNetscapePluginView.h:
     14        * Plugins/WebBaseNetscapePluginView.mm:
     15        (-[WebBaseNetscapePluginView _windowClipRect]): Changed to use Widget::windowClipRect().
     16        (-[WebBaseNetscapePluginView visibleRectDidChange]): Added. Invokes -renewGState.
     17
    1182010-03-22  Kevin Decker  <kdecker@apple.com>
    219
  • trunk/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm

    r56079 r56429  
    367367}
    368368
     369- (void)visibleRectDidChange
     370{
     371    [super visibleRectDidChange];
     372    WKSyncSurfaceToView(self);
     373}
    369374
    370375- (void)drawRect:(NSRect)rect
  • trunk/WebKit/mac/Plugins/WebBaseNetscapePluginView.h

    r55824 r56429  
    4848
    4949class WebHaltablePlugin;
     50
     51// Also declared in WebCore/WidgetMac.mm
     52@interface NSView (Widget)
     53- (void)visibleRectDidChange;
     54@end
    5055
    5156@interface WebBaseNetscapePluginView : NSView
  • trunk/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm

    r55824 r56429  
    338338{
    339339    RenderObject* renderer = _element->renderer();
    340    
    341     if (renderer && renderer->view()) {
    342         if (FrameView* frameView = renderer->view()->frameView())
    343             return frameView->windowClipRectForLayer(renderer->enclosingLayer(), true);
    344     }
    345    
    346     return NSZeroRect;
     340    if (!renderer || !renderer->view())
     341        return NSZeroRect;
     342
     343    return toRenderWidget(renderer)->windowClipRect();
    347344}
    348345
     
    352349    // that clip now.   
    353350    return NSIntersectionRect([self convertRect:[self _windowClipRect] fromView:nil], [super visibleRect]);
     351}
     352
     353- (void)visibleRectDidChange
     354{
     355    [self renewGState];
    354356}
    355357
  • trunk/WebKit/mac/WebCoreSupport/WebContextMenuClient.mm

    r49884 r56429  
    271271NSMutableArray* WebContextMenuClient::getCustomMenuFromDefaultItems(ContextMenu* defaultMenu)
    272272{
    273     id delegate = [m_webView UIDelegate];
     273//    id delegate = [m_webView UIDelegate];
    274274    SEL selector = @selector(webView:contextMenuItemsForElement:defaultMenuItems:);
    275     if (![delegate respondsToSelector:selector])
     275//    if (![delegate respondsToSelector:selector])
    276276        return defaultMenu->platformDescription();
    277277
  • trunk/WebKitLibraries/ChangeLog

    r56095 r56429  
     12010-03-23  Dan Bernstein  <mitz@apple.com>
     2
     3        Reviewed by John Sullivan.
     4
     5        WebKitSystemInterface part of
     6        <rdar://problem/7197736> Plug-in clip rect does not update when overflow
     7        clip changes
     8        https://bugs.webkit.org/show_bug.cgi?id=36479.
     9
     10        * WebKitSystemInterface.h: Added WKSyncSurfaceToView().
     11        * libWebKitSystemInterfaceSnowLeopard.a: Updated
     12
    1132010-03-16  Dan Bernstein  <mitz@apple.com>
    214
  • trunk/WebKitLibraries/WebKitSystemInterface.h

    r56012 r56429  
    295295#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)
    296296NSMutableArray *WKNoteOpenPanelFiles(NSArray *paths);
     297void WKSyncSurfaceToView(NSView *view);
    297298#endif
    298299
Note: See TracChangeset for help on using the changeset viewer.