Matt Perry d091d0474c Sky: Change iframe positioning to use absoluteContentBox for the View's
coordinate system.

This fixes a bug where the iframe's view would be positioned incorrectly if there were elements above it.

R=esprehn@chromium.org

Review URL: https://codereview.chromium.org/730253002
2014-11-17 17:38:27 -05:00

62 lines
1.7 KiB
C++

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "config.h"
#include "core/rendering/RenderIFrame.h"
#include "core/editing/FrameSelection.h"
#include "core/html/HTMLIFrameElement.h"
#include "core/loader/FrameLoaderClient.h"
#include "core/rendering/PaintInfo.h"
#include "core/rendering/RenderView.h"
#include "platform/geometry/LayoutPoint.h"
namespace blink {
RenderIFrame::RenderIFrame(HTMLIFrameElement* iframe)
: RenderReplaced(iframe)
{
view()->addIFrame(this);
}
RenderIFrame::~RenderIFrame()
{
if (view())
view()->removeIFrame(this);
}
void RenderIFrame::updateWidgetBounds()
{
mojo::View* contentView = toHTMLIFrameElement(node())->contentView();
if (!contentView)
return;
IntRect bounds = absoluteContentBox();
mojo::Rect mojoBounds;
mojoBounds.x = bounds.x();
mojoBounds.y = bounds.y();
mojoBounds.width = bounds.width();
mojoBounds.height = bounds.height();
contentView->SetBounds(mojoBounds);
}
void RenderIFrame::paintReplaced(PaintInfo& paintInfo,
const LayoutPoint& paintOffset)
{
// Draw a gray background. This should be painted over by the actual
// content.
// TODO(mpcomplete): figure out what we should actually do here.
GraphicsContext* context = paintInfo.context;
IntRect paintRect = pixelSnappedIntRect(LayoutRect(
paintOffset.x(), paintOffset.y(), contentWidth(), contentHeight()));
context->setStrokeStyle(SolidStroke);
context->setStrokeColor(Color::lightGray);
context->setFillColor(Color::darkGray);
context->drawRect(paintRect);
}
} // namespace blink