mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
289ca90dc4
Partially implement some restyling APIs to take rid of some gecko-only code paths. MozReview-Commit-ID: L5i6Kr2Qars
98 lines
2.6 KiB
C++
98 lines
2.6 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_RestyleManagerBase_h
|
|
#define mozilla_RestyleManagerBase_h
|
|
|
|
#include "nsChangeHint.h"
|
|
|
|
namespace mozilla {
|
|
|
|
class ServoRestyleManager;
|
|
class RestyleManager;
|
|
|
|
/**
|
|
* Class for sharing data and logic common to both RestyleManager and
|
|
* ServoRestyleManager.
|
|
*/
|
|
class RestyleManagerBase
|
|
{
|
|
protected:
|
|
explicit RestyleManagerBase(nsPresContext* aPresContext);
|
|
|
|
public:
|
|
typedef mozilla::dom::Element Element;
|
|
|
|
// Get an integer that increments every time we process pending restyles.
|
|
// The value is never 0.
|
|
uint32_t GetRestyleGeneration() const { return mRestyleGeneration; }
|
|
|
|
// Get an integer that increments every time there is a style change
|
|
// as a result of a change to the :hover content state.
|
|
uint32_t GetHoverGeneration() const { return mHoverGeneration; }
|
|
|
|
bool ObservingRefreshDriver() const { return mObservingRefreshDriver; }
|
|
|
|
void SetObservingRefreshDriver(bool aObserving) {
|
|
mObservingRefreshDriver = aObserving;
|
|
}
|
|
|
|
void Disconnect() { mPresContext = nullptr; }
|
|
|
|
protected:
|
|
void ContentStateChangedInternal(Element* aElement,
|
|
EventStates aStateMask,
|
|
nsChangeHint* aOutChangeHint,
|
|
nsRestyleHint* aOutRestyleHint);
|
|
|
|
bool IsDisconnected() { return mPresContext == nullptr; }
|
|
|
|
void IncrementHoverGeneration() {
|
|
++mHoverGeneration;
|
|
}
|
|
|
|
void IncrementRestyleGeneration() {
|
|
if (++mRestyleGeneration == 0) {
|
|
// Keep mRestyleGeneration from being 0, since that's what
|
|
// nsPresContext::GetRestyleGeneration returns when it no
|
|
// longer has a RestyleManager.
|
|
++mRestyleGeneration;
|
|
}
|
|
}
|
|
|
|
nsPresContext* PresContext() const {
|
|
MOZ_ASSERT(mPresContext);
|
|
return mPresContext;
|
|
}
|
|
|
|
nsCSSFrameConstructor* FrameConstructor() const {
|
|
return PresContext()->FrameConstructor();
|
|
}
|
|
|
|
inline bool IsGecko() const {
|
|
return !IsServo();
|
|
}
|
|
|
|
inline bool IsServo() const {
|
|
#ifdef MOZ_STYLO
|
|
return PresContext()->StyleSet()->IsServo();
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
private:
|
|
nsPresContext* mPresContext; // weak, can be null after Disconnect().
|
|
uint32_t mRestyleGeneration;
|
|
uint32_t mHoverGeneration;
|
|
// True if we're already waiting for a refresh notification.
|
|
bool mObservingRefreshDriver;
|
|
};
|
|
|
|
} // namespace mozilla
|
|
|
|
#endif
|