fune/layout/style/nsROCSSPrimitiveValue.h
Emilio Cobos Álvarez 011d524740 Bug 1646336 - Don't unnecessarily lose precision in nsComputedDOMStyle. r=hiro
We're converting to nscoord in some places unnecessarily, reducing the
precision of the computed value we return.

This makes some tests unnecessarily fail if we change the base of
nscoord.

Differential Revision: https://phabricator.services.mozilla.com/D79996
2020-06-18 00:42:47 +00:00

99 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/. */
/* DOM object representing values in DOM computed style */
#ifndef nsROCSSPrimitiveValue_h___
#define nsROCSSPrimitiveValue_h___
#include "CSSValue.h"
#include "nsCoord.h"
#include "nsString.h"
class nsIURI;
/**
* Read-only CSS primitive value - a DOM object representing values in DOM
* computed style.
*/
class nsROCSSPrimitiveValue final : public mozilla::dom::CSSValue {
public:
enum : uint16_t {
CSS_UNKNOWN,
CSS_NUMBER,
CSS_PERCENTAGE,
CSS_EMS,
CSS_EXS,
CSS_PX,
CSS_CM,
CSS_MM,
CSS_IN,
CSS_PT,
CSS_PC,
CSS_DEG,
CSS_MS,
CSS_S,
CSS_HZ,
CSS_KHZ,
CSS_DIMENSION,
CSS_STRING,
CSS_URI,
CSS_RGBCOLOR,
CSS_NUMBER_INT32,
CSS_NUMBER_UINT32,
};
// CSSValue
void GetCssText(nsString& aText, mozilla::ErrorResult& aRv) final;
uint16_t CssValueType() const final;
// CSSPrimitiveValue
uint16_t PrimitiveType();
// nsROCSSPrimitiveValue
nsROCSSPrimitiveValue();
void SetNumber(float aValue);
void SetNumber(int32_t aValue);
void SetNumber(uint32_t aValue);
void SetPercent(float aValue);
void SetDegree(float aValue);
void SetPixels(float aValue);
void SetAppUnits(nscoord aValue);
void SetAppUnits(float aValue);
void SetString(const nsACString& aString);
void SetString(const nsAString& aString);
template <size_t N>
void SetString(const char (&aString)[N]) {
SetString(nsLiteralCString(aString));
}
void SetURI(nsIURI* aURI);
void SetTime(float aValue);
void Reset();
virtual ~nsROCSSPrimitiveValue();
protected:
uint16_t mType;
union {
float mFloat;
int32_t mInt32;
uint32_t mUint32;
char16_t* mString;
nsIURI* MOZ_OWNING_REF mURI;
} mValue;
};
inline nsROCSSPrimitiveValue* mozilla::dom::CSSValue::AsPrimitiveValue() {
return CssValueType() == mozilla::dom::CSSValue::CSS_PRIMITIVE_VALUE
? static_cast<nsROCSSPrimitiveValue*>(this)
: nullptr;
}
#endif /* nsROCSSPrimitiveValue_h___ */