summaryrefslogtreecommitdiffstats
path: root/sw/inc/anchoreddrawobject.hxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sw/inc/anchoreddrawobject.hxx168
1 files changed, 168 insertions, 0 deletions
diff --git a/sw/inc/anchoreddrawobject.hxx b/sw/inc/anchoreddrawobject.hxx
new file mode 100644
index 000000000..bd74d6ea4
--- /dev/null
+++ b/sw/inc/anchoreddrawobject.hxx
@@ -0,0 +1,168 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef INCLUDED_SW_INC_ANCHOREDDRAWOBJECT_HXX
+#define INCLUDED_SW_INC_ANCHOREDDRAWOBJECT_HXX
+
+#include "anchoredobject.hxx"
+#include <optional>
+
+namespace tools { class Rectangle; }
+
+/** class for the positioning of drawing objects */
+class SwAnchoredDrawObject final : public SwAnchoredObject
+{
+ private:
+ // boolean, indicating that the object position has been invalidated
+ // and that a positioning has to be performed.
+ bool mbValidPos;
+
+ // rectangle, keeping the last object rectangle after the positioning
+ std::optional<tools::Rectangle> maLastObjRect;
+
+ // boolean, indicating that anchored drawing object hasn't been attached
+ // to an anchor frame yet. Once, it is attached to an anchor frame the
+ // boolean changes its state.
+ bool mbNotYetAttachedToAnchorFrame;
+
+ // boolean, indicating that anchored
+ // drawing object hasn't been positioned yet. Once, it's positioned the
+ // boolean changes its state.
+ bool mbNotYetPositioned;
+
+ // boolean, indicating that after change of layout direction the
+ // anchored drawing object has to be captured on the page, if it exceeds
+ // the left or right page margin.
+ // Needed for compatibility option <DoNotCaptureDrawObjsOnPage>
+ bool mbCaptureAfterLayoutDirChange;
+
+ /** method for the intrinsic positioning of an at-paragraph|at-character
+ anchored drawing object
+
+ helper method for method <MakeObjPos> */
+ void MakeObjPosAnchoredAtPara();
+
+ /** method for the intrinsic positioning of an at-page|at-frame anchored
+ drawing object
+
+ helper method for method <MakeObjPos> */
+ void MakeObjPosAnchoredAtLayout();
+
+ /** method to set positioning attributes (not for as-character anchored)
+
+ During load the positioning attributes aren't set.
+ Thus, the positioning attributes are set by the current object geometry.
+ This method is also used for the conversion for drawing objects
+ (not anchored as-character) imported from OpenOffice.org file format
+ once and directly before the first positioning. */
+ void SetPositioningAttr();
+
+ /** method to set internal anchor position of <SdrObject> instance
+ of the drawing object
+
+ For drawing objects the internal anchor position of the <SdrObject>
+ instance has to be set.
+ Note: This adjustment is not be done for as-character anchored
+ drawing object - the positioning code takes care of this.
+ #i31698# - API for drawing objects in Writer has
+ been adjusted. Thus, this method will only set the internal anchor
+ position of the <SdrObject> instance to the anchor position given
+ by its anchor frame. */
+ void SetDrawObjAnchor();
+
+ /** method to invalidate the given page frame */
+ void InvalidatePage_( SwPageFrame* _pPageFrame );
+
+ virtual void ObjectAttachedToAnchorFrame() override;
+
+ /** method to assure that anchored object is registered at the correct
+ page frame
+ */
+ virtual void RegisterAtCorrectPage() override;
+
+ virtual bool SetObjTop_( const SwTwips _nTop) override;
+ virtual bool SetObjLeft_( const SwTwips _nLeft) override;
+
+ virtual SwRect GetObjBoundRect() const override;
+
+ public:
+
+ SwAnchoredDrawObject();
+ virtual ~SwAnchoredDrawObject() override;
+
+ // declaration of pure virtual methods of base class <SwAnchoredObject>
+ virtual void MakeObjPos() override;
+ virtual void InvalidateObjPos() override;
+ bool IsValidPos() const
+ {
+ return mbValidPos;
+ }
+
+ // accessors to the format
+ virtual SwFrameFormat& GetFrameFormat() override;
+ virtual const SwFrameFormat& GetFrameFormat() const override;
+
+ // accessors to the object area and its position
+ virtual SwRect GetObjRect() const override;
+
+ std::optional<tools::Rectangle> const & GetLastObjRect() const { return maLastObjRect;}
+ void SetLastObjRect( const tools::Rectangle& _rNewObjRect );
+
+ /** adjust positioning and alignment attributes for new anchor frame
+
+ Set horizontal and vertical position/alignment to manual position
+ relative to anchor frame area using the anchor position of the
+ new anchor frame and the current absolute drawing object position.
+ Note: For correct Undo/Redo method should only be called inside a
+ Undo-/Redo-action.
+
+ @param <_pNewAnchorFrame>
+ input parameter - new anchor frame for the anchored object.
+
+ @param <_pNewObjRect>
+ optional input parameter - proposed new object rectangle. If not
+ provided the current object rectangle is taken.
+ */
+ void AdjustPositioningAttr( const SwFrame* _pNewAnchorFrame,
+ const SwRect* _pNewObjRect = nullptr );
+
+ /** method to notify background of drawing object */
+ virtual void NotifyBackground( SwPageFrame* _pPageFrame,
+ const SwRect& _rRect,
+ PrepareHint _eHint ) override;
+
+ bool NotYetPositioned() const
+ {
+ return mbNotYetPositioned;
+ }
+
+ // change of layout direction needs to be tracked
+ // for setting <mbCaptureAfterLayoutDirChange>.
+ virtual void UpdateLayoutDir() override;
+ bool IsOutsidePage() const;
+
+ // new Loop control
+ void ValidateThis() { mbValidPos = true; }
+
+ /** The element name to show in the XML dump. */
+ virtual const char* getElementName( ) const override { return "SwAnchoredDrawObject"; }
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */