gecko-dev/layout/base/GeometryUtils.h
Brad Werth 4c4fadb3ed Bug 1593756 Part 1: Add a new method GetBoxQuadsFromWindowOrigin. r=emilio,hiro
Window space is not a sensible space for CSS points, as returned by
getBoxQuads, since the CSS points are relative to window origin and not the
layout origin. This new method is useful in paired calling patterns, where
the returned quads are further translated by the position of the document
node relative to the window origin. Later parts of this patch demonstrate
this calling pattern in a test.

Differential Revision: https://phabricator.services.mozilla.com/D52788

--HG--
extra : moz-landing-system : lando
2020-03-04 00:45:38 +00:00

68 lines
2.3 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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/. */
#ifndef MOZILLA_GEOMETRYUTILS_H_
#define MOZILLA_GEOMETRYUTILS_H_
#include "mozilla/ErrorResult.h"
#include "nsTArray.h"
#include "nsCOMPtr.h"
/**
* This file defines utility functions for converting between layout
* coordinate systems.
*/
class nsINode;
namespace mozilla {
namespace dom {
struct BoxQuadOptions;
struct ConvertCoordinateOptions;
class DOMQuad;
class DOMRectReadOnly;
class DOMPoint;
struct DOMPointInit;
class OwningTextOrElementOrDocument;
class TextOrElementOrDocument;
enum class CallerType : uint32_t;
} // namespace dom
typedef dom::TextOrElementOrDocument GeometryNode;
typedef dom::OwningTextOrElementOrDocument OwningGeometryNode;
/**
* Computes quads for aNode using aOptions, according to
* GeometryUtils.getBoxQuads. May set an error in aRv.
*/
void GetBoxQuads(nsINode* aNode, const dom::BoxQuadOptions& aOptions,
nsTArray<RefPtr<dom::DOMQuad> >& aResult,
dom::CallerType aCallerType, ErrorResult& aRv);
void GetBoxQuadsFromWindowOrigin(nsINode* aNode,
const dom::BoxQuadOptions& aOptions,
nsTArray<RefPtr<dom::DOMQuad> >& aResult,
ErrorResult& aRv);
already_AddRefed<dom::DOMQuad> ConvertQuadFromNode(
nsINode* aTo, dom::DOMQuad& aQuad, const GeometryNode& aFrom,
const dom::ConvertCoordinateOptions& aOptions, dom::CallerType aCallerType,
ErrorResult& aRv);
already_AddRefed<dom::DOMQuad> ConvertRectFromNode(
nsINode* aTo, dom::DOMRectReadOnly& aRect, const GeometryNode& aFrom,
const dom::ConvertCoordinateOptions& aOptions, dom::CallerType aCallerType,
ErrorResult& aRv);
already_AddRefed<dom::DOMPoint> ConvertPointFromNode(
nsINode* aTo, const dom::DOMPointInit& aPoint, const GeometryNode& aFrom,
const dom::ConvertCoordinateOptions& aOptions, dom::CallerType aCallerType,
ErrorResult& aRv);
} // namespace mozilla
#endif /* MOZILLA_GEOMETRYUTILS_H_ */