зеркало из https://github.com/mozilla/gecko-dev.git
Bug 759124 - Implement useCurrentView. r=dholbert
This commit is contained in:
Родитель
1e7add0d43
Коммит
51ba38af37
|
@ -70,8 +70,8 @@ SVGFragmentIdentifier::RestoreOldViewBox(nsSVGSVGElement *root)
|
|||
void
|
||||
SVGFragmentIdentifier::SaveOldZoomAndPan(nsSVGSVGElement *root)
|
||||
{
|
||||
const PRUint16 *oldZoomAndPanPtr = root->GetZoomAndPanProperty();
|
||||
if (!oldZoomAndPanPtr) {
|
||||
PRUint16 oldZoomAndPan = root->GetZoomAndPanProperty();
|
||||
if (oldZoomAndPan == nsIDOMSVGZoomAndPan::SVG_ZOOMANDPAN_UNKNOWN) {
|
||||
root->SetZoomAndPanProperty(root->mEnumAttributes[nsSVGSVGElement::ZOOMANDPAN].GetBaseValue());
|
||||
}
|
||||
}
|
||||
|
@ -79,9 +79,9 @@ SVGFragmentIdentifier::SaveOldZoomAndPan(nsSVGSVGElement *root)
|
|||
void
|
||||
SVGFragmentIdentifier::RestoreOldZoomAndPan(nsSVGSVGElement *root)
|
||||
{
|
||||
const PRUint16 *oldZoomAndPanPtr = root->GetZoomAndPanProperty();
|
||||
if (oldZoomAndPanPtr) {
|
||||
root->mEnumAttributes[nsSVGSVGElement::ZOOMANDPAN].SetBaseValue(*oldZoomAndPanPtr, root);
|
||||
PRUint16 oldZoomAndPan = root->GetZoomAndPanProperty();
|
||||
if (oldZoomAndPan != nsIDOMSVGZoomAndPan::SVG_ZOOMANDPAN_UNKNOWN) {
|
||||
root->mEnumAttributes[nsSVGSVGElement::ZOOMANDPAN].SetBaseValue(oldZoomAndPan, root);
|
||||
root->ClearZoomAndPanProperty();
|
||||
}
|
||||
}
|
||||
|
@ -108,7 +108,10 @@ SVGFragmentIdentifier::ProcessSVGViewSpec(const nsAString &aViewSpec,
|
|||
CharTokenizer<';'>tokenizer(
|
||||
Substring(aViewSpec, bracketPos + 1, aViewSpec.Length() - bracketPos - 2));
|
||||
|
||||
while (tokenizer.hasMoreTokens()) {
|
||||
if (!tokenizer.hasMoreTokens()) {
|
||||
return false;
|
||||
}
|
||||
do {
|
||||
|
||||
nsAutoString token(tokenizer.nextToken());
|
||||
|
||||
|
@ -140,7 +143,7 @@ SVGFragmentIdentifier::ProcessSVGViewSpec(const nsAString &aViewSpec,
|
|||
// We don't support transform or viewTarget currently
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} while (tokenizer.hasMoreTokens());
|
||||
|
||||
if (viewBoxParams) {
|
||||
SaveOldViewBox(root);
|
||||
|
@ -208,10 +211,12 @@ SVGFragmentIdentifier::ProcessFragmentIdentifier(nsIDocument *aDocument,
|
|||
} else {
|
||||
RestoreOldZoomAndPan(rootElement);
|
||||
}
|
||||
rootElement->mUseCurrentView = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ProcessSVGViewSpec(aAnchorName, rootElement)) {
|
||||
rootElement->mUseCurrentView = ProcessSVGViewSpec(aAnchorName, rootElement);
|
||||
if (rootElement->mUseCurrentView) {
|
||||
return true;
|
||||
}
|
||||
RestoreOldViewBox(rootElement);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
* 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/. */
|
||||
|
||||
#include "mozilla/StandardInteger.h"
|
||||
#include "mozilla/Util.h"
|
||||
|
||||
#include "nsGkAtoms.h"
|
||||
|
@ -171,7 +172,8 @@ nsSVGSVGElement::nsSVGSVGElement(already_AddRefed<nsINodeInfo> aNodeInfo,
|
|||
mStartAnimationOnBindToTree(!aFromParser),
|
||||
mImageNeedsTransformInvalidation(false),
|
||||
mIsPaintingSVGImageElement(false),
|
||||
mHasChildrenOnlyTransform(false)
|
||||
mHasChildrenOnlyTransform(false),
|
||||
mUseCurrentView(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -298,14 +300,8 @@ nsSVGSVGElement::GetScreenPixelToMillimeterY(float *aScreenPixelToMillimeterY)
|
|||
NS_IMETHODIMP
|
||||
nsSVGSVGElement::GetUseCurrentView(bool *aUseCurrentView)
|
||||
{
|
||||
NS_NOTYETIMPLEMENTED("nsSVGSVGElement::GetUseCurrentView");
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
NS_IMETHODIMP
|
||||
nsSVGSVGElement::SetUseCurrentView(bool aUseCurrentView)
|
||||
{
|
||||
NS_NOTYETIMPLEMENTED("nsSVGSVGElement::SetUseCurrentView");
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
*aUseCurrentView = mUseCurrentView;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* readonly attribute nsIDOMSVGViewSpec currentView; */
|
||||
|
@ -1431,19 +1427,19 @@ nsSVGSVGElement::SetZoomAndPanProperty(PRUint16 aValue)
|
|||
return NS_SUCCEEDED(rv);
|
||||
}
|
||||
|
||||
const PRUint16*
|
||||
PRUint16
|
||||
nsSVGSVGElement::GetZoomAndPanProperty() const
|
||||
{
|
||||
void* valPtr = GetProperty(nsGkAtoms::zoomAndPan);
|
||||
if (valPtr) {
|
||||
return reinterpret_cast<PRUint16*>(valPtr);
|
||||
return reinterpret_cast<uintptr_t>(valPtr);
|
||||
}
|
||||
return nsnull;
|
||||
return nsIDOMSVGZoomAndPan::SVG_ZOOMANDPAN_UNKNOWN;
|
||||
}
|
||||
|
||||
bool
|
||||
nsSVGSVGElement::ClearZoomAndPanProperty()
|
||||
{
|
||||
return UnsetProperty(nsGkAtoms::viewBox);
|
||||
return UnsetProperty(nsGkAtoms::zoomAndPan);
|
||||
}
|
||||
|
||||
|
|
|
@ -268,7 +268,7 @@ private:
|
|||
const nsSVGViewBoxRect* GetViewBoxProperty() const;
|
||||
bool ClearViewBoxProperty();
|
||||
bool SetZoomAndPanProperty(PRUint16 aValue);
|
||||
const PRUint16* GetZoomAndPanProperty() const;
|
||||
PRUint16 GetZoomAndPanProperty() const;
|
||||
bool ClearZoomAndPanProperty();
|
||||
|
||||
bool IsRoot() const {
|
||||
|
@ -363,7 +363,6 @@ private:
|
|||
float mCurrentScale;
|
||||
nsSVGTranslatePoint mPreviousTranslate;
|
||||
float mPreviousScale;
|
||||
PRInt32 mRedrawSuspendCount;
|
||||
|
||||
// For outermost <svg> elements created from parsing, animation is started by
|
||||
// the onload event in accordance with the SVG spec, but for <svg> elements
|
||||
|
@ -373,6 +372,7 @@ private:
|
|||
bool mImageNeedsTransformInvalidation;
|
||||
bool mIsPaintingSVGImageElement;
|
||||
bool mHasChildrenOnlyTransform;
|
||||
bool mUseCurrentView;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -36,6 +36,8 @@ _TEST_FILES = \
|
|||
test_dataTypes.html \
|
||||
test_dataTypesModEvents.html \
|
||||
dataTypes-helper.svg \
|
||||
test_fragments.html \
|
||||
fragments-helper.svg \
|
||||
getCTM-helper.svg \
|
||||
test_getCTM.html \
|
||||
test_getElementById.xhtml \
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<view id="view" viewBox="0 200 100 100" preserveAspectRatio="none"/>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 141 B |
|
@ -0,0 +1,60 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=759124
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 759124</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=759124">Mozilla Bug 759124</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
|
||||
<iframe id="svg" src="fragments-helper.svg"></iframe>
|
||||
|
||||
<pre id="test">
|
||||
<script class="testbody" type="application/javascript">
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function Test(svgFragmentIdentifier, valid) {
|
||||
this.svgFragmentIdentifier = svgFragmentIdentifier;
|
||||
this.valid = valid;
|
||||
}
|
||||
|
||||
function runTests()
|
||||
{
|
||||
var svg = $("svg");
|
||||
var doc = svg.contentWindow.document;
|
||||
|
||||
var tests = [
|
||||
new Test("view", true),
|
||||
new Test("unknown", false),
|
||||
new Test("svgView(viewBox(0,0,200,200)))", true),
|
||||
new Test("svgView(preserveAspectRatio(xMaxYMin slice))", true),
|
||||
new Test("svgView(viewBox(1,2,3,4);preserveAspectRatio(xMaxYMin))", true),
|
||||
new Test("svgView(zoomAndPan(disable))", true),
|
||||
new Test("svgView", false),
|
||||
new Test("svgView(", false),
|
||||
new Test("svgView()", false)
|
||||
];
|
||||
|
||||
var src = svg.getAttribute("src");
|
||||
for (var i = 0; i < tests.length; i++) {
|
||||
var test = tests[i];
|
||||
svg.setAttribute("src", src + "#" + test.svgFragmentIdentifier);
|
||||
is(doc.rootElement.useCurrentView, test.valid,
|
||||
"Expected " + test.svgFragmentIdentifier + " to be " +
|
||||
(test.valid ? "valid" : "invalid"));
|
||||
}
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
window.addEventListener("load", runTests, false);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -22,7 +22,7 @@ interface nsIDOMSVGTransform;
|
|||
#endif
|
||||
%}
|
||||
|
||||
[scriptable, uuid(EF862DDA-DE4E-4F1C-9A70-4D3BEBDE5E6E)]
|
||||
[scriptable, uuid(BEC06C4F-3EF7-486E-A8F5-F375EE5CB5A8)]
|
||||
interface nsIDOMSVGSVGElement
|
||||
: nsIDOMSVGElement
|
||||
/*
|
||||
|
@ -56,8 +56,7 @@ interface nsIDOMSVGSVGElement
|
|||
readonly attribute float pixelUnitToMillimeterY;
|
||||
readonly attribute float screenPixelToMillimeterX;
|
||||
readonly attribute float screenPixelToMillimeterY;
|
||||
attribute boolean useCurrentView;
|
||||
// raises DOMException on setting
|
||||
readonly attribute boolean useCurrentView;
|
||||
readonly attribute nsIDOMSVGViewSpec currentView;
|
||||
attribute float currentScale;
|
||||
// raises DOMException on setting
|
||||
|
|
Загрузка…
Ссылка в новой задаче