gecko-dev/widget/ThemeChangeKind.h
Emilio Cobos Álvarez d622f54db0 Bug 1668875 - Distinguish theme changes that can and cannot affect style/layout. r=tnikkel
This should make the optimization landed earlier in this bug apply for
some of the NotifyThemeChanged() calls in nsWindow.cpp which are causing
all the extra invalidations.

If we know that system colors/fonts didn't change, we can avoid doing a
bunch of reflow work and the patch from earlier in the bug can avoid
re-rasterizing images too.

Differential Revision: https://phabricator.services.mozilla.com/D94425
2020-10-27 10:24:40 +00:00

36 lines
1.2 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_widget_ThemeChangeKind
#define mozilla_widget_ThemeChangeKind
#include "mozilla/TypedEnumBits.h"
namespace mozilla::widget {
enum class ThemeChangeKind : uint8_t {
// This is the cheapest change, no need to forcibly recompute style and/or
// layout.
MediaQueriesOnly = 0,
// Style needs to forcibly be recomputed because some of the stuff that may
// have changed, like system colors, are reflected in the computed style but
// not in the specified style.
Style = 1 << 0,
// Layout needs to forcibly be recomputed because some of the stuff that may
// have changed is layout-dependent, like system font.
Layout = 1 << 1,
// The union of the two flags above.
StyleAndLayout = Style | Layout,
// For IPC serialization purposes.
AllBits = Style | Layout,
};
MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(ThemeChangeKind)
} // namespace mozilla::widget
#endif