mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
ae892e0614
HyperTextAccessibleWrap r=davidb This is rather unfortunate, AccessibleWrap itself wastes a fair amount of space when it just stores a pointer to a proxy, and this makes it waste even more. However this is rather necessary for now because we need to be able to downcast classes such as ia2AccessibleText to one type that works both when the accessible is pointing to a proxy and when it is not. That means HyperTextAccessibleWrap and HyperTextProxyAccessibleWrap need to have the same layout.
57 lines
1.3 KiB
C++
57 lines
1.3 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=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_A11Y_ProxyWrappers_h
|
|
#define MOZILLA_A11Y_ProxyWrappers_h
|
|
|
|
#include "HyperTextAccessible.h"
|
|
|
|
namespace mozilla {
|
|
namespace a11y {
|
|
|
|
class ProxyAccessibleWrap : public AccessibleWrap
|
|
{
|
|
public:
|
|
ProxyAccessibleWrap(ProxyAccessible* aProxy) :
|
|
AccessibleWrap(nullptr, nullptr)
|
|
{
|
|
mType = eProxyType;
|
|
mBits.proxy = aProxy;
|
|
}
|
|
|
|
virtual void Shutdown() override
|
|
{
|
|
mBits.proxy = nullptr;
|
|
}
|
|
};
|
|
|
|
class HyperTextProxyAccessibleWrap : public HyperTextAccessibleWrap
|
|
{
|
|
HyperTextProxyAccessibleWrap(ProxyAccessible* aProxy) :
|
|
HyperTextAccessibleWrap(nullptr, nullptr)
|
|
{
|
|
mType = eProxyType;
|
|
mBits.proxy = aProxy;
|
|
}
|
|
|
|
virtual void Shutdown() override { mBits.proxy = nullptr; }
|
|
};
|
|
|
|
template<typename T>
|
|
inline ProxyAccessible*
|
|
HyperTextProxyFor(T* aWrapper)
|
|
{
|
|
static_assert(mozilla::IsBaseOf<IUnknown, T>::value, "only IAccessible* should be passed in");
|
|
auto wrapper = static_cast<HyperTextProxyAccessibleWrap*>(aWrapper);
|
|
return wrapper->IsProxy() ? wrapper->Proxy() : nullptr;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
#endif
|