This commit is contained in:
Ms2ger 2013-05-05 11:52:34 +02:00
Родитель 164bfd91dd f936e5198e
Коммит 546eacd4ae
21 изменённых файлов: 197 добавлений и 78 удалений

Просмотреть файл

@ -65,7 +65,7 @@ else
PPL_LOCALE_ARGS=$(call EXPAND_LOCALE_SRCDIR,browser/locales)/installer
endif
.DEFAULT_GOAL := installer
OVERRIDE_DEFAULT_GOAL := installer
installer::
$(MAKE) -C .. installer-stage
$(MAKE) $(CONFIG_DIR)/setup.exe

Просмотреть файл

@ -1670,8 +1670,11 @@ class Makefile(object):
Inform the makefile of a target which is a candidate for being the default target,
if there isn't already a default target.
"""
if self.defaulttarget is None and t != '.PHONY':
flavor, source, value = self.variables.get('.DEFAULT_GOAL')
if self.defaulttarget is None and t != '.PHONY' and value is None:
self.defaulttarget = t
self.variables.set('.DEFAULT_GOAL', Variables.FLAVOR_SIMPLE,
Variables.SOURCE_AUTOMATIC, t)
def getpatternvariables(self, pattern):
assert isinstance(pattern, Pattern)

Просмотреть файл

@ -1,7 +1,8 @@
not-default:
@echo TEST-FAIL
@echo TEST-FAIL did not run default rule
default:
@echo TEST-PASS
@echo $(if $(filter not-default,$(INTERMEDIATE_DEFAULT_GOAL)),TEST-PASS,TEST-FAIL .DEFAULT_GOAL not set by $(MAKE))
INTERMEDIATE_DEFAULT_GOAL := $(.DEFAULT_GOAL)
.DEFAULT_GOAL := default

Просмотреть файл

@ -1825,7 +1825,7 @@ default all:: $(PURGECACHES_FILES)
$(PURGECACHES_FILES):
if test -d $(@D) ; then touch $@ ; fi
.DEFAULT_GOAL ?= default
.DEFAULT_GOAL := $(or $(OVERRIDE_DEFAULT_GOAL),default)
#############################################################################
# Derived targets and dependencies

Просмотреть файл

@ -11,7 +11,7 @@
using namespace mozilla;
static bool
IsMatchingParameter(const nsAString &aString, const nsAString &aParameterName)
IsMatchingParameter(const nsAString& aString, const nsAString& aParameterName)
{
// The first two tests ensure aString.Length() > aParameterName.Length()
// so it's then safe to do the third test
@ -27,7 +27,7 @@ IgnoreWhitespace(PRUnichar aChar)
}
static dom::SVGViewElement*
GetViewElement(nsIDocument *aDocument, const nsAString &aId)
GetViewElement(nsIDocument* aDocument, const nsAString& aId)
{
dom::Element* element = aDocument->GetElementById(aId);
return (element && element->IsSVG(nsGkAtoms::view)) ?
@ -35,7 +35,7 @@ GetViewElement(nsIDocument *aDocument, const nsAString &aId)
}
void
SVGFragmentIdentifier::SaveOldPreserveAspectRatio(dom::SVGSVGElement *root)
SVGFragmentIdentifier::SaveOldPreserveAspectRatio(dom::SVGSVGElement* root)
{
if (root->mPreserveAspectRatio.IsExplicitlySet()) {
root->SetPreserveAspectRatioProperty(root->mPreserveAspectRatio.GetBaseValue());
@ -43,9 +43,9 @@ SVGFragmentIdentifier::SaveOldPreserveAspectRatio(dom::SVGSVGElement *root)
}
void
SVGFragmentIdentifier::RestoreOldPreserveAspectRatio(dom::SVGSVGElement *root)
SVGFragmentIdentifier::RestoreOldPreserveAspectRatio(dom::SVGSVGElement* root)
{
const SVGPreserveAspectRatio *oldPARPtr = root->GetPreserveAspectRatioProperty();
const SVGPreserveAspectRatio* oldPARPtr = root->GetPreserveAspectRatioProperty();
if (oldPARPtr) {
root->mPreserveAspectRatio.SetBaseValue(*oldPARPtr, root);
} else if (root->mPreserveAspectRatio.IsExplicitlySet()) {
@ -55,7 +55,7 @@ SVGFragmentIdentifier::RestoreOldPreserveAspectRatio(dom::SVGSVGElement *root)
}
void
SVGFragmentIdentifier::SaveOldViewBox(dom::SVGSVGElement *root)
SVGFragmentIdentifier::SaveOldViewBox(dom::SVGSVGElement* root)
{
if (root->mViewBox.IsExplicitlySet()) {
root->SetViewBoxProperty(root->mViewBox.GetBaseValue());
@ -63,9 +63,9 @@ SVGFragmentIdentifier::SaveOldViewBox(dom::SVGSVGElement *root)
}
void
SVGFragmentIdentifier::RestoreOldViewBox(dom::SVGSVGElement *root)
SVGFragmentIdentifier::RestoreOldViewBox(dom::SVGSVGElement* root)
{
const nsSVGViewBoxRect *oldViewBoxPtr = root->GetViewBoxProperty();
const nsSVGViewBoxRect* oldViewBoxPtr = root->GetViewBoxProperty();
if (oldViewBoxPtr) {
root->mViewBox.SetBaseValue(*oldViewBoxPtr, root);
} else if (root->mViewBox.IsExplicitlySet()) {
@ -75,7 +75,7 @@ SVGFragmentIdentifier::RestoreOldViewBox(dom::SVGSVGElement *root)
}
void
SVGFragmentIdentifier::SaveOldZoomAndPan(dom::SVGSVGElement *root)
SVGFragmentIdentifier::SaveOldZoomAndPan(dom::SVGSVGElement* root)
{
if (root->mEnumAttributes[dom::SVGSVGElement::ZOOMANDPAN].IsExplicitlySet()) {
root->SetZoomAndPanProperty(root->mEnumAttributes[dom::SVGSVGElement::ZOOMANDPAN].GetBaseValue());
@ -83,7 +83,7 @@ SVGFragmentIdentifier::SaveOldZoomAndPan(dom::SVGSVGElement *root)
}
void
SVGFragmentIdentifier::RestoreOldZoomAndPan(dom::SVGSVGElement *root)
SVGFragmentIdentifier::RestoreOldZoomAndPan(dom::SVGSVGElement* root)
{
uint16_t oldZoomAndPan = root->GetZoomAndPanProperty();
if (oldZoomAndPan != SVG_ZOOMANDPAN_UNKNOWN) {
@ -95,15 +95,33 @@ SVGFragmentIdentifier::RestoreOldZoomAndPan(dom::SVGSVGElement *root)
}
void
SVGFragmentIdentifier::ClearTransform(dom::SVGSVGElement *root)
SVGFragmentIdentifier::SaveOldTransform(dom::SVGSVGElement* root)
{
root->mFragmentIdentifierTransform = nullptr;
root->InvalidateTransformNotifyFrame();
nsSVGAnimatedTransformList* transformList = root->GetAnimatedTransformList();
if (transformList && transformList->IsExplicitlySet()) {
root->SetTransformProperty(transformList->GetBaseValue());
}
}
void
SVGFragmentIdentifier::RestoreOldTransform(dom::SVGSVGElement* root)
{
const SVGTransformList* oldTransformPtr = root->GetTransformProperty();
if (oldTransformPtr) {
root->GetAnimatedTransformList(nsSVGElement::DO_ALLOCATE)->SetBaseValue(*oldTransformPtr);
} else {
nsSVGAnimatedTransformList* transformList = root->GetAnimatedTransformList();
if (transformList && transformList->IsExplicitlySet()) {
mozilla::ErrorResult error;
root->RemoveAttribute(NS_LITERAL_STRING("transform"), error);
}
}
}
bool
SVGFragmentIdentifier::ProcessSVGViewSpec(const nsAString &aViewSpec,
dom::SVGSVGElement *root)
SVGFragmentIdentifier::ProcessSVGViewSpec(const nsAString& aViewSpec,
dom::SVGSVGElement* root)
{
if (!IsMatchingParameter(aViewSpec, NS_LITERAL_STRING("svgView"))) {
return false;
@ -156,27 +174,21 @@ SVGFragmentIdentifier::ProcessSVGViewSpec(const nsAString &aViewSpec,
}
preserveAspectRatioFound = true;
} else if (IsMatchingParameter(token, NS_LITERAL_STRING("transform"))) {
nsSVGAnimatedTransformList transforms;
if (transformFound ||
NS_FAILED(transforms.SetBaseValueString(params))) {
NS_FAILED(root->GetAnimatedTransformList(nsSVGElement::DO_ALLOCATE)->
SetBaseValueString(params))) {
return false;
}
if (!root->mFragmentIdentifierTransform) {
root->mFragmentIdentifierTransform = new gfxMatrix();
}
*root->mFragmentIdentifierTransform =
transforms.GetBaseValue().GetConsolidationMatrix();
root->InvalidateTransformNotifyFrame();
transformFound = true;
} else if (IsMatchingParameter(token, NS_LITERAL_STRING("zoomAndPan"))) {
if (zoomAndPanFound) {
return false;
}
nsIAtom *valAtom = NS_GetStaticAtom(params);
nsIAtom* valAtom = NS_GetStaticAtom(params);
if (!valAtom) {
return false;
}
const nsSVGEnumMapping *mapping = dom::SVGSVGElement::sZoomAndPanMap;
const nsSVGEnumMapping* mapping = dom::SVGSVGElement::sZoomAndPanMap;
while (mapping->mKey) {
if (valAtom == *(mapping->mKey)) {
// If we've got a valid zoomAndPan value, then set it on our root element.
@ -203,7 +215,7 @@ SVGFragmentIdentifier::ProcessSVGViewSpec(const nsAString &aViewSpec,
// A previous SVGViewSpec may have overridden some attributes.
// If they are no longer overridden we need to restore the old values.
if (!transformFound) {
ClearTransform(root);
RestoreOldTransform(root);
}
if (!viewBoxFound) {
RestoreOldViewBox(root);
@ -220,13 +232,13 @@ SVGFragmentIdentifier::ProcessSVGViewSpec(const nsAString &aViewSpec,
}
bool
SVGFragmentIdentifier::ProcessFragmentIdentifier(nsIDocument *aDocument,
const nsAString &aAnchorName)
SVGFragmentIdentifier::ProcessFragmentIdentifier(nsIDocument* aDocument,
const nsAString& aAnchorName)
{
NS_ABORT_IF_FALSE(aDocument->GetRootElement()->IsSVG(nsGkAtoms::svg),
"expecting an SVG root element");
dom::SVGSVGElement *rootElement =
dom::SVGSVGElement* rootElement =
static_cast<dom::SVGSVGElement*>(aDocument->GetRootElement());
if (!rootElement->mUseCurrentView) {
@ -235,7 +247,7 @@ SVGFragmentIdentifier::ProcessFragmentIdentifier(nsIDocument *aDocument,
SaveOldZoomAndPan(rootElement);
}
const dom::SVGViewElement *viewElement = GetViewElement(aDocument, aAnchorName);
const dom::SVGViewElement* viewElement = GetViewElement(aDocument, aAnchorName);
if (viewElement) {
if (!rootElement->mCurrentViewID) {
@ -260,7 +272,8 @@ SVGFragmentIdentifier::ProcessFragmentIdentifier(nsIDocument *aDocument,
rootElement->ClearPreserveAspectRatioProperty();
RestoreOldZoomAndPan(rootElement);
rootElement->ClearZoomAndPanProperty();
ClearTransform(rootElement);
RestoreOldTransform(rootElement);
rootElement->ClearTransformProperty();
if (wasOverridden) {
rootElement->InvalidateTransformNotifyFrame();
}

Просмотреть файл

@ -49,7 +49,8 @@ private:
static void RestoreOldViewBox(dom::SVGSVGElement *root);
static void SaveOldZoomAndPan(dom::SVGSVGElement *root);
static void RestoreOldZoomAndPan(dom::SVGSVGElement *root);
static void ClearTransform(dom::SVGSVGElement *root);
static void SaveOldTransform(dom::SVGSVGElement *root);
static void RestoreOldTransform(dom::SVGSVGElement *root);
};
} // namespace mozilla

Просмотреть файл

@ -962,36 +962,33 @@ SVGSVGElement::PrependLocalTransformsTo(const gfxMatrix &aMatrix,
NS_ABORT_IF_FALSE(aWhich != eChildToUserSpace || aMatrix.IsIdentity(),
"Skipping eUserSpaceToParent transforms makes no sense");
// 'transform' attribute:
gfxMatrix fromUserSpace =
SVGSVGElementBase::PrependLocalTransformsTo(aMatrix, aWhich);
if (aWhich == eUserSpaceToParent) {
return fromUserSpace;
}
if (IsInner()) {
float x, y;
const_cast<SVGSVGElement*>(this)->GetAnimatedLengthValues(&x, &y, nullptr);
if (aWhich == eAllTransforms) {
// the common case
return GetViewBoxTransform() * gfxMatrix().Translate(gfxPoint(x, y)) * aMatrix;
}
if (aWhich == eUserSpaceToParent) {
return gfxMatrix().Translate(gfxPoint(x, y)) * aMatrix;
return GetViewBoxTransform() * gfxMatrix().Translate(gfxPoint(x, y)) * fromUserSpace;
}
NS_ABORT_IF_FALSE(aWhich == eChildToUserSpace, "Unknown TransformTypes");
return GetViewBoxTransform(); // no need to multiply identity aMatrix
}
if (aWhich == eUserSpaceToParent) {
// only inner-<svg> has eUserSpaceToParent transforms
return aMatrix;
return GetViewBoxTransform() * fromUserSpace;
}
if (IsRoot()) {
gfxMatrix zoomPanTM;
zoomPanTM.Translate(gfxPoint(mCurrentTranslate.GetX(), mCurrentTranslate.GetY()));
zoomPanTM.Scale(mCurrentScale, mCurrentScale);
gfxMatrix matrix = mFragmentIdentifierTransform ?
*mFragmentIdentifierTransform * aMatrix : aMatrix;
return GetViewBoxTransform() * zoomPanTM * matrix;
return GetViewBoxTransform() * zoomPanTM * fromUserSpace;
}
// outer-<svg>, but inline in some other content:
return GetViewBoxTransform() * aMatrix;
return GetViewBoxTransform() * fromUserSpace;
}
/* virtual */ bool
@ -1054,7 +1051,7 @@ SVGSVGElement::ShouldSynthesizeViewBox() const
}
// Callback function, for freeing uint64_t values stored in property table
// Callback function, for freeing SVGPreserveAspectRatio values stored in property table
static void
ReleasePreserveAspectRatioPropertyValue(void* aObject, /* unused */
nsIAtom* aPropertyName, /* unused */
@ -1168,7 +1165,7 @@ SVGSVGElement::FlushImageTransformInvalidation()
}
}
// Callback function, for freeing uint64_t values stored in property table
// Callback function, for freeing nsSVGViewBoxRect values stored in property table
static void
ReleaseViewBoxPropertyValue(void* aObject, /* unused */
nsIAtom* aPropertyName, /* unused */
@ -1245,5 +1242,52 @@ SVGSVGElement::ClearZoomAndPanProperty()
return UnsetProperty(nsGkAtoms::zoomAndPan);
}
// Callback function, for freeing SVGTransformList values stored in property table
static void
ReleaseTransformPropertyValue(void* aObject, /* unused */
nsIAtom* aPropertyName, /* unused */
void* aPropertyValue,
void* aData /* unused */)
{
SVGTransformList* valPtr =
static_cast<SVGTransformList*>(aPropertyValue);
delete valPtr;
}
bool
SVGSVGElement::SetTransformProperty(const SVGTransformList& aTransform)
{
SVGTransformList* pTransformOverridePtr = new SVGTransformList(aTransform);
nsresult rv = SetProperty(nsGkAtoms::transform,
pTransformOverridePtr,
ReleaseTransformPropertyValue,
true);
NS_ABORT_IF_FALSE(rv != NS_PROPTABLE_PROP_OVERWRITTEN,
"Setting override value when it's already set...?");
if (MOZ_UNLIKELY(NS_FAILED(rv))) {
// property-insertion failed (e.g. OOM in property-table code)
delete pTransformOverridePtr;
return false;
}
return true;
}
const SVGTransformList*
SVGSVGElement::GetTransformProperty() const
{
void* valPtr = GetProperty(nsGkAtoms::transform);
if (valPtr) {
return static_cast<SVGTransformList*>(valPtr);
}
return nullptr;
}
bool
SVGSVGElement::ClearTransformProperty()
{
return UnsetProperty(nsGkAtoms::transform);
}
} // namespace dom
} // namespace mozilla

Просмотреть файл

@ -278,6 +278,9 @@ private:
bool SetZoomAndPanProperty(uint16_t aValue);
uint16_t GetZoomAndPanProperty() const;
bool ClearZoomAndPanProperty();
bool SetTransformProperty(const SVGTransformList& aValue);
const SVGTransformList* GetTransformProperty() const;
bool ClearTransformProperty();
bool IsRoot() const {
NS_ASSERTION((IsInDoc() && !GetParent()) ==
@ -348,7 +351,6 @@ private:
nsSVGViewBox mViewBox;
SVGAnimatedPreserveAspectRatio mPreserveAspectRatio;
nsAutoPtr<gfxMatrix> mFragmentIdentifierTransform;
nsAutoPtr<nsString> mCurrentViewID;
// The size of the rectangular SVG viewport into which we render. This is

Просмотреть файл

@ -25,6 +25,12 @@ nsSVGAnimatedTransformList::SetBaseValueString(const nsAString& aValue)
return rv;
}
return SetBaseValue(newBaseValue);
}
nsresult
nsSVGAnimatedTransformList::SetBaseValue(const SVGTransformList& aValue)
{
SVGAnimatedTransformList *domWrapper =
SVGAnimatedTransformList::GetDOMWrapperIfExists(this);
if (domWrapper) {
@ -33,14 +39,14 @@ nsSVGAnimatedTransformList::SetBaseValueString(const nsAString& aValue)
// to remove DOM items from itself, and any removed DOM items need to copy
// their internal counterpart values *before* we change them.
//
domWrapper->InternalBaseValListWillChangeLengthTo(newBaseValue.Length());
domWrapper->InternalBaseValListWillChangeLengthTo(aValue.Length());
}
// We don't need to call DidChange* here - we're only called by
// nsSVGElement::ParseAttribute under Element::SetAttr,
// which takes care of notifying.
rv = mBaseVal.CopyFrom(newBaseValue);
nsresult rv = mBaseVal.CopyFrom(aValue);
if (NS_FAILED(rv) && domWrapper) {
// Attempting to increase mBaseVal's length failed - reduce domWrapper
// back to the same length:

Просмотреть файл

@ -56,6 +56,8 @@ public:
return mBaseVal;
}
nsresult SetBaseValue(const SVGTransformList& aValue);
nsresult SetBaseValueString(const nsAString& aValue);
void ClearBaseValue();

Просмотреть файл

@ -45,8 +45,8 @@ function runTest()
// root.nearestViewportElement == null
is((function(){try{return root.getCTM()}catch(e){return e}})(), null, "root.getCTM()");
// inner.nearestViewportElement == root
is((function(){try{return inner.getCTM().e}catch(e){return e}})(), 31, "inner.getCTM().e");
is((function(){try{return inner.getCTM().f}catch(e){return e}})(), 42, "inner.getCTM().f");
is((function(){try{return inner.getCTM().e}catch(e){return e}})(), 1, "inner.getCTM().e");
is((function(){try{return inner.getCTM().f}catch(e){return e}})(), 2, "inner.getCTM().f");
// g1.nearestViewportElement == inner
is((function(){try{return g1.getCTM().e}catch(e){return e}})(), 30, "g1.getCTM().e");
is((function(){try{return g1.getCTM().f}catch(e){return e}})(), 40, "g1.getCTM().f");
@ -75,8 +75,8 @@ function runTest()
is((function(){try{return root.getScreenCTM().e}catch(e){return e}})(), 11, "root.getScreenCTM().e");
is((function(){try{return root.getScreenCTM().f}catch(e){return e}})(), 22, "root.getScreenCTM().f");
// inner.farthestViewportElement == root
is((function(){try{return inner.getScreenCTM().e}catch(e){return e}})(), 45, "inner.getScreenCTM().e");
is((function(){try{return inner.getScreenCTM().f}catch(e){return e}})(), 68, "inner.getScreenCTM().f");
is((function(){try{return inner.getScreenCTM().e}catch(e){return e}})(), 15, "inner.getScreenCTM().e");
is((function(){try{return inner.getScreenCTM().f}catch(e){return e}})(), 28, "inner.getScreenCTM().f");
// g1.farthestViewportElement == root
is((function(){try{return g1.getScreenCTM().e}catch(e){return e}})(), 45, "g1.getScreenCTM().e");
is((function(){try{return g1.getScreenCTM().f}catch(e){return e}})(), 68, "g1.getScreenCTM().f");

Просмотреть файл

@ -1825,7 +1825,7 @@ default all:: $(PURGECACHES_FILES)
$(PURGECACHES_FILES):
if test -d $(@D) ; then touch $@ ; fi
.DEFAULT_GOAL ?= default
.DEFAULT_GOAL := $(or $(OVERRIDE_DEFAULT_GOAL),default)
#############################################################################
# Derived targets and dependencies

Просмотреть файл

@ -598,6 +598,8 @@ CodeGeneratorARM::visitDivPowTwoI(LDivPowTwoI *ins)
// Do the shift.
masm.as_mov(output, asr(ScratchRegister, shift));
} else {
masm.ma_mov(lhs, output);
}
return true;

Просмотреть файл

@ -315,3 +315,12 @@ for (let i = 0; i < 31; i++) {
}
assertEq(f(INT32_MIN), (INT32_MIN/Math.pow(2,30))|0);
assertEq(f(INT32_MAX), (INT32_MAX/Math.pow(2,30))|0);
var f = asmLink(asmCompile(USE_ASM + "function f(i) { i=i|0; return ((((i|0)/1)|0)+i)|0; } return f;"));
for (let i = 0; i < 31; i++) {
assertEq(f(Math.pow(2,i)), (Math.pow(2,i) * 2)|0);
assertEq(f(Math.pow(2,i) - 1), ((Math.pow(2,i) - 1) * 2)|0);
assertEq(f(-Math.pow(2,i)), (-Math.pow(2,i) * 2)|0);
assertEq(f(-Math.pow(2,i) - 1), ((-Math.pow(2,i) - 1) * 2)|0);
}
assertEq(f(INT32_MIN), (INT32_MIN * 2)|0);
assertEq(f(INT32_MAX), (INT32_MAX * 2)|0);

Просмотреть файл

@ -272,6 +272,7 @@ pref(svg.paint-order.enabled,true) == paint-order-03.svg paint-order-03-ref.svg
== suspend-07.svg pass.svg
== suspend-08.svg pass.svg
== svg-transform-01.svg pass.svg
== svg-transform-02.svg pass.svg
== symbol-01.svg symbol-01-ref.svg
== text-font-size-01.svg pass.svg
random-if(gtk2Widget) == text-font-weight-01.svg text-font-weight-01-ref.svg # bug 386713

Просмотреть файл

@ -11,18 +11,15 @@
<!-- Big green background to match lime.svg -->
<rect width="100%" height="100%" fill="lime"/>
<!-- Red "workspace" (should be covered up, if tests pass) -->
<!-- Red "workspaces" (should be covered up, if tests pass) -->
<rect x="100" y="100" width="100" height="100" fill="red"/>
<rect x="100" y="300" width="100" height="100" fill="red"/>
<!-- FIRST ROW -->
<!-- Check that 'by' works at all -->
<rect fill="lime" x="0" y="0" width="50" height="25">
<rect fill="lime" x="0" y="0" width="50" height="50">
<animateMotion by="100, 100" begin="100" dur="1" fill="freeze"/>
</rect>
<foreignObject id="fo" x="0" y="25" width="50" height="25">
<div xmlns="http://www.w3.org/1999/xhtml" style="width:100%;height:100%;background-color:lime"/>
</foreignObject>
<animateMotion xlink:href="#fo" by="100, 100" begin="100" dur="1" fill="freeze"/>
<!-- Check that 'by' is additive w/ 'by' -->
<rect fill="lime" x="50" y="50" width="50" height="50">
@ -42,4 +39,15 @@
<animateMotion by="500, 500" begin="100" dur="1" fill="freeze"/>
<animateMotion from="300,300" to="150,150" begin="100" dur="1" fill="freeze"/>
</rect>
<!-- Other tags -->
<foreignObject id="fo" x="0" y="0" width="100" height="50">
<div xmlns="http://www.w3.org/1999/xhtml" style="width:100%;height:100%;background-color:lime"/>
</foreignObject>
<animateMotion xlink:href="#fo" by="100, 300" begin="100" dur="1" fill="freeze"/>
<svg x="0" y="50" width="100" height="50">
<rect width="100" height="50" fill="lime"/>
<animateMotion by="100, 300" begin="100" dur="1" fill="freeze"/>
</svg>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.8 KiB

После

Ширина:  |  Высота:  |  Размер: 2.0 KiB

Просмотреть файл

@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
class="reftest-wait" transform="translate(100,0)">
<script xlink:href="../smil-util.js" type="text/javascript"/>
<script type="text/javascript">
function doTest() {
setTimeAndSnapshot(101, true);
}
window.addEventListener("MozReftestInvalidate", doTest, false);
</script>
<animateMotion by="-100, 0" begin="100" dur="1" fill="freeze"/>
<!-- Big green background to match lime.svg -->
<rect width="100%" height="100%" fill="lime"/>
</svg>

После

Ширина:  |  Высота:  |  Размер: 563 B

Просмотреть файл

@ -2,6 +2,7 @@
# element.
skip-if(B2G) == animateMotion-by-1.svg lime.svg # bug 773482
skip-if(B2G) == animateMotion-by-2.svg lime.svg # bug 773482
skip-if(B2G) == animateMotion-from-to-1.svg lime.svg # bug 773482
== animateMotion-indefinite-to-1.svg lime.svg
== animateMotion-indefinite-to-2.svg lime.svg

Просмотреть файл

@ -0,0 +1,16 @@
<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<!-- From https://bugzilla.mozilla.org/show_bug.cgi?id=863994 -->
<rect width="100%" height="100%" fill="lime"/>
<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg" x="100" y="100" viewBox="0 0 640 480">
<rect width="100%" height="100%" fill="red"/>
</svg>
<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg" x="100" y="100" viewBox="0 0 640 480" transform="translate(0, 0)">
<rect width="100%" height="100%" fill="lime"/>
</svg>
</svg>

После

Ширина:  |  Высота:  |  Размер: 671 B

Просмотреть файл

@ -96,9 +96,10 @@ public:
virtual bool IsSVGTransformed(gfxMatrix *aOwnTransform,
gfxMatrix *aFromParentTransform) const {
// Outer-<svg> can transform its children with viewBox, currentScale and
// currentTranslate, but it itself is not transformed by SVG transforms.
return false;
// Our anonymous wrapper performs the transforms. We simply
// return whether we are transformed here but don't apply the transforms
// themselves.
return GetFirstPrincipalChild()->IsTransformed();
}
// nsISVGSVGFrame interface:
@ -255,13 +256,6 @@ public:
*/
virtual nsIAtom* GetType() const;
virtual bool IsSVGTransformed(gfxMatrix *aOwnTransform,
gfxMatrix *aFromParentTransform) const {
// Outer-<svg> can transform its children with viewBox, currentScale and
// currentTranslate, but it itself is not transformed by _SVG_ transforms.
return false;
}
// nsSVGContainerFrame methods:
virtual gfxMatrix GetCanvasTM(uint32_t aFor) {
// GetCanvasTM returns the transform from an SVG frame to the frame's

Просмотреть файл

@ -37,7 +37,7 @@ endif
MAR_BIN = $(LIBXUL_DIST)/host/bin/mar$(HOST_BIN_SUFFIX)
MBSDIFF_BIN = $(LIBXUL_DIST)/host/bin/mbsdiff$(HOST_BIN_SUFFIX)
.DEFAULT_GOAL := full-update
OVERRIDE_DEFAULT_GOAL := full-update
full-update:: complete-patch
ifeq ($(OS_TARGET), WINNT)