diff -r 000000000000 -r 6474c204b198 widget/windows/nsWindowBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widget/windows/nsWindowBase.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,128 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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 nsWindowBase_h_ +#define nsWindowBase_h_ + +#include "mozilla/EventForwards.h" +#include "nsBaseWidget.h" +#include "nsClassHashtable.h" + +#include +#include "touchinjection_sdk80.h" + +/* + * nsWindowBase - Base class of common methods other classes need to access + * in both win32 and winrt window classes. + */ +class nsWindowBase : public nsBaseWidget +{ +public: + /* + * Return the HWND or null for this widget. + */ + virtual HWND GetWindowHandle() MOZ_FINAL { + return static_cast(GetNativeData(NS_NATIVE_WINDOW)); + } + + /* + * Return the parent window, if it exists. + */ + virtual nsWindowBase* GetParentWindowBase(bool aIncludeOwner) = 0; + + /* + * Return true if this is a top level widget. + */ + virtual bool IsTopLevelWidget() = 0; + + /* + * Init a standard gecko event for this widget. + * @param aEvent the event to initialize. + * @param aPoint message position in physical coordinates. + */ + virtual void InitEvent(mozilla::WidgetGUIEvent& aEvent, + nsIntPoint* aPoint = nullptr) = 0; + + /* + * Dispatch a gecko event for this widget. + * Returns true if it's consumed. Otherwise, false. + */ + virtual bool DispatchWindowEvent(mozilla::WidgetGUIEvent* aEvent) = 0; + + /* + * Dispatch a gecko keyboard event for this widget. This + * is called by KeyboardLayout to dispatch gecko events. + * Returns true if it's consumed. Otherwise, false. + */ + virtual bool DispatchKeyboardEvent(mozilla::WidgetGUIEvent* aEvent) = 0; + + /* + * Dispatch a gecko scroll event for this widget. This + * is called by ScrollHandler to dispatch gecko events. + * Returns true if it's consumed. Otherwise, false. + */ + virtual bool DispatchScrollEvent(mozilla::WidgetGUIEvent* aEvent) = 0; + + /* + * Default dispatch of a plugin event. + */ + virtual bool DispatchPluginEvent(const MSG& aMsg); + + /* + * Returns true if a plugin has focus on this widget. Otherwise, false. + */ + virtual bool PluginHasFocus() const MOZ_FINAL + { + return (mInputContext.mIMEState.mEnabled == IMEState::PLUGIN); + } + + /* + * Touch input injection apis + */ + virtual nsresult SynthesizeNativeTouchPoint(uint32_t aPointerId, + TouchPointerState aPointerState, + nsIntPoint aPointerScreenPoint, + double aPointerPressure, + uint32_t aPointerOrientation); + virtual nsresult ClearNativeTouchSequence(); + + /* + * WM_APPCOMMAND common handler. Sends events via DispatchWindowEvent. + */ + virtual bool HandleAppCommandMsg(WPARAM aWParam, + LPARAM aLParam, + LRESULT *aRetValue); + +protected: + bool DispatchCommandEvent(uint32_t aEventCommand); + static bool InitTouchInjection(); + bool InjectTouchPoint(uint32_t aId, nsIntPoint& aPointerScreenPoint, + POINTER_FLAGS aFlags, uint32_t aPressure = 1024, + uint32_t aOrientation = 90); + + class PointerInfo + { + public: + PointerInfo(int32_t aPointerId, nsIntPoint& aPoint) : + mPointerId(aPointerId), + mPosition(aPoint) + { + } + + int32_t mPointerId; + nsIntPoint mPosition; + }; + + static PLDHashOperator CancelTouchPoints(const unsigned int& aPointerId, nsAutoPtr& aInfo, void* aUserArg); + + nsClassHashtable mActivePointers; + static bool sTouchInjectInitialized; + static InjectTouchInputPtr sInjectTouchFuncPtr; + +protected: + InputContext mInputContext; +}; + +#endif // nsWindowBase_h_