Bug 1738926 Part 1: Check if sublayers need to be rebuilt. r=mstange
[gecko.git] / accessible / mac / MacUtils.mm
blob403599468f28bf058535b3e3b790d3da71ff4dcc
1 /* clang-format off */
2 /* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
3 /* clang-format on */
4 /* This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
8 #import "MacUtils.h"
10 #include "LocalAccessible.h"
11 #include "nsCocoaUtils.h"
12 #include "mozilla/a11y/PDocAccessible.h"
14 namespace mozilla {
15 namespace a11y {
16 namespace utils {
18 // convert an array of Gecko accessibles to an NSArray of native accessibles
19 NSArray<mozAccessible*>* ConvertToNSArray(nsTArray<LocalAccessible*>& aArray) {
20   NSMutableArray* nativeArray = [[[NSMutableArray alloc] init] autorelease];
22   // iterate through the list, and get each native accessible.
23   size_t totalCount = aArray.Length();
24   for (size_t i = 0; i < totalCount; i++) {
25     LocalAccessible* curAccessible = aArray.ElementAt(i);
26     mozAccessible* curNative = GetNativeFromGeckoAccessible(curAccessible);
27     if (curNative)
28       [nativeArray addObject:GetObjectOrRepresentedView(curNative)];
29   }
31   return nativeArray;
34 // convert an array of Gecko proxy accessibles to an NSArray of native
35 // accessibles
36 NSArray<mozAccessible*>* ConvertToNSArray(nsTArray<RemoteAccessible*>& aArray) {
37   NSMutableArray* nativeArray = [[[NSMutableArray alloc] init] autorelease];
39   // iterate through the list, and get each native accessible.
40   size_t totalCount = aArray.Length();
41   for (size_t i = 0; i < totalCount; i++) {
42     RemoteAccessible* curAccessible = aArray.ElementAt(i);
43     mozAccessible* curNative = GetNativeFromGeckoAccessible(curAccessible);
44     if (curNative)
45       [nativeArray addObject:GetObjectOrRepresentedView(curNative)];
46   }
48   return nativeArray;
51 /**
52  * Get a localized string from the a11y string bundle.
53  * Return nil if not found.
54  */
55 NSString* LocalizedString(const nsString& aString) {
56   nsString text;
58   LocalAccessible::TranslateString(aString, text);
60   return text.IsEmpty() ? nil : nsCocoaUtils::ToNSString(text);
63 NSString* GetAccAttr(mozAccessible* aNativeAccessible, nsAtom* aAttrName) {
64   nsAutoString result;
65   RefPtr<AccAttributes> attributes;
66   if (LocalAccessible* acc = [aNativeAccessible geckoAccessible]->AsLocal()) {
67     attributes = acc->Attributes();
68   } else if (RemoteAccessible* proxy =
69                  [aNativeAccessible geckoAccessible]->AsRemote()) {
70     proxy->Attributes(&attributes);
71   }
73   attributes->GetAttribute(aAttrName, result);
75   if (!result.IsEmpty()) {
76     return nsCocoaUtils::ToNSString(result);
77   }
79   return nil;