42 #include <osl/diagnose.h>
54 if (
GetDocShell()->GetCreateMode() == SfxObjectCreateMode::EMBEDDED)
60 return m_pWrtShell->GetViewOptions()->getBrowseMode() ||
61 SvxZoomType::PAGEWIDTH_NOBORDER ==
m_pWrtShell->GetViewOptions()->GetZoomType();
69 eType == SvxZoomType::PAGEWIDTH || eType == SvxZoomType::PAGEWIDTH_NOBORDER ? 0 :
88 const tools::Long lSize = (bHori ? aDocSz.Width() : aDocSz.Height()) + lBorder;
92 if ( bHori && nTmp > lSize )
93 lDelta -= nTmp - lSize;
95 if ( !bHori && nTmp > lSize )
96 lDelta -= nTmp - lSize;
98 bHori ? rPos.AdjustX(lDelta) : rPos.AdjustY(lDelta);
107 static sal_uInt16 aInval[] =
109 SID_ATTR_PARA_LRSPACE, SID_RULER_BORDERS, SID_RULER_PAGE_POS,
110 SID_RULER_LR_MIN_MAX, SID_ATTR_LONG_ULSPACE, SID_ATTR_LONG_LRSPACE,
111 SID_RULER_BORDER_DISTANCE,
112 SID_ATTR_PARA_LRSPACE_VERTICAL, SID_RULER_BORDERS_VERTICAL,
113 SID_RULER_TEXT_RIGHT_TO_LEFT,
164 bool bModified =
false;
168 if ( aNewVisArea.
Right() >= lTmp )
170 lTmp = aNewVisArea.
Right() - lTmp;
177 if ( aNewVisArea.
Bottom() >= lTmp )
179 lTmp = aNewVisArea.
Bottom() - lTmp;
210 if( aLR.
Top() < lMin )
215 if( aLR.
Left() < lMin )
220 if( aLR.
Right() < 0 )
229 if( aSize.IsEmpty() )
249 ( std::abs(aOldSz.Width() -
m_pWrtShell->VisArea().Width()) > 2 ||
250 std::abs(aOldSz.Height() -
m_pWrtShell->VisArea().Height()) > 2 ) )
259 if ( aVis.
GetSize() == aOldSz )
294 #if HAVE_FEATURE_DESKTOP
296 aPt.AdjustX( -(aPt.X() % nTmp) );
297 aPt.AdjustY( -(aPt.Y() % nTmp) );
338 sal_uInt16 nRangeX, sal_uInt16 nRangeY)
346 nYScroll = std::min(nYScroll, nCurHeight - nDesHeight);
347 if(nDesHeight > nCurHeight)
349 pPt->setY( rRect.
Top() );
350 pPt->setY( std::max( lMin,
SwTwips(pPt->Y()) ) );
354 pPt->setY( rRect.
Top() - (nRangeY !=
USHRT_MAX ? nRangeY : nYScroll) );
355 pPt->setY( std::max( lMin,
SwTwips(pPt->Y()) ) );
359 pPt->setY( rRect.
Bottom() -
361 nRangeY : nYScroll ) );
367 pPt->setX( rRect.
Right() -
369 (nRangeX !=
USHRT_MAX ? nRangeX : nXScroll) );
374 pPt->setX( rRect.
Left() - (nRangeX !=
USHRT_MAX ? nRangeX : nXScroll) );
376 pPt->setX( std::min( rRect.
Left() -
nScrollX, pPt->X() ) );
399 int x,
y, width, height;
424 if ( nTopDiff < nBottomDiff )
426 if ( nBottomDiff > 0 )
451 aSize.Width() +
GetXScroll() > aVisSize.Width() ||
452 aSize.Height()+
GetYScroll() > aVisSize.Height() ))
455 aSize.setWidth( std::min( aSize.Width(), aVisSize.Width() ) );
456 aSize.setHeight( std::min( aSize.Height(),aVisSize.Height()) );
459 static_cast< sal_uInt16 >((aVisSize.Width() - aSize.Width()) / 2),
460 static_cast< sal_uInt16
>((aVisSize.Height()- aSize.Height())/ 2) );
465 aPt.setY( std::min( std::max( nBorder, rRect.
Top() ),
469 aPt.AdjustY( -nDiffY );
477 CalcPt( &aPt, rRect, nRangeX, nRangeY );
482 aPt.setY( std::min( std::max( nBorder, rRect.
Top() ),
487 aPt.AdjustY( -nDiffY );
496 aPnt.AdjustY(( rRect.
Top() + rRect.
Bottom()
501 aPnt.AdjustX(( rRect.
Left() + rRect.
Right()
593 sal_uInt16 nActPage =
m_pWrtShell->GetNextPrevPageNum(
false );
602 if( aPt.Y() != aAlPt.Y() )
611 sal_uInt16 nActPage =
m_pWrtShell->GetNextPrevPageNum();
620 if( aPt.Y() != aAlPt.Y() )
671 if ( GetWrtShell().ActionPend() )
674 if ( pScrollbar->
GetType() == ScrollType::Drag )
675 m_pWrtShell->EnableSmooth(
false );
677 if(!m_pWrtShell->GetViewOptions()->getBrowseMode() &&
678 pScrollbar->
GetType() == ScrollType::Drag)
683 EndScrollHdl(pScrollbar);
686 m_pWrtShell->GetViewOptions()->IsShowScrollBarTips())
689 Point aPos( m_aVisArea.TopLeft() );
690 lcl_GetPos(
this, aPos, pScrollbar, IsDocumentBorder());
692 sal_uInt16 nPhNum = 1;
693 sal_uInt16 nVirtNum = 1;
696 if(m_pWrtShell->GetPageNumber( aPos.Y(),
false, nPhNum, nVirtNum, sDisplay ))
704 if( m_pWrtShell->GetPageCnt() > 1 )
714 OUString sPageStr( GetPageStr( nPhNum, nVirtNum, sDisplay ));
716 bool bSuccess = m_pWrtShell->GetContentAtPos(aPos, aCnt);
717 if (bSuccess && !aCnt.
sStr.isEmpty())
720 sal_Int32 nChunkLen = std::min<sal_Int32>(aCnt.
sStr.getLength(), 80);
721 OUString sChunk = aCnt.
sStr.copy(0, nChunkLen);
722 sPageStr = sChunk + sPageStr;
723 sPageStr = sPageStr.replace(
'\t',
' ');
724 sPageStr = sPageStr.replace(0x0a,
' ');
732 EndScrollHdl(pScrollbar);
734 if ( pScrollbar->
GetType() == ScrollType::Drag )
735 m_pWrtShell->EnableSmooth(
true );
743 if ( GetWrtShell().ActionPend() )
751 Point aPos( m_aVisArea.TopLeft() );
752 bool bBorder = IsDocumentBorder();
754 if ( bBorder && aPos == m_aVisArea.TopLeft() )
757 SetVisArea( aPos,
false );
773 aRect.
SetTop( aTopLeft.Y() );
783 if ( aRect.
Right() > lWidth )
793 if ( aRect.
Bottom() > lHeight )
809 bool bRightVRuler =
m_pWrtShell->GetViewOptions()->IsVRulerRight();
814 rToFill.
Right() = nWidth;
816 rToFill.
Left() = nWidth;
819 OSL_ENSURE(
m_pHRuler,
"Why is the ruler not present?");
828 rToFill.
Left() = nTmp;
830 rToFill.
Right() = nTmp;
851 const bool bHRuler = pHRuler && pHRuler->IsVisible();
853 pHRuler->GetSizePixel().Height() : 0;
854 const bool bVRuler = pVRuler && pVRuler->IsVisible();
856 pVRuler->GetSizePixel().Width() : 0;
865 Point aPos( rOfst.X(), rOfst.Y()+nHLinSzHeight );
868 aPos.AdjustX(rSize.
Width() - nVLinSzWidth );
873 aSize.
setWidth( pVRuler->GetSizePixel().Width() );
874 pVRuler->SetStyle(nStyle);
875 pVRuler->SetPosSizePixel( aPos, aSize );
876 if(!pVRuler->IsVisible())
882 Size aSize( rSize.
Width(), nHLinSzHeight );
883 if ( nVBSzWidth && !bVRulerRight)
886 aSize.setHeight( pHRuler->GetSizePixel().Height() );
887 pHRuler->SetPosSizePixel( rOfst, aSize );
890 if(!pHRuler->IsVisible())
895 Point aScrollFillPos;
897 Point aPos( rOfst.X(),
898 rOfst.Y()+rSize.
Height()-nHBSzHeight );
901 aPos.AdjustX(nVBSzWidth );
904 Size aSize( rSize.
Width(), nHBSzHeight );
908 aScrollFillPos.setY( aPos.Y() );
911 Point aPos( rOfst.X()+rSize.
Width()-nVBSzWidth,
916 aPos.setX( rOfst.X() );
919 aPos.AdjustY(nHLinSzHeight );
925 aSize.AdjustHeight( -nHBSzHeight );
928 aPos.AdjustY(aSize.Height() );
930 aScrollFillPos.setX( aPos.X() );
939 if (
m_pWrtShell->GetViewOptions()->IsViewHRuler() )
960 bool bRepeat =
false;
968 Size aViewSize( aSz );
969 Point aViewPos( rOfst );
972 aViewPos.AdjustX(aBorder.
Left() );
973 aViewPos.AdjustY(aBorder.
Top() );
1044 bHAuto = bShowH =
false;
1048 bAuto = bShowV =
false;
1055 bShowH = bShowV = bHAuto = bAuto =
false;
1065 bool bRepeat =
false;
1108 if (
m_pWrtShell->GetViewOptions()->GetZoomType() != SvxZoomType::PERCENT &&
1120 ( nCnt > 10 || ( nCnt > 3 && bHAuto && bAuto ) )
1126 }
while ( bRepeat );
1143 const Fraction &rFrac = rX < rY ? rX : rY;
1162 aTmpRect.
Move( -aPt.X(), -aPt.Y() );
1199 if (pWData && CommandWheelMode::ZOOM == pWData->
GetMode())
1207 SetZoom( SvxZoomType::PERCENT, nFact );
1212 if (pWData && pWData->
GetMode()==CommandWheelMode::SCROLL)
1218 if (pWData && (CommandWheelMode::SCROLL==pWData->
GetMode()) &&
virtual Point GetPosPixel() const
SfxViewFrame * GetViewFrame() const
const Fraction & GetScaleX() const
tools::Long SetHScrollMax(tools::Long lMax)
tools::Long GetYScroll() const
Point GetPointerPosPixel()
void ViewResizePixel(const vcl::RenderContext &rRef, const Point &rOfst, const Size &rSize, const Size &rEditSz, SwScrollbar &rVScrollbar, SwScrollbar &rHScrollbar, vcl::Window &rScrollBarBox, SvxRuler *pVRuler, SvxRuler *pHRuler, bool bVRulerRight)
SAL_DLLPRIVATE void PhyPageUp()
SAL_DLLPRIVATE Point AlignToPixel(const Point &rPt) const
SfxViewFrame * GetFrame() const
void setWidth(tools::Long nWidth)
std::unique_ptr< SwPostItMgr > m_pPostItMgr
SAL_DLLPRIVATE bool PageUp()
std::unique_ptr< SwWrtShell > m_pWrtShell
void Left(const tools::Long nLeft)
const SwRect & GetAnyCurRect(CurRectType eType, const Point *pPt=nullptr, const css::uno::Reference< css::embed::XEmbeddedObject > &=css::uno::Reference< css::embed::XEmbeddedObject >()) const
VclPtr< SvxRuler > m_pHRuler
Point AbsoluteScreenToOutputPixel(const Point &rPos) const
const StyleSettings & GetStyleSettings() const
const MapMode & GetMapMode() const
void Pos(const Point &rNew)
SAL_DLLPRIVATE bool GetPageScrollDownOffset(SwTwips &rOff) const
const CommandWheelData * GetWheelData() const
void Invalidate(sal_uInt16 nId)
SAL_DLLPRIVATE bool PageUpCursor(bool bSelect)
bool HandleScrollCommand(const CommandEvent &rCmd, ScrollBar *pHScrl, ScrollBar *pVScrl)
void Scroll(const tools::Rectangle &rRect, sal_uInt16 nRangeX=USHRT_MAX, sal_uInt16 nRangeY=USHRT_MAX)
SAL_DLLPRIVATE bool PageDownCursor(bool bSelect)
void SetBorderPixel(const SvBorder &rBorder)
void SetVisArea(const tools::Rectangle &, bool bUpdateScrollbar=true)
SwWrtShell & GetWrtShell() const
SvxZoomType GetZoomType() const
Used by the UI to modify the document model.
constexpr tools::Long Width() const
bool m_bVScrollbarEnabled
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
SfxFrame & GetFrame() const
bool IsViewVScrollBar() const
SAL_DLLPRIVATE void SetZoom_(const Size &rEditSz, SvxZoomType eZoomType, short nFactor, bool bViewOnly)
void DocSzChgd(const Size &rNewSize)
VclPtr< SwEditWin > m_pEditWin
static weld::Window * GetCareDialog(SwViewShell const &rVSh)
const tools::Long nScrollX
double GetScrollLines() const
constexpr WinBits WB_RIGHT_ALIGNED
SAL_DLLPRIVATE void PhyPageDown()
virtual SAL_DLLPRIVATE void Move() override
Rect of current PrtArea of page.
const SwRect & VisArea() const
VclPtr< vcl::Window > m_pScrollFill
SAL_DLLPRIVATE bool GetPageScrollUpOffset(SwTwips &rOff) const
Scroll page by page.
static tools::Long GetLeftMargin(SwView const &rView)
static bool IsQuickHelpEnabled()
SfxBindings & GetBindings()
CommandWheelMode GetMode() const
FrameTypeFlags
values can be combined via logical or
SwTwips m_nLOKPageUpDownOffset
LibreOfficeKit has to force the page size for PgUp/PgDown functionality based on the user's view...
SAL_DLLPRIVATE void ShowAtResize()
SAL_DLLPRIVATE void CalcAndSetBorderPixel(SvBorder &rToFill)
void ShowVScrollbar(bool bShow)
const tools::Long nLeftOfst
static bool bProtectDocShellVisArea
const AllSettings & GetSettings() const
virtual void InnerResizePixel(const Point &rOfs, const Size &rSize, bool inplaceEditModeChange) override
tools::Long GetScrollBarSize() const
IMPL_LINK(SwView, ScrollHdl, ScrollBar *, p, void)
const tools::Rectangle & GetVisArea() const
SAL_DLLPRIVATE bool PageDown()
bool m_bWheelScrollInProgress
#define COMMAND_WHEEL_PAGESCROLL
static void ShowQuickHelp(vcl::Window *pParent, const tools::Rectangle &rScreenRect, const OUString &rHelpText, QuickHelpFlags nStyle=QuickHelpFlags::NONE)
vcl::Window * GetParent() const
VclPtr< SvxRuler > m_pVRuler
SAL_DLLPRIVATE void CalcVisArea(const Size &rPixelSz)
SwDocShell * GetDocShell()
virtual void OuterResizePixel(const Point &rOfs, const Size &rSize) override
virtual void SetPosSizePixel(const Point &rNewPos, const Size &rNewSize)
void ShowHScrollbar(bool bShow)
constexpr sal_uInt16 nScrollBarSize
Point PixelToLogic(const Point &rDevicePt) const
Point LogicToPixel(const Point &rLogicPt) const
tools::Long const nBorder
static void lcl_GetPos(SwView const *pView, Point &rPos, SwScrollbar const *pScrollbar, bool bBorder)
const Size & GetDocSz() const
void SetZoom(SvxZoomType eZoomType, short nFactor=100, bool bViewOnly=false)
tools::Rectangle m_aVisArea
VclPtr< SwScrollbar > m_pVScrollbar
bool m_bInOuterResizePixel
weld::Window * GetFrameWeld() const
constexpr tools::Long Height() const
const SwViewOption * GetViewOptions() const
const o3tl::enumarray< SvxAdjust, unsigned short > aSvxToUnoAdjust USHRT_MAX
bool IsStarOneSetting() const
tools::Long SetVScrollMax(tools::Long lMax)
tools::Long AdjustWidth(tools::Long n)
const SvBorder & GetBorderPixel() const
SAL_DLLPRIVATE void CalcPt(Point *pPt, const tools::Rectangle &rRect, sal_uInt16 nRangeX, sal_uInt16 nRangeY)
Calculate the visible range.
VclPtr< SwScrollbar > m_pHScrollbar
vcl::Window * GetWindow() const
void InvalidateRulerPos()
tools::Long AdjustHeight(tools::Long n)
const tools::Rectangle & GetVisArea() const
virtual SfxObjectShell * GetObjectShell() override
tools::Long GetDelta() const
const sal_uInt16 CRSR_SKIP_CHARS
tools::Long GetXScroll() const
virtual void SetZoomFactor(const Fraction &rX, const Fraction &) override
SAL_DLLPRIVATE bool UpdateScrollbars()
bool HandleWheelCommands(const CommandEvent &)
bool m_bInInnerResizePixel
Point OutputToScreenPixel(const Point &rPos) const
bool IsViewHScrollBar() const
bool m_bHScrollbarEnabled
virtual tools::Rectangle GetVisArea(sal_uInt16 nAspect) const
virtual void SetZoomFactor(const Fraction &rZoomX, const Fraction &rZoomY)
bool IsScroll(const tools::Rectangle &rRect) const
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)