gecko-dev/widget/windows/InkCollector.h
Cosmin Sabou 79d933ec34 Backed out 22 changesets (bug 1399787) for shutdown leaks on windows 7 debug tc-M without e10s r=backout on a CLOSED TREE
Backed out changeset 463d676df5da (bug 1399787)
Backed out changeset fc9776a2605d (bug 1399787)
Backed out changeset 2e91a90dfbc3 (bug 1399787)
Backed out changeset e82ab72f71ee (bug 1399787)
Backed out changeset d7fef200e8b9 (bug 1399787)
Backed out changeset a7d70f7f3335 (bug 1399787)
Backed out changeset 2800f9d20d96 (bug 1399787)
Backed out changeset 9dfa404abf9d (bug 1399787)
Backed out changeset 09b3c172a01e (bug 1399787)
Backed out changeset f9fd3e750636 (bug 1399787)
Backed out changeset 01284c55bf8a (bug 1399787)
Backed out changeset c2ab1b454283 (bug 1399787)
Backed out changeset e7bfa51404c5 (bug 1399787)
Backed out changeset 3fd2a734f887 (bug 1399787)
Backed out changeset ef21f295db3f (bug 1399787)
Backed out changeset c186893ce0fc (bug 1399787)
Backed out changeset 323da3bddaaa (bug 1399787)
Backed out changeset 3b89f189edff (bug 1399787)
Backed out changeset a47bd86c35ee (bug 1399787)
Backed out changeset 558526301a4c (bug 1399787)
Backed out changeset baa99fb50ba9 (bug 1399787)
Backed out changeset 6d82ed0ba805 (bug 1399787)
2017-12-08 13:09:56 +02:00

101 lines
3.1 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* vim: set ts=2 sw=2 et tw=78:
* 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 InkCollector_h__
#define InkCollector_h__
#include <msinkaut.h>
#include "mozilla/StaticPtr.h"
#define MOZ_WM_PEN_LEAVES_HOVER_OF_DIGITIZER WM_USER + 0x83
class InkCollectorEvent final : public _IInkCollectorEvents
{
public:
// IUnknown
HRESULT __stdcall QueryInterface(REFIID aRiid, void **aObject);
virtual ULONG STDMETHODCALLTYPE AddRef() { return ++mRefCount; }
virtual ULONG STDMETHODCALLTYPE Release()
{
MOZ_ASSERT(mRefCount);
if (!--mRefCount) {
delete this;
return 0;
}
return mRefCount;
}
protected:
// IDispatch
STDMETHOD(GetTypeInfoCount)(UINT* aInfo) { return E_NOTIMPL; }
STDMETHOD(GetTypeInfo)(UINT aInfo, LCID aId, ITypeInfo** aTInfo) { return E_NOTIMPL; }
STDMETHOD(GetIDsOfNames)(REFIID aRiid, LPOLESTR* aStrNames, UINT aNames,
LCID aId, DISPID* aDispId) { return E_NOTIMPL; }
STDMETHOD(Invoke)(DISPID aDispIdMember, REFIID aRiid,
LCID aId, WORD wFlags,
DISPPARAMS* aDispParams, VARIANT* aVarResult,
EXCEPINFO* aExcepInfo, UINT* aArgErr);
// InkCollectorEvent
void CursorOutOfRange(IInkCursor* aCursor) const;
bool IsHardProximityTablet(IInkTablet* aTablet) const;
private:
uint32_t mRefCount = 0;
~InkCollectorEvent() = default;
};
class InkCollector
{
public:
~InkCollector();
void Shutdown();
HWND GetTarget();
void SetTarget(HWND aTargetWindow);
void ClearTarget();
uint16_t GetPointerId(); // 0 shows that there is no existing pen.
void SetPointerId(uint16_t aPointerId);
void ClearPointerId();
static mozilla::StaticAutoPtr<InkCollector> sInkCollector;
protected:
void Initialize();
void OnInitialize();
void Enable(bool aNewState);
private:
RefPtr<IUnknown> mMarshaller;
RefPtr<IInkCollector> mInkCollector;
RefPtr<IConnectionPoint> mConnectionPoint;
RefPtr<InkCollectorEvent> mInkCollectorEvent;
HWND mTargetWindow = 0;
DWORD mCookie = 0;
bool mComInitialized = false;
bool mEnabled = false;
// This value holds the previous pointerId of the pen, and is used by the
// nsWindow when processing a MOZ_WM_PEN_LEAVES_HOVER_OF_DIGITIZER which
// indicates that a pen leaves the digitizer.
// TODO: If we move our implementation to window pointer input messages, then
// we no longer need this value, since the pointerId can be retrieved from the
// window message, please refer to
// https://msdn.microsoft.com/en-us/library/windows/desktop/hh454916(v=vs.85).aspx
// NOTE: The pointerId of a pen shouldn't be 0 on a Windows platform, since 0
// is reserved of the mouse, please refer to
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms703320(v=vs.85).aspx
uint16_t mPointerId = 0;
};
#endif // InkCollector_h__