mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-29 21:25:35 +00:00
94 lines
2.5 KiB
C++
94 lines
2.5 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef GFX_FRAMEMETRICS_H
|
|
#define GFX_FRAMEMETRICS_H
|
|
|
|
#include "gfxPoint.h"
|
|
#include "gfxTypes.h"
|
|
#include "nsRect.h"
|
|
#include "mozilla/gfx/Rect.h"
|
|
|
|
namespace mozilla {
|
|
namespace layers {
|
|
|
|
/**
|
|
* The viewport and displayport metrics for the painted frame at the
|
|
* time of a layer-tree transaction. These metrics are especially
|
|
* useful for shadow layers, because the metrics values are updated
|
|
* atomically with new pixels.
|
|
*/
|
|
struct THEBES_API FrameMetrics {
|
|
public:
|
|
// We use IDs to identify frames across processes.
|
|
typedef uint64_t ViewID;
|
|
static const ViewID NULL_SCROLL_ID; // This container layer does not scroll.
|
|
static const ViewID ROOT_SCROLL_ID; // This is the root scroll frame.
|
|
static const ViewID START_SCROLL_ID; // This is the ID that scrolling subframes
|
|
// will begin at.
|
|
|
|
FrameMetrics()
|
|
: mViewport(0, 0, 0, 0)
|
|
, mContentRect(0, 0, 0, 0)
|
|
, mViewportScrollOffset(0, 0)
|
|
, mScrollId(NULL_SCROLL_ID)
|
|
, mCSSContentRect(0, 0, 0, 0)
|
|
, mResolution(1, 1)
|
|
, mMayHaveTouchListeners(false)
|
|
{}
|
|
|
|
// Default copy ctor and operator= are fine
|
|
|
|
bool operator==(const FrameMetrics& aOther) const
|
|
{
|
|
return (mViewport.IsEqualEdges(aOther.mViewport) &&
|
|
mViewportScrollOffset == aOther.mViewportScrollOffset &&
|
|
mDisplayPort.IsEqualEdges(aOther.mDisplayPort) &&
|
|
mScrollId == aOther.mScrollId);
|
|
}
|
|
bool operator!=(const FrameMetrics& aOther) const
|
|
{
|
|
return !operator==(aOther);
|
|
}
|
|
|
|
bool IsDefault() const
|
|
{
|
|
return (FrameMetrics() == *this);
|
|
}
|
|
|
|
bool IsRootScrollable() const
|
|
{
|
|
return mScrollId == ROOT_SCROLL_ID;
|
|
}
|
|
|
|
bool IsScrollable() const
|
|
{
|
|
return mScrollId != NULL_SCROLL_ID;
|
|
}
|
|
|
|
// These are all in layer coordinate space.
|
|
nsIntRect mViewport;
|
|
nsIntRect mContentRect;
|
|
gfx::Point mViewportScrollOffset;
|
|
nsIntRect mDisplayPort;
|
|
ViewID mScrollId;
|
|
|
|
// Consumers often want to know the origin/size before scaling to pixels
|
|
// so we record this as well.
|
|
gfx::Rect mCSSContentRect;
|
|
|
|
// This represents the resolution at which the associated layer
|
|
// will been rendered.
|
|
gfxSize mResolution;
|
|
|
|
// Whether or not this frame may have touch listeners.
|
|
bool mMayHaveTouchListeners;
|
|
};
|
|
|
|
}
|
|
}
|
|
|
|
#endif /* GFX_FRAMEMETRICS_H */
|