mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
dcbe25ed45
- Bug 1235979 - Remove spammy printf that got left by accident when bug 1226904 landed. r=thinker (fc6fe64f23) - Bug 1208344 part 1: Make EnsurePhysicalProperty() return the property directly, instead of using in/out-param. r=heycam (9515887dd7) - Bug 1208344 part 2: Make EnsurePhysicalProperty() (not its callers) check whether property is logical. r=heycam (defa671bab) - Bug 1208344 part 3: Rename MapSinglePropertyInto() args, to make src-vs-target distinctions clearer. r=heycam (bfd2e2c9bc) - Bug 1208344 part 4: Make MapSinglePropertyInto() take the source property as an arg (unused for the moment). r=heycam (d1278eb58a) - Bug 1208344 part 5: Add (preffed-off) support for "-webkit-box-orient" CSS property, as a writing-mode-dependent alias for "flex-direction". r=heycam (d8407990aa) - Bug 1208344 part 6: Move new CSS_PROPERTY_LOGICAL_CUSTOM flag up with other LOGICAL flags, and adjust bits accordingly. r=heycam (df27d64733) - Bug 1208344 part 7: Add mochitest to test how "-webkit-box-orient" maps to "flex-direction". r=heycam (c448070877) - Bug 686225 - Work around buggy AAT fonts for Bengali and Kannada scripts. r=jdaggett (17afddbc6c) - Bug 739117 - Avoid bidi-wrapping the text to be shaped if Core Text direction override API is available. r=jdaggett (c492390922) - Bug 1156581 - Add null check to nsSVGEffects::InvalidateRenderingObservers to prevent crashes r=dholbert (4c0460e7ac) - remove windows accents (8b0ad08f11) - Bug 1123654 - Replace use of [deprecated] GetStockObject(DEFAULT_GUI_FONT) with newer API; results in use of Tahoma in place of Microsoft Sans Serif in various contexts. r=jmathies (3a81fc1bed) - put back cleartype for winXP (1c24e5ae09) - Bug 1240180 - Optimize native theme scaling for the single-monitor case. r=emk (a5846457ab) - Bug 1242720 - Use (non-dynamic) resolution from GetDeviceCaps when dealing with native-theme code that does not handle dynamic changes to system DPI. r=emk (7c25841f0b) - More win accent removal (afd6af9fd2) - some more vista or later stuff (1d99554064) - missing bits of Bug 1243720 - Send accessibility theme state down to the content process on Windows. r=jimm (8f00b4f3ca) - Bug 1153460 - Support new Fitzpatrick emoji modifiers and regional symbol indicators in Apple Color Emoji font. r=jdaggett (6faf5f30e6) - Bug 1230497 - Ignore font fallback in Core Text shaping if it's just for a join-control character. r=jdaggett (b612806a42) - Bug 1153460 - Followup to fix warnings-as-errors build failure on a CLOSED TREE. r=bustage. (12d492772c) - bug 1243077 - make it possible to get MaiAtkObject::mAccWrap from an AtkObject* without casting to Accessible* or ProxyAccessible* r=davidb (d8f690b6cd) - Bug 1238403 - Fix inconsistent indenting in layout/style/. r=xidorn (4f24334234) - Bug 717722 - Implement WebKitCSSMatrix. r=baku (c10f90ff6e) - Bug 1241723. Update WebKitCSSMatrix.idl to match latest spec updates. r=baku (5f8c33ff14) - Bug 1241727 - Inverting non-invertible WebKitCSSMatrix should throw NotSupportedError. r=baku (c7791802b8) - Bug 1241575 - Use transform property syntax to parse WebKitCSSMatrix transform list. r=heycam (5f886e2bd9) - bug 1243077 - add AccessibleOrProxy::ChildCount() r=davidb (044537f53c) - bug 1243077 - add AccessibleOrProxy::Role() r=davidb (3f61d03c8e) - bug 1243077 - add AccessibleOrProxy::ChildAt() r=davidb (91288f269f) - bug 1243077 - add AccessibleOrProxy::FirstChild() r=davidb (ea3f984716) - bug 1243077 - add AccessibleOrProxy::LastChild() r=davidb (2181f1740b) - Bug 1237720: Put "-webkit-min-device-pixel-ratio"/"-webkit-max-device-pixel-ratio" behind its own disabled pref. r=heycam (9f75535617) - Bug 1239153: Accept unitless '0' for angle values in CSS -webkit-linear-gradient() expressions. r=heycam (c11657a6c9) - Bug 1239799 part 1: Make check for -webkit-device-pixel-ratio pref more targeted, so we can support other webkit-prefixed media queries. r=heycam (1e8a40127e) - Bug 1239799 part 2: Add support for @media(-webkit-transform-3d) media query, for web compatibility. r=heycam (f7ff08423e) - guard some code for 10.5/10.6 which didn't get run, but coulnd't natively compile (cf68e969fd) - Bug 1019856 - avoid double-buffering in BasicCompositor when window allows it. r=mattwoodrow (e94cfc3fb4)
175 lines
6.4 KiB
C++
175 lines
6.4 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/. */
|
|
|
|
/*
|
|
* A class representing three matrices that can be used for style transforms.
|
|
*/
|
|
|
|
#ifndef nsStyleTransformMatrix_h_
|
|
#define nsStyleTransformMatrix_h_
|
|
|
|
#include "nsCSSValue.h"
|
|
|
|
class nsIFrame;
|
|
class nsStyleContext;
|
|
class nsPresContext;
|
|
struct nsRect;
|
|
namespace mozilla {
|
|
class RuleNodeCacheConditions;
|
|
} // namespace mozilla
|
|
|
|
/**
|
|
* A helper to generate gfxMatrixes from css transform functions.
|
|
*/
|
|
namespace nsStyleTransformMatrix {
|
|
|
|
/**
|
|
* This class provides on-demand access to the 'reference box' for CSS
|
|
* transforms (needed to resolve percentage values in 'transform',
|
|
* 'transform-origin', etc.):
|
|
*
|
|
* http://dev.w3.org/csswg/css-transforms/#reference-box
|
|
*
|
|
* This class helps us to avoid calculating the reference box unless and
|
|
* until it is actually needed. This is important for performance when
|
|
* transforms are applied to SVG elements since the reference box for SVG is
|
|
* much more expensive to calculate (than for elements with a CSS layout box
|
|
* where we can use the nsIFrame's cached mRect), much more common (than on
|
|
* HTML), and yet very rarely have percentage values that require the
|
|
* reference box to be resolved. We also don't want to cause SVG frames to
|
|
* cache lots of ObjectBoundingBoxProperty objects that aren't needed.
|
|
*
|
|
* If UNIFIED_CONTINUATIONS (experimental, and currently broke) is defined,
|
|
* we consider the reference box for non-SVG frames to be the smallest
|
|
* rectangle containing a frame and all of its continuations. For example,
|
|
* if there is a <span> element with several continuations split over
|
|
* several lines, this function will return the rectangle containing all of
|
|
* those continuations. (This behavior is not currently in a spec.)
|
|
*/
|
|
class MOZ_STACK_CLASS TransformReferenceBox final {
|
|
public:
|
|
typedef nscoord (TransformReferenceBox::*DimensionGetter)();
|
|
|
|
explicit TransformReferenceBox()
|
|
: mFrame(nullptr)
|
|
, mIsCached(false)
|
|
{}
|
|
|
|
explicit TransformReferenceBox(const nsIFrame* aFrame)
|
|
: mFrame(aFrame)
|
|
, mIsCached(false)
|
|
{
|
|
MOZ_ASSERT(mFrame);
|
|
}
|
|
|
|
explicit TransformReferenceBox(const nsIFrame* aFrame,
|
|
const nsSize& aFallbackDimensions)
|
|
{
|
|
mFrame = aFrame;
|
|
mIsCached = false;
|
|
if (!mFrame) {
|
|
Init(aFallbackDimensions);
|
|
}
|
|
}
|
|
|
|
void Init(const nsIFrame* aFrame) {
|
|
MOZ_ASSERT(!mFrame && !mIsCached);
|
|
mFrame = aFrame;
|
|
}
|
|
|
|
void Init(const nsSize& aDimensions);
|
|
|
|
/**
|
|
* The offset of the reference box from the nsIFrame's TopLeft(). This
|
|
* is non-zero only in the case of SVG content. If we can successfully
|
|
* implement UNIFIED_CONTINUATIONS at some point in the future then it
|
|
* may also be non-zero for non-SVG content.
|
|
*/
|
|
nscoord X() {
|
|
EnsureDimensionsAreCached();
|
|
return mX;
|
|
}
|
|
nscoord Y() {
|
|
EnsureDimensionsAreCached();
|
|
return mY;
|
|
}
|
|
|
|
/**
|
|
* The size of the reference box.
|
|
*/
|
|
nscoord Width() {
|
|
EnsureDimensionsAreCached();
|
|
return mWidth;
|
|
}
|
|
nscoord Height() {
|
|
EnsureDimensionsAreCached();
|
|
return mHeight;
|
|
}
|
|
|
|
private:
|
|
// We don't really need to prevent copying, but since none of our consumers
|
|
// currently need to copy, preventing copying may allow us to catch some
|
|
// cases where we use pass-by-value instead of pass-by-reference.
|
|
TransformReferenceBox(const TransformReferenceBox&) = delete;
|
|
|
|
void EnsureDimensionsAreCached();
|
|
|
|
const nsIFrame* mFrame;
|
|
nscoord mX, mY, mWidth, mHeight;
|
|
bool mIsCached;
|
|
};
|
|
|
|
/**
|
|
* Return the transform function, as an nsCSSKeyword, for the given
|
|
* nsCSSValue::Array from a transform list.
|
|
*/
|
|
nsCSSKeyword TransformFunctionOf(const nsCSSValue::Array* aData);
|
|
|
|
float ProcessTranslatePart(const nsCSSValue& aValue,
|
|
nsStyleContext* aContext,
|
|
nsPresContext* aPresContext,
|
|
mozilla::RuleNodeCacheConditions& aConditions,
|
|
TransformReferenceBox* aRefBox,
|
|
TransformReferenceBox::DimensionGetter aDimensionGetter = nullptr);
|
|
|
|
void
|
|
ProcessInterpolateMatrix(mozilla::gfx::Matrix4x4& aMatrix,
|
|
const nsCSSValue::Array* aData,
|
|
nsStyleContext* aContext,
|
|
nsPresContext* aPresContext,
|
|
mozilla::RuleNodeCacheConditions& aConditions,
|
|
TransformReferenceBox& aBounds,
|
|
bool* aContains3dTransform);
|
|
|
|
/**
|
|
* Given an nsCSSValueList containing -moz-transform functions,
|
|
* returns a matrix containing the value of those functions.
|
|
*
|
|
* @param aData The nsCSSValueList containing the transform functions
|
|
* @param aContext The style context, used for unit conversion.
|
|
* @param aPresContext The presentation context, used for unit conversion.
|
|
* @param aConditions Set to uncachable (by calling SetUncacheable()) if the
|
|
* result cannot be cached in the rule tree, otherwise untouched.
|
|
* @param aBounds The frame's bounding rectangle.
|
|
* @param aAppUnitsPerMatrixUnit The number of app units per device pixel.
|
|
* @param aContains3dTransform [out] Set to true if aList contains at least
|
|
* one 3d transform function (as defined in the CSS transforms
|
|
* specification), false otherwise.
|
|
*
|
|
* aContext and aPresContext may be null if all of the (non-percent)
|
|
* length values in aData are already known to have been converted to
|
|
* eCSSUnit_Pixel (as they are in an StyleAnimationValue)
|
|
*/
|
|
mozilla::gfx::Matrix4x4 ReadTransforms(const nsCSSValueList* aList,
|
|
nsStyleContext* aContext,
|
|
nsPresContext* aPresContext,
|
|
mozilla::RuleNodeCacheConditions& aConditions,
|
|
TransformReferenceBox& aBounds,
|
|
float aAppUnitsPerMatrixUnit,
|
|
bool* aContains3dTransform);
|
|
} // namespace nsStyleTransformMatrix
|
|
|
|
#endif
|