mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-24 18:55:30 +00:00
79d933ec34
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)
101 lines
3.1 KiB
C++
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__
|