ResourceUsageOverlay.cpp [plain text]
#include "config.h"
#if ENABLE(RESOURCE_USAGE)
#include "ResourceUsageOverlay.h"
#include "Frame.h"
#include "FrameView.h"
#include "Page.h"
#include "PageOverlayController.h"
#include "PlatformMouseEvent.h"
namespace WebCore {
ResourceUsageOverlay::ResourceUsageOverlay(Page& page)
: m_page(page)
, m_overlay(PageOverlay::create(*this, PageOverlay::OverlayType::View))
{
callOnMainThread([this] {
initialize();
});
}
ResourceUsageOverlay::~ResourceUsageOverlay()
{
platformDestroy();
if (m_page.mainFrame().page())
m_page.pageOverlayController().uninstallPageOverlay(*m_overlay, PageOverlay::FadeMode::DoNotFade);
}
void ResourceUsageOverlay::initialize()
{
if (!m_page.mainFrame().view())
return;
FrameView& frameView = *m_page.mainFrame().view();
IntRect initialRect(frameView.width() / 2 - normalWidth / 2, frameView.height() - normalHeight - 20, normalWidth, normalHeight);
#if PLATFORM(IOS)
initialRect.setY(20);
#endif
m_overlay->setFrame(initialRect);
m_page.pageOverlayController().installPageOverlay(*m_overlay, PageOverlay::FadeMode::DoNotFade);
platformInitialize();
}
bool ResourceUsageOverlay::mouseEvent(PageOverlay&, const PlatformMouseEvent& event)
{
if (event.button() != LeftButton)
return false;
switch (event.type()) {
case PlatformEvent::MousePressed: {
m_overlay->setShouldIgnoreMouseEventsOutsideBounds(false);
m_dragging = true;
IntPoint location = m_overlay->frame().location();
m_dragPoint = event.position() + IntPoint(-location.x(), -location.y());
return true;
}
case PlatformEvent::MouseReleased:
if (m_dragging) {
m_overlay->setShouldIgnoreMouseEventsOutsideBounds(true);
m_dragging = false;
return true;
}
break;
case PlatformEvent::MouseMoved:
if (m_dragging) {
IntRect newFrame = m_overlay->frame();
newFrame.setLocation(event.position());
newFrame.moveBy(IntPoint(-m_dragPoint.x(), -m_dragPoint.y()));
if (newFrame.x() < 0)
newFrame.setX(0);
if (newFrame.y() < m_page.topContentInset())
newFrame.setY(m_page.topContentInset());
FrameView& frameView = *m_page.mainFrame().view();
if (newFrame.maxX() > frameView.width())
newFrame.setX(frameView.width() - newFrame.width());
if (newFrame.maxY() > frameView.height())
newFrame.setY(frameView.height() - newFrame.height());
m_overlay->setFrame(newFrame);
m_overlay->setNeedsDisplay();
return true;
}
break;
default:
break;
}
return false;
}
}
#endif