diff options
Diffstat (limited to 'gfx/layers/apz/util/InputAPZContext.h')
-rw-r--r-- | gfx/layers/apz/util/InputAPZContext.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/gfx/layers/apz/util/InputAPZContext.h b/gfx/layers/apz/util/InputAPZContext.h new file mode 100644 index 0000000000..2793607f04 --- /dev/null +++ b/gfx/layers/apz/util/InputAPZContext.h @@ -0,0 +1,76 @@ +/* -*- 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_layers_InputAPZContext_h +#define mozilla_layers_InputAPZContext_h + +#include "mozilla/EventForwards.h" +#include "mozilla/layers/ScrollableLayerGuid.h" + +namespace mozilla { +namespace layers { + +// InputAPZContext is used to communicate various pieces of information +// around the codebase without having to plumb it through lots of functions +// and codepaths. Conceptually it is attached to a WidgetInputEvent that is +// relevant to APZ. +// +// There are two types of information bits propagated using this class. One +// type is propagated "downwards" (from a process entry point like nsBaseWidget +// or BrowserChild) into deeper code that is run during complicated operations +// like event dispatch. The other type is information that is propagated +// "upwards", from the deeper code back to the entry point. +class MOZ_STACK_CLASS InputAPZContext { + private: + // State that is propagated downwards from InputAPZContext creation into + // "deeper" code. + static ScrollableLayerGuid sGuid; + static uint64_t sBlockId; + static nsEventStatus sApzResponse; + static bool sPendingLayerization; + + // State that is set in deeper code and propagated upwards. + static bool sRoutedToChildProcess; + // True if the WidgetInputEvent was dropped (which means the event wasn't + // dispatched) on the main-thread. + static bool sDropped; + + public: + // Functions to access downwards-propagated data + static ScrollableLayerGuid GetTargetLayerGuid(); + static uint64_t GetInputBlockId(); + static nsEventStatus GetApzResponse(); + static bool HavePendingLayerization(); + + // Functions to access upwards-propagated data + static bool WasRoutedToChildProcess(); + + static bool WasDropped(); + + // Constructor sets the data to be propagated downwards + InputAPZContext(const ScrollableLayerGuid& aGuid, const uint64_t& aBlockId, + const nsEventStatus& aApzResponse, + bool aPendingLayerization = false); + ~InputAPZContext(); + + // Functions to set data to be propagated upwards + static void SetRoutedToChildProcess(); + static void SetDropped(); + + private: + ScrollableLayerGuid mOldGuid; + uint64_t mOldBlockId; + nsEventStatus mOldApzResponse; + bool mOldPendingLayerization; + + bool mOldRoutedToChildProcess; + bool mOldDropped; +}; + +} // namespace layers +} // namespace mozilla + +#endif /* mozilla_layers_InputAPZContext_h */ |