LibreOffice Module vcl (master) 1
split.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 <tools/poly.hxx>
21
22#include <vcl/event.hxx>
23#include <vcl/split.hxx>
24#include <vcl/svapp.hxx>
25#include <vcl/syswin.hxx>
26#include <vcl/taskpanelist.hxx>
27#include <vcl/lineinfo.hxx>
28#include <vcl/settings.hxx>
29#include <vcl/ptrstyle.hxx>
30#include <vcl/lazydelete.hxx>
31
32#include <window.h>
33
34namespace
35{
36 Wallpaper& ImplBlackWall()
37 {
38 static vcl::DeleteOnDeinit< Wallpaper > SINGLETON(COL_BLACK);
39 return *SINGLETON.get();
40 }
41 Wallpaper& ImplWhiteWall()
42 {
43 static vcl::DeleteOnDeinit< Wallpaper > SINGLETON(COL_LIGHTGRAY);
44 return *SINGLETON.get();
45 }
46}
47
48// Should only be called from an ImplInit method for initialization or
49// after checking bNew is different from the current mbHorzSplit value.
50// The public method that does that check is Splitter::SetHorizontal().
52{
53 mbHorzSplit = bNew;
54
55 PointerStyle ePointerStyle;
56 const StyleSettings& rSettings = GetSettings().GetStyleSettings();
57
58 if ( mbHorzSplit )
59 {
60 ePointerStyle = PointerStyle::HSplit;
62 }
63 else
64 {
65 ePointerStyle = PointerStyle::VSplit;
67 }
68
69 SetPointer( ePointerStyle );
70}
71
72void Splitter::ImplInit( vcl::Window* pParent, WinBits nWinStyle )
73{
74 Window::ImplInit( pParent, nWinStyle, nullptr );
75
76 mpRefWin = pParent;
77
78 ImplInitHorVer(nWinStyle & WB_HSCROLL);
79
80 if( GetSettings().GetStyleSettings().GetFaceColor().IsDark() )
81 SetBackground( ImplWhiteWall() );
82 else
83 SetBackground( ImplBlackWall() );
84
86 pTList->AddWindow( this );
87}
88
89void Splitter::ImplSplitMousePos( Point& rPos )
90{
91 if ( mbHorzSplit )
92 {
93 if ( rPos.X() > maDragRect.Right()-1 )
94 rPos.setX( maDragRect.Right()-1 );
95 if ( rPos.X() < maDragRect.Left()+1 )
96 rPos.setX( maDragRect.Left()+1 );
97 }
98 else
99 {
100 if ( rPos.Y() > maDragRect.Bottom()-1 )
101 rPos.setY( maDragRect.Bottom()-1 );
102 if ( rPos.Y() < maDragRect.Top()+1 )
103 rPos.setY( maDragRect.Top()+1 );
104 }
105}
106
108{
109 tools::Rectangle aInvRect( maDragRect );
110
111 if ( mbHorzSplit )
112 {
113 aInvRect.SetLeft( maDragPos.X() - 1 );
114 aInvRect.SetRight( maDragPos.X() + 1 );
115 }
116 else
117 {
118 aInvRect.SetTop( maDragPos.Y() - 1 );
119 aInvRect.SetBottom( maDragPos.Y() + 1 );
120 }
121
123}
124
127 mpRefWin( nullptr ),
128 mnSplitPos( 0 ),
129 mnLastSplitPos( 0 ),
130 mnStartSplitPos( 0 ),
131 mbDragFull( false ),
132 mbKbdSplitting( false ),
133 mbInKeyEvent( false ),
134 mnKeyboardStepSize( SPLITTER_DEFAULTSTEPSIZE )
135{
137
138 ImplInit( pParent, nStyle );
139
142}
143
145{
146 disposeOnce();
147}
148
150{
151 SystemWindow *pSysWin = GetSystemWindow();
152 if(pSysWin)
153 {
154 TaskPaneList *pTList = pSysWin->GetTaskPaneList();
155 pTList->RemoveWindow(this);
156 }
157 mpRefWin.clear();
158 Window::dispose();
159}
160
162{
163 if(bNew != mbHorzSplit)
164 {
165 ImplInitHorVer(bNew);
166 }
167}
168
170{
171 mnKeyboardStepSize = nStepSize;
172}
173
175{
176 // look for another splitter with the same parent but different orientation
178 Splitter *pSplitter = nullptr;
179 while( pWin )
180 {
181 if( pWin->ImplIsSplitter() )
182 {
183 pSplitter = static_cast<Splitter*>(pWin);
184 if( pSplitter != this && IsHorizontal() != pSplitter->IsHorizontal() )
185 return pSplitter;
186 }
187 pWin = pWin->GetWindow( GetWindowType::Next );
188 }
189 return nullptr;
190}
191
193{
194 // is splitter in document or at scrollbar handle ?
195
196 bool bActive = true;
197 const StyleSettings& rSettings = GetSettings().GetStyleSettings();
198 tools::Long nA = rSettings.GetScrollBarSize();
200
201 Size aSize = GetOutDev()->GetOutputSize();
202 if ( mbHorzSplit )
203 {
204 if( aSize.Width() == nB && aSize.Height() == nA )
205 bActive = false;
206 }
207 else
208 {
209 if( aSize.Width() == nA && aSize.Height() == nB )
210 bActive = false;
211 }
212 return bActive;
213}
214
216{
217 if ( rMEvt.GetClicks() == 2 )
218 {
219 if ( mnLastSplitPos != mnSplitPos )
220 {
221 StartSplit();
222 Point aPos = rMEvt.GetPosPixel();
223 if ( mbHorzSplit )
224 aPos.setX( mnLastSplitPos );
225 else
226 aPos.setY( mnLastSplitPos );
227 ImplSplitMousePos( aPos );
228 tools::Long nTemp = mnSplitPos;
229 if ( mbHorzSplit )
230 SetSplitPosPixel( aPos.X() );
231 else
232 SetSplitPosPixel( aPos.Y() );
233 mnLastSplitPos = nTemp;
234 Split();
235 EndSplit();
236 }
237 }
238 else
239 StartDrag();
240}
241
243{
244 if ( rTEvt.IsTrackingEnded() )
245 {
246 if ( !mbDragFull )
248
249 if ( !rTEvt.IsTrackingCanceled() )
250 {
251 tools::Long nNewPos;
252 if ( mbHorzSplit )
253 nNewPos = maDragPos.X();
254 else
255 nNewPos = maDragPos.Y();
256 if ( nNewPos != mnStartSplitPos )
257 {
258 SetSplitPosPixel( nNewPos );
259 mnLastSplitPos = 0;
260 Split();
261 }
262 EndSplit();
263 }
264 else if ( mbDragFull )
265 {
267 Split();
268 }
269 mnStartSplitPos = 0;
270 }
271 else
272 {
273 //Point aNewPos = mpRefWin->ScreenToOutputPixel( OutputToScreenPixel( rTEvt.GetMouseEvent().GetPosPixel() ) );
275 ImplSplitMousePos( aNewPos );
276
277 if ( mbHorzSplit )
278 {
279 if ( aNewPos.X() == maDragPos.X() )
280 return;
281 }
282 else
283 {
284 if ( aNewPos.Y() == maDragPos.Y() )
285 return;
286 }
287
288 if ( mbDragFull )
289 {
290 maDragPos = aNewPos;
291 tools::Long nNewPos;
292 if ( mbHorzSplit )
293 nNewPos = maDragPos.X();
294 else
295 nNewPos = maDragPos.Y();
296 if ( nNewPos != mnSplitPos )
297 {
298 SetSplitPosPixel( nNewPos );
299 mnLastSplitPos = 0;
300 Split();
301 }
302
304 }
305 else
306 {
308 maDragPos = aNewPos;
310 }
311 }
312}
313
315{
316 sal_uInt16 nCode = aKeyCode.GetCode();
317 if ( nCode == KEY_ESCAPE || nCode == KEY_RETURN )
318 {
319 if( !mbKbdSplitting )
320 return;
321 else
322 mbKbdSplitting = false;
323
324 if ( nCode != KEY_ESCAPE )
325 {
326 tools::Long nNewPos;
327 if ( mbHorzSplit )
328 nNewPos = maDragPos.X();
329 else
330 nNewPos = maDragPos.Y();
331 if ( nNewPos != mnStartSplitPos )
332 {
333 SetSplitPosPixel( nNewPos );
334 mnLastSplitPos = 0;
335 Split();
336 }
337 }
338 else
339 {
341 Split();
342 EndSplit();
343 }
344 mnStartSplitPos = 0;
345 }
346 else
347 {
348 Point aNewPos;
349 Size aSize = mpRefWin->GetOutDev()->GetOutputSize();
350 Point aPos = GetPosPixel();
351 // depending on the position calc allows continuous moves or snaps to row/columns
352 // continuous mode is active when position is at the origin or end of the splitter
353 // otherwise snap mode is active
354 // default here is snap, holding shift sets continuous mode
355 if( mbHorzSplit )
356 aNewPos = Point( ImplSplitterActive() ? aPos.X() : mnSplitPos, aKeyCode.IsShift() ? 0 : aSize.Height()/2);
357 else
358 aNewPos = Point( aKeyCode.IsShift() ? 0 : aSize.Width()/2, ImplSplitterActive() ? aPos.Y() : mnSplitPos );
359
360 Point aOldWindowPos = GetPosPixel();
361
362 int maxiter = 500; // avoid endless loop
363 int delta=0;
364 int delta_step = mbHorzSplit ? aSize.Width()/10 : aSize.Height()/10;
365
366 // use the specified step size if it was set
368 delta_step = mnKeyboardStepSize;
369
370 while( maxiter-- && aOldWindowPos == GetPosPixel() )
371 {
372 // inc/dec position until application performs changes
373 // thus a single key press really moves the splitter
374 if( aKeyCode.IsShift() )
375 delta++;
376 else
377 delta += delta_step;
378
379 switch( nCode )
380 {
381 case KEY_LEFT:
382 aNewPos.AdjustX( -delta );
383 break;
384 case KEY_RIGHT:
385 aNewPos.AdjustX(delta );
386 break;
387 case KEY_UP:
388 aNewPos.AdjustY( -delta );
389 break;
390 case KEY_DOWN:
391 aNewPos.AdjustY(delta );
392 break;
393 default:
394 maxiter = 0; // leave loop
395 break;
396 }
397 ImplSplitMousePos( aNewPos );
398
399 if ( mbHorzSplit )
400 {
401 if ( aNewPos.X() == maDragPos.X() )
402 continue;
403 }
404 else
405 {
406 if ( aNewPos.Y() == maDragPos.Y() )
407 continue;
408 }
409
410 maDragPos = aNewPos;
411 tools::Long nNewPos;
412 if ( mbHorzSplit )
413 nNewPos = maDragPos.X();
414 else
415 nNewPos = maDragPos.Y();
416 if ( nNewPos != mnSplitPos )
417 {
418 SetSplitPosPixel( nNewPos );
419 mnLastSplitPos = 0;
420 Split();
421 }
423 }
424 }
425}
426
428{
429 maStartSplitHdl.Call( this );
430}
431
433{
434 maSplitHdl.Call( this );
435}
436
438{
439 maEndSplitHdl.Call( this );
440}
441
442void Splitter::SetDragRectPixel( const tools::Rectangle& rDragRect, vcl::Window* _pRefWin )
443{
444 maDragRect = rDragRect;
445 if ( !_pRefWin )
447 else
448 mpRefWin = _pRefWin;
449}
450
452{
453 mnSplitPos = nNewPos;
454}
455
457{
458 if ( IsTracking() )
459 return;
460
461 StartSplit();
462
463 // Tracking starten
465
466 // Start-Position ermitteln
469 if ( mbHorzSplit )
471 else
473
474 mbDragFull = bool(Application::GetSettings().GetStyleSettings().GetDragFullOptions() & DragFullOptions::Split);
475 if ( !mbDragFull )
477}
478
480{
481 if( mbKbdSplitting )
482 return;
483
484 mbKbdSplitting = true;
485
486 StartSplit();
487
488 // determine start position
489 // because we have no mouse position we take either the position
490 // of the splitter window or the last split position
491 // the other coordinate is just the center of the reference window
492 Size aSize = mpRefWin->GetOutDev()->GetOutputSize();
493 Point aPos = GetPosPixel();
494 if( mbHorzSplit )
495 maDragPos = Point( ImplSplitterActive() ? aPos.X() : mnSplitPos, aSize.Height()/2 );
496 else
497 maDragPos = Point( aSize.Width()/2, ImplSplitterActive() ? aPos.Y() : mnSplitPos );
499 if ( mbHorzSplit )
501 else
503}
504
506{
507 // set splitter in the center of the ref window
508 StartSplit();
509 Size aSize = mpRefWin->GetOutDev()->GetOutputSize();
510 Point aPos( aSize.Width()/2 , aSize.Height()/2);
512 {
513 // restore last pos if it was a useful position (>5)
514 if ( mbHorzSplit )
515 aPos.setX( mnLastSplitPos );
516 else
517 aPos.setY( mnLastSplitPos );
518 }
519
520 ImplSplitMousePos( aPos );
521 tools::Long nTemp = mnSplitPos;
522 if ( mbHorzSplit )
523 SetSplitPosPixel( aPos.X() );
524 else
525 SetSplitPosPixel( aPos.Y() );
526 mnLastSplitPos = nTemp;
527 Split();
528 EndSplit();
529}
530
532{
533 if( !ImplSplitterActive() )
535
536 Invalidate();
537}
538
540{
541 if( mbKbdSplitting )
542 {
543 vcl::KeyCode aReturnKey( KEY_RETURN );
544 ImplKbdTracking( aReturnKey );
545 mbKbdSplitting = false;
546 }
547 Invalidate();
548}
549
550void Splitter::KeyInput( const KeyEvent& rKEvt )
551{
552 if( mbInKeyEvent )
553 return;
554
555 mbInKeyEvent = true;
556
557 Splitter *pSibling = ImplFindSibling();
558 vcl::KeyCode aKeyCode = rKEvt.GetKeyCode();
559 sal_uInt16 nCode = aKeyCode.GetCode();
560 switch ( nCode )
561 {
562 case KEY_UP:
563 case KEY_DOWN:
564 if( !mbHorzSplit )
565 {
567 ImplKbdTracking( aKeyCode );
568 }
569 else
570 {
571 if( pSibling )
572 {
573 pSibling->GrabFocus();
574 pSibling->KeyInput( rKEvt );
575 }
576 }
577 break;
578 case KEY_RIGHT:
579 case KEY_LEFT:
580 if( mbHorzSplit )
581 {
583 ImplKbdTracking( aKeyCode );
584 }
585 else
586 {
587 if( pSibling )
588 {
589 pSibling->GrabFocus();
590 pSibling->KeyInput( rKEvt );
591 }
592 }
593 break;
594
595 case KEY_DELETE:
596 if( ImplSplitterActive() )
597 {
598 if( mbKbdSplitting )
599 {
600 vcl::KeyCode aKey( KEY_ESCAPE );
601 ImplKbdTracking( aKey );
602 }
603
604 StartSplit();
605 Point aPos;
606 if ( mbHorzSplit )
607 aPos.setX( 0 );
608 else
609 aPos.setY( 0 );
610 ImplSplitMousePos( aPos );
611 tools::Long nTemp = mnSplitPos;
612 if ( mbHorzSplit )
613 SetSplitPosPixel( aPos.X() );
614 else
615 SetSplitPosPixel( aPos.Y() );
616 mnLastSplitPos = nTemp;
617 Split();
618 EndSplit();
619
620 // Shift-Del deletes both splitters
621 if( aKeyCode.IsShift() && pSibling )
622 pSibling->KeyInput( rKEvt );
623
625 }
626 break;
627
628 case KEY_ESCAPE:
629 if( mbKbdSplitting )
630 ImplKbdTracking( aKeyCode );
631 else
633 break;
634
635 case KEY_RETURN:
636 ImplKbdTracking( aKeyCode );
638 break;
639 default: // let any key input fix the splitter
640 Window::KeyInput( rKEvt );
642 break;
643 }
644 mbInKeyEvent = false;
645}
646
648{
649 Window::DataChanged( rDCEvt );
651 return;
652
653 const AllSettings* pOldSettings = rDCEvt.GetOldSettings();
654 if(!pOldSettings)
655 return;
656
657 Color oldFaceColor = pOldSettings->GetStyleSettings().GetFaceColor();
659 if( oldFaceColor.IsDark() != newFaceColor.IsDark() )
660 {
661 if( newFaceColor.IsDark() )
662 SetBackground( ImplWhiteWall() );
663 else
664 SetBackground( ImplBlackWall() );
665 }
666}
667
668void Splitter::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rPaintRect)
669{
670 rRenderContext.DrawRect(rPaintRect);
671
672 tools::Polygon aPoly(rPaintRect);
673 tools::PolyPolygon aPolyPoly(aPoly);
674 rRenderContext.DrawTransparent(aPolyPoly, 85);
675
676 if (mbKbdSplitting)
677 {
678 LineInfo aInfo( LineStyle::Dash );
679 //aInfo.SetDashLen( 2 );
680 //aInfo.SetDashCount( 1 );
681 aInfo.SetDistance( 1 );
682 aInfo.SetDotLen( 2 );
683 aInfo.SetDotCount( 3 );
684
685 rRenderContext.DrawPolyLine( aPoly, aInfo );
686 }
687 else
688 {
689 rRenderContext.DrawRect(rPaintRect);
690 }
691}
692
694{
695 return LogicToPixel(Size(3, 3), MapMode(MapUnit::MapAppFont));
696}
697
698/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
Gets the application's settings.
Definition: svapp.cxx:761
bool IsDark() const
DataChangedEventType GetType() const
Definition: event.hxx:362
const AllSettings * GetOldSettings() const
Definition: event.hxx:377
const vcl::KeyCode & GetKeyCode() const
Definition: event.hxx:57
sal_uInt16 GetClicks() const
Definition: event.hxx:126
const Point & GetPosPixel() const
Definition: event.hxx:123
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:171
Size GetOutputSize() const
Definition: outdev.hxx:328
void DrawPolyLine(const tools::Polygon &rPoly)
Render the given polygon as a line stroke.
Definition: polyline.cxx:31
void DrawRect(const tools::Rectangle &rRect)
Definition: rect.cxx:50
void SetLineColor()
Definition: line.cxx:37
void SetFillColor()
Definition: fill.cxx:29
void DrawTransparent(const tools::PolyPolygon &rPolyPoly, sal_uInt16 nTransparencePercent)
constexpr tools::Long Height() const
constexpr tools::Long Width() const
bool mbKbdSplitting
Definition: split.hxx:40
tools::Long mnStartSplitPos
Definition: split.hxx:35
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects.
Definition: split.cxx:149
bool IsHorizontal() const
Definition: split.hxx:91
VclPtr< vcl::Window > mpRefWin
Definition: split.hxx:32
Splitter(const Splitter &)=delete
virtual ~Splitter() override
Definition: split.cxx:144
SAL_DLLPRIVATE void ImplRestoreSplitter()
Definition: split.cxx:505
tools::Rectangle maDragRect
Definition: split.hxx:37
tools::Long mnSplitPos
Definition: split.hxx:33
virtual void LoseFocus() override
Definition: split.cxx:539
void SetSplitPosPixel(tools::Long nPos)
Definition: split.cxx:451
SAL_DLLPRIVATE void ImplInit(vcl::Window *pParent, WinBits nWinStyle)
Definition: split.cxx:72
SAL_DLLPRIVATE void ImplInitHorVer(bool bNew)
Definition: split.cxx:51
virtual void DataChanged(const DataChangedEvent &rDCEvt) override
Definition: split.cxx:647
tools::Long mnKeyboardStepSize
Definition: split.hxx:42
void EndSplit()
Definition: split.cxx:437
Point maDragPos
Definition: split.hxx:36
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rPaintRect) override
Definition: split.cxx:668
virtual Size GetOptimalSize() const override
Definition: split.cxx:693
SAL_DLLPRIVATE void ImplDrawSplitter()
Definition: split.cxx:107
void StartDrag()
Definition: split.cxx:456
SAL_DLLPRIVATE void ImplSplitMousePos(Point &rPos)
Definition: split.cxx:89
Link< Splitter *, void > maSplitHdl
Definition: split.hxx:44
virtual void MouseButtonDown(const MouseEvent &rMEvt) override
Definition: split.cxx:215
bool mbHorzSplit
Definition: split.hxx:38
bool mbDragFull
Definition: split.hxx:39
Link< Splitter *, void > maEndSplitHdl
Definition: split.hxx:45
void Split()
Definition: split.cxx:432
bool mbInKeyEvent
Definition: split.hxx:41
virtual void KeyInput(const KeyEvent &rKEvt) override
Definition: split.cxx:550
SAL_DLLPRIVATE void ImplStartKbdSplitting()
Definition: split.cxx:479
tools::Long mnLastSplitPos
Definition: split.hxx:34
SAL_DLLPRIVATE Splitter * ImplFindSibling()
Definition: split.cxx:174
Link< Splitter *, void > maStartSplitHdl
Definition: split.hxx:43
void StartSplit()
Definition: split.cxx:427
void SetKeyboardStepSize(tools::Long nStepSize)
Definition: split.cxx:169
virtual void GetFocus() override
Definition: split.cxx:531
void SetHorizontal(bool bNew)
Definition: split.cxx:161
SAL_DLLPRIVATE void ImplKbdTracking(vcl::KeyCode aKeyCode)
Definition: split.cxx:314
void SetDragRectPixel(const tools::Rectangle &rDragRect, vcl::Window *pRefWin=nullptr)
Definition: split.cxx:442
SAL_DLLPRIVATE bool ImplSplitterActive()
Definition: split.cxx:192
virtual void Tracking(const TrackingEvent &rTEvt) override
Definition: split.cxx:242
sal_Int32 GetScrollBarSize() const
static sal_Int32 GetSplitSize()
const Color & GetFaceColor() const
TaskPaneList * GetTaskPaneList()
Definition: syswin.cxx:240
void AddWindow(vcl::Window *pWindow)
void RemoveWindow(vcl::Window *pWindow)
bool IsTrackingEnded() const
Definition: event.hxx:261
bool IsTrackingCanceled() const
Definition: event.hxx:263
const MouseEvent & GetMouseEvent() const
Definition: event.hxx:257
void clear()
Definition: vclptr.hxx:190
bool mbSplitter
Definition: window.h:378
constexpr void SetLeft(tools::Long v)
constexpr void SetTop(tools::Long v)
constexpr tools::Long Top() const
constexpr void SetRight(tools::Long v)
constexpr tools::Long Right() const
constexpr void SetBottom(tools::Long v)
constexpr tools::Long Left() const
constexpr tools::Long Bottom() const
sal_uInt16 GetCode() const
Definition: keycod.hxx:49
bool IsShift() const
Definition: keycod.hxx:54
void StartTracking(StartTrackingFlags nFlags=StartTrackingFlags::NONE)
Definition: window2.cxx:252
vcl::Window * GetParent() const
Definition: window2.cxx:1128
void PaintImmediately()
Definition: paint.cxx:1268
bool IsTracking() const
Definition: window2.cxx:340
Point LogicToPixel(const Point &rLogicPt) const
Definition: window3.cxx:131
virtual void SetSizePixel(const Size &rNewSize)
Definition: window2.cxx:1293
vcl::Window * GetWindow(GetWindowType nType) const
Definition: stacking.cxx:1035
void GrabFocus()
Definition: window.cxx:2983
SAL_DLLPRIVATE bool ImplIsSplitter() const
Definition: window2.cxx:947
virtual Point GetPosPixel() const
Definition: window.cxx:2798
Point NormalizedScreenToOutputPixel(const Point &rPos) const
Definition: window.cxx:2852
void GrabFocusToDocument()
Definition: window.cxx:2993
const AllSettings & GetSettings() const
Definition: window3.cxx:129
::OutputDevice const * GetOutDev() const
Definition: window.cxx:567
SystemWindow * GetSystemWindow() const
Definition: stacking.cxx:806
SAL_DLLPRIVATE WindowImpl * ImplGetWindowImpl() const
Definition: window.hxx:528
Point PixelToLogic(const Point &rDevicePt) const
Definition: window3.cxx:161
Point GetPointerPosPixel()
Definition: mouse.cxx:564
void SetPointer(PointerStyle)
Definition: mouse.cxx:486
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
Definition: paint.cxx:1143
void InvertTracking(const tools::Rectangle &rRect, ShowTrackFlags nFlags)
Definition: window2.cxx:162
Point OutputToNormalizedScreenPixel(const Point &rPos) const
Definition: window.cxx:2845
void SetBackground()
Definition: window3.cxx:100
constexpr sal_uInt16 KEY_RETURN
Definition: keycodes.hxx:119
constexpr sal_uInt16 KEY_ESCAPE
Definition: keycodes.hxx:120
constexpr sal_uInt16 KEY_LEFT
Definition: keycodes.hxx:112
constexpr sal_uInt16 KEY_UP
Definition: keycodes.hxx:111
constexpr sal_uInt16 KEY_RIGHT
Definition: keycodes.hxx:113
constexpr sal_uInt16 KEY_DELETE
Definition: keycodes.hxx:125
constexpr sal_uInt16 KEY_DOWN
Definition: keycodes.hxx:110
sal_uInt16 nCode
long Long
PointerStyle
Definition: ptrstyle.hxx:26
#define SPLITTER_DEFAULTSTEPSIZE
Definition: split.hxx:27
sal_Int64 WinBits
Definition: wintypes.hxx:109
WindowType
Definition: wintypes.hxx:27
WinBits const WB_HSCROLL
Definition: wintypes.hxx:177