mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-22 15:17:29 +09:00
Issue #2483 - Support DOMMatrix2DInit for addPath
This commit is contained in:
parent
e6e8224040
commit
39f5c51c10
3 changed files with 22 additions and 12 deletions
|
|
@ -16,7 +16,7 @@ namespace mozilla {
|
||||||
namespace dom {
|
namespace dom {
|
||||||
|
|
||||||
enum class CanvasWindingRule : uint32_t;
|
enum class CanvasWindingRule : uint32_t;
|
||||||
class SVGMatrix;
|
struct DOMMatrix2DInit;
|
||||||
|
|
||||||
class CanvasPath final :
|
class CanvasPath final :
|
||||||
public nsWrapperCache
|
public nsWrapperCache
|
||||||
|
|
@ -69,8 +69,8 @@ public:
|
||||||
CanvasPath(nsISupports* aParent,
|
CanvasPath(nsISupports* aParent,
|
||||||
already_AddRefed<gfx::PathBuilder> aPathBuilder);
|
already_AddRefed<gfx::PathBuilder> aPathBuilder);
|
||||||
|
|
||||||
void AddPath(CanvasPath& aCanvasPath,
|
void AddPath(CanvasPath& aCanvasPath, const DOMMatrix2DInit& aInit,
|
||||||
const Optional<NonNull<SVGMatrix>>& aMatrix);
|
ErrorResult& aError);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual ~CanvasPath() {}
|
virtual ~CanvasPath() {}
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@
|
||||||
#include "mozilla/CheckedInt.h"
|
#include "mozilla/CheckedInt.h"
|
||||||
#include "mozilla/DebugOnly.h"
|
#include "mozilla/DebugOnly.h"
|
||||||
#include "mozilla/dom/ContentParent.h"
|
#include "mozilla/dom/ContentParent.h"
|
||||||
|
#include "mozilla/dom/DOMMatrix.h"
|
||||||
#include "mozilla/dom/ImageBitmap.h"
|
#include "mozilla/dom/ImageBitmap.h"
|
||||||
#include "mozilla/dom/ImageData.h"
|
#include "mozilla/dom/ImageData.h"
|
||||||
#include "mozilla/dom/PBrowserParent.h"
|
#include "mozilla/dom/PBrowserParent.h"
|
||||||
|
|
@ -6579,19 +6580,28 @@ CanvasPath::BezierTo(const gfx::Point& aCP1,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CanvasPath::AddPath(CanvasPath& aCanvasPath, const Optional<NonNull<SVGMatrix>>& aMatrix)
|
CanvasPath::AddPath(CanvasPath& aCanvasPath, const DOMMatrix2DInit& aInit,
|
||||||
|
ErrorResult& aError)
|
||||||
|
|
||||||
{
|
{
|
||||||
RefPtr<gfx::Path> tempPath = aCanvasPath.GetPath(CanvasWindingRule::Nonzero,
|
RefPtr<gfx::Path> tempPath = aCanvasPath.GetPath(CanvasWindingRule::Nonzero,
|
||||||
gfxPlatform::GetPlatform()->ScreenReferenceDrawTarget());
|
gfxPlatform::GetPlatform()->ScreenReferenceDrawTarget());
|
||||||
|
|
||||||
if (aMatrix.WasPassed()) {
|
RefPtr<DOMMatrixReadOnly> matrix =
|
||||||
const SVGMatrix& m = aMatrix.Value();
|
DOMMatrixReadOnly::FromMatrix(GetParentObject(), aInit, aError);
|
||||||
Matrix transform(m.A(), m.B(), m.C(), m.D(), m.E(), m.F());
|
if (aError.Failed()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!transform.IsIdentity()) {
|
Matrix transform(*(matrix->GetInternal2D()));
|
||||||
RefPtr<PathBuilder> tempBuilder = tempPath->TransformedCopyToBuilder(transform, FillRule::FILL_WINDING);
|
|
||||||
tempPath = tempBuilder->Finish();
|
if (!transform.IsFinite()) {
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!transform.IsIdentity()) {
|
||||||
|
RefPtr<PathBuilder> tempBuilder = tempPath->TransformedCopyToBuilder(transform, FillRule::FILL_WINDING);
|
||||||
|
tempPath = tempBuilder->Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
EnsurePathBuilder(); // in case a path is added to itself
|
EnsurePathBuilder(); // in case a path is added to itself
|
||||||
|
|
|
||||||
|
|
@ -335,6 +335,6 @@ interface TextMetrics {
|
||||||
Constructor(DOMString pathString)]
|
Constructor(DOMString pathString)]
|
||||||
interface Path2D
|
interface Path2D
|
||||||
{
|
{
|
||||||
void addPath(Path2D path, optional SVGMatrix transformation);
|
[Throws] void addPath(Path2D path, optional DOMMatrix2DInit transformation);
|
||||||
};
|
};
|
||||||
Path2D implements CanvasPathMethods;
|
Path2D implements CanvasPathMethods;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue