Files
odfstudio/sc/source/ui/drawfunc/fuconuno.cxx
T
Michael Meeks e1b35f0bb1 sc: forward declare ScDrawView in tabview.hxx.
tabview.hxx included drawview.hxx for a std::unique_ptr<ScDrawView> member
and an accessor that returns the raw pointer. Neither needs the complete
type, and the destructor of ScTabView is already out of line. The include
dragged svx/fmview.hxx, svx/view3d.hxx, svx/svdview.hxx and the rest of the
svx view class chain into the 200 translation units that include the view
shell headers.

tabvwsh.hxx and tabview.hxx now include the small headers they used through
that chain, and the files that call into the draw view include drawview.hxx
themselves.

clang -ftime-trace says around 2% of the module build time saved here.

Signed-off-by: Michael Meeks <michael.meeks@collabora.com>
Change-Id: I198b19e74f6ad56090b987880a063dc9ee677cda
Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/12683
Tested-by: Jenkins CPCI <releng@collaboraoffice.com>
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
(cherry picked from commit a7fd69666ea5fb4d26dfad0d286f6c1f3bcd3144)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211884
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2026-10-07 12:18:06 +02:00

125 lines
3.9 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 .
*/
#include <fuconuno.hxx>
#include <vcl/ptrstyle.hxx>
#include <tabvwsh.hxx>
#include <drawview.hxx>
#include <svx/svxids.hrc>
#include <vcl/ptrstyle.hxx>
FuConstUnoControl::FuConstUnoControl(ScTabViewShell& rViewSh, vcl::Window* pWin, ScDrawView* pViewP,
SdrModel& rDoc, const SfxRequest& rReq)
: FuConstruct(rViewSh, pWin, pViewP, rDoc, rReq)
, nInventor(SdrInventor::Unknown)
, nIdentifier(SdrObjKind::NONE)
{
const SfxUInt32Item* pInventorItem = rReq.GetArg(SID_FM_CONTROL_INVENTOR);
const SfxUInt16Item* pIdentifierItem = rReq.GetArg(SID_FM_CONTROL_IDENTIFIER);
if( pInventorItem )
nInventor = static_cast<SdrInventor>(pInventorItem->GetValue());
if( pIdentifierItem )
nIdentifier = static_cast<SdrObjKind>(pIdentifierItem->GetValue());
}
FuConstUnoControl::~FuConstUnoControl()
{
}
bool FuConstUnoControl::MouseButtonDown(const MouseEvent& rMEvt)
{
// remember button state for creation of own MouseEvents
SetMouseButtonCode(rMEvt.GetButtons());
bool bReturn = FuConstruct::MouseButtonDown(rMEvt);
if ( rMEvt.IsLeft() && !pView->IsAction() )
{
Point aPnt( pWindow->PixelToLogic( rMEvt.GetPosPixel() ) );
pWindow->CaptureMouse();
pView->BegCreateObj(aPnt);
bReturn = true;
}
return bReturn;
}
bool FuConstUnoControl::MouseButtonUp(const MouseEvent& rMEvt)
{
// remember button state for creation of own MouseEvents
SetMouseButtonCode(rMEvt.GetButtons());
bool bReturn = false;
if ( pView->IsCreateObj() && rMEvt.IsLeft() )
{
pView->EndCreateObj(SdrCreateCmd::ForceEnd);
bReturn = true;
}
return (FuConstruct::MouseButtonUp(rMEvt) || bReturn);
}
void FuConstUnoControl::Activate()
{
pView->SetCurrentObj( nIdentifier, nInventor );
aNewPointer = PointerStyle::DrawRect;
aOldPointer = pWindow->GetPointer();
rViewShell.SetActivePointer( aNewPointer );
SdrLayer* pLayer = pView->GetModel().GetLayerAdmin().GetLayerPerID(SC_LAYER_CONTROLS);
if (pLayer)
pView->SetActiveLayer( pLayer->GetName() );
FuConstruct::Activate();
}
void FuConstUnoControl::Deactivate()
{
FuConstruct::Deactivate();
SdrLayer* pLayer = pView->GetModel().GetLayerAdmin().GetLayerPerID(SC_LAYER_FRONT);
if (pLayer)
pView->SetActiveLayer( pLayer->GetName() );
rViewShell.SetActivePointer( aOldPointer );
}
// Create default drawing objects via keyboard
rtl::Reference<SdrObject> FuConstUnoControl::CreateDefaultObject(const sal_uInt16 /* nID */, const tools::Rectangle& rRectangle)
{
// case SID_FM_CREATE_CONTROL:
rtl::Reference<SdrObject> pObj(SdrObjFactory::MakeNewObject(
rDrDoc,
pView->GetCurrentObjInventor(),
pView->GetCurrentObjIdentifier()));
if(pObj)
{
pObj->SetLogicRect(rRectangle);
// tdf#140252 Controls are always on layer "controls"
pObj->NbcSetLayer(SC_LAYER_CONTROLS);
}
return pObj;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */