LibreOffice Module sd (master) 1
annotationtag.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 <com/sun/star/geometry/RealPoint2D.hpp>
21#include <com/sun/star/office/XAnnotation.hpp>
22
23#include <rtl/ustrbuf.hxx>
24
25#include <utility>
26#include <vcl/commandevent.hxx>
27#include <vcl/svapp.hxx>
28#include <vcl/settings.hxx>
29#include <vcl/weldutils.hxx>
30
34#include <svx/svdpagv.hxx>
35#include <svx/sdrpagewindow.hxx>
37#include <svx/svddrgmt.hxx>
38#include <tools/debug.hxx>
39
40#include <View.hxx>
41#include <sdresid.hxx>
42#include <strings.hrc>
44#include "annotationwindow.hxx"
45#include "annotationtag.hxx"
46#include <Annotation.hxx>
47#include <ViewShell.hxx>
48#include <Window.hxx>
49#include <drawdoc.hxx>
50
51using namespace ::com::sun::star::uno;
52using namespace ::com::sun::star::lang;
53using namespace ::com::sun::star::drawing;
54using namespace ::com::sun::star::office;
55using namespace ::com::sun::star::geometry;
56
57namespace sd
58{
59
60const sal_uInt32 SMART_TAG_HDL_NUM = SAL_MAX_UINT32;
61const int DRGPIX = 2; // Drag MinMove in Pixel
62
63static OUString getInitials( const OUString& rName )
64{
65 OUStringBuffer sInitials;
66
67 const sal_Unicode * pStr = rName.getStr();
68 sal_Int32 nLength = rName.getLength();
69
70 while( nLength )
71 {
72 // skip whitespace
73 while( nLength && (*pStr <= ' ') )
74 {
75 nLength--; pStr++;
76 }
77
78 // take letter
79 if( nLength )
80 {
81 sInitials.append(*pStr);
82 nLength--; pStr++;
83 }
84
85 // skip letters until whitespace
86 while( nLength && (*pStr > ' ') )
87 {
88 nLength--; pStr++;
89 }
90 }
91
92 return sInitials.makeStringAndClear();
93}
94
95namespace {
96
97class AnnotationDragMove : public SdrDragMove
98{
99public:
100 AnnotationDragMove(SdrDragView& rNewView, rtl::Reference <AnnotationTag > xTag);
101 virtual bool BeginSdrDrag() override;
102 virtual bool EndSdrDrag(bool bCopy) override;
103 virtual void MoveSdrDrag(const Point& rNoSnapPnt) override;
104 virtual void CancelSdrDrag() override;
105
106private:
109};
110
111}
112
113AnnotationDragMove::AnnotationDragMove(SdrDragView& rNewView, rtl::Reference <AnnotationTag > xTag)
114: SdrDragMove(rNewView)
115, mxTag(std::move( xTag ))
116{
117}
118
119bool AnnotationDragMove::BeginSdrDrag()
120{
121 DragStat().SetRef1(GetDragHdl()->GetPos());
122 DragStat().SetShown(!DragStat().IsShown());
123
124 maOrigin = GetDragHdl()->GetPos();
125 DragStat().SetActionRect(::tools::Rectangle(maOrigin,maOrigin));
126
127 return true;
128}
129
130void AnnotationDragMove::MoveSdrDrag(const Point& rNoSnapPnt)
131{
132 Point aPnt(rNoSnapPnt);
133
134 if (DragStat().CheckMinMoved(rNoSnapPnt))
135 {
136 if (aPnt!=DragStat().GetNow())
137 {
138 Hide();
139 DragStat().NextMove(aPnt);
140 GetDragHdl()->SetPos( maOrigin + Point( DragStat().GetDX(), DragStat().GetDY() ) );
141 Show();
142 DragStat().SetActionRect(::tools::Rectangle(aPnt,aPnt));
143 }
144 }
145}
146
147bool AnnotationDragMove::EndSdrDrag(bool /*bCopy*/)
148{
149 Hide();
150 if( mxTag.is() )
151 mxTag->Move( DragStat().GetDX(), DragStat().GetDY() );
152 return true;
153}
154
155void AnnotationDragMove::CancelSdrDrag()
156{
157 Hide();
158}
159
160namespace {
161
162class AnnotationHdl : public SmartHdl
163{
164public:
165 AnnotationHdl( const SmartTagReference& xTag, const Reference< XAnnotation >& xAnnotation, const Point& rPnt );
166
167 virtual void CreateB2dIAObject() override;
168 virtual bool IsFocusHdl() const override;
169
170private:
171 Reference< XAnnotation > mxAnnotation;
173};
174
175}
176
177AnnotationHdl::AnnotationHdl( const SmartTagReference& xTag, const Reference< XAnnotation >& xAnnotation, const Point& rPnt )
178: SmartHdl( xTag, rPnt, SdrHdlKind::SmartTag )
179, mxAnnotation( xAnnotation )
180, mxTag( dynamic_cast< AnnotationTag* >( xTag.get() ) )
181{
182}
183
184void AnnotationHdl::CreateB2dIAObject()
185{
186 // first throw away old one
187 GetRidOfIAObject();
188
189 if (!mxAnnotation.is())
190 return;
191
192 const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
193
194 const Point aTagPos( GetPos() );
195 basegfx::B2DPoint aPosition( aTagPos.X(), aTagPos.Y() );
196
197 const bool bFocused = IsFocusHdl() && pHdlList && (pHdlList->GetFocusHdl() == this);
198
199 BitmapEx aBitmapEx( mxTag->CreateAnnotationBitmap(mxTag->isSelected()) );
200 BitmapEx aBitmapEx2;
201 if( bFocused )
202 aBitmapEx2 = mxTag->CreateAnnotationBitmap(!mxTag->isSelected() );
203
204 if(!pHdlList)
205 return;
206
207 SdrMarkView* pView = pHdlList->GetView();
208
209 if(!pView || pView->areMarkHandlesHidden())
210 return;
211
212 SdrPageView* pPageView = pView->GetSdrPageView();
213
214 if(!pPageView)
215 return;
216
217 for(sal_uInt32 b = 0; b < pPageView->PageWindowCount(); b++)
218 {
219 // const SdrPageViewWinRec& rPageViewWinRec = rPageViewWinList[b];
220 const SdrPageWindow& rPageWindow = *pPageView->GetPageWindow(b);
221
222 SdrPaintWindow& rPaintWindow = rPageWindow.GetPaintWindow();
224 if(rPaintWindow.OutputToWindow() && xManager.is() )
225 {
226 std::unique_ptr<sdr::overlay::OverlayObject> pOverlayObject;
227
228 auto* pAnnotation = dynamic_cast<sd::Annotation*>(mxAnnotation.get());
229
230 if (pAnnotation && pAnnotation->hasCustomAnnotationMarker())
231 {
232 CustomAnnotationMarker& rCustomAnnotationMarker = pAnnotation->getCustomAnnotationMarker();
233
234 auto& rPolygons = rCustomAnnotationMarker.maPolygons;
235 if (!rPolygons.empty())
236 {
237 basegfx::B2DPolyPolygon aPolyPolygon;
238 for (auto const & rPolygon : rPolygons)
239 aPolyPolygon.append(rPolygon);
240
241 pOverlayObject.reset(new sdr::overlay::OverlayPolyPolygon(
242 std::move(aPolyPolygon),
243 rCustomAnnotationMarker.maLineColor,
244 rCustomAnnotationMarker.mnLineWidth,
245 rCustomAnnotationMarker.maFillColor));
246 }
247 }
248 else
249 {
250 // animate focused handles
251 if(bFocused)
252 {
253 const sal_uInt64 nBlinkTime = rStyleSettings.GetCursorBlinkTime();
254
255 pOverlayObject.reset(new sdr::overlay::OverlayAnimatedBitmapEx(aPosition, aBitmapEx, aBitmapEx2, nBlinkTime, 0, 0, 0, 0 ));
256 }
257 else
258 {
259 pOverlayObject.reset(new sdr::overlay::OverlayBitmapEx( aPosition, aBitmapEx, 0, 0 ));
260 }
261 }
262
263 // OVERLAYMANAGER
264 insertNewlyCreatedOverlayObjectForSdrHdl(
265 std::move(pOverlayObject),
266 rPageWindow.GetObjectContact(),
267 *xManager);
268 }
269 }
270}
271
272bool AnnotationHdl::IsFocusHdl() const
273{
274 return true;
275}
276
277AnnotationTag::AnnotationTag( AnnotationManagerImpl& rManager, ::sd::View& rView, const Reference< XAnnotation >& xAnnotation, Color const & rColor, int nIndex, const vcl::Font& rFont )
278: SmartTag( rView )
279, mrManager( rManager )
280, mxAnnotation( xAnnotation )
281, maColor( rColor )
282, mnIndex( nIndex )
283, mrFont( rFont )
284, mpListenWindow( nullptr )
285{
286}
287
289{
290 DBG_ASSERT( !mxAnnotation.is(), "sd::AnnotationTag::~AnnotationTag(), dispose me first!" );
291 Dispose();
292}
293
296{
297 if( !mxAnnotation.is() )
298 return false;
299
300 bool bRet = false;
301 if( !isSelected() )
302 {
303 SmartTagReference xTag( this );
304 mrView.getSmartTags().select( xTag );
305 bRet = true;
306 }
307
308 if( rMEvt.IsLeft() && !rMEvt.IsRight() )
309 {
311 if( pWindow )
312 {
313 maMouseDownPos = pWindow->PixelToLogic( rMEvt.GetPosPixel() );
314
315 if( mpListenWindow )
316 mpListenWindow->RemoveEventListener( LINK(this, AnnotationTag, WindowEventHandler));
317
318 mpListenWindow = pWindow;
319 mpListenWindow->AddEventListener( LINK(this, AnnotationTag, WindowEventHandler));
320 }
321
322 bRet = true;
323 }
324
325 return bRet;
326}
327
330{
331 if( !mxAnnotation.is() )
332 return false;
333
334 sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode();
335 switch( nCode )
336 {
337 case KEY_DELETE:
339 return true;
340
341 case KEY_DOWN:
342 case KEY_UP:
343 case KEY_LEFT:
344 case KEY_RIGHT:
345 return OnMove( rKEvt );
346
347 case KEY_ESCAPE:
348 {
349 SmartTagReference xThis( this );
351 return true;
352 }
353
354 case KEY_TAB:
356 return true;
357
358 case KEY_RETURN:
359 case KEY_SPACE:
360 OpenPopup( true );
361 return true;
362
363 default:
364 return false;
365 }
366}
367
370{
371 if (rCEvt.GetCommand() != CommandEventId::ContextMenu)
372 return false;
374 {
375 ::tools::Rectangle aContextRect(rCEvt.GetMousePosPixel(),Size(1,1));
376 weld::Window* pParent = weld::GetPopupParent(*pWindow, aContextRect);
378 return true;
379 }
380 return false;
381}
382
383void AnnotationTag::Move( int nDX, int nDY )
384{
385 if( !mxAnnotation.is() )
386 return;
387
389 mrManager.GetDoc()->BegUndo( SdResId( STR_ANNOTATION_UNDO_MOVE ) );
390
391 RealPoint2D aPosition( mxAnnotation->getPosition() );
392 aPosition.X += static_cast<double>(nDX) / 100.0;
393 aPosition.Y += static_cast<double>(nDY) / 100.0;
394 mxAnnotation->setPosition( aPosition );
395
398
400}
401
402bool AnnotationTag::OnMove( const KeyEvent& rKEvt )
403{
404 ::tools::Long nX = 0;
405 ::tools::Long nY = 0;
406
407 switch( rKEvt.GetKeyCode().GetCode() )
408 {
409 case KEY_UP: nY = -1; break;
410 case KEY_DOWN: nY = 1; break;
411 case KEY_LEFT: nX = -1; break;
412 case KEY_RIGHT: nX = 1; break;
413 default: break;
414 }
415
416 if(rKEvt.GetKeyCode().IsMod2())
417 {
419 Size aLogicSizeOnePixel = pOut ? pOut->PixelToLogic(Size(1,1)) : Size(100, 100);
420 nX *= aLogicSizeOnePixel.Width();
421 nY *= aLogicSizeOnePixel.Height();
422 }
423 else
424 {
425 // old, fixed move distance
426 nX *= 100;
427 nY *= 100;
428 }
429
430 if( nX || nY )
431 {
432 // move the annotation
433 Move( nX, nY );
434 }
435
436 return true;
437}
438
440{
441}
442
444{
445 return 0;
446}
447
449{
450 return 0;
451}
452
453bool AnnotationTag::MarkPoint(SdrHdl& /*rHdl*/, bool /*bUnmark*/ )
454{
455 return false;
456}
457
458bool AnnotationTag::MarkPoints(const ::tools::Rectangle* /*pRect*/, bool /*bUnmark*/ )
459{
460 return false;
461}
462
464{
465 return false;
466}
467
469{
470 if( !mxAnnotation.is() )
471 return;
472
473 SmartTagReference xThis( this );
474 std::unique_ptr<AnnotationHdl> pHdl(new AnnotationHdl( xThis, mxAnnotation, Point() ));
475 pHdl->SetObjHdlNum( SMART_TAG_HDL_NUM );
476 pHdl->SetPageView( mrView.GetSdrPageView() );
477
478 RealPoint2D aPosition( mxAnnotation->getPosition() );
479 Point aBasePos( static_cast<::tools::Long>(aPosition.X * 100.0), static_cast<::tools::Long>(aPosition.Y * 100.0) );
480 pHdl->SetPos( aBasePos );
481
482 rHandlerList.AddHdl( std::move(pHdl) );
483}
484
486{
487 if( mpListenWindow )
488 {
489 mpListenWindow->RemoveEventListener( LINK(this, AnnotationTag, WindowEventHandler));
490 }
491
492 mxAnnotation.clear();
493 ClosePopup();
495}
496
498{
500
501 mrManager.onTagSelected( *this );
502
504 if( pWindow )
505 {
506 RealPoint2D aPosition( mxAnnotation->getPosition() );
507 Point aPos( static_cast<::tools::Long>(aPosition.X * 100.0), static_cast<::tools::Long>(aPosition.Y * 100.0) );
508
509 ::tools::Rectangle aVisRect( aPos, pWindow->PixelToLogic(maSize) );
510 mrView.MakeVisible(aVisRect, *pWindow);
511 }
512}
513
515{
517
518 ClosePopup();
519
520 mrManager.onTagDeselected( *this );
521}
522
524{
526
527 OUString sText;
528 auto* pAnnotation = dynamic_cast<sd::Annotation*>(mxAnnotation.get());
529 if (pAnnotation && pAnnotation->isFreeText())
530 {
531 sText = mxAnnotation->getTextRange()->getString();
532 }
533 else
534 {
535 OUString sInitials(mxAnnotation->getInitials());
536 if (sInitials.isEmpty())
537 {
538 sInitials = getInitials(mxAnnotation->getAuthor());
539 }
540
541 sText = sInitials + " " + OUString::number(mnIndex);
542 }
543
544 pVDev->SetFont( mrFont );
545
546 const int BORDER_X = 4; // pixels
547 const int BORDER_Y = 4; // pixels
548
549 maSize = Size(pVDev->GetTextWidth(sText) + 2 * BORDER_X, pVDev->GetTextHeight() + 2 * BORDER_Y);
550 pVDev->SetOutputSizePixel( maSize, false );
551
552 Color aBorderColor( maColor );
553
554 if( bSelected )
555 {
556 aBorderColor.Invert();
557 }
558 else
559 {
560 if( maColor.IsDark() )
561 {
562 aBorderColor.IncreaseLuminance( 32 );
563 }
564 else
565 {
566 aBorderColor.DecreaseLuminance( 32 );
567 }
568 }
569
570 Point aPos;
571 ::tools::Rectangle aBorderRect( aPos, maSize );
572 pVDev->SetLineColor(aBorderColor);
573 pVDev->SetFillColor(maColor);
574 pVDev->DrawRect( aBorderRect );
575
576 pVDev->SetTextColor( maColor.IsDark() ? COL_WHITE : COL_BLACK );
577 pVDev->DrawText(Point(BORDER_X, BORDER_Y), sText);
578
579 return pVDev->GetBitmapEx( aPos, maSize );
580}
581
582void AnnotationTag::OpenPopup( bool bEdit )
583{
584 if( !mxAnnotation.is() )
585 return;
586
587 if( !mpAnnotationWindow )
588 {
590 vcl::Window* pWindow = pOut ? pOut->GetOwnerWindow() : nullptr;
591 if( pWindow )
592 {
593 RealPoint2D aPosition( mxAnnotation->getPosition() );
594 Point aPos(pWindow->LogicToPixel( Point( static_cast<::tools::Long>(aPosition.X * 100.0), static_cast<::tools::Long>(aPosition.Y * 100.0) ) ) );
595
596 aPos.AdjustX(4 ); // magic!
597 aPos.AdjustY(1 );
598
599 ::tools::Rectangle aRect( aPos, maSize );
600
601 weld::Window* pParent = weld::GetPopupParent(*pWindow, aRect);
602 mpAnnotationWindow.reset(new AnnotationWindow(pParent, aRect, mrView.GetDocSh(), mxAnnotation));
603 mpAnnotationWindow->connect_closed(LINK(this, AnnotationTag, PopupModeEndHdl));
604 }
605 }
606
607 if (bEdit && mpAnnotationWindow)
608 mpAnnotationWindow->StartEdit();
609}
610
612{
613 ClosePopup();
614}
615
617{
619 {
620 mpAnnotationWindow->SaveToDocument();
621 mpAnnotationWindow.reset();
622 }
623}
624
625IMPL_LINK(AnnotationTag, WindowEventHandler, VclWindowEvent&, rEvent, void)
626{
627 vcl::Window* pWindow = rEvent.GetWindow();
628
629 if( !pWindow )
630 return;
631
632 if( pWindow != mpListenWindow )
633 return;
634
635 switch( rEvent.GetId() )
636 {
637 case VclEventId::WindowMouseButtonUp:
638 {
639 // if we stop pressing the button without a mouse move we open the popup
640 mpListenWindow->RemoveEventListener( LINK(this, AnnotationTag, WindowEventHandler));
641 mpListenWindow = nullptr;
642 if( !mpAnnotationWindow )
643 OpenPopup(false);
644 }
645 break;
646 case VclEventId::WindowMouseMove:
647 {
648 // if we move the mouse after a button down we want to start dragging
649 mpListenWindow->RemoveEventListener( LINK(this, AnnotationTag, WindowEventHandler));
650 mpListenWindow = nullptr;
651
652 SdrHdl* pHdl = mrView.PickHandle(maMouseDownPos);
653 if( pHdl )
654 {
655 mrView.BrkAction();
656 const sal_uInt16 nDrgLog = static_cast<sal_uInt16>(pWindow->PixelToLogic(Size(DRGPIX,0)).Width());
657
659
660 SdrDragMethod* pDragMethod = new AnnotationDragMove( mrView, xTag );
661 mrView.BegDragObj(maMouseDownPos, nullptr, pHdl, nDrgLog, pDragMethod );
662 }
663 }
664 break;
665 case VclEventId::ObjectDying:
666 mpListenWindow = nullptr;
667 break;
668 default: break;
669 }
670}
671
672} // end of namespace sd
673
674/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
basegfx::BColor maColor
SlideSorterView & mrView
Any maOrigin
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
void DecreaseLuminance(sal_uInt8 cLumDec)
bool IsDark() const
void IncreaseLuminance(sal_uInt8 cLumInc)
void Invert()
CommandEventId GetCommand() const
const Point & GetMousePosPixel() const
const vcl::KeyCode & GetKeyCode() const
bool IsRight() const
const Point & GetPosPixel() const
bool IsLeft() const
tools::Long AdjustY(tools::Long nVertMove)
tools::Long AdjustX(tools::Long nHorzMove)
void AddHdl(std::unique_ptr< SdrHdl > pHdl)
bool areMarkHandlesHidden() const
void BegUndo()
bool IsUndoEnabled() const
void EndUndo()
sal_uInt32 PageWindowCount() const
SdrPageWindow * GetPageWindow(sal_uInt32 nIndex) const
rtl::Reference< sdr::overlay::OverlayManager > const & GetOverlayManager() const
SdrPaintWindow & GetPaintWindow() const
const sdr::contact::ObjectContact & GetObjectContact() const
OutputDevice * GetFirstOutputDevice() const
virtual void MakeVisible(const tools::Rectangle &rRect, vcl::Window &rWin)
SdrPageView * GetSdrPageView() const
bool OutputToWindow() const
constexpr tools::Long Height() const
constexpr tools::Long Width() const
sal_uInt64 GetCursorBlinkTime() const
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
void onTagSelected(AnnotationTag const &rTag)
void SelectNextAnnotation(bool bForward)
void onTagDeselected(AnnotationTag const &rTag)
void DeleteAnnotation(const css::uno::Reference< css::office::XAnnotation > &xAnnotation)
void ExecuteAnnotationTagContextMenu(const css::uno::Reference< css::office::XAnnotation > &xAnnotation, weld::Widget *pParent, const ::tools::Rectangle &rContextRect)
void OpenPopup(bool bEdit)
BitmapEx CreateAnnotationBitmap(bool)
std::unique_ptr< AnnotationWindow > mpAnnotationWindow
virtual bool MarkPoints(const ::tools::Rectangle *pRect, bool bUnmark) override
virtual void addCustomHandles(SdrHdlList &rHandlerList) override
virtual void select() override
AnnotationManagerImpl & mrManager
virtual bool MouseButtonDown(const MouseEvent &, SmartHdl &) override
returns true if the AnnotationTag handled the event.
virtual bool getContext(SdrViewContext &rContext) override
VclPtr< vcl::Window > mpListenWindow
bool OnMove(const KeyEvent &rKEvt)
virtual bool Command(const CommandEvent &rCEvt) override
returns true if the SmartTag consumes this event.
virtual ~AnnotationTag() override
css::uno::Reference< css::office::XAnnotation > mxAnnotation
virtual void disposing() override
void Move(int nDX, int nDY)
virtual bool KeyInput(const KeyEvent &rKEvt) override
returns true if the SmartTag consumes this event.
const vcl::Font & mrFont
virtual void CheckPossibilities() override
virtual bool MarkPoint(SdrHdl &rHdl, bool bUnmark) override
virtual sal_Int32 GetMarkablePointCount() const override
virtual void deselect() override
virtual sal_Int32 GetMarkedPointCount() const override
CustomAnnotationMarker & getCustomAnnotationMarker()
Definition: Annotation.hxx:126
a derivation from this handle is the visual representation for a smart tag.
Definition: smarttag.hxx:157
void select(const SmartTagReference &xTag)
selects the given smart tag and updates all handles
Definition: smarttag.cxx:155
void deselect()
deselects the current selected smart tag and updates all handles
Definition: smarttag.cxx:172
a smart tag represents a visual user interface element on the documents edit view that is not part of...
Definition: smarttag.hxx:44
::sd::View & mrView
Definition: smarttag.hxx:79
virtual void select()
Definition: smarttag.cxx:64
virtual void deselect()
Definition: smarttag.cxx:69
virtual void disposing() override
Definition: smarttag.cxx:74
::sd::View & getView() const
Definition: smarttag.hxx:63
bool isSelected() const
returns true if this smart tag is currently selected
Definition: smarttag.hxx:61
::sd::Window * GetActiveWindow() const
The active window is usually the mpContentWindow.
Definition: ViewShell.hxx:155
DrawDocShell * GetDocSh() const
Definition: View.hxx:142
ViewShell * GetViewShell() const
Definition: View.hxx:144
SmartTagSet & getSmartTags()
Definition: View.hxx:207
void updateHandles()
Definition: sdview.cxx:1122
sal_uInt16 GetCode() const
bool IsShift() const
bool IsMod2() const
Point LogicToPixel(const Point &rLogicPt) const
::OutputDevice const * GetOutDev() const
Point PixelToLogic(const Point &rDevicePt) const
constexpr ::Color COL_WHITE(0xFF, 0xFF, 0xFF)
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
#define DBG_ASSERT(sCon, aError)
sal_Int32 nIndex
constexpr sal_uInt16 KEY_RETURN
constexpr sal_uInt16 KEY_ESCAPE
constexpr sal_uInt16 KEY_LEFT
constexpr sal_uInt16 KEY_TAB
constexpr sal_uInt16 KEY_UP
constexpr sal_uInt16 KEY_RIGHT
constexpr sal_uInt16 KEY_DELETE
constexpr sal_uInt16 KEY_DOWN
constexpr sal_uInt16 KEY_SPACE
IMPL_LINK_NOARG(MainSequence, onTimerHdl, Timer *, void)
rtl::Reference< SmartTag > SmartTagReference
Definition: smarttag.hxx:87
const int DRGPIX
IMPL_LINK(SdCharHeightPropertyBox, implMenuSelectHdl, const OUString &, rIdent, void)
static OUString getInitials(const OUString &rName)
const sal_uInt32 SMART_TAG_HDL_NUM
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
long Long
weld::Window * GetPopupParent(vcl::Window &rOutWin, tools::Rectangle &rRect)
OUString SdResId(TranslateId aId)
Definition: sdmod.cxx:83
std::vector< basegfx::B2DPolygon > maPolygons
Definition: Annotation.hxx:73
SdrHdlKind
SdrViewContext
sal_uInt32 mnIndex
sal_uInt16 sal_Unicode
#define SAL_MAX_UINT32
oslFileHandle & pOut
sal_Int32 nLength