зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1727643 - P3: Make numeric value methods abstract in Accessible and wire it thru. r=morgan
Differential Revision: https://phabricator.services.mozilla.com/D123697
This commit is contained in:
Родитель
17e9670742
Коммит
2c5a1217db
|
@ -115,6 +115,11 @@ class Accessible {
|
|||
*/
|
||||
virtual ENameValueFlag Name(nsString& aName) const = 0;
|
||||
|
||||
virtual double CurValue() const = 0;
|
||||
virtual double MinValue() const = 0;
|
||||
virtual double MaxValue() const = 0;
|
||||
virtual double Step() const = 0;
|
||||
|
||||
// Type "is" methods
|
||||
|
||||
bool IsDoc() const { return HasGenericType(eDocument); }
|
||||
|
|
|
@ -702,10 +702,10 @@ class LocalAccessible : public nsISupports, public Accessible {
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Value (numeric value interface)
|
||||
|
||||
virtual double MaxValue() const;
|
||||
virtual double MinValue() const;
|
||||
virtual double CurValue() const;
|
||||
virtual double Step() const;
|
||||
virtual double MaxValue() const override;
|
||||
virtual double MinValue() const override;
|
||||
virtual double CurValue() const override;
|
||||
virtual double Step() const override;
|
||||
virtual bool SetCurValue(double aValue);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -175,6 +175,42 @@ ENameValueFlag RemoteAccessibleBase<Derived>::Name(nsString& aName) const {
|
|||
return eNameOK;
|
||||
}
|
||||
|
||||
template <class Derived>
|
||||
double RemoteAccessibleBase<Derived>::CurValue() const {
|
||||
if (auto value = mCachedFields->GetAttribute<double>(nsGkAtoms::value)) {
|
||||
return *value;
|
||||
}
|
||||
|
||||
return UnspecifiedNaN<double>();
|
||||
}
|
||||
|
||||
template <class Derived>
|
||||
double RemoteAccessibleBase<Derived>::MinValue() const {
|
||||
if (auto min = mCachedFields->GetAttribute<double>(nsGkAtoms::min)) {
|
||||
return *min;
|
||||
}
|
||||
|
||||
return UnspecifiedNaN<double>();
|
||||
}
|
||||
|
||||
template <class Derived>
|
||||
double RemoteAccessibleBase<Derived>::MaxValue() const {
|
||||
if (auto max = mCachedFields->GetAttribute<double>(nsGkAtoms::max)) {
|
||||
return *max;
|
||||
}
|
||||
|
||||
return UnspecifiedNaN<double>();
|
||||
}
|
||||
|
||||
template <class Derived>
|
||||
double RemoteAccessibleBase<Derived>::Step() const {
|
||||
if (auto step = mCachedFields->GetAttribute<double>(nsGkAtoms::step)) {
|
||||
return *step;
|
||||
}
|
||||
|
||||
return UnspecifiedNaN<double>();
|
||||
}
|
||||
|
||||
template class RemoteAccessibleBase<RemoteAccessible>;
|
||||
|
||||
} // namespace a11y
|
||||
|
|
|
@ -164,8 +164,15 @@ class RemoteAccessibleBase : public Accessible {
|
|||
return HasGenericType(eNumericValue);
|
||||
}
|
||||
|
||||
// Methods that potentially access a cache.
|
||||
|
||||
virtual ENameValueFlag Name(nsString& aName) const override;
|
||||
|
||||
virtual double CurValue() const override;
|
||||
virtual double MinValue() const override;
|
||||
virtual double MaxValue() const override;
|
||||
virtual double Step() const override;
|
||||
|
||||
/**
|
||||
* Allow the platform to store a pointers worth of data on us.
|
||||
*/
|
||||
|
|
|
@ -239,11 +239,11 @@ KeyBinding AccessKey();
|
|||
KeyBinding KeyboardShortcut();
|
||||
void AtkKeyBinding(nsString& aBinding);
|
||||
|
||||
double CurValue();
|
||||
double CurValue() const override;
|
||||
double MinValue() const override;
|
||||
double MaxValue() const override;
|
||||
double Step() const override;
|
||||
bool SetCurValue(double aValue);
|
||||
double MinValue();
|
||||
double MaxValue();
|
||||
double Step();
|
||||
|
||||
void TakeFocus();
|
||||
RemoteAccessible* FocusedChild();
|
||||
|
|
|
@ -744,7 +744,11 @@ void RemoteAccessible::AtkKeyBinding(nsString& aBinding) {
|
|||
Unused << mDoc->SendAtkKeyBinding(mID, &aBinding);
|
||||
}
|
||||
|
||||
double RemoteAccessible::CurValue() {
|
||||
double RemoteAccessible::CurValue() const {
|
||||
if (mCachedFields) {
|
||||
return RemoteAccessibleBase<RemoteAccessible>::CurValue();
|
||||
}
|
||||
|
||||
double val = UnspecifiedNaN<double>();
|
||||
Unused << mDoc->SendCurValue(mID, &val);
|
||||
return val;
|
||||
|
@ -756,19 +760,31 @@ bool RemoteAccessible::SetCurValue(double aValue) {
|
|||
return success;
|
||||
}
|
||||
|
||||
double RemoteAccessible::MinValue() {
|
||||
double RemoteAccessible::MinValue() const {
|
||||
if (mCachedFields) {
|
||||
return RemoteAccessibleBase<RemoteAccessible>::MinValue();
|
||||
}
|
||||
|
||||
double val = UnspecifiedNaN<double>();
|
||||
Unused << mDoc->SendMinValue(mID, &val);
|
||||
return val;
|
||||
}
|
||||
|
||||
double RemoteAccessible::MaxValue() {
|
||||
double RemoteAccessible::MaxValue() const {
|
||||
if (mCachedFields) {
|
||||
return RemoteAccessibleBase<RemoteAccessible>::MaxValue();
|
||||
}
|
||||
|
||||
double val = UnspecifiedNaN<double>();
|
||||
Unused << mDoc->SendMaxValue(mID, &val);
|
||||
return val;
|
||||
}
|
||||
|
||||
double RemoteAccessible::Step() {
|
||||
double RemoteAccessible::Step() const {
|
||||
if (mCachedFields) {
|
||||
return RemoteAccessibleBase<RemoteAccessible>::Step();
|
||||
}
|
||||
|
||||
double step = UnspecifiedNaN<double>();
|
||||
Unused << mDoc->SendStep(mID, &step);
|
||||
return step;
|
||||
|
|
|
@ -160,7 +160,11 @@ void RemoteAccessible::Value(nsString& aValue) const {
|
|||
aValue = (wchar_t*)resultWrap;
|
||||
}
|
||||
|
||||
double RemoteAccessible::Step() {
|
||||
double RemoteAccessible::Step() const {
|
||||
if (mCachedFields) {
|
||||
return RemoteAccessibleBase<RemoteAccessible>::Step();
|
||||
}
|
||||
|
||||
RefPtr<IGeckoCustom> custom = QueryInterface<IGeckoCustom>(this);
|
||||
if (!custom) {
|
||||
return 0;
|
||||
|
@ -394,7 +398,11 @@ nsTArray<RemoteAccessible*> RemoteAccessible::RelationByType(
|
|||
return proxies;
|
||||
}
|
||||
|
||||
double RemoteAccessible::CurValue() {
|
||||
double RemoteAccessible::CurValue() const {
|
||||
if (mCachedFields) {
|
||||
return RemoteAccessibleBase<RemoteAccessible>::CurValue();
|
||||
}
|
||||
|
||||
RefPtr<IAccessibleValue> acc = QueryInterface<IAccessibleValue>(this);
|
||||
if (!acc) {
|
||||
return UnspecifiedNaN<double>();
|
||||
|
@ -423,7 +431,11 @@ bool RemoteAccessible::SetCurValue(double aValue) {
|
|||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
double RemoteAccessible::MinValue() {
|
||||
double RemoteAccessible::MinValue() const {
|
||||
if (mCachedFields) {
|
||||
return RemoteAccessibleBase<RemoteAccessible>::MinValue();
|
||||
}
|
||||
|
||||
RefPtr<IAccessibleValue> acc = QueryInterface<IAccessibleValue>(this);
|
||||
if (!acc) {
|
||||
return UnspecifiedNaN<double>();
|
||||
|
@ -438,7 +450,11 @@ double RemoteAccessible::MinValue() {
|
|||
return minimumValue.dblVal;
|
||||
}
|
||||
|
||||
double RemoteAccessible::MaxValue() {
|
||||
double RemoteAccessible::MaxValue() const {
|
||||
if (mCachedFields) {
|
||||
return RemoteAccessibleBase<RemoteAccessible>::MaxValue();
|
||||
}
|
||||
|
||||
RefPtr<IAccessibleValue> acc = QueryInterface<IAccessibleValue>(this);
|
||||
if (!acc) {
|
||||
return UnspecifiedNaN<double>();
|
||||
|
|
Загрузка…
Ссылка в новой задаче