gecko/accessible/windows/ProxyWrappers.h
Trevor Saunders ae892e0614 bug 1192353 - make HyperTextProxyAccessibleWrap inherit from
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.
2015-08-19 12:48:57 -04:00

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