LibreOffice Module vcl (master) 1
ctrl.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <comphelper/lok.hxx>
21#include <o3tl/safeint.hxx>
22#include <vcl/svapp.hxx>
23#include <vcl/event.hxx>
24#include <vcl/ctrl.hxx>
25#include <vcl/decoview.hxx>
26#include <vcl/mnemonic.hxx>
27#include <vcl/settings.hxx>
28#include <vcl/uitest/logger.hxx>
29#include <vcl/DocWindow.hxx>
30#include <sal/log.hxx>
31
32#include <textlayout.hxx>
33#include <svdata.hxx>
34
35using namespace vcl;
36
38{
39 mbHasControlFocus = false;
40 mbShowAccelerator = false;
41}
42
44 Window( nType )
45{
47}
48
51{
53 ImplInit( pParent, nStyle, nullptr );
54}
55
57{
59}
60
62{
63 mxLayoutData.reset();
65 Window::dispose();
66}
67
68void Control::EnableRTL( bool bEnable )
69{
70 // convenience: for controls also switch layout mode
74 Window::EnableRTL(bEnable);
75}
76
78{
80 Window::Resize();
81}
82
84{
85}
86
88{
89 SAL_WARN_IF( mxLayoutData, "vcl", "Control::CreateLayoutData: should be called with non-existent layout data only!" );
90 mxLayoutData.emplace();
91}
92
94{
95 return bool(mxLayoutData);
96}
97
98void Control::SetText( const OUString& rStr )
99{
101 Window::SetText( rStr );
102}
103
104ControlLayoutData::ControlLayoutData() : m_pParent( nullptr )
105{
106}
107
109{
111}
112
114{
115 if( !HasLayoutData() )
116 FillLayoutData();
117 return mxLayoutData ? mxLayoutData->GetCharacterBounds( nIndex ) : tools::Rectangle();
118}
119
121{
122 tools::Long nIndex = -1;
123 for( tools::Long i = m_aUnicodeBoundRects.size()-1; i >= 0; i-- )
124 {
125 Point aTopLeft = m_aUnicodeBoundRects[i].TopLeft();
126 Point aBottomRight = m_aUnicodeBoundRects[i].BottomRight();
127 if (rPoint.X() >= aTopLeft.X() && rPoint.Y() >= aTopLeft.Y() &&
128 rPoint.X() <= aBottomRight.X() && rPoint.Y() <= aBottomRight.Y())
129 {
130 nIndex = i;
131 break;
132 }
133 }
134 return nIndex;
135}
136
138{
139 if( ! HasLayoutData() )
140 FillLayoutData();
141 return mxLayoutData ? mxLayoutData->GetIndexForPoint( rPoint ) : -1;
142}
143
145{
146 Pair aPair( -1, -1 );
147
148 int nDisplayLines = m_aLineIndices.size();
149 if( nLine >= 0 && nLine < nDisplayLines )
150 {
151 aPair.A() = m_aLineIndices[nLine];
152 if( nLine+1 < nDisplayLines )
153 aPair.B() = m_aLineIndices[nLine+1]-1;
154 else
155 aPair.B() = m_aDisplayText.getLength()-1;
156 }
157 else if( nLine == 0 && nDisplayLines == 0 && !m_aDisplayText.isEmpty() )
158 {
159 // special case for single line controls so the implementations
160 // in that case do not have to fill in the line indices
161 aPair.A() = 0;
162 aPair.B() = m_aDisplayText.getLength()-1;
163 }
164 return aPair;
165}
166
168{
169 if( !HasLayoutData() )
170 FillLayoutData();
171 return mxLayoutData ? mxLayoutData->GetLineStartEnd( nLine ) : Pair( -1, -1 );
172}
173
175{
176 // is the index sensible at all ?
177 if( nIndex >= 0 && nIndex < m_aDisplayText.getLength() )
178 {
179 int nDisplayLines = m_aLineIndices.size();
180 // if only 1 line exists, then absolute and relative index are
181 // identical -> do nothing
182 if( nDisplayLines > 1 )
183 {
184 int nLine;
185 for( nLine = nDisplayLines-1; nLine >= 0; nLine-- )
186 {
187 if( m_aLineIndices[nLine] <= nIndex )
188 {
189 nIndex -= m_aLineIndices[nLine];
190 break;
191 }
192 }
193 if( nLine < 0 )
195 SAL_WARN_IF( nLine < 0, "vcl", "ToRelativeLineIndex failed" );
196 nIndex = -1;
197 }
198 }
199 }
200 else
201 nIndex = -1;
202
203 return nIndex;
204}
205
207{
208 if( !HasLayoutData() )
209 FillLayoutData();
210 return mxLayoutData ? mxLayoutData->ToRelativeLineIndex( nIndex ) : -1;
211}
212
214{
215 if( !HasLayoutData() )
216 FillLayoutData();
217 return mxLayoutData ? mxLayoutData->m_aDisplayText : GetText();
218}
219
221{
222 return ImplIsWindowOrChild(pFocusWin);
223}
224
226{
227 if ( rNEvt.GetType() == NotifyEventType::GETFOCUS )
228 {
229 if ( !mbHasControlFocus )
230 {
231 mbHasControlFocus = true;
232 CompatStateChanged( StateChangedType::ControlFocus );
233 if ( ImplCallEventListenersAndHandler( VclEventId::ControlGetFocus, {} ) )
234 // been destroyed within the handler
235 return true;
236 }
237 }
238 else
239 {
240 if ( rNEvt.GetType() == NotifyEventType::LOSEFOCUS )
241 {
243 if ( !pFocusWin || !FocusWindowBelongsToControl(pFocusWin) )
244 {
245 mbHasControlFocus = false;
246 CompatStateChanged( StateChangedType::ControlFocus );
247 if ( ImplCallEventListenersAndHandler( VclEventId::ControlLoseFocus, [this] () { maLoseFocusHdl.Call(*this); } ) )
248 // been destroyed within the handler
249 return true;
250 }
251 }
252 }
253 return Window::EventNotify( rNEvt );
254}
255
257{
258 if( nStateChange == StateChangedType::InitShow ||
259 nStateChange == StateChangedType::Visible ||
260 nStateChange == StateChangedType::Zoom ||
261 nStateChange == StateChangedType::ControlFont
262 )
263 {
264 ImplClearLayoutData();
265 }
266 Window::StateChanged( nStateChange );
267}
268
269void Control::AppendLayoutData( const Control& rSubControl ) const
270{
271 if( !rSubControl.HasLayoutData() )
272 rSubControl.FillLayoutData();
273 if( !rSubControl.HasLayoutData() || rSubControl.mxLayoutData->m_aDisplayText.isEmpty() )
274 return;
275
276 tools::Long nCurrentIndex = mxLayoutData->m_aDisplayText.getLength();
277 mxLayoutData->m_aDisplayText += rSubControl.mxLayoutData->m_aDisplayText;
278 int nLines = rSubControl.mxLayoutData->m_aLineIndices.size();
279 int n;
280 mxLayoutData->m_aLineIndices.push_back( nCurrentIndex );
281 for( n = 1; n < nLines; n++ )
282 mxLayoutData->m_aLineIndices.push_back( rSubControl.mxLayoutData->m_aLineIndices[n] + nCurrentIndex );
283 int nRectangles = rSubControl.mxLayoutData->m_aUnicodeBoundRects.size();
284 tools::Rectangle aRel = rSubControl.GetWindowExtentsRelative(*this);
285 for( n = 0; n < nRectangles; n++ )
286 {
287 tools::Rectangle aRect = rSubControl.mxLayoutData->m_aUnicodeBoundRects[n];
288 aRect.Move( aRel.Left(), aRel.Top() );
289 mxLayoutData->m_aUnicodeBoundRects.push_back( aRect );
290 }
291}
292
293void Control::CallEventListeners( VclEventId nEvent, void* pData)
294{
295 VclPtr<Control> xThis(this);
296 UITestLogger::getInstance().logAction(xThis, nEvent);
297
299}
300
301bool Control::ImplCallEventListenersAndHandler( VclEventId nEvent, std::function<void()> const & callHandler )
302{
303 VclPtr<Control> xThis(this);
304
306
307 if ( !xThis->isDisposed() )
308 {
309 if (callHandler)
310 {
311 callHandler();
312 }
313
314 if ( !xThis->isDisposed() )
315 return false;
316 }
317 return true;
318}
319
320void Control::SetLayoutDataParent( const Control* pParent ) const
321{
322 if( HasLayoutData() )
323 mxLayoutData->m_pParent = pParent;
324}
325
327{
328 mxLayoutData.reset();
329}
330
332{
333 // use a deco view to draw the frame
334 // However, since there happens a lot of magic there, we need to fake some (style) settings
335 // on the device
336 AllSettings aOriginalSettings( pDev->GetSettings() );
337
338 AllSettings aNewSettings( aOriginalSettings );
339 StyleSettings aStyle( aNewSettings.GetStyleSettings() );
340
341 // The *only known* clients of the Draw methods of the various VCL-controls are form controls:
342 // During print preview, and during printing, Draw is called. Thus, drawing always happens with a
343 // mono (colored) border
345 aStyle.SetMonoColor( GetSettings().GetStyleSettings().GetMonoColor() );
346
347 aNewSettings.SetStyleSettings( aStyle );
348 // #i67023# do not call data changed listeners for this fake
349 // since they may understandably invalidate on settings changed
350 pDev->OutputDevice::SetSettings( aNewSettings );
351
352 DecorationView aDecoView( pDev );
354
355 pDev->OutputDevice::SetSettings( aOriginalSettings );
356}
357
359{
360 mbShowAccelerator = bVal;
361};
362
364{
365 if( m_pParent )
367}
368
370{
371 return Size( GetTextWidth( GetText() ) + 2 * 12,
372 GetTextHeight() + 2 * 6 );
373}
374
376{
377 if ( mpReferenceDevice == _referenceDevice )
378 return;
379
380 mpReferenceDevice = _referenceDevice;
381 Invalidate();
382}
383
385{
386 // tdf#118377 It can happen that mpReferenceDevice is already disposed and
387 // stays disposed (see task, even when Dialog is closed). I have no idea if
388 // this may be very bad - someone who knows more about lifetime of OutputDevice's
389 // will have to decide.
390 // To secure this, I changed all accesses to mpControlData->mpReferenceDevice to
391 // use Control::GetReferenceDevice() - only use mpControlData->mpReferenceDevice
392 // inside Control::SetReferenceDevice and Control::GetReferenceDevice().
393 // Control::GetReferenceDevice() will now reset mpReferenceDevice if it is already
394 // disposed. This way all usages will do a kind of 'test-and-get' call.
395 if(nullptr != mpReferenceDevice && mpReferenceDevice->isDisposed())
396 {
397 const_cast<Control*>(this)->SetReferenceDevice(nullptr);
398 }
399
400 return mpReferenceDevice;
401}
402
404{
405 return _rStyle.GetLabelFont();
406}
407
409{
410 return _rStyle.GetLabelTextColor();
411}
412
414{
415 const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
416
417 ApplyControlFont(rRenderContext, GetCanonicalFont(rStyleSettings));
418
419 ApplyControlForeground(rRenderContext, GetCanonicalTextColor(rStyleSettings));
420 rRenderContext.SetTextFillColor();
421}
422
424{
425 ApplySettings(*GetOutDev());
426}
427
428tools::Rectangle Control::DrawControlText( OutputDevice& _rTargetDevice, const tools::Rectangle& rRect, const OUString& _rStr,
429 DrawTextFlags _nStyle, std::vector< tools::Rectangle >* _pVector, OUString* _pDisplayText, const Size* i_pDeviceSize ) const
430{
431 OUString rPStr = _rStr;
432 DrawTextFlags nPStyle = _nStyle;
433
434 bool autoacc = ImplGetSVData()->maNWFData.mbAutoAccel;
435
436 if (autoacc && !mbShowAccelerator)
437 rPStr = removeMnemonicFromString( _rStr );
438
439 if( !GetReferenceDevice() || ( GetReferenceDevice() == &_rTargetDevice ) )
440 {
441 const tools::Rectangle aRet = _rTargetDevice.GetTextRect(rRect, rPStr, nPStyle);
442 _rTargetDevice.DrawText(aRet, rPStr, nPStyle, _pVector, _pDisplayText);
443 return aRet;
444 }
445
446 ControlTextRenderer aRenderer( *this, _rTargetDevice, *GetReferenceDevice() );
447 return aRenderer.DrawText(rRect, rPStr, nPStyle, _pVector, _pDisplayText, i_pDeviceSize);
448}
449
451 const OUString& _rStr, DrawTextFlags _nStyle, Size* o_pDeviceSize ) const
452{
453 OUString rPStr = _rStr;
454 DrawTextFlags nPStyle = _nStyle;
455
456 bool autoacc = ImplGetSVData()->maNWFData.mbAutoAccel;
457
458 if (autoacc && !mbShowAccelerator)
459 rPStr = removeMnemonicFromString( _rStr );
460
461 if ( !GetReferenceDevice() || ( GetReferenceDevice() == &_rTargetDevice ) )
462 {
463 tools::Rectangle aRet = _rTargetDevice.GetTextRect( rRect, rPStr, nPStyle );
464 if (o_pDeviceSize)
465 {
466 *o_pDeviceSize = aRet.GetSize();
467 }
468 return aRet;
469 }
470
471 ControlTextRenderer aRenderer( *this, _rTargetDevice, *GetReferenceDevice() );
472 return aRenderer.GetTextRect(rRect, rPStr, nPStyle, o_pDeviceSize);
473}
474
475Font
477{
478 Font aFont(GetCanonicalFont(GetSettings().GetStyleSettings()));
479 if (IsControlFont())
480 aFont.Merge(GetControlFont());
481 return aFont;
482}
483
485{
486 VclPtr<vcl::Window> pParent = GetParentWithLOKNotifier();
487 if (!pParent || !dynamic_cast<vcl::DocWindow*>(GetParent()))
488 {
489 // if control doesn't belong to a DocWindow, the overridden base class
490 // method has to be invoked
491 Window::LogicInvalidate(pRectangle);
492 return;
493 }
494
495 // avoid endless paint/invalidate loop in Impress
497 return;
498
499 tools::Rectangle aResultRectangle;
500 if (!pRectangle)
501 {
502 // we have to invalidate the whole control area not the whole document
503 aResultRectangle = PixelToLogic(tools::Rectangle(GetPosPixel(), GetSizePixel()), MapMode(MapUnit::MapTwip));
504 }
505 else
506 {
507 aResultRectangle = OutputDevice::LogicToLogic(*pRectangle, GetMapMode(), MapMode(MapUnit::MapTwip));
508 }
509
510 pParent->GetLOKNotifier()->notifyInvalidation(&aResultRectangle);
511}
512
513/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
DrawTextFlags
const StyleSettings & GetStyleSettings() const
void SetStyleSettings(const StyleSettings &rSet)
static vcl::Window * GetFocusWindow()
Get the currently focused window.
Definition: svapp.cxx:1038
Definition: ctrl.hxx:80
OutputDevice * GetReferenceDevice() const
Definition: ctrl.cxx:384
virtual void ApplySettings(vcl::RenderContext &rRenderContext) override
Definition: ctrl.cxx:413
std::optional< vcl::ControlLayoutData > mxLayoutData
Definition: ctrl.hxx:82
void CreateLayoutData() const
creates the mpData->mpLayoutData structure
Definition: ctrl.cxx:87
vcl::Font GetUnzoomedControlPointFont() const
Definition: ctrl.cxx:476
tools::Long GetIndexForPoint(const Point &rPoint) const
Definition: ctrl.cxx:137
VclPtr< OutputDevice > mpReferenceDevice
Definition: ctrl.hxx:83
SAL_DLLPRIVATE void ImplClearLayoutData() const
Definition: ctrl.cxx:326
tools::Rectangle DrawControlText(OutputDevice &_rTargetDevice, const tools::Rectangle &_rRect, const OUString &_rStr, DrawTextFlags _nStyle, std::vector< tools::Rectangle > *_pVector, OUString *_pDisplayText, const Size *i_pDeviceSize=nullptr) const
draws the given text onto the given device
Definition: ctrl.cxx:428
virtual void LogicInvalidate(const tools::Rectangle *pRectangle) override
Notify the LOK client about an invalidated area.
Definition: ctrl.cxx:484
virtual void FillLayoutData() const
Definition: ctrl.cxx:83
Control(const Control &)=delete
tools::Long ToRelativeLineIndex(tools::Long nIndex) const
ToRelativeLineIndex changes a layout data index to a count relative to its line.
Definition: ctrl.cxx:206
bool mbHasControlFocus
Definition: ctrl.hxx:86
virtual const Color & GetCanonicalTextColor(const StyleSettings &_rStyle) const
Definition: ctrl.cxx:408
bool ImplCallEventListenersAndHandler(VclEventId nEvent, std::function< void()> const &callHandler)
this calls both our event listeners, and a specified handler
Definition: ctrl.cxx:301
Pair GetLineStartEnd(tools::Long nLine) const
Definition: ctrl.cxx:167
void SetLayoutDataParent(const Control *pParent) const
Definition: ctrl.cxx:320
virtual bool EventNotify(NotifyEvent &rNEvt) override
Definition: ctrl.cxx:225
tools::Rectangle GetControlTextRect(OutputDevice &_rTargetDevice, const tools::Rectangle &rRect, const OUString &_rStr, DrawTextFlags _nStyle, Size *o_pDeviceSize=nullptr) const
Definition: ctrl.cxx:450
virtual void StateChanged(StateChangedType nStateChange) override
Definition: ctrl.cxx:256
SAL_DLLPRIVATE void ImplInitControlData()
Definition: ctrl.cxx:37
virtual void Resize() override
Definition: ctrl.cxx:77
virtual ~Control() override
Definition: ctrl.cxx:56
virtual void EnableRTL(bool bEnable=true) override
Definition: ctrl.cxx:68
bool HasLayoutData() const
determines whether we currently have layout data
Definition: ctrl.cxx:93
bool mbShowAccelerator
Definition: ctrl.hxx:87
void SetReferenceDevice(OutputDevice *_referenceDevice)
sets a reference device used for rendering control text
Definition: ctrl.cxx:375
virtual void SetText(const OUString &rStr) override
Definition: ctrl.cxx:98
virtual OUString GetDisplayText() const override
Definition: ctrl.cxx:213
virtual Size GetOptimalSize() const override
Definition: ctrl.cxx:369
void AppendLayoutData(const Control &rSubControl) const
Definition: ctrl.cxx:269
SAL_DLLPRIVATE void ImplDrawFrame(OutputDevice *pDev, tools::Rectangle &rRect)
draws a frame around the give rectangle, onto the given device
Definition: ctrl.cxx:331
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
Definition: ctrl.cxx:293
void ImplInitSettings()
Definition: ctrl.cxx:423
tools::Rectangle GetCharacterBounds(tools::Long nIndex) const
Definition: ctrl.cxx:113
virtual const vcl::Font & GetCanonicalFont(const StyleSettings &_rStyle) const
Definition: ctrl.cxx:403
void SetShowAccelerator(bool val)
Definition: ctrl.cxx:358
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects.
Definition: ctrl.cxx:61
virtual bool FocusWindowBelongsToControl(const vcl::Window *pFocusWin) const
Definition: ctrl.cxx:220
void DrawFrame(const tools::Rectangle &rRect, const Color &rLeftTopColor, const Color &rRightBottomColor)
Definition: decoview.cxx:811
NotifyEventType GetType() const
Definition: event.hxx:308
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:170
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
Definition: map.cxx:1580
tools::Rectangle GetTextRect(const tools::Rectangle &rRect, const OUString &rStr, DrawTextFlags nStyle=DrawTextFlags::WordBreak, TextRectInfo *pInfo=nullptr, const vcl::ITextLayout *_pTextLayout=nullptr) const
Definition: text.cxx:1881
void SetTextFillColor()
Definition: text.cxx:734
void DrawText(const Point &rStartPt, const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, std::vector< tools::Rectangle > *pVector=nullptr, OUString *pDisplayText=nullptr, const SalLayoutGlyphs *pLayoutCache=nullptr)
Definition: text.cxx:797
void SetLayoutMode(vcl::text::ComplexTextLayoutFlags nTextLayoutMode)
Definition: text.cxx:60
const AllSettings & GetSettings() const
Definition: outdev.hxx:288
tools::Long A() const
tools::Long B() const
constexpr tools::Long Y() const
constexpr tools::Long X() const
StyleSettingsOptions GetOptions() const
const Color & GetLabelTextColor() const
const vcl::Font & GetLabelFont() const
void SetMonoColor(const Color &rColor)
void SetOptions(StyleSettingsOptions nOptions)
void logAction(VclPtr< Control > const &xUIElement, VclEventId nEvent)
Definition: logger.cxx:147
static UITestLogger & getInstance()
Definition: logger.cxx:611
void clear()
Definition: vclptr.hxx:190
bool isDisposed() const
constexpr tools::Long Top() const
constexpr Size GetSize() const
void Move(tools::Long nHorzMoveDelta, tools::Long nVertMoveDelta)
constexpr tools::Long Left() const
a class which allows rendering text of a Control onto a device, by taking into account the metrics of...
Definition: textlayout.hxx:89
tools::Rectangle DrawText(const tools::Rectangle &_rRect, const OUString &_rText, DrawTextFlags _nStyle, std::vector< tools::Rectangle > *_pVector, OUString *_pDisplayText, const Size *i_pDeviceSize)
Definition: textlayout.cxx:325
tools::Rectangle GetTextRect(const tools::Rectangle &_rRect, const OUString &_rText, DrawTextFlags _nStyle, Size *o_pDeviceSize)
Definition: textlayout.cxx:331
void Merge(const Font &rFont)
Definition: font/font.cxx:358
virtual void notifyInvalidation(tools::Rectangle const *) const =0
Emits a LOK_CALLBACK_INVALIDATE_TILES.
virtual void StateChanged(StateChangedType nStateChange)
Definition: window.cxx:1940
::OutputDevice const * GetOutDev() const
Definition: window.cxx:567
const vcl::ILibreOfficeKitNotifier * GetLOKNotifier() const
Definition: window.cxx:3246
virtual void LogicInvalidate(const tools::Rectangle *pRectangle)
Notification about some rectangle of the output device got invalidated.Used for the main document win...
Definition: paint.cxx:1190
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
Definition: event.cxx:219
virtual bool EventNotify(NotifyEvent &rNEvt)
Definition: event.cxx:104
tools::Rectangle GetWindowExtentsRelative(const vcl::Window &rRelativeWindow) const
Definition: window.cxx:2914
SAL_DLLPRIVATE void ImplInit(vcl::Window *pParent, WinBits nStyle, SystemParentData *pSystemParentData)
Definition: window.cxx:941
SAL_DLLPRIVATE void CompatStateChanged(StateChangedType nStateChange)
Definition: window.cxx:3898
sal_Int32 nIndex
sal_Int64 n
#define SAL_WARN_IF(condition, area, stream)
std::unique_ptr< sal_Int32[]> pData
int i
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
long Long
QPRO_FUNC_TYPE nType
ImplSVNWFData maNWFData
Definition: svdata.hxx:403
bool mbAutoAccel
Definition: svdata.hxx:339
::Pair GetLineStartEnd(tools::Long nLine) const
Definition: ctrl.cxx:144
tools::Long ToRelativeLineIndex(tools::Long nIndex) const
ToRelativeLineIndex changes a layout data index to a count relative to its line.
Definition: ctrl.cxx:174
tools::Long GetIndexForPoint(const Point &rPoint) const
Definition: ctrl.cxx:120
tools::Rectangle GetCharacterBounds(tools::Long nIndex) const
Definition: ctrl.cxx:108
std::vector< tools::Rectangle > m_aUnicodeBoundRects
Definition: ctrl.hxx:46
std::vector< tools::Long > m_aLineIndices
Definition: ctrl.hxx:48
VclPtr< const Control > m_pParent
Definition: ctrl.hxx:50
OUString m_aDisplayText
Definition: ctrl.hxx:43
ImplSVData * ImplGetSVData()
Definition: svdata.cxx:77
OUString removeMnemonicFromString(OUString const &rStr)
VclEventId
Definition: vclevent.hxx:38
StateChangedType
Definition: window.hxx:291
sal_Int64 WinBits
Definition: wintypes.hxx:109
WindowType
Definition: wintypes.hxx:27