2c8c436c4a
Implements horizontal hit tolerance for quick text edit in Impress & Draw making it more forgiving. Previously it was required to click exactly on the glyph to get a direct text cursor. Refactors hittestprocessor2d so that it now supports pseudo per axis hit tolerance. i.e. underlying isInEpsilonRange hit check is still the same utilizing the larger tolerance of the two per axis tolerance, but the preliminary check that uses aPolygonRange.grow() and later aPolygonRange.isInside() now filters hit misses out with respect to the per axis hit tolerance. Utilizes hittestprocessor2d's new per axis tolerance to introduce hit tolerance for quick text edit, making it similar to TextEdit mode hit tolerance which only has horizontal tolerance. Fixes wrong use of BoundRect hit to determine text frame border hits. Which previously only made sense for TextFrame borders, and was mostly useless for shapes with text inside. Change-Id: I749e63752da05b01270bfcab2632c41879a848ec Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154640 Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org> Tested-by: Jenkins Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
77 lines
2.4 KiB
C++
77 lines
2.4 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_SDRHITTESTHELPER_HXX
|
|
#define INCLUDED_SVX_SDRHITTESTHELPER_HXX
|
|
|
|
#include <svx/svxdllapi.h>
|
|
|
|
|
|
// #i101872# new Object HitTest as View-tooling
|
|
|
|
|
|
class Point;
|
|
class SdrObject;
|
|
class SdrPageView;
|
|
class SdrLayerIDSet;
|
|
class SdrObjList;
|
|
namespace sdr::contact { class ViewObjectContact; }
|
|
namespace basegfx
|
|
{
|
|
class B2DPoint;
|
|
class B2DVector;
|
|
}
|
|
namespace drawinglayer::primitive2d { class Primitive2DContainer; }
|
|
|
|
|
|
// Wrappers for classic Sdr* Mode/View classes
|
|
|
|
SVXCORE_DLLPUBLIC SdrObject* SdrObjectPrimitiveHit(
|
|
const SdrObject& rObject,
|
|
const Point& rPnt,
|
|
const basegfx::B2DVector& rHitTolerance,
|
|
const SdrPageView& rSdrPageView,
|
|
const SdrLayerIDSet* pVisiLayer,
|
|
bool bTextOnly,
|
|
/// allow getting back an evtl. resulting primitive stack which lead to a hit
|
|
drawinglayer::primitive2d::Primitive2DContainer* pHitContainer = nullptr);
|
|
|
|
SVXCORE_DLLPUBLIC SdrObject* SdrObjListPrimitiveHit(
|
|
const SdrObjList& rList,
|
|
const Point& rPnt,
|
|
const basegfx::B2DVector& rHitTolerance,
|
|
const SdrPageView& rSdrPageView,
|
|
const SdrLayerIDSet* pVisiLayer,
|
|
bool bTextOnly);
|
|
|
|
|
|
// the pure HitTest based on a VOC
|
|
|
|
bool ViewObjectContactPrimitiveHit(
|
|
const sdr::contact::ViewObjectContact& rVOC,
|
|
const basegfx::B2DPoint& rHitPosition,
|
|
const basegfx::B2DVector& rLogicHitTolerance,
|
|
bool bTextOnly,
|
|
/// allow to get back the stack of primitives that lead to the hit
|
|
drawinglayer::primitive2d::Primitive2DContainer* pHitContainer);
|
|
|
|
|
|
#endif // INCLUDED_SVX_SDRHITTESTHELPER_HXX
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|