1
0
Fork 0
libreoffice/svx/source/svdraw/svddrgm1.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

232 lines
8 KiB
C++

/* -*- 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_SVX_SOURCE_SVDRAW_SVDDRGM1_HXX
#define INCLUDED_SVX_SOURCE_SVDRAW_SVDDRGM1_HXX
#include <svx/xpoly.hxx>
#include <svx/svdhdl.hxx>
#include <svx/svddrgv.hxx>
#include <svx/svddrgmt.hxx>
class SdrDragView;
class SdrDragMovHdl : public SdrDragMethod
{
protected:
// define nothing, override to do so
virtual void createSdrDragEntries() override;
public:
explicit SdrDragMovHdl(SdrDragView& rNewView);
virtual OUString GetSdrDragComment() const override;
virtual bool BeginSdrDrag() override;
virtual void MoveSdrDrag(const Point& rPnt) override;
virtual bool EndSdrDrag(bool bCopy) override;
virtual void CancelSdrDrag() override;
virtual PointerStyle GetSdrDragPointer() const override;
};
class SdrDragRotate : public SdrDragMethod
{
private:
double nSin;
double nCos;
Degree100 nAngle0;
Degree100 nAngle;
bool bRight;
public:
explicit SdrDragRotate(SdrDragView& rNewView);
virtual OUString GetSdrDragComment() const override;
virtual bool BeginSdrDrag() override;
virtual void MoveSdrDrag(const Point& rPnt) override;
virtual bool EndSdrDrag(bool bCopy) override;
virtual PointerStyle GetSdrDragPointer() const override;
virtual basegfx::B2DHomMatrix getCurrentTransformation() const override;
virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
};
class SdrDragShear : public SdrDragMethod
{
private:
Fraction aFact;
Degree100 nAngle0;
Degree100 nAngle;
double nTan;
bool bVertical; // contort vertically
bool bResize; // shear and resize
bool bUpSideDown; // mirror and shear/slant
bool bSlant;
public:
SdrDragShear(SdrDragView& rNewView,bool bSlant1);
virtual OUString GetSdrDragComment() const override;
virtual bool BeginSdrDrag() override;
virtual void MoveSdrDrag(const Point& rPnt) override;
virtual bool EndSdrDrag(bool bCopy) override;
virtual PointerStyle GetSdrDragPointer() const override;
virtual basegfx::B2DHomMatrix getCurrentTransformation() const override;
virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
};
class SdrDragMirror : public SdrDragMethod
{
private:
Point aDif;
Degree100 nAngle;
bool bMirrored;
bool bSide0;
bool ImpCheckSide(const Point& rPnt) const;
public:
explicit SdrDragMirror(SdrDragView& rNewView);
virtual OUString GetSdrDragComment() const override;
virtual bool BeginSdrDrag() override;
virtual void MoveSdrDrag(const Point& rPnt) override;
virtual bool EndSdrDrag(bool bCopy) override;
virtual PointerStyle GetSdrDragPointer() const override;
virtual basegfx::B2DHomMatrix getCurrentTransformation() const override;
virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
};
class SdrDragGradient : public SdrDragMethod
{
private:
// Handles to work on
SdrHdlGradient* pIAOHandle;
// is this for gradient (or for transparency)?
bool bIsGradient : 1;
public:
SdrDragGradient(SdrDragView& rNewView, bool bGrad = true);
bool IsGradient() const { return bIsGradient; }
virtual OUString GetSdrDragComment() const override;
virtual bool BeginSdrDrag() override;
virtual void MoveSdrDrag(const Point& rPnt) override;
virtual bool EndSdrDrag(bool bCopy) override;
virtual PointerStyle GetSdrDragPointer() const override;
virtual void CancelSdrDrag() override;
};
class SdrDragCrook : public SdrDragMethod
{
private:
tools::Rectangle aMarkRect;
Point aMarkCenter;
Point aCenter;
Point aStart;
Fraction aFact;
Point aRad;
bool bContortionAllowed;
bool bNoContortionAllowed;
bool bContortion;
bool bResizeAllowed;
bool bResize;
bool bRotateAllowed;
bool bRotate;
bool bVertical;
bool bValid;
bool bLft;
bool bRgt;
bool bUpr;
bool bLwr;
bool bAtCenter;
Degree100 nAngle;
tools::Long nMarkSize;
SdrCrookMode eMode;
// helpers for applyCurrentTransformationToPolyPolygon
void MovAllPoints(basegfx::B2DPolyPolygon& rTarget);
void MovCrookPoint(Point& rPnt, Point* pC1, Point* pC2);
protected:
// needs to add drag geometry to the default
virtual void createSdrDragEntries() override;
public:
explicit SdrDragCrook(SdrDragView& rNewView);
virtual OUString GetSdrDragComment() const override;
virtual bool BeginSdrDrag() override;
virtual void MoveSdrDrag(const Point& rPnt) override;
virtual bool EndSdrDrag(bool bCopy) override;
virtual PointerStyle GetSdrDragPointer() const override;
virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
virtual void applyCurrentTransformationToPolyPolygon(basegfx::B2DPolyPolygon& rTarget) override;
};
class SdrDragDistort : public SdrDragMethod
{
private:
tools::Rectangle aMarkRect;
XPolygon aDistortedRect;
sal_uInt16 nPolyPt;
bool bContortionAllowed;
bool bNoContortionAllowed;
bool bContortion;
// helper for applyCurrentTransformationToPolyPolygon
void MovAllPoints(basegfx::B2DPolyPolygon& rTarget);
protected:
// needs to add drag geometry to the default
virtual void createSdrDragEntries() override;
public:
explicit SdrDragDistort(SdrDragView& rNewView);
virtual OUString GetSdrDragComment() const override;
virtual bool BeginSdrDrag() override;
virtual void MoveSdrDrag(const Point& rPnt) override;
virtual bool EndSdrDrag(bool bCopy) override;
virtual PointerStyle GetSdrDragPointer() const override;
virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget) override;
virtual void applyCurrentTransformationToPolyPolygon(basegfx::B2DPolyPolygon& rTarget) override;
};
// derive from SdrDragObjOwn to have handles aligned to object when it
// is sheared or rotated
class SdrDragCrop : public SdrDragObjOwn
{
public:
explicit SdrDragCrop(SdrDragView& rNewView);
virtual OUString GetSdrDragComment() const override;
virtual bool BeginSdrDrag() override;
virtual bool EndSdrDrag(bool bCopy) override;
virtual PointerStyle GetSdrDragPointer() const override;
};
#endif // INCLUDED_SVX_SOURCE_SVDRAW_SVDDRGM1_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */