Bug 1781046 - Let elements have a last remembered size. r=emilio

Differential Revision: https://phabricator.services.mozilla.com/D154322
This commit is contained in:
Oriol Brufau 2022-08-12 15:06:42 +00:00
parent 58e7783c9d
commit d780913e08
3 changed files with 47 additions and 0 deletions

View File

@ -482,6 +482,26 @@ void Element::SetShadowRoot(ShadowRoot* aShadowRoot) {
slots->mShadowRoot = aShadowRoot;
}
void Element::SetLastRememberedBSize(float aBSize) {
ExtendedDOMSlots()->mLastRememberedBSize = Some(aBSize);
}
void Element::SetLastRememberedISize(float aISize) {
ExtendedDOMSlots()->mLastRememberedISize = Some(aISize);
}
void Element::RemoveLastRememberedBSize() {
if (nsExtendedDOMSlots* slots = GetExistingExtendedDOMSlots()) {
slots->mLastRememberedBSize.reset();
}
}
void Element::RemoveLastRememberedISize() {
if (nsExtendedDOMSlots* slots = GetExistingExtendedDOMSlots()) {
slots->mLastRememberedISize.reset();
}
}
void Element::Blur(mozilla::ErrorResult& aError) {
if (!ShouldBlur(this)) {
return;

View File

@ -298,6 +298,11 @@ class Element : public FragmentOrElement {
*/
void SetShadowRoot(ShadowRoot* aShadowRoot);
void SetLastRememberedBSize(float aBSize);
void SetLastRememberedISize(float aISize);
void RemoveLastRememberedBSize();
void RemoveLastRememberedISize();
/**
* Make focus on this element.
*/
@ -1311,6 +1316,21 @@ class Element : public FragmentOrElement {
return slots ? slots->mShadowRoot.get() : nullptr;
}
const Maybe<float> GetLastRememberedBSize() const {
const nsExtendedDOMSlots* slots = GetExistingExtendedDOMSlots();
return slots ? slots->mLastRememberedBSize : Nothing();
}
const Maybe<float> GetLastRememberedISize() const {
const nsExtendedDOMSlots* slots = GetExistingExtendedDOMSlots();
return slots ? slots->mLastRememberedISize : Nothing();
}
bool HasLastRememberedBSize() const {
return GetLastRememberedBSize().isSome();
}
bool HasLastRememberedISize() const {
return GetLastRememberedISize().isSome();
}
private:
// DO NOT USE THIS FUNCTION directly in C++. This function is supposed to be
// called from JS. Use PresShell::ScrollContentIntoView instead.

View File

@ -197,6 +197,13 @@ class FragmentOrElement : public nsIContent {
* Web components custom element data.
*/
UniquePtr<CustomElementData> mCustomElementData;
/**
* Last remembered size (in CSS pixels) for the element.
* @see {@link https://drafts.csswg.org/css-sizing-4/#last-remembered}
*/
Maybe<float> mLastRememberedBSize;
Maybe<float> mLastRememberedISize;
};
class nsDOMSlots : public nsIContent::nsContentSlots {