LMMS
Loading...
Searching...
No Matches
juce_win32_UIATextProvider.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
29//==============================================================================
31 public ComBaseClassHelper<ComTypes::ITextProvider2>
32{
33public:
35
36 //==============================================================================
37 JUCE_COMRESULT QueryInterface (REFIID iid, void** result) override
38 {
39 JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wlanguage-extension-token")
40
41 if (iid == __uuidof (IUnknown) || iid == __uuidof (ComTypes::ITextProvider))
43
44 if (iid == __uuidof (ComTypes::ITextProvider2))
46
47 *result = nullptr;
48 return E_NOINTERFACE;
49
51 }
52
53 //=============================================================================
54 JUCE_COMRESULT get_DocumentRange (ComTypes::ITextRangeProvider** pRetVal) override
55 {
56 return withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
57 {
58 *pRetVal = new UIATextRangeProvider (*this, { 0, textInterface.getTotalNumCharacters() });
59 return S_OK;
60 });
61 }
62
64 {
65 return withCheckedComArgs (pRetVal, *this, [&]
66 {
68 return S_OK;
69 });
70 }
71
72 JUCE_COMRESULT GetSelection (SAFEARRAY** pRetVal) override
73 {
74 return withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
75 {
76 *pRetVal = SafeArrayCreateVector (VT_UNKNOWN, 0, 1);
77
78 if (pRetVal != nullptr)
79 {
80 auto selection = textInterface.getSelection();
81 auto hasSelection = ! selection.isEmpty();
82 auto cursorPos = textInterface.getTextInsertionOffset();
83
84 auto* rangeProvider = new UIATextRangeProvider (*this,
85 { hasSelection ? selection.getStart() : cursorPos,
86 hasSelection ? selection.getEnd() : cursorPos });
87
88 LONG pos = 0;
89 auto hr = SafeArrayPutElement (*pRetVal, &pos, static_cast<IUnknown*> (rangeProvider));
90
91 if (FAILED (hr))
92 return E_FAIL;
93
94 rangeProvider->Release();
95 }
96
97 return S_OK;
98 });
99 }
100
101 JUCE_COMRESULT GetVisibleRanges (SAFEARRAY** pRetVal) override
102 {
103 return withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
104 {
105 *pRetVal = SafeArrayCreateVector (VT_UNKNOWN, 0, 1);
106
107 if (pRetVal != nullptr)
108 {
109 auto* rangeProvider = new UIATextRangeProvider (*this, { 0, textInterface.getTotalNumCharacters() });
110
111 LONG pos = 0;
112 auto hr = SafeArrayPutElement (*pRetVal, &pos, static_cast<IUnknown*> (rangeProvider));
113
114 if (FAILED (hr))
115 return E_FAIL;
116
117 rangeProvider->Release();
118 }
119
120 return S_OK;
121 });
122 }
123
124 JUCE_COMRESULT RangeFromChild (IRawElementProviderSimple*, ComTypes::ITextRangeProvider** pRetVal) override
125 {
126 return withCheckedComArgs (pRetVal, *this, []
127 {
128 return S_OK;
129 });
130 }
131
132 JUCE_COMRESULT RangeFromPoint (ComTypes::UiaPoint point, ComTypes::ITextRangeProvider** pRetVal) override
133 {
134 return withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
135 {
136 auto offset = textInterface.getOffsetAtPoint ({ roundToInt (point.x), roundToInt (point.y) });
137
138 if (offset > 0)
139 *pRetVal = new UIATextRangeProvider (*this, { offset, offset });
140
141 return S_OK;
142 });
143 }
144
145 //==============================================================================
146 JUCE_COMRESULT GetCaretRange (BOOL* isActive, ComTypes::ITextRangeProvider** pRetVal) override
147 {
148 return withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
149 {
150 *isActive = getHandler().hasFocus (false);
151
152 auto cursorPos = textInterface.getTextInsertionOffset();
153 *pRetVal = new UIATextRangeProvider (*this, { cursorPos, cursorPos });
154
155 return S_OK;
156 });
157 }
158
159 JUCE_COMRESULT RangeFromAnnotation (IRawElementProviderSimple*, ComTypes::ITextRangeProvider** pRetVal) override
160 {
161 return withCheckedComArgs (pRetVal, *this, []
162 {
163 return S_OK;
164 });
165 }
166
167private:
168 //==============================================================================
169 template <typename Value, typename Callback>
170 JUCE_COMRESULT withTextInterface (Value* pRetVal, Callback&& callback) const
171 {
172 return withCheckedComArgs (pRetVal, *this, [&]() -> HRESULT
173 {
174 if (auto* textInterface = getHandler().getTextInterface())
175 return callback (*textInterface);
176
177 return (HRESULT) UIA_E_NOTSUPPORTED;
178 });
179 }
180
181 //==============================================================================
183 public ComBaseClassHelper<ComTypes::ITextRangeProvider>
184 {
185 public:
187 : UIAProviderBase (textProvider.getHandler().getNativeImplementation()),
188 owner (&textProvider),
189 selectionRange (range)
190 {
191 }
192
193 //==============================================================================
195
196 //==============================================================================
198 {
199 return Select();
200 }
201
202 JUCE_COMRESULT Clone (ComTypes::ITextRangeProvider** pRetVal) override
203 {
204 return withCheckedComArgs (pRetVal, *this, [&]
205 {
206 *pRetVal = new UIATextRangeProvider (*owner, selectionRange);
207 return S_OK;
208 });
209 }
210
211 JUCE_COMRESULT Compare (ComTypes::ITextRangeProvider* range, BOOL* pRetVal) override
212 {
213 return withCheckedComArgs (pRetVal, *this, [&]
214 {
215 *pRetVal = (selectionRange == static_cast<UIATextRangeProvider*> (range)->getSelectionRange());
216 return S_OK;
217 });
218 }
219
221 ComTypes::ITextRangeProvider* targetRange,
223 int* pRetVal) override
224 {
225 if (targetRange == nullptr)
226 return E_INVALIDARG;
227
228 return withCheckedComArgs (pRetVal, *this, [&]
229 {
230 auto offset = (endpoint == ComTypes::TextPatternRangeEndpoint_Start ? selectionRange.getStart()
231 : selectionRange.getEnd());
232
233 auto otherRange = static_cast<UIATextRangeProvider*> (targetRange)->getSelectionRange();
234 auto otherOffset = (targetEndpoint == ComTypes::TextPatternRangeEndpoint_Start ? otherRange.getStart()
235 : otherRange.getEnd());
236
237 *pRetVal = offset - otherOffset;
238 return S_OK;
239 });
240 }
241
243 {
244 if (! isElementValid())
245 return (HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
246
247 if (auto* textInterface = owner->getHandler().getTextInterface())
248 {
250
251 const auto boundaryType = getBoundaryType (unit);
252 const auto start = ATH::findTextBoundary (*textInterface,
253 selectionRange.getStart(),
254 boundaryType,
255 ATH::Direction::backwards,
256 ATH::IncludeThisBoundary::yes,
257 ATH::IncludeWhitespaceAfterWords::no);
258
259 const auto end = ATH::findTextBoundary (*textInterface,
260 start,
261 boundaryType,
262 ATH::Direction::forwards,
263 ATH::IncludeThisBoundary::no,
264 ATH::IncludeWhitespaceAfterWords::yes);
265
267
268 return S_OK;
269 }
270
271 return (HRESULT) UIA_E_NOTSUPPORTED;
272 }
273
274 JUCE_COMRESULT FindAttribute (TEXTATTRIBUTEID, VARIANT, BOOL, ComTypes::ITextRangeProvider** pRetVal) override
275 {
276 return withCheckedComArgs (pRetVal, *this, []
277 {
278 return S_OK;
279 });
280 }
281
282 JUCE_COMRESULT FindText (BSTR text, BOOL backward, BOOL ignoreCase,
283 ComTypes::ITextRangeProvider** pRetVal) override
284 {
285 return owner->withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
286 {
287 auto selectionText = textInterface.getText (selectionRange);
288 String textToSearchFor (text);
289
290 auto offset = (backward ? (ignoreCase ? selectionText.lastIndexOfIgnoreCase (textToSearchFor) : selectionText.lastIndexOf (textToSearchFor))
291 : (ignoreCase ? selectionText.indexOfIgnoreCase (textToSearchFor) : selectionText.indexOf (textToSearchFor)));
292
293 if (offset != -1)
294 *pRetVal = new UIATextRangeProvider (*owner, { offset, offset + textToSearchFor.length() });
295
296 return S_OK;
297 });
298 }
299
300 JUCE_COMRESULT GetAttributeValue (TEXTATTRIBUTEID attributeId, VARIANT* pRetVal) override
301 {
302 return owner->withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
303 {
304 VariantHelpers::clear (pRetVal);
305
306 switch (attributeId)
307 {
309 {
310 VariantHelpers::setBool (textInterface.isReadOnly(), pRetVal);
311 break;
312 }
313
315 {
316 auto cursorPos = textInterface.getTextInsertionOffset();
317
318 auto caretPos = [&]
319 {
320 if (cursorPos == 0)
322
323 if (cursorPos == textInterface.getTotalNumCharacters())
325
327 }();
328
329 VariantHelpers::setInt (caretPos, pRetVal);
330 break;
331 }
332 }
333
334 return S_OK;
335 });
336 }
337
338 JUCE_COMRESULT GetBoundingRectangles (SAFEARRAY** pRetVal) override
339 {
340 return owner->withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
341 {
342 auto rectangleList = textInterface.getTextBounds (selectionRange);
343 auto numRectangles = rectangleList.getNumRectangles();
344
345 *pRetVal = SafeArrayCreateVector (VT_R8, 0, 4 * (ULONG) numRectangles);
346
347 if (*pRetVal == nullptr)
348 return E_FAIL;
349
350 if (numRectangles > 0)
351 {
352 double* doubleArr = nullptr;
353
354 if (FAILED (SafeArrayAccessData (*pRetVal, reinterpret_cast<void**> (&doubleArr))))
355 {
356 SafeArrayDestroy (*pRetVal);
357 return E_FAIL;
358 }
359
360 for (int i = 0; i < numRectangles; ++i)
361 {
362 auto r = Desktop::getInstance().getDisplays().logicalToPhysical (rectangleList.getRectangle (i));
363
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();
368 }
369
370 if (FAILED (SafeArrayUnaccessData (*pRetVal)))
371 {
372 SafeArrayDestroy (*pRetVal);
373 return E_FAIL;
374 }
375 }
376
377 return S_OK;
378 });
379 }
380
381 JUCE_COMRESULT GetChildren (SAFEARRAY** pRetVal) override
382 {
383 return withCheckedComArgs (pRetVal, *this, [&]
384 {
385 *pRetVal = SafeArrayCreateVector (VT_UNKNOWN, 0, 0);
386 return S_OK;
387 });
388 }
389
390 JUCE_COMRESULT GetEnclosingElement (IRawElementProviderSimple** pRetVal) override
391 {
392 JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wlanguage-extension-token")
393
394 return withCheckedComArgs (pRetVal, *this, [&]
395 {
396 getHandler().getNativeImplementation()->QueryInterface (IID_PPV_ARGS (pRetVal));
397 return S_OK;
398 });
399
401 }
402
403 JUCE_COMRESULT GetText (int maxLength, BSTR* pRetVal) override
404 {
405 return owner->withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
406 {
407 auto text = textInterface.getText (selectionRange);
408
409 if (maxLength >= 0 && text.length() > maxLength)
410 text = text.substring (0, maxLength);
411
412 *pRetVal = SysAllocString ((const OLECHAR*) text.toWideCharPointer());
413 return S_OK;
414 });
415 }
416
417 JUCE_COMRESULT Move (ComTypes::TextUnit unit, int count, int* pRetVal) override
418 {
419 return owner->withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
420 {
422
423 const auto boundaryType = getBoundaryType (unit);
424 const auto previousUnitBoundary = ATH::findTextBoundary (textInterface,
425 selectionRange.getStart(),
426 boundaryType,
427 ATH::Direction::backwards,
428 ATH::IncludeThisBoundary::yes,
429 ATH::IncludeWhitespaceAfterWords::no);
430
431 auto numMoved = 0;
432 auto movedEndpoint = previousUnitBoundary;
433
434 for (; numMoved < std::abs (count); ++numMoved)
435 {
436 const auto nextEndpoint = ATH::findTextBoundary (textInterface,
437 movedEndpoint,
438 boundaryType,
439 count > 0 ? ATH::Direction::forwards : ATH::Direction::backwards,
440 ATH::IncludeThisBoundary::no,
441 count > 0 ? ATH::IncludeWhitespaceAfterWords::yes : ATH::IncludeWhitespaceAfterWords::no);
442
443 if (nextEndpoint == movedEndpoint)
444 break;
445
446 movedEndpoint = nextEndpoint;
447 }
448
449 *pRetVal = numMoved;
450
452 return S_OK;
453 });
454 }
455
457 ComTypes::ITextRangeProvider* targetRange,
458 ComTypes::TextPatternRangeEndpoint targetEndpoint) override
459 {
460 if (targetRange == nullptr)
461 return E_INVALIDARG;
462
463 if (! isElementValid())
464 return (HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
465
466 if (owner->getHandler().getTextInterface() != nullptr)
467 {
468 auto otherRange = static_cast<UIATextRangeProvider*> (targetRange)->getSelectionRange();
469 auto targetPoint = (targetEndpoint == ComTypes::TextPatternRangeEndpoint_Start ? otherRange.getStart()
470 : otherRange.getEnd());
471
472 setEndpointChecked (endpoint, targetPoint);
473 return S_OK;
474 }
475
476 return (HRESULT) UIA_E_NOTSUPPORTED;
477 }
478
481 int count,
482 int* pRetVal) override
483 {
484 return owner->withTextInterface (pRetVal, [&] (const AccessibilityTextInterface& textInterface)
485 {
486 if (count == 0 || textInterface.getTotalNumCharacters() == 0)
487 return S_OK;
488
489 const auto endpointToMove = (endpoint == ComTypes::TextPatternRangeEndpoint_Start ? selectionRange.getStart()
490 : selectionRange.getEnd());
491
493
494 const auto direction = (count > 0 ? ATH::Direction::forwards
495 : ATH::Direction::backwards);
496
497 const auto boundaryType = getBoundaryType (unit);
498 auto movedEndpoint = endpointToMove;
499
500 int numMoved = 0;
501 for (; numMoved < std::abs (count); ++numMoved)
502 {
503 auto nextEndpoint = ATH::findTextBoundary (textInterface,
504 movedEndpoint,
505 boundaryType,
506 direction,
507 ATH::IncludeThisBoundary::no,
508 direction == ATH::Direction::forwards ? ATH::IncludeWhitespaceAfterWords::yes
509 : ATH::IncludeWhitespaceAfterWords::no);
510
511 if (nextEndpoint == movedEndpoint)
512 break;
513
514 movedEndpoint = nextEndpoint;
515 }
516
517 *pRetVal = numMoved;
518
519 setEndpointChecked (endpoint, movedEndpoint);
520
521 return S_OK;
522 });
523 }
524
526 {
527 if (! isElementValid())
528 return (HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
529
530 if (auto* textInterface = owner->getHandler().getTextInterface())
531 {
532 textInterface->setSelection ({});
533 return S_OK;
534 }
535
536 return (HRESULT) UIA_E_NOTSUPPORTED;
537 }
538
540 {
541 if (! isElementValid())
542 return (HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
543
544 return (HRESULT) UIA_E_NOTSUPPORTED;
545 }
546
548 {
549 if (! isElementValid())
550 return (HRESULT) UIA_E_ELEMENTNOTAVAILABLE;
551
552 if (auto* textInterface = owner->getHandler().getTextInterface())
553 {
554 textInterface->setSelection ({});
555 textInterface->setSelection (selectionRange);
556
557 return S_OK;
558 }
559
560 return (HRESULT) UIA_E_NOTSUPPORTED;
561 }
562
563 private:
587
589 {
591 {
592 if (selectionRange.getEnd() < newEndpoint)
593 selectionRange.setEnd (newEndpoint);
594
595 selectionRange.setStart (newEndpoint);
596 }
597 else
598 {
599 if (selectionRange.getStart() > newEndpoint)
600 selectionRange.setStart (newEndpoint);
601
602 selectionRange.setEnd (newEndpoint);
603 }
604 }
605
608
609 //==============================================================================
611 };
612
613 //==============================================================================
615};
616
617} // namespace juce
#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_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define jassertfalse
#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