зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1028460 - part 1, Implement a mozilla::Sides type that represents a set of sides that can be used for the GetSkipSides() result among other things. r=roc
This commit is contained in:
Родитель
d76823fb07
Коммит
7dcc2ffd89
|
@ -9,6 +9,57 @@
|
||||||
#include "Types.h"
|
#include "Types.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sides represents a set of physical sides.
|
||||||
|
*/
|
||||||
|
struct Sides MOZ_FINAL {
|
||||||
|
Sides() : mBits(0) {}
|
||||||
|
explicit Sides(SideBits aSideBits)
|
||||||
|
{
|
||||||
|
MOZ_ASSERT((aSideBits & ~eSideBitsAll) == 0, "illegal side bits");
|
||||||
|
mBits = aSideBits;
|
||||||
|
}
|
||||||
|
bool IsEmpty() const { return mBits == 0; }
|
||||||
|
bool Top() const { return mBits & eSideBitsTop; }
|
||||||
|
bool Right() const { return mBits & eSideBitsRight; }
|
||||||
|
bool Bottom() const { return mBits & eSideBitsBottom; }
|
||||||
|
bool Left() const { return mBits & eSideBitsLeft; }
|
||||||
|
bool Contains(SideBits aSideBits) const
|
||||||
|
{
|
||||||
|
MOZ_ASSERT((aSideBits & ~eSideBitsAll) == 0, "illegal side bits");
|
||||||
|
return (mBits & aSideBits) == aSideBits;
|
||||||
|
}
|
||||||
|
Sides operator|(Sides aOther) const
|
||||||
|
{
|
||||||
|
return Sides(SideBits(mBits | aOther.mBits));
|
||||||
|
}
|
||||||
|
Sides operator|(SideBits aSideBits) const
|
||||||
|
{
|
||||||
|
return *this | Sides(aSideBits);
|
||||||
|
}
|
||||||
|
Sides& operator|=(Sides aOther)
|
||||||
|
{
|
||||||
|
mBits |= aOther.mBits;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
Sides& operator|=(SideBits aSideBits)
|
||||||
|
{
|
||||||
|
return *this |= Sides(aSideBits);
|
||||||
|
}
|
||||||
|
bool operator==(Sides aOther) const
|
||||||
|
{
|
||||||
|
return mBits == aOther.mBits;
|
||||||
|
}
|
||||||
|
bool operator!=(Sides aOther) const
|
||||||
|
{
|
||||||
|
return !(*this == aOther);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint8_t mBits;
|
||||||
|
};
|
||||||
|
|
||||||
namespace gfx {
|
namespace gfx {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,7 +68,7 @@ namespace gfx {
|
||||||
*/
|
*/
|
||||||
template <class T, class Sub>
|
template <class T, class Sub>
|
||||||
struct BaseMargin {
|
struct BaseMargin {
|
||||||
typedef mozilla::css::Side SideT;
|
typedef mozilla::Side SideT; // because we have a method named Side
|
||||||
|
|
||||||
// Do not change the layout of these members; the Side() methods below
|
// Do not change the layout of these members; the Side() methods below
|
||||||
// depend on this order.
|
// depend on this order.
|
||||||
|
@ -45,18 +96,18 @@ struct BaseMargin {
|
||||||
return *(&top + T(aSide));
|
return *(&top + T(aSide));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplySkipSides(int aSkipSides)
|
void ApplySkipSides(Sides aSkipSides)
|
||||||
{
|
{
|
||||||
if (aSkipSides & (1 << mozilla::css::eSideTop)) {
|
if (aSkipSides.Top()) {
|
||||||
top = 0;
|
top = 0;
|
||||||
}
|
}
|
||||||
if (aSkipSides & (1 << mozilla::css::eSideRight)) {
|
if (aSkipSides.Right()) {
|
||||||
right = 0;
|
right = 0;
|
||||||
}
|
}
|
||||||
if (aSkipSides & (1 << mozilla::css::eSideBottom)) {
|
if (aSkipSides.Bottom()) {
|
||||||
bottom = 0;
|
bottom = 0;
|
||||||
}
|
}
|
||||||
if (aSkipSides & (1 << mozilla::css::eSideLeft)) {
|
if (aSkipSides.Left()) {
|
||||||
left = 0;
|
left = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -264,17 +264,25 @@ struct GradientStop
|
||||||
#define GFX2D_API
|
#define GFX2D_API
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Side constants for use in various places
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace css {
|
// Side constants for use in various places.
|
||||||
enum Side {eSideTop, eSideRight, eSideBottom, eSideLeft};
|
enum Side { eSideTop, eSideRight, eSideBottom, eSideLeft };
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX - These don't really belong here. But for now this is where they go.
|
enum SideBits {
|
||||||
#define NS_SIDE_TOP mozilla::css::eSideTop
|
eSideBitsNone = 0,
|
||||||
#define NS_SIDE_RIGHT mozilla::css::eSideRight
|
eSideBitsTop = 1 << eSideTop,
|
||||||
#define NS_SIDE_BOTTOM mozilla::css::eSideBottom
|
eSideBitsRight = 1 << eSideRight,
|
||||||
#define NS_SIDE_LEFT mozilla::css::eSideLeft
|
eSideBitsBottom = 1 << eSideBottom,
|
||||||
|
eSideBitsLeft = 1 << eSideLeft,
|
||||||
|
eSideBitsTopBottom = eSideBitsTop | eSideBitsBottom,
|
||||||
|
eSideBitsLeftRight = eSideBitsLeft | eSideBitsRight,
|
||||||
|
eSideBitsAll = eSideBitsTopBottom | eSideBitsLeftRight
|
||||||
|
};
|
||||||
|
} // namespace mozilla
|
||||||
|
|
||||||
|
#define NS_SIDE_TOP mozilla::eSideTop
|
||||||
|
#define NS_SIDE_RIGHT mozilla::eSideRight
|
||||||
|
#define NS_SIDE_BOTTOM mozilla::eSideBottom
|
||||||
|
#define NS_SIDE_LEFT mozilla::eSideLeft
|
||||||
|
|
||||||
#endif /* MOZILLA_GFX_TYPES_H_ */
|
#endif /* MOZILLA_GFX_TYPES_H_ */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче