44 if (iid ==
__uuidof (ComTypes::ITextProvider2))
76 *pRetVal = SafeArrayCreateVector (VT_UNKNOWN, 0, 1);
78 if (pRetVal !=
nullptr)
81 auto hasSelection = ! selection.
isEmpty();
85 { hasSelection ? selection.getStart() : cursorPos,
86 hasSelection ? selection.getEnd() : cursorPos });
89 auto hr = SafeArrayPutElement (*pRetVal, &pos,
static_cast<IUnknown*
> (rangeProvider));
94 rangeProvider->Release();
105 *pRetVal = SafeArrayCreateVector (VT_UNKNOWN, 0, 1);
107 if (pRetVal !=
nullptr)
112 auto hr = SafeArrayPutElement (*pRetVal, &pos,
static_cast<IUnknown*
> (rangeProvider));
117 rangeProvider->Release();
169 template <
typename Value,
typename Callback>
174 if (
auto* textInterface =
getHandler().getTextInterface())
177 return (
HRESULT) UIA_E_NOTSUPPORTED;
188 owner (&textProvider),
221 ComTypes::ITextRangeProvider* targetRange,
223 int* pRetVal)
override
225 if (targetRange ==
nullptr)
235 : otherRange.getEnd());
237 *pRetVal = offset - otherOffset;
245 return (
HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
247 if (
auto* textInterface =
owner->getHandler().getTextInterface())
252 const auto start = ATH::findTextBoundary (*textInterface,
255 ATH::Direction::backwards,
256 ATH::IncludeThisBoundary::yes,
257 ATH::IncludeWhitespaceAfterWords::no);
259 const auto end = ATH::findTextBoundary (*textInterface,
262 ATH::Direction::forwards,
263 ATH::IncludeThisBoundary::no,
264 ATH::IncludeWhitespaceAfterWords::yes);
271 return (
HRESULT) UIA_E_NOTSUPPORTED;
283 ComTypes::ITextRangeProvider** pRetVal)
override
290 auto offset = (backward ? (ignoreCase ? selectionText.lastIndexOfIgnoreCase (textToSearchFor) : selectionText.lastIndexOf (textToSearchFor))
291 : (ignoreCase ? selectionText.indexOfIgnoreCase (textToSearchFor) : selectionText.indexOf (textToSearchFor)));
345 *pRetVal = SafeArrayCreateVector (VT_R8, 0, 4 * (
ULONG) numRectangles);
347 if (*pRetVal ==
nullptr)
350 if (numRectangles > 0)
352 double* doubleArr =
nullptr;
354 if (FAILED (SafeArrayAccessData (*pRetVal,
reinterpret_cast<void**
> (&doubleArr))))
356 SafeArrayDestroy (*pRetVal);
360 for (
int i = 0;
i < numRectangles; ++
i)
364 doubleArr[
i * 4] =
r.getX();
365 doubleArr[
i * 4 + 1] =
r.getY();
366 doubleArr[
i * 4 + 2] =
r.getWidth();
367 doubleArr[
i * 4 + 3] =
r.getHeight();
370 if (FAILED (SafeArrayUnaccessData (*pRetVal)))
372 SafeArrayDestroy (*pRetVal);
385 *pRetVal = SafeArrayCreateVector (VT_UNKNOWN, 0, 0);
396 getHandler().getNativeImplementation()->QueryInterface (IID_PPV_ARGS (pRetVal));
409 if (maxLength >= 0 &&
text.length() > maxLength)
410 text =
text.substring (0, maxLength);
412 *pRetVal = SysAllocString ((
const OLECHAR*)
text.toWideCharPointer());
424 const auto previousUnitBoundary = ATH::findTextBoundary (textInterface,
427 ATH::Direction::backwards,
428 ATH::IncludeThisBoundary::yes,
429 ATH::IncludeWhitespaceAfterWords::no);
432 auto movedEndpoint = previousUnitBoundary;
434 for (; numMoved < std::abs (
count); ++numMoved)
436 const auto nextEndpoint = ATH::findTextBoundary (textInterface,
439 count > 0 ? ATH::Direction::forwards : ATH::Direction::backwards,
440 ATH::IncludeThisBoundary::no,
441 count > 0 ? ATH::IncludeWhitespaceAfterWords::yes : ATH::IncludeWhitespaceAfterWords::no);
443 if (nextEndpoint == movedEndpoint)
446 movedEndpoint = nextEndpoint;
457 ComTypes::ITextRangeProvider* targetRange,
460 if (targetRange ==
nullptr)
464 return (
HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
466 if (
owner->getHandler().getTextInterface() !=
nullptr)
470 : otherRange.getEnd());
476 return (
HRESULT) UIA_E_NOTSUPPORTED;
482 int* pRetVal)
override
494 const auto direction = (
count > 0 ? ATH::Direction::forwards
495 : ATH::Direction::backwards);
498 auto movedEndpoint = endpointToMove;
501 for (; numMoved < std::abs (
count); ++numMoved)
503 auto nextEndpoint = ATH::findTextBoundary (textInterface,
507 ATH::IncludeThisBoundary::no,
508 direction == ATH::Direction::forwards ? ATH::IncludeWhitespaceAfterWords::yes
509 : ATH::IncludeWhitespaceAfterWords::no);
511 if (nextEndpoint == movedEndpoint)
514 movedEndpoint = nextEndpoint;
528 return (
HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
530 if (
auto* textInterface =
owner->getHandler().getTextInterface())
532 textInterface->setSelection ({});
536 return (
HRESULT) UIA_E_NOTSUPPORTED;
542 return (
HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
544 return (
HRESULT) UIA_E_NOTSUPPORTED;
550 return (
HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
552 if (
auto* textInterface =
owner->getHandler().getTextInterface())
554 textInterface->setSelection ({});
560 return (
HRESULT) UIA_E_NOTSUPPORTED;
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_AccessibilityTextInterface.h:39
virtual int getOffsetAtPoint(Point< int > point) const =0
virtual bool isReadOnly() const =0
virtual int getTextInsertionOffset() const =0
virtual int getTotalNumCharacters() const =0
virtual String getText(Range< int > range) const =0
virtual RectangleList< int > getTextBounds(Range< int > textRange) const =0
virtual Range< int > getSelection() const =0
JUCE_COMRESULT castToType(void **result)
Definition juce_win32_ComSmartPtr.h:186
ComBaseClassHelper(unsigned int initialRefCount=1)
Definition juce_win32_ComSmartPtr.h:203
Definition juce_win32_ComSmartPtr.h:92
static Desktop &JUCE_CALLTYPE getInstance()
Definition juce_Desktop.cpp:50
Definition juce_Range.h:40
constexpr bool isEmpty() const noexcept
Definition juce_Range.h:89
int getNumRectangles() const noexcept
Definition juce_RectangleList.h:87
Definition juce_String.h:53
int length() const noexcept
Definition juce_String.cpp:511
const AccessibilityHandler & getHandler() const
Definition juce_win32_UIAProviderBase.h:46
UIAProviderBase(AccessibilityNativeHandle *nativeHandleIn)
Definition juce_win32_UIAProviderBase.h:33
bool isElementValid() const
Definition juce_win32_UIAProviderBase.h:38
Definition juce_win32_UIATextProvider.h:184
JUCE_COMRESULT FindAttribute(TEXTATTRIBUTEID, VARIANT, BOOL, ComTypes::ITextRangeProvider **pRetVal) override
Definition juce_win32_UIATextProvider.h:274
JUCE_COMRESULT GetText(int maxLength, BSTR *pRetVal) override
Definition juce_win32_UIATextProvider.h:403
JUCE_COMRESULT MoveEndpointByRange(ComTypes::TextPatternRangeEndpoint endpoint, ComTypes::ITextRangeProvider *targetRange, ComTypes::TextPatternRangeEndpoint targetEndpoint) override
Definition juce_win32_UIATextProvider.h:456
void setEndpointChecked(ComTypes::TextPatternRangeEndpoint endpoint, int newEndpoint)
Definition juce_win32_UIATextProvider.h:588
JUCE_COMRESULT ScrollIntoView(BOOL) override
Definition juce_win32_UIATextProvider.h:539
static AccessibilityTextHelpers::BoundaryType getBoundaryType(ComTypes::TextUnit unit)
Definition juce_win32_UIATextProvider.h:564
JUCE_COMRESULT CompareEndpoints(ComTypes::TextPatternRangeEndpoint endpoint, ComTypes::ITextRangeProvider *targetRange, ComTypes::TextPatternRangeEndpoint targetEndpoint, int *pRetVal) override
Definition juce_win32_UIATextProvider.h:220
JUCE_COMRESULT GetEnclosingElement(IRawElementProviderSimple **pRetVal) override
Definition juce_win32_UIATextProvider.h:390
JUCE_COMRESULT GetBoundingRectangles(SAFEARRAY **pRetVal) override
Definition juce_win32_UIATextProvider.h:338
ComSmartPtr< UIATextProvider > owner
Definition juce_win32_UIATextProvider.h:606
JUCE_COMRESULT GetAttributeValue(TEXTATTRIBUTEID attributeId, VARIANT *pRetVal) override
Definition juce_win32_UIATextProvider.h:300
JUCE_COMRESULT RemoveFromSelection() override
Definition juce_win32_UIATextProvider.h:525
JUCE_COMRESULT GetChildren(SAFEARRAY **pRetVal) override
Definition juce_win32_UIATextProvider.h:381
JUCE_COMRESULT Clone(ComTypes::ITextRangeProvider **pRetVal) override
Definition juce_win32_UIATextProvider.h:202
JUCE_COMRESULT Select() override
Definition juce_win32_UIATextProvider.h:547
Range< int > getSelectionRange() const noexcept
Definition juce_win32_UIATextProvider.h:194
UIATextRangeProvider(UIATextProvider &textProvider, Range< int > range)
Definition juce_win32_UIATextProvider.h:186
JUCE_COMRESULT MoveEndpointByUnit(ComTypes::TextPatternRangeEndpoint endpoint, ComTypes::TextUnit unit, int count, int *pRetVal) override
Definition juce_win32_UIATextProvider.h:479
Range< int > selectionRange
Definition juce_win32_UIATextProvider.h:607
JUCE_COMRESULT ExpandToEnclosingUnit(ComTypes::TextUnit unit) override
Definition juce_win32_UIATextProvider.h:242
JUCE_COMRESULT AddToSelection() override
Definition juce_win32_UIATextProvider.h:197
JUCE_COMRESULT FindText(BSTR text, BOOL backward, BOOL ignoreCase, ComTypes::ITextRangeProvider **pRetVal) override
Definition juce_win32_UIATextProvider.h:282
JUCE_COMRESULT Move(ComTypes::TextUnit unit, int count, int *pRetVal) override
Definition juce_win32_UIATextProvider.h:417
JUCE_COMRESULT Compare(ComTypes::ITextRangeProvider *range, BOOL *pRetVal) override
Definition juce_win32_UIATextProvider.h:211
Definition juce_win32_UIATextProvider.h:32
JUCE_COMRESULT GetSelection(SAFEARRAY **pRetVal) override
Definition juce_win32_UIATextProvider.h:72
JUCE_COMRESULT withTextInterface(Value *pRetVal, Callback &&callback) const
Definition juce_win32_UIATextProvider.h:170
JUCE_COMRESULT get_SupportedTextSelection(ComTypes::SupportedTextSelection *pRetVal) override
Definition juce_win32_UIATextProvider.h:63
JUCE_COMRESULT GetCaretRange(BOOL *isActive, ComTypes::ITextRangeProvider **pRetVal) override
Definition juce_win32_UIATextProvider.h:146
JUCE_COMRESULT RangeFromAnnotation(IRawElementProviderSimple *, ComTypes::ITextRangeProvider **pRetVal) override
Definition juce_win32_UIATextProvider.h:159
JUCE_COMRESULT get_DocumentRange(ComTypes::ITextRangeProvider **pRetVal) override
Definition juce_win32_UIATextProvider.h:54
JUCE_COMRESULT GetVisibleRanges(SAFEARRAY **pRetVal) override
Definition juce_win32_UIATextProvider.h:101
UIAProviderBase(AccessibilityNativeHandle *nativeHandleIn)
Definition juce_win32_UIAProviderBase.h:33
JUCE_COMRESULT RangeFromPoint(ComTypes::UiaPoint point, ComTypes::ITextRangeProvider **pRetVal) override
Definition juce_win32_UIATextProvider.h:132
JUCE_COMRESULT RangeFromChild(IRawElementProviderSimple *, ComTypes::ITextRangeProvider **pRetVal) override
Definition juce_win32_UIATextProvider.h:124
JUCE_COMRESULT QueryInterface(REFIID iid, void **result) override
Definition juce_win32_UIATextProvider.h:37
Definition juce_Value.h:51
register unsigned i
Definition inflate.c:1575
virtual ASIOError start()=0
#define JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE(...)
Definition juce_CompilerWarnings.h:181
#define JUCE_END_IGNORE_WARNINGS_GCC_LIKE
Definition juce_CompilerWarnings.h:182
#define JUCE_COMRESULT
Definition juce_win32_ComSmartPtr.h:54
#define __uuidof(x)
Definition juce_win32_ComSmartPtr.h:32
static const float ATH[]
Definition masking.h:24
TextPatternRangeEndpoint
Definition juce_win32_ComInterfaces.h:70
@ TextPatternRangeEndpoint_Start
Definition juce_win32_ComInterfaces.h:71
TextUnit
Definition juce_win32_ComInterfaces.h:76
@ TextUnit_Character
Definition juce_win32_ComInterfaces.h:77
@ TextUnit_Paragraph
Definition juce_win32_ComInterfaces.h:81
@ TextUnit_Word
Definition juce_win32_ComInterfaces.h:79
@ TextUnit_Line
Definition juce_win32_ComInterfaces.h:80
@ TextUnit_Document
Definition juce_win32_ComInterfaces.h:83
@ TextUnit_Format
Definition juce_win32_ComInterfaces.h:78
@ TextUnit_Page
Definition juce_win32_ComInterfaces.h:82
const long UIA_CaretPositionAttributeId
Definition juce_win32_ComInterfaces.h:149
@ CaretPosition_EndOfLine
Definition juce_win32_ComInterfaces.h:96
@ CaretPosition_Unknown
Definition juce_win32_ComInterfaces.h:95
@ CaretPosition_BeginningOfLine
Definition juce_win32_ComInterfaces.h:97
SupportedTextSelection
Definition juce_win32_ComInterfaces.h:87
@ SupportedTextSelection_Single
Definition juce_win32_ComInterfaces.h:89
const long UIA_IsReadOnlyAttributeId
Definition juce_win32_ComInterfaces.h:148
void setBool(bool value, VARIANT *variant)
Definition juce_win32_UIAHelpers.h:53
void setInt(int value, VARIANT *variant)
Definition juce_win32_UIAHelpers.h:47
void clear(VARIANT *variant)
Definition juce_win32_UIAHelpers.h:42
Definition carla_juce.cpp:31
RangedDirectoryIterator end(const RangedDirectoryIterator &)
Definition juce_RangedDirectoryIterator.h:184
JUCE_COMRESULT withCheckedComArgs(Value *pRetVal, Object &handle, Callback &&callback)
Definition juce_win32_UIAHelpers.h:106
int roundToInt(const FloatType value) noexcept
Definition juce_MathsFunctions.h:465
png_const_structrp png_const_inforp int * unit
Definition png.h:2161
Definition juce_AccessibilityTextHelpers.h:30
BoundaryType
Definition juce_AccessibilityTextHelpers.h:82
@ line
Definition juce_AccessibilityTextHelpers.h:85
@ character
Definition juce_AccessibilityTextHelpers.h:83
@ word
Definition juce_AccessibilityTextHelpers.h:84
@ document
Definition juce_AccessibilityTextHelpers.h:86
Definition juce_win32_ComInterfaces.h:39
double y
Definition juce_win32_ComInterfaces.h:41
double x
Definition juce_win32_ComInterfaces.h:40
const char * text
Definition swell-functions.h:167
RECT const char void(* callback)(const char *droppath))) SWELL_API_DEFINE(BOOL
Definition swell-functions.h:1004
#define S_OK
Definition swell-types.h:53
signed int HRESULT
Definition swell-types.h:181
signed char BOOL
Definition swell-types.h:160
#define E_FAIL
Definition swell-types.h:56
signed int LONG
Definition swell-types.h:182
unsigned int ULONG
Definition swell-types.h:183
int r
Definition crypt.c:458
int result
Definition process.c:1455
_WDL_CSTRING_PREFIX void INT_PTR count
Definition wdlcstring.h:263
#define const
Definition zconf.h:137