office-gobmx/include/svx/svdopage.hxx
Tomaž Vajngerl b33468fa2b make NbcRotate abstract as it's implementation is noop
During testing the NbcRotate function on SdrObject it turned out
the the function is essentially a noop, because it uses normal
equality to test the values of a double, which are a product of
sin and cos functions (to determine the 90 degree angles). So
because of this the input rectangle was never modified - noop.

Because of this we can just remove the impl. of the function and
declare it abstract, so that the actual implementations define
a valid function to rotate.

There were some subclasses that didn't override the NbcRotate so
they used the one implementation in SdrObject. These subclasses
now override the function and in the implementation we call
assert(false), which is never called during a test run. It seems
we never rotate those objects.

Change-Id: I1b1a45a8e96ed2d061f9b9f80c5fdaa5a84d4c05
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148266
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2023-03-05 05:27:04 +00:00

71 lines
2.7 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 .
*/
#pragma once
#include <svx/svdobj.hxx>
#include <svx/sdrpageuser.hxx>
#include <svx/svxdllapi.h>
class SVXCORE_DLLPUBLIC SdrPageObj final : public SdrObject, public sdr::PageUser
{
public:
// this method is called from the destructor of the referenced page.
// do all necessary action to forget the page. It is not necessary to call
// RemovePageUser(), that is done from the destructor.
virtual void PageInDestruction(const SdrPage& rPage) override;
private:
// To make things more safe, remember the page, not a number
SdrPage* mpShownPage;
virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
// protected destructor
virtual ~SdrPageObj() override;
public:
SdrPageObj(
SdrModel& rSdrModel,
SdrPage* pNewPage = nullptr);
// Copy constructor
SdrPageObj(SdrModel& rSdrModel, SdrPageObj const & rSource);
SdrPageObj(
SdrModel& rSdrModel,
const tools::Rectangle& rRect,
SdrPage* pNewPage = nullptr);
SdrPage* GetReferencedPage() const { return mpShownPage;}
void SetReferencedPage(SdrPage* pNewPage);
// #i96598#
virtual void SetBoundRectDirty() override;
virtual SdrObjKind GetObjIdentifier() const override;
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
virtual rtl::Reference<SdrObject> CloneSdrObject(SdrModel& rTargetModel) const override;
virtual OUString TakeObjNameSingul() const override;
virtual OUString TakeObjNamePlural() const override;
void NbcRotate(const Point& rRef, Degree100 nAngle, double sinAngle, double cosAngle) override;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */