Browse Source

iOS Accessibility: Create UIAccessibilityReadingContent protocol-conforming classes dynamically for text elements

v6.1.6
ed 4 years ago
parent
commit
2abf68d866
1 changed files with 28 additions and 19 deletions
  1. +28
    -19
      modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm

+ 28
- 19
modules/juce_gui_basics/native/accessibility/juce_ios_Accessibility.mm View File

@@ -176,16 +176,21 @@ private:
class AccessibilityElement : public AccessibleObjCClass<UIAccessibilityElement> class AccessibilityElement : public AccessibleObjCClass<UIAccessibilityElement>
{ {
public: public:
enum class Type { defaultElement, textElement };
static Holder create (AccessibilityHandler& handler) static Holder create (AccessibilityHandler& handler)
{ {
static AccessibilityElement cls;
Holder element ([cls.createInstance() initWithAccessibilityContainer: (id) handler.getComponent().getWindowHandle()]);
static AccessibilityElement cls { Type::defaultElement };
static AccessibilityElement textCls { Type::textElement };
id instance = (hasEditableText (handler) ? textCls : cls).createInstance();
Holder element ([instance initWithAccessibilityContainer: (id) handler.getComponent().getWindowHandle()]);
object_setInstanceVariable (element.get(), "handler", &handler); object_setInstanceVariable (element.get(), "handler", &handler);
return element; return element;
} }
private:
AccessibilityElement()
AccessibilityElement (Type elementType)
{ {
addMethod (@selector (isAccessibilityElement), getIsAccessibilityElement, "c@:"); addMethod (@selector (isAccessibilityElement), getIsAccessibilityElement, "c@:");
addMethod (@selector (accessibilityContainer), getAccessibilityContainer, "@@:"); addMethod (@selector (accessibilityContainer), getAccessibilityContainer, "@@:");
@@ -205,24 +210,28 @@ private:
addMethod (@selector (accessibilityIncrement), accessibilityPerformIncrement, "c@:"); addMethod (@selector (accessibilityIncrement), accessibilityPerformIncrement, "c@:");
addMethod (@selector (accessibilityDecrement), accessibilityPerformDecrement, "c@:"); addMethod (@selector (accessibilityDecrement), accessibilityPerformDecrement, "c@:");
addMethod (@selector (accessibilityLineNumberForPoint:), getAccessibilityLineNumberForPoint, "i@:", @encode (CGPoint));
addMethod (@selector (accessibilityContentForLineNumber:), getAccessibilityContentForLineNumber, "@@:i");
addMethod (@selector (accessibilityFrameForLineNumber:), getAccessibilityFrameForLineNumber, @encode (CGRect), "@:i");
addMethod (@selector (accessibilityPageContent), getAccessibilityPageContent, "@@:");
addMethod (@selector (accessibilityDataTableCellElementForRow:column:), getAccessibilityDataTableCellElementForRowColumn, "@@:ii"); addMethod (@selector (accessibilityDataTableCellElementForRow:column:), getAccessibilityDataTableCellElementForRowColumn, "@@:ii");
addMethod (@selector (accessibilityRowCount), getAccessibilityRowCount, "i@:"); addMethod (@selector (accessibilityRowCount), getAccessibilityRowCount, "i@:");
addMethod (@selector (accessibilityColumnCount), getAccessibilityColumnCount, "i@:"); addMethod (@selector (accessibilityColumnCount), getAccessibilityColumnCount, "i@:");
addMethod (@selector (accessibilityRowRange), getAccessibilityRowIndexRange, @encode (NSRange), "@:"); addMethod (@selector (accessibilityRowRange), getAccessibilityRowIndexRange, @encode (NSRange), "@:");
addMethod (@selector (accessibilityColumnRange), getAccessibilityColumnIndexRange, @encode (NSRange), "@:"); addMethod (@selector (accessibilityColumnRange), getAccessibilityColumnIndexRange, @encode (NSRange), "@:");
addProtocol (@protocol (UIAccessibilityReadingContent));
if (elementType == Type::textElement)
{
addMethod (@selector (accessibilityLineNumberForPoint:), getAccessibilityLineNumberForPoint, "i@:", @encode (CGPoint));
addMethod (@selector (accessibilityContentForLineNumber:), getAccessibilityContentForLineNumber, "@@:i");
addMethod (@selector (accessibilityFrameForLineNumber:), getAccessibilityFrameForLineNumber, @encode (CGRect), "@:i");
addMethod (@selector (accessibilityPageContent), getAccessibilityPageContent, "@@:");
addProtocol (@protocol (UIAccessibilityReadingContent));
}
addIvar<UIAccessibilityElement*> ("container"); addIvar<UIAccessibilityElement*> ("container");
registerClass(); registerClass();
} }
private:
//============================================================================== //==============================================================================
static UIAccessibilityElement* getContainer (id self) static UIAccessibilityElement* getContainer (id self)
{ {
@@ -377,6 +386,15 @@ private:
return NO; return NO;
} }
static id getAccessibilityDataTableCellElementForRowColumn (id self, SEL, NSUInteger row, NSUInteger column)
{
if (auto* tableInterface = getTableInterface (self))
if (auto* cellHandler = tableInterface->getCellHandler ((int) row, (int) column))
return (id) cellHandler->getNativeImplementation();
return nil;
}
static NSInteger getAccessibilityLineNumberForPoint (id self, SEL, CGPoint point) static NSInteger getAccessibilityLineNumberForPoint (id self, SEL, CGPoint point)
{ {
if (auto* handler = getHandler (self)) if (auto* handler = getHandler (self))
@@ -433,15 +451,6 @@ private:
return nil; return nil;
} }
static id getAccessibilityDataTableCellElementForRowColumn (id self, SEL, NSUInteger row, NSUInteger column)
{
if (auto* tableInterface = getTableInterface (self))
if (auto* cellHandler = tableInterface->getCellHandler ((int) row, (int) column))
return (id) cellHandler->getNativeImplementation();
return nil;
}
//============================================================================== //==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AccessibilityElement) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AccessibilityElement)
}; };


Loading…
Cancel
Save