From 9cfbccca8ecd8ccd44d895a8de9c68d3df8df57a Mon Sep 17 00:00:00 2001 From: reuk Date: Mon, 6 Feb 2023 20:08:59 +0000 Subject: [PATCH] Accessibility: Make createAccessibilityHandler public to allow calls from derived classes --- .../DemoRunner/Source/UI/SettingsContent.h | 2 +- modules/juce_gui_basics/buttons/juce_Button.h | 3 +- .../buttons/juce_HyperlinkButton.h | 5 ++- .../buttons/juce_ToggleButton.h | 5 ++- .../components/juce_Component.h | 38 ++++++++++++------- .../drawables/juce_DrawableImage.h | 3 +- .../drawables/juce_DrawableText.h | 3 +- .../filebrowser/juce_FileBrowserComponent.h | 3 +- .../filebrowser/juce_ImagePreviewComponent.h | 3 +- .../layout/juce_ConcertinaPanel.h | 4 +- .../layout/juce_GroupComponent.h | 4 +- .../juce_gui_basics/layout/juce_ScrollBar.h | 3 +- .../juce_gui_basics/layout/juce_SidePanel.h | 3 +- .../layout/juce_TabbedButtonBar.h | 3 +- .../layout/juce_TabbedComponent.h | 3 +- .../juce_gui_basics/layout/juce_Viewport.h | 1 + .../menus/juce_BurgerMenuComponent.h | 3 +- .../menus/juce_MenuBarComponent.h | 3 +- .../misc/juce_JUCESplashScreen.h | 4 +- .../juce_gui_basics/widgets/juce_ComboBox.h | 3 +- .../widgets/juce_ImageComponent.h | 4 +- modules/juce_gui_basics/widgets/juce_Label.h | 4 +- .../juce_gui_basics/widgets/juce_ListBox.h | 3 +- .../widgets/juce_ProgressBar.h | 4 +- modules/juce_gui_basics/widgets/juce_Slider.h | 3 +- .../widgets/juce_TableHeaderComponent.h | 3 +- .../widgets/juce_TableListBox.h | 3 +- .../juce_gui_basics/widgets/juce_TextEditor.h | 3 +- .../juce_gui_basics/widgets/juce_Toolbar.h | 3 +- .../widgets/juce_ToolbarItemComponent.h | 4 +- .../widgets/juce_ToolbarItemPalette.h | 3 +- .../juce_gui_basics/widgets/juce_TreeView.h | 3 +- .../windows/juce_AlertWindow.h | 4 +- .../juce_gui_basics/windows/juce_CallOutBox.h | 3 +- .../windows/juce_DialogWindow.h | 5 ++- .../windows/juce_TooltipWindow.h | 3 +- .../windows/juce_TopLevelWindow.h | 3 +- .../code_editor/juce_CodeEditorComponent.h | 3 +- 38 files changed, 104 insertions(+), 56 deletions(-) diff --git a/examples/DemoRunner/Source/UI/SettingsContent.h b/examples/DemoRunner/Source/UI/SettingsContent.h index 9c3c713301..a90d5b2b57 100644 --- a/examples/DemoRunner/Source/UI/SettingsContent.h +++ b/examples/DemoRunner/Source/UI/SettingsContent.h @@ -236,12 +236,12 @@ private: audioSettings.setBounds (bounds); } - private: std::unique_ptr createAccessibilityHandler() override { return createIgnoredAccessibilityHandler (*this); } + private: GraphicsSettingsGroup graphicsSettings; AudioSettingsGroup audioSettings; }; diff --git a/modules/juce_gui_basics/buttons/juce_Button.h b/modules/juce_gui_basics/buttons/juce_Button.h index ce849023b9..e9878fb09f 100644 --- a/modules/juce_gui_basics/buttons/juce_Button.h +++ b/modules/juce_gui_basics/buttons/juce_Button.h @@ -495,6 +495,8 @@ protected: void focusLost (FocusChangeType) override; /** @internal */ void enablementChanged() override; + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; private: //============================================================================== @@ -522,7 +524,6 @@ private: bool triggerOnMouseDown = false; bool generateTooltip = false; - std::unique_ptr createAccessibilityHandler() override; void checkToggleableState (bool wasToggleable); void repeatTimerCallback(); diff --git a/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h b/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h index 553464fa7a..de346033b9 100644 --- a/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h +++ b/modules/juce_gui_basics/buttons/juce_HyperlinkButton.h @@ -101,6 +101,9 @@ public: /** Returns the type of justification, as set in setJustificationType(). */ Justification getJustificationType() const noexcept { return justification; } + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; + protected: //============================================================================== /** @internal */ @@ -111,8 +114,6 @@ protected: void paintButton (Graphics&, bool, bool) override; private: - std::unique_ptr createAccessibilityHandler() override; - //============================================================================== using Button::clicked; Font getFontToUse() const; diff --git a/modules/juce_gui_basics/buttons/juce_ToggleButton.h b/modules/juce_gui_basics/buttons/juce_ToggleButton.h index d01488c7ce..df5ffcc3a1 100644 --- a/modules/juce_gui_basics/buttons/juce_ToggleButton.h +++ b/modules/juce_gui_basics/buttons/juce_ToggleButton.h @@ -76,6 +76,9 @@ public: tickDisabledColourId = 0x1006503 /**< The colour to use for the disabled tick mark and/or outline. */ }; + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; + protected: //============================================================================== /** @internal */ @@ -84,8 +87,6 @@ protected: void colourChanged() override; private: - std::unique_ptr createAccessibilityHandler() override; - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ToggleButton) }; diff --git a/modules/juce_gui_basics/components/juce_Component.h b/modules/juce_gui_basics/components/juce_Component.h index 9f73049695..da3a4a1666 100644 --- a/modules/juce_gui_basics/components/juce_Component.h +++ b/modules/juce_gui_basics/components/juce_Component.h @@ -2479,6 +2479,9 @@ public: /** Returns the accessibility handler for this component, or nullptr if this component is not accessible. + To customise the accessibility handler for a component, override + createAccessibilityHandler(). + @see setAccessible */ AccessibilityHandler* getAccessibilityHandler(); @@ -2492,20 +2495,6 @@ public: void invalidateAccessibilityHandler(); //============================================================================== - #ifndef DOXYGEN - [[deprecated ("Use the setFocusContainerType that takes a more descriptive enum.")]] - void setFocusContainer (bool shouldBeFocusContainer) noexcept - { - setFocusContainerType (shouldBeFocusContainer ? FocusContainerType::keyboardFocusContainer - : FocusContainerType::none); - } - - [[deprecated ("Use the contains that takes a Point.")]] - void contains (int, int) = delete; - #endif - -private: - //============================================================================== /** Override this method to return a custom AccessibilityHandler for this component. The default implementation creates and returns a AccessibilityHandler object with an @@ -2519,10 +2508,31 @@ private: its Component, so it's safe to store and use a reference back to the Component inside the AccessibilityHandler if necessary. + This function should rarely be called directly. If you need to query a component's + accessibility handler, it's normally better to call getAccessibilityHandler(). + The exception to this rule is derived implementations of createAccessibilityHandler(), + which may find it useful to call the base class implementation, and then wrap or + modify the result. + @see getAccessibilityHandler */ virtual std::unique_ptr createAccessibilityHandler(); + //============================================================================== + #ifndef DOXYGEN + [[deprecated ("Use the setFocusContainerType that takes a more descriptive enum.")]] + void setFocusContainer (bool shouldBeFocusContainer) noexcept + { + setFocusContainerType (shouldBeFocusContainer ? FocusContainerType::keyboardFocusContainer + : FocusContainerType::none); + } + + [[deprecated ("Use the contains that takes a Point.")]] + void contains (int, int) = delete; + #endif + +private: + //============================================================================== friend class ComponentPeer; friend class MouseInputSourceInternal; diff --git a/modules/juce_gui_basics/drawables/juce_DrawableImage.h b/modules/juce_gui_basics/drawables/juce_DrawableImage.h index 6e1bb162a8..f56a2d4df5 100644 --- a/modules/juce_gui_basics/drawables/juce_DrawableImage.h +++ b/modules/juce_gui_basics/drawables/juce_DrawableImage.h @@ -97,10 +97,11 @@ public: Rectangle getDrawableBounds() const override; /** @internal */ Path getOutlineAsPath() const override; + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; private: //============================================================================== - std::unique_ptr createAccessibilityHandler() override; bool setImageInternal (const Image&); //============================================================================== diff --git a/modules/juce_gui_basics/drawables/juce_DrawableText.h b/modules/juce_gui_basics/drawables/juce_DrawableText.h index 76ba450d4c..61c0680c9b 100644 --- a/modules/juce_gui_basics/drawables/juce_DrawableText.h +++ b/modules/juce_gui_basics/drawables/juce_DrawableText.h @@ -98,6 +98,8 @@ public: Path getOutlineAsPath() const override; /** @internal */ bool replaceColour (Colour originalColour, Colour replacementColour) override; + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; private: //============================================================================== @@ -108,7 +110,6 @@ private: Colour colour; Justification justification; - std::unique_ptr createAccessibilityHandler() override; void refreshBounds(); Rectangle getTextArea (float width, float height) const; AffineTransform getTextTransform (float width, float height) const; diff --git a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h index e70857bc08..dc4409a750 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h +++ b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h @@ -252,6 +252,8 @@ public: FilePreviewComponent* getPreviewComponent() const noexcept; /** @internal */ DirectoryContentsDisplayComponent* getDisplayComponent() const noexcept; + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; protected: /** Returns a list of names and paths for the default places the user might want to look. @@ -283,7 +285,6 @@ private: TimeSliceThread thread; bool wasProcessActive; - std::unique_ptr createAccessibilityHandler() override; void timerCallback() override; void sendListenerChangeMessage(); bool isFileOrDirSuitable (const File&) const; diff --git a/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h b/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h index 2c354a73eb..874fb54f13 100644 --- a/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h +++ b/modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h @@ -52,13 +52,14 @@ public: void paint (Graphics&) override; /** @internal */ void timerCallback() override; + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; private: File fileToLoad; Image currentThumbnail; String currentDetails; - std::unique_ptr createAccessibilityHandler() override; void getThumbSize (int& w, int& h) const; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ImagePreviewComponent) diff --git a/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h b/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h index db959f34d0..d6aa4a9fc9 100644 --- a/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h +++ b/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h @@ -119,8 +119,10 @@ public: ConcertinaPanel&, Component&) = 0; }; -private: + /** @internal */ std::unique_ptr createAccessibilityHandler() override; + +private: void resized() override; class PanelHolder; diff --git a/modules/juce_gui_basics/layout/juce_GroupComponent.h b/modules/juce_gui_basics/layout/juce_GroupComponent.h index e45b15f920..31b3437767 100644 --- a/modules/juce_gui_basics/layout/juce_GroupComponent.h +++ b/modules/juce_gui_basics/layout/juce_GroupComponent.h @@ -98,10 +98,10 @@ public: void enablementChanged() override; /** @internal */ void colourChanged() override; - -private: + /** @internal */ std::unique_ptr createAccessibilityHandler() override; +private: String text; Justification justification; diff --git a/modules/juce_gui_basics/layout/juce_ScrollBar.h b/modules/juce_gui_basics/layout/juce_ScrollBar.h index a6d94185a7..1c151ff5a5 100644 --- a/modules/juce_gui_basics/layout/juce_ScrollBar.h +++ b/modules/juce_gui_basics/layout/juce_ScrollBar.h @@ -414,6 +414,8 @@ public: void parentHierarchyChanged() override; /** @internal */ void setVisible (bool) override; + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; private: //============================================================================== @@ -427,7 +429,6 @@ private: std::unique_ptr upButton, downButton; ListenerList listeners; - std::unique_ptr createAccessibilityHandler() override; void handleAsyncUpdate() override; void updateThumbPosition(); void timerCallback() override; diff --git a/modules/juce_gui_basics/layout/juce_SidePanel.h b/modules/juce_gui_basics/layout/juce_SidePanel.h index 59395f10dd..a425bb9d39 100644 --- a/modules/juce_gui_basics/layout/juce_SidePanel.h +++ b/modules/juce_gui_basics/layout/juce_SidePanel.h @@ -195,6 +195,8 @@ public: void mouseDrag (const MouseEvent&) override; /** @internal */ void mouseUp (const MouseEvent&) override; + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; private: //============================================================================== @@ -221,7 +223,6 @@ private: bool shouldShowDismissButton = true; //============================================================================== - std::unique_ptr createAccessibilityHandler() override; void lookAndFeelChanged() override; void componentMovedOrResized (Component&, bool wasMoved, bool wasResized) override; void changeListenerCallback (ChangeBroadcaster*) override; diff --git a/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h b/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h index c4ab1a4349..5d52af15c9 100644 --- a/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h +++ b/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h @@ -334,6 +334,8 @@ public: void resized() override; /** @internal */ void lookAndFeelChanged() override; + /** @internal */ + std::unique_ptr createAccessibilityHandler() override; protected: //============================================================================== @@ -362,7 +364,6 @@ private: std::unique_ptr behindFrontTab; std::unique_ptr