Files
libreoffice/drawinglayer/source/processor2d/hittestprocessor2d.cxx
Pedro Giffuni 0a1d822372 Many spelling fixes: directories a* - g*.
Attempt to clean up most but certainly not all the spelling
mistakes that found home in OpenOffice through decades. We
could probably blame the international nature of the code but
it is somewhat shameful that this wasn't done  before.

(cherry picked from commit a6efc99d19d533fcf53106b6667bafba4d364370)

Conflicts:
	accessibility/bridge/org/openoffice/java/accessibility/AccessibleTextImpl.java
	accessibility/bridge/org/openoffice/java/accessibility/Component.java
	accessibility/bridge/org/openoffice/java/accessibility/Container.java
	accessibility/bridge/org/openoffice/java/accessibility/DescendantManager.java
	accessibility/bridge/org/openoffice/java/accessibility/Dialog.java
	accessibility/bridge/org/openoffice/java/accessibility/Frame.java
	accessibility/bridge/org/openoffice/java/accessibility/List.java
	accessibility/bridge/org/openoffice/java/accessibility/Menu.java
	accessibility/bridge/org/openoffice/java/accessibility/Table.java
	accessibility/bridge/org/openoffice/java/accessibility/Tree.java
	accessibility/bridge/org/openoffice/java/accessibility/Window.java
	accessibility/bridge/source/java/WindowsAccessBridgeAdapter.cxx
	accessibility/inc/accessibility/extended/AccessibleBrowseBoxBase.hxx
	accessibility/inc/accessibility/extended/AccessibleGridControlBase.hxx
	accessibility/inc/accessibility/standard/vclxaccessiblebox.hxx
	accessibility/source/extended/accessibleiconchoicectrlentry.cxx
	accessibility/source/extended/accessiblelistboxentry.cxx
	accessibility/source/extended/accessibletablistbox.cxx
	accessibility/source/extended/accessibletablistboxtable.cxx
	accessibility/workben/org/openoffice/accessibility/awb/canvas/Canvas.java
	accessibility/workben/org/openoffice/accessibility/misc/OfficeConnection.java
	apple_remote/AppleRemote.m
	autodoc/inc/ary/cpp/c_gate.hxx
	autodoc/inc/ary/cpp/cp_ce.hxx
	autodoc/inc/ary/cpp/cp_def.hxx
	autodoc/inc/ary/cpp/cp_type.hxx
	autodoc/inc/ary/doc/d_parametrized.hxx
	autodoc/inc/ary/idl/i_type.hxx
	autodoc/source/ary/inc/cross_refs.hxx
	autodoc/source/ary/inc/sorted_idset.hxx
	autodoc/source/display/html/outfile.hxx
	autodoc/source/display/html/pagemake.cxx
	autodoc/source/display/idl/hi_env.hxx
	autodoc/source/parser/inc/tokens/tokproct.hxx
	autodoc/source/parser_i/inc/s2_luidl/tokproct.hxx
	autodoc/source/parser_i/inc/tokens/tkp2.hxx
	automation/inc/automation/commtypes.hxx
	automation/inc/automation/simplecm.hxx
	automation/source/server/recorder.cxx
	automation/source/server/recorder.hxx
	automation/source/server/statemnt.cxx
	automation/source/simplecm/packethandler.hxx
	automation/source/simplecm/simplecm.cxx
	avmedia/source/framework/soundhandler.cxx
	basegfx/inc/basegfx/range/rangeexpander.hxx
	basic/inc/basic/sbxdef.hxx
	basic/source/classes/sbunoobj.cxx
	basic/source/classes/sbxmod.cxx
	basic/source/comp/dim.cxx
	basic/source/comp/exprgen.cxx
	basic/source/runtime/step1.cxx
	basic/source/runtime/step2.cxx
	basic/source/sbx/sbxint.cxx
	basic/source/uno/namecont.cxx
	basic/workben/mgrtest.cxx
	bean/com/sun/star/beans/LocalOfficeConnection.java
	bean/com/sun/star/beans/LocalOfficeWindow.java
	bean/com/sun/star/comp/beans/LocalOfficeConnection.java
	bean/com/sun/star/comp/beans/LocalOfficeWindow.java
	bean/com/sun/star/comp/beans/OOoBean.java
	bridges/inc/bridges/cpp_uno/bridge.hxx
	bridges/source/cpp_uno/cc50_solaris_intel/cpp2uno.cxx
	bridges/source/cpp_uno/cc50_solaris_intel/except.cxx
	bridges/source/cpp_uno/cc50_solaris_intel/uno2cpp.cxx
	bridges/source/cpp_uno/cc50_solaris_sparc/cpp2uno.cxx
	bridges/source/cpp_uno/cc50_solaris_sparc/except.cxx
	bridges/source/cpp_uno/cc50_solaris_sparc/uno2cpp.cxx
	bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx
	bridges/source/cpp_uno/gcc3_macosx_powerpc/cpp2uno.cxx
	bridges/source/cpp_uno/gcc3_macosx_x86-64/uno2cpp.cxx
	bridges/source/cpp_uno/gcc3_netbsd_intel/cpp2uno.cxx
	bridges/source/cpp_uno/gcc3_netbsd_intel/except.cxx
	bridges/source/cpp_uno/gcc3_netbsd_intel/uno2cpp.cxx
	bridges/source/cpp_uno/gcc3_os2_intel/cpp2uno.cxx
	bridges/source/cpp_uno/gcc3_os2_intel/except.cxx
	bridges/source/cpp_uno/gcc3_os2_intel/uno2cpp.cxx
	bridges/source/cpp_uno/mingw_x86-64/uno2cpp.cxx
	bridges/source/cpp_uno/msvc_win32_intel/except.cxx
	bridges/source/cpp_uno/s5abi_macosx_x86-64/except.cxx
	bridges/source/cpp_uno/shared/component.cxx
	bridges/source/jni_uno/jni_base.h
	bridges/source/jni_uno/jni_bridge.cxx
	bridges/source/jni_uno/jni_java2uno.cxx
	bridges/source/jni_uno/jni_uno2java.cxx
	canvas/inc/canvas/base/doublebitmapbase.hxx
	canvas/inc/canvas/base/floatbitmapbase.hxx
	canvas/inc/canvas/base/integerbitmapbase.hxx
	canvas/source/cairo/cairo_canvasbitmap.cxx
	canvas/source/cairo/cairo_textlayout.cxx
	chart2/source/controller/dialogs/ObjectNameProvider.cxx
	chart2/source/view/diagram/VDiagram.cxx
	chart2/source/view/main/ChartView.cxx
	cli_ure/source/native/makefile.mk
	cli_ure/source/uno_bridge/cli_data.cxx
	codemaker/source/javamaker/javatype.cxx
	comphelper/inc/comphelper/componentcontext.hxx
	comphelper/inc/comphelper/interaction.hxx
	comphelper/inc/comphelper/locale.hxx
	comphelper/inc/comphelper/string.hxx
	comphelper/source/container/embeddedobjectcontainer.cxx
	comphelper/source/misc/accessiblecontexthelper.cxx
	comphelper/source/misc/asyncnotification.cxx
	comphelper/source/misc/locale.cxx
	comphelper/source/misc/mediadescriptor.cxx
	comphelper/source/misc/numberedcollection.cxx
	comphelper/source/misc/proxyaggregation.cxx
	comphelper/source/misc/scopeguard.cxx
	comphelper/source/misc/sequenceashashmap.cxx
	configure.in
	connectivity/source/commontools/parameters.cxx
	connectivity/source/drivers/dbase/DTable.cxx
	connectivity/source/drivers/evoab2/NStatement.cxx
	connectivity/source/drivers/file/FPreparedStatement.cxx
	connectivity/source/drivers/jdbc/DatabaseMetaData.cxx
	connectivity/source/inc/flat/ETable.hxx
	connectivity/source/parse/sqlnode.cxx
	cosv/inc/cosv/persist.hxx
	cosv/inc/cosv/ploc_dir.hxx
	cosv/inc/cosv/tpl/dyn.hxx
	cppu/source/LogBridge/LogBridge.cxx
	cppu/source/uno/data.cxx
	cppuhelper/source/bootstrap.cxx
	cppuhelper/source/component_context.cxx
	cppuhelper/source/propshlp.cxx
	cppuhelper/source/servicefactory.cxx
	cpputools/source/registercomponent/registercomponent.cxx
	cui/source/customize/acccfg.cxx
	cui/source/dialogs/about.cxx
	cui/source/dialogs/commonlingui.hxx
	cui/source/dialogs/showcols.cxx
	cui/source/inc/cuihyperdlg.hxx
	cui/source/inc/cuitabline.hxx
	cui/source/options/optsave.src
	cui/source/tabpages/tpline.cxx
	cui/source/tabpages/transfrm.cxx
	dbaccess/source/core/api/CacheSet.cxx
	dbaccess/source/core/api/KeySet.cxx
	dbaccess/source/core/api/RowSet.cxx
	dbaccess/source/core/api/RowSet.hxx
	dbaccess/source/core/api/RowSetBase.cxx
	dbaccess/source/core/api/RowSetBase.hxx
	dbaccess/source/core/api/RowSetCache.cxx
	dbaccess/source/core/api/querycomposer.cxx
	dbaccess/source/ext/adabas/Acomponentmodule.hxx
	dbaccess/source/ui/app/AppControllerDnD.cxx
	dbaccess/source/ui/app/AppDetailView.cxx
	dbaccess/source/ui/browser/brwctrlr.cxx
	dbaccess/source/ui/browser/sbagrid.cxx
	dbaccess/source/ui/browser/unodatbr.cxx
	dbaccess/source/ui/dlg/AdabasStat.hxx
	dbaccess/source/ui/dlg/UserAdmin.cxx
	dbaccess/source/ui/dlg/directsql.cxx
	dbaccess/source/ui/dlg/generalpage.hxx
	dbaccess/source/ui/dlg/tablespage.cxx
	dbaccess/source/ui/inc/JoinTableView.hxx
	dbaccess/source/ui/inc/TableController.hxx
	dbaccess/source/ui/inc/UITools.hxx
	dbaccess/source/ui/inc/brwctrlr.hxx
	dbaccess/source/ui/inc/datasourcemap.hxx
	dbaccess/source/ui/querydesign/JoinTableView.cxx
	dbaccess/source/ui/querydesign/QueryDesignView.cxx
	dbaccess/source/ui/querydesign/SelectionBrowseBox.cxx
	dbaccess/source/ui/querydesign/TableWindow.cxx
	dbaccess/source/ui/querydesign/querycontroller.cxx
	dbaccess/source/ui/relationdesign/RelationTableView.cxx
	dbaccess/source/ui/tabledesign/TableController.cxx
	desktop/source/app/app.cxx
	desktop/source/app/appinit.cxx
	desktop/source/app/langselect.cxx
	desktop/source/app/officeipcthread.cxx
	desktop/source/deployment/manager/dp_extensionmanager.cxx
	desktop/source/deployment/misc/dp_misc.cxx
	desktop/source/deployment/misc/dp_resource.cxx
	desktop/source/deployment/registry/dp_backend.cxx
	desktop/source/deployment/registry/package/dp_package.cxx
	desktop/source/migration/cfgfilter.cxx
	desktop/source/migration/migration.cxx
	desktop/source/splash/splash.cxx
	desktop/win32/source/QuickStart/QuickStart.cpp
	desktop/win32/source/setup/setup.cpp
	drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx
	dtrans/source/win32/clipb/MtaOleClipb.hxx
	dtrans/source/win32/clipb/WinClipbImpl.cxx
	editeng/source/editeng/editview.cxx
	editeng/source/editeng/impedit2.cxx
	editeng/source/editeng/impedit3.cxx
	editeng/source/editeng/impedit4.cxx
	editeng/source/editeng/textconv.hxx
	editeng/source/misc/unolingu.cxx
	embeddedobj/source/commonembedding/persistence.cxx
	embeddedobj/source/general/dummyobject.cxx
	embeddedobj/source/msole/olecomponent.cxx
	embeddedobj/source/msole/olepersist.cxx
	embeddedobj/test/Container1/NativeView.java
	extensions/source/bibliography/framectr.cxx
	extensions/source/macosx/spotlight/OOoContentDataParser.m
	extensions/source/macosx/spotlight/unzip.h
	extensions/source/macosx/spotlight/unzip.m
	extensions/source/oooimprovement/myconfigurationhelper.hxx
	extensions/source/propctrlr/eventhandler.cxx
	extensions/source/propctrlr/formcomponenthandler.cxx
	extensions/source/propctrlr/pcrcomponentcontext.hxx
	extensions/source/scanner/twain.cxx
	extensions/source/update/check/updatecheckconfig.hxx
	external/mingwheaders/mingw_atl_headers.patch
	extras/source/misc_config/wizard/web/layouts/source.xml.xsl
	fileaccess/source/FileAccess.cxx
	filter/inc/filter/msfilter/msocximex.hxx
	filter/inc/filter/msfilter/svxmsbas.hxx
	filter/qa/complex/filter/detection/typeDetection/Helper.java
	filter/source/config/cache/basecontainer.cxx
	filter/source/config/cache/cacheitem.hxx
	filter/source/config/cache/contenthandlerfactory.cxx
	filter/source/config/cache/filtercache.cxx
	filter/source/config/cache/filtercache.hxx
	filter/source/config/cache/filterfactory.cxx
	filter/source/config/cache/frameloaderfactory.cxx
	filter/source/config/cache/querytokenizer.hxx
	filter/source/config/cache/typedetection.cxx
	filter/source/config/cache/typedetection.hxx
	filter/source/config/cache/versions.hxx
	filter/source/config/fragments/makefile.mk
	filter/source/config/tools/merge/pyAltFCFGMerge
	filter/source/flash/swfwriter.cxx
	filter/source/flash/swfwriter1.cxx
	filter/source/msfilter/msdffimp.cxx
	filter/source/msfilter/msocximex.cxx
	filter/source/msfilter/msvbahelper.cxx
	filter/source/msfilter/svxmsbas.cxx
	filter/source/xmlfilterdetect/filterdetect.cxx
	filter/source/xslt/import/uof2/uof2odf.xsl
	filter/source/xslt/odf2xhtml/export/xhtml/body.xsl
	filter/source/xsltfilter/com/sun/star/comp/xsltfilter/Base64.java
	forms/source/xforms/convert.hxx
	forms/source/xforms/model.cxx
	fpicker/source/aqua/SalAquaFilePicker.mm
	fpicker/source/office/fpinteraction.cxx
	fpicker/source/unx/gnome/SalGtkFolderPicker.cxx
	fpicker/source/unx/kde4/KDE4FilePicker.cxx
	fpicker/source/win32/filepicker/PreviewCtrl.cxx
	fpicker/source/win32/filepicker/PreviewCtrl.hxx
	fpicker/source/win32/filepicker/VistaFilePicker.cxx
	fpicker/source/win32/filepicker/VistaFilePickerImpl.hxx
	fpicker/source/win32/filepicker/helppopupwindow.hxx
	fpicker/source/win32/folderpicker/MtaFop.hxx
	framework/inc/classes/droptargetlistener.hxx
	framework/inc/classes/filtercache.hxx
	framework/inc/classes/filtercachedata.hxx
	framework/inc/classes/protocolhandlercache.hxx
	framework/inc/classes/servicemanager.hxx
	framework/inc/commands.h
	framework/inc/dispatch/basedispatcher.hxx
	framework/inc/dispatch/blankdispatcher.hxx
	framework/inc/dispatch/closedispatcher.hxx
	framework/inc/dispatch/createdispatcher.hxx
	framework/inc/dispatch/dispatchprovider.hxx
	framework/inc/dispatch/helpagentdispatcher.hxx
	framework/inc/dispatch/mailtodispatcher.hxx
	framework/inc/dispatch/menudispatcher.hxx
	framework/inc/dispatch/oxt_handler.hxx
	framework/inc/dispatch/popupmenudispatcher.hxx
	framework/inc/dispatch/selfdispatcher.hxx
	framework/inc/dispatch/servicehandler.hxx
	framework/inc/dispatch/startmoduledispatcher.hxx
	framework/inc/dispatch/systemexec.hxx
	framework/inc/helper/fixeddocumentproperties.hxx
	framework/inc/helper/ocomponentaccess.hxx
	framework/inc/helper/oframes.hxx
	framework/inc/helper/otasksenumeration.hxx
	framework/inc/helper/persistentwindowstate.hxx
	framework/inc/helper/statusindicator.hxx
	framework/inc/helper/statusindicatorfactory.hxx
	framework/inc/helper/tagwindowasmodified.hxx
	framework/inc/helper/titlebarupdate.hxx
	framework/inc/helper/vclstatusindicator.hxx
	framework/inc/interaction/quietinteraction.hxx
	framework/inc/jobs/helponstartup.hxx
	framework/inc/jobs/job.hxx
	framework/inc/jobs/jobdata.hxx
	framework/inc/jobs/jobexecutor.hxx
	framework/inc/loadstate.h
	framework/inc/macros/debug/assertion.hxx
	framework/inc/macros/debug/event.hxx
	framework/inc/macros/debug/filterdbg.hxx
	framework/inc/macros/debug/memorymeasure.hxx
	framework/inc/macros/debug/timemeasure.hxx
	framework/inc/macros/xserviceinfo.hxx
	framework/inc/queries.h
	framework/inc/recording/dispatchrecordersupplier.hxx
	framework/inc/services/autorecovery.hxx
	framework/inc/services/backingcomp.hxx
	framework/inc/services/contenthandlerfactory.hxx
	framework/inc/services/desktop.hxx
	framework/inc/services/detectorfactory.hxx
	framework/inc/services/frame.hxx
	framework/inc/services/frameloaderfactory.hxx
	framework/inc/services/layoutmanager.hxx
	framework/inc/services/license.hxx
	framework/inc/services/logindialog.hxx
	framework/inc/services/modulemanager.hxx
	framework/inc/services/pathsettings.hxx
	framework/inc/services/pluginframe.hxx
	framework/inc/services/substitutepathvars.hxx
	framework/inc/services/task.hxx
	framework/inc/services/taskcreatorsrv.hxx
	framework/inc/stdtypes.h
	framework/inc/threadhelp/fairrwlock.hxx
	framework/inc/threadhelp/inoncopyable.h
	framework/inc/threadhelp/itransactionmanager.h
	framework/inc/threadhelp/lockhelper.hxx
	framework/inc/threadhelp/readguard.hxx
	framework/inc/threadhelp/resetableguard.hxx
	framework/inc/threadhelp/transactionguard.hxx
	framework/inc/threadhelp/writeguard.hxx
	framework/inc/uifactory/uielementfactorymanager.hxx
	framework/inc/xml/acceleratorconfigurationreader.hxx
	framework/qa/complex/dispatches/checkdispatchapi.java
	framework/qa/complex/framework/autosave/AutoSave.java
	framework/qa/complex/framework/autosave/Protocol.java
	framework/qa/complex/framework/recovery/RecoveryTest.java
	framework/qa/complex/loadAllDocuments/StreamSimulator.java
	framework/source/accelerators/acceleratorconfiguration.cxx
	framework/source/accelerators/acceleratorexecute.cxx
	framework/source/accelerators/acceleratorexecute.hxx
	framework/source/accelerators/keymapping.cxx
	framework/source/accelerators/presethandler.cxx
	framework/source/application/framework.cxx
	framework/source/application/login.cxx
	framework/source/classes/framecontainer.cxx
	framework/source/classes/menumanager.cxx
	framework/source/classes/taskcreator.cxx
	framework/source/dispatch/closedispatcher.cxx
	framework/source/dispatch/dispatchprovider.cxx
	framework/source/dispatch/helpagentdispatcher.cxx
	framework/source/dispatch/interceptionhelper.cxx
	framework/source/dispatch/mailtodispatcher.cxx
	framework/source/dispatch/menudispatcher.cxx
	framework/source/dispatch/oxt_handler.cxx
	framework/source/dispatch/servicehandler.cxx
	framework/source/fwe/classes/framelistanalyzer.cxx
	framework/source/fwe/dispatch/interaction.cxx
	framework/source/fwe/helper/titlehelper.cxx
	framework/source/fwe/helper/undomanagerhelper.cxx
	framework/source/fwe/xml/eventsdocumenthandler.cxx
	framework/source/fwe/xml/statusbardocumenthandler.cxx
	framework/source/fwe/xml/toolboxdocumenthandler.cxx
	framework/source/fwi/classes/protocolhandlercache.cxx
	framework/source/fwi/threadhelp/lockhelper.cxx
	framework/source/fwi/threadhelp/transactionmanager.cxx
	framework/source/helper/persistentwindowstate.cxx
	framework/source/helper/statusindicatorfactory.cxx
	framework/source/helper/vclstatusindicator.cxx
	framework/source/inc/accelerators/acceleratorcache.hxx
	framework/source/inc/accelerators/acceleratorconfiguration.hxx
	framework/source/inc/accelerators/presethandler.hxx
	framework/source/inc/accelerators/storageholder.hxx
	framework/source/inc/loadenv/actionlockguard.hxx
	framework/source/inc/loadenv/loadenv.hxx
	framework/source/inc/loadenv/loadenvexception.hxx
	framework/source/inc/pattern/frame.hxx
	framework/source/inc/pattern/storages.hxx
	framework/source/inc/pattern/window.hxx
	framework/source/jobs/helponstartup.cxx
	framework/source/jobs/job.cxx
	framework/source/jobs/jobdata.cxx
	framework/source/jobs/jobdispatch.cxx
	framework/source/jobs/jobresult.cxx
	framework/source/jobs/joburl.cxx
	framework/source/jobs/shelljob.cxx
	framework/source/loadenv/loadenv.cxx
	framework/source/services/autorecovery.cxx
	framework/source/services/backingwindow.cxx
	framework/source/services/desktop.cxx
	framework/source/services/frame.cxx
	framework/source/services/modulemanager.cxx
	framework/source/services/pathsettings.cxx
	framework/source/services/substitutepathvars.cxx
	framework/source/uiconfiguration/moduleuicfgsupplier.cxx
	framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx
	framework/source/uiconfiguration/uicategorydescription.cxx
	framework/source/uiconfiguration/uiconfigurationmanagerimpl.cxx
	framework/source/uiconfiguration/windowstateconfiguration.cxx
	framework/source/uielement/uicommanddescription.cxx
	framework/source/unotypes/fwk.xml
	framework/source/xml/imagesdocumenthandler.cxx
	framework/test/test.cxx
	framework/test/test_componentenumeration.bas
	framework/test/test_statusindicatorfactory.bas
	framework/test/threadtest.cxx
	framework/test/threadtest/threadtest.cxx
	framework/test/typecfg/cfgview.cxx
	framework/test/typecfg/xml2xcd.cxx
	include/basegfx/polygon/b2dpolygon.hxx
	include/canvas/base/graphicdevicebase.hxx
	include/canvas/canvastools.hxx
	include/comphelper/configurationhelper.hxx
	include/comphelper/embeddedobjectcontainer.hxx
	include/comphelper/propagg.hxx
	include/comphelper/sequenceashashmap.hxx
	include/connectivity/sqlerror.hxx
	include/connectivity/sqlnode.hxx
	include/cppuhelper/propshlp.hxx
	include/editeng/AccessibleContextBase.hxx
	include/framework/framelistanalyzer.hxx
	sfx2/source/dialog/backingcomp.cxx
	vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx

Change-Id: I2618bf83c0e30f68f23ff25f6eb466df04d34c6d
2014-04-30 12:13:36 +01:00

595 lines
28 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 <drawinglayer/processor2d/hittestprocessor2d.hxx>
#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
#include <drawinglayer/primitive2d/transformprimitive2d.hxx>
#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <drawinglayer/primitive2d/transparenceprimitive2d.hxx>
#include <drawinglayer/primitive2d/maskprimitive2d.hxx>
#include <drawinglayer/primitive2d/sceneprimitive2d.hxx>
#include <drawinglayer/primitive2d/pointarrayprimitive2d.hxx>
#include <basegfx/matrix/b3dhommatrix.hxx>
#include <drawinglayer/processor3d/cutfindprocessor3d.hxx>
#include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx>
#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
namespace drawinglayer
{
namespace processor2d
{
HitTestProcessor2D::HitTestProcessor2D(const geometry::ViewInformation2D& rViewInformation,
const basegfx::B2DPoint& rLogicHitPosition,
double fLogicHitTolerance,
bool bHitTextOnly)
: BaseProcessor2D(rViewInformation),
maDiscreteHitPosition(),
mfDiscreteHitTolerance(0.0),
mbHit(false),
mbHitToleranceUsed(false),
mbUseInvisiblePrimitiveContent(true),
mbHitTextOnly(bHitTextOnly)
{
// init hit tolerance
mfDiscreteHitTolerance = fLogicHitTolerance;
if(basegfx::fTools::less(mfDiscreteHitTolerance, 0.0))
{
// ensure input parameter for hit tolerance is >= 0.0
mfDiscreteHitTolerance = 0.0;
}
else if(basegfx::fTools::more(mfDiscreteHitTolerance, 0.0))
{
// generate discrete hit tolerance
mfDiscreteHitTolerance = (getViewInformation2D().getObjectToViewTransformation()
* basegfx::B2DVector(mfDiscreteHitTolerance, 0.0)).getLength();
}
// gererate discrete hit position
maDiscreteHitPosition = getViewInformation2D().getObjectToViewTransformation() * rLogicHitPosition;
// check if HitTolerance is used
mbHitToleranceUsed = basegfx::fTools::more(getDiscreteHitTolerance(), 0.0);
}
HitTestProcessor2D::~HitTestProcessor2D()
{
}
bool HitTestProcessor2D::checkHairlineHitWithTolerance(
const basegfx::B2DPolygon& rPolygon,
double fDiscreteHitTolerance)
{
basegfx::B2DPolygon aLocalPolygon(rPolygon);
aLocalPolygon.transform(getViewInformation2D().getObjectToViewTransformation());
// get discrete range
basegfx::B2DRange aPolygonRange(aLocalPolygon.getB2DRange());
if(basegfx::fTools::more(fDiscreteHitTolerance, 0.0))
{
aPolygonRange.grow(fDiscreteHitTolerance);
}
// do rough range test first
if(aPolygonRange.isInside(getDiscreteHitPosition()))
{
// check if a polygon edge is hit
return basegfx::tools::isInEpsilonRange(
aLocalPolygon,
getDiscreteHitPosition(),
fDiscreteHitTolerance);
}
return false;
}
bool HitTestProcessor2D::checkFillHitWithTolerance(
const basegfx::B2DPolyPolygon& rPolyPolygon,
double fDiscreteHitTolerance)
{
bool bRetval(false);
basegfx::B2DPolyPolygon aLocalPolyPolygon(rPolyPolygon);
aLocalPolyPolygon.transform(getViewInformation2D().getObjectToViewTransformation());
// get discrete range
basegfx::B2DRange aPolygonRange(aLocalPolyPolygon.getB2DRange());
const bool bDiscreteHitToleranceUsed(basegfx::fTools::more(fDiscreteHitTolerance, 0.0));
if(bDiscreteHitToleranceUsed)
{
aPolygonRange.grow(fDiscreteHitTolerance);
}
// do rough range test first
if(aPolygonRange.isInside(getDiscreteHitPosition()))
{
// if a HitTolerance is given, check for polygon edge hit in epsilon first
if(bDiscreteHitToleranceUsed &&
basegfx::tools::isInEpsilonRange(
aLocalPolyPolygon,
getDiscreteHitPosition(),
fDiscreteHitTolerance))
{
bRetval = true;
}
// check for hit in filled polyPolygon
if(!bRetval && basegfx::tools::isInside(
aLocalPolyPolygon,
getDiscreteHitPosition(),
true))
{
bRetval = true;
}
}
return bRetval;
}
void HitTestProcessor2D::check3DHit(const primitive2d::ScenePrimitive2D& rCandidate)
{
// calculate relative point in unified 2D scene
const basegfx::B2DPoint aLogicHitPosition(getViewInformation2D().getInverseObjectToViewTransformation() * getDiscreteHitPosition());
// use bitmap check in ScenePrimitive2D
bool bTryFastResult(false);
if(rCandidate.tryToCheckLastVisualisationDirectHit(aLogicHitPosition, bTryFastResult))
{
mbHit = bTryFastResult;
}
else
{
basegfx::B2DHomMatrix aInverseSceneTransform(rCandidate.getObjectTransformation());
aInverseSceneTransform.invert();
const basegfx::B2DPoint aRelativePoint(aInverseSceneTransform * aLogicHitPosition);
// check if test point is inside scene's unified area at all
if(aRelativePoint.getX() >= 0.0 && aRelativePoint.getX() <= 1.0
&& aRelativePoint.getY() >= 0.0 && aRelativePoint.getY() <= 1.0)
{
// get 3D view information
const geometry::ViewInformation3D& rObjectViewInformation3D = rCandidate.getViewInformation3D();
// create HitPoint Front and Back, transform to object coordinates
basegfx::B3DHomMatrix aViewToObject(rObjectViewInformation3D.getObjectToView());
aViewToObject.invert();
const basegfx::B3DPoint aFront(aViewToObject * basegfx::B3DPoint(aRelativePoint.getX(), aRelativePoint.getY(), 0.0));
const basegfx::B3DPoint aBack(aViewToObject * basegfx::B3DPoint(aRelativePoint.getX(), aRelativePoint.getY(), 1.0));
if(!aFront.equal(aBack))
{
const primitive3d::Primitive3DSequence& rPrimitives = rCandidate.getChildren3D();
if(rPrimitives.hasElements())
{
// make BoundVolume empty and overlapping test for speedup
const basegfx::B3DRange aObjectRange(
drawinglayer::primitive3d::getB3DRangeFromPrimitive3DSequence(
rPrimitives, rObjectViewInformation3D));
if(!aObjectRange.isEmpty())
{
const basegfx::B3DRange aFrontBackRange(aFront, aBack);
if(aObjectRange.overlaps(aFrontBackRange))
{
// bound volumes hit, geometric cut tests needed
drawinglayer::processor3d::CutFindProcessor aCutFindProcessor(
rObjectViewInformation3D,
aFront,
aBack,
true);
aCutFindProcessor.process(rPrimitives);
mbHit = (0 != aCutFindProcessor.getCutPoints().size());
}
}
}
}
}
// This is needed to check hit with 3D shadows, too. HitTest is without shadow
// to keep compatible with previous versions. Keeping here as reference
//
// if(!getHit())
// {
// // if scene has shadow, check hit with shadow, too
// const primitive2d::Primitive2DSequence xExtracted2DSceneShadow(rCandidate.getShadow2D(getViewInformation2D()));
//
// if(xExtracted2DSceneShadow.hasElements())
// {
// // process extracted 2D content
// process(xExtracted2DSceneShadow);
// }
// }
if(!getHit())
{
// empty 3D scene; Check for border hit
basegfx::B2DPolygon aOutline(basegfx::tools::createUnitPolygon());
aOutline.transform(rCandidate.getObjectTransformation());
mbHit = checkHairlineHitWithTolerance(aOutline, getDiscreteHitTolerance());
}
// This is what the previous version did. Keeping it here for reference
//
// // 2D Scene primitive containing 3D stuff; extract 2D contour in world coordinates
// // This may be refined later to an own 3D HitTest renderer which processes the 3D
// // geometry directly
// const primitive2d::ScenePrimitive2D& rScenePrimitive2DCandidate(static_cast< const primitive2d::ScenePrimitive2D& >(rCandidate));
// const primitive2d::Primitive2DSequence xExtracted2DSceneGeometry(rScenePrimitive2DCandidate.getGeometry2D());
// const primitive2d::Primitive2DSequence xExtracted2DSceneShadow(rScenePrimitive2DCandidate.getShadow2D(getViewInformation2D()));
//
// if(xExtracted2DSceneGeometry.hasElements() || xExtracted2DSceneShadow.hasElements())
// {
// // process extracted 2D content
// process(xExtracted2DSceneGeometry);
// process(xExtracted2DSceneShadow);
// }
// else
// {
// // empty 3D scene; Check for border hit
// const basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D()));
// if(!aRange.isEmpty())
// {
// const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange));
// mbHit = checkHairlineHitWithTolerance(aOutline, getDiscreteHitTolerance());
// }
// }
}
}
void HitTestProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate)
{
if(getHit())
{
// stop processing as soon as a hit was recognized
return;
}
switch(rCandidate.getPrimitive2DID())
{
case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D :
{
// remember current ViewInformation2D
const primitive2d::TransformPrimitive2D& rTransformCandidate(static_cast< const primitive2d::TransformPrimitive2D& >(rCandidate));
const geometry::ViewInformation2D aLastViewInformation2D(getViewInformation2D());
// create new local ViewInformation2D containing transformation
const geometry::ViewInformation2D aViewInformation2D(
getViewInformation2D().getObjectTransformation() * rTransformCandidate.getTransformation(),
getViewInformation2D().getViewTransformation(),
getViewInformation2D().getViewport(),
getViewInformation2D().getVisualizedPage(),
getViewInformation2D().getViewTime(),
getViewInformation2D().getExtendedInformationSequence());
updateViewInformation(aViewInformation2D);
// process child content recursively
process(rTransformCandidate.getChildren());
// restore transformations
updateViewInformation(aLastViewInformation2D);
break;
}
case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D :
{
if(!getHitTextOnly())
{
// create hairline in discrete coordinates
const primitive2d::PolygonHairlinePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonHairlinePrimitive2D& >(rCandidate));
// use hairline test
mbHit = checkHairlineHitWithTolerance(rPolygonCandidate.getB2DPolygon(), getDiscreteHitTolerance());
}
break;
}
case PRIMITIVE2D_ID_POLYGONMARKERPRIMITIVE2D :
{
if(!getHitTextOnly())
{
// handle marker like hairline; no need to decompose in dashes
const primitive2d::PolygonMarkerPrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonMarkerPrimitive2D& >(rCandidate));
// use hairline test
mbHit = checkHairlineHitWithTolerance(rPolygonCandidate.getB2DPolygon(), getDiscreteHitTolerance());
}
break;
}
case PRIMITIVE2D_ID_POLYGONSTROKEPRIMITIVE2D :
{
if(!getHitTextOnly())
{
// handle stroke evtl. directly; no need to decompose to filled polygon outlines
const primitive2d::PolygonStrokePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonStrokePrimitive2D& >(rCandidate));
const attribute::LineAttribute& rLineAttribute = rPolygonCandidate.getLineAttribute();
if(basegfx::fTools::more(rLineAttribute.getWidth(), 0.0))
{
if(basegfx::B2DLINEJOIN_MITER == rLineAttribute.getLineJoin())
{
// if line is mitered, use decomposition since mitered line
// geometry may use more space than the geometry grown by half line width
process(rCandidate.get2DDecomposition(getViewInformation2D()));
}
else
{
// for all other B2DLINEJOIN_* do a hairline HitTest with expanded tolerance
const basegfx::B2DVector aDiscreteHalfLineVector(getViewInformation2D().getObjectToViewTransformation()
* basegfx::B2DVector(rLineAttribute.getWidth() * 0.5, 0.0));
mbHit = checkHairlineHitWithTolerance(
rPolygonCandidate.getB2DPolygon(),
getDiscreteHitTolerance() + aDiscreteHalfLineVector.getLength());
}
}
else
{
// hairline; fallback to hairline test. Do not decompose
// since this may decompose the hairline to dashes
mbHit = checkHairlineHitWithTolerance(rPolygonCandidate.getB2DPolygon(), getDiscreteHitTolerance());
}
}
break;
}
case PRIMITIVE2D_ID_POLYGONWAVEPRIMITIVE2D :
{
if(!getHitTextOnly())
{
// do not use decompose; just handle like a line with width
const primitive2d::PolygonWavePrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolygonWavePrimitive2D& >(rCandidate));
double fLogicHitTolerance(0.0);
// if WaveHeight, grow by it
if(basegfx::fTools::more(rPolygonCandidate.getWaveHeight(), 0.0))
{
fLogicHitTolerance += rPolygonCandidate.getWaveHeight();
}
// if line width, grow by it
if(basegfx::fTools::more(rPolygonCandidate.getLineAttribute().getWidth(), 0.0))
{
fLogicHitTolerance += rPolygonCandidate.getLineAttribute().getWidth() * 0.5;
}
const basegfx::B2DVector aDiscreteHalfLineVector(getViewInformation2D().getObjectToViewTransformation()
* basegfx::B2DVector(fLogicHitTolerance, 0.0));
mbHit = checkHairlineHitWithTolerance(
rPolygonCandidate.getB2DPolygon(),
getDiscreteHitTolerance() + aDiscreteHalfLineVector.getLength());
}
break;
}
case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D :
{
if(!getHitTextOnly())
{
// create filled polyPolygon in discrete coordinates
const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate(static_cast< const primitive2d::PolyPolygonColorPrimitive2D& >(rCandidate));
// use fill hit test
mbHit = checkFillHitWithTolerance(rPolygonCandidate.getB2DPolyPolygon(), getDiscreteHitTolerance());
}
break;
}
case PRIMITIVE2D_ID_TRANSPARENCEPRIMITIVE2D :
{
// sub-transparence group
const primitive2d::TransparencePrimitive2D& rTransCandidate(static_cast< const primitive2d::TransparencePrimitive2D& >(rCandidate));
// Currently the transparence content is not taken into account; only
// the children are recursively checked for hit. This may be refined for
// parts where the content is completely transparent if needed.
process(rTransCandidate.getChildren());
break;
}
case PRIMITIVE2D_ID_MASKPRIMITIVE2D :
{
// create mask in discrete coordinates; only recursively continue
// with content when HitTest position is inside the mask
const primitive2d::MaskPrimitive2D& rMaskCandidate(static_cast< const primitive2d::MaskPrimitive2D& >(rCandidate));
// use fill hit test
if(checkFillHitWithTolerance(rMaskCandidate.getMask(), getDiscreteHitTolerance()))
{
// recursively HitTest children
process(rMaskCandidate.getChildren());
}
break;
}
case PRIMITIVE2D_ID_SCENEPRIMITIVE2D :
{
if(!getHitTextOnly())
{
const primitive2d::ScenePrimitive2D& rScenePrimitive2D(
static_cast< const primitive2d::ScenePrimitive2D& >(rCandidate));
check3DHit(rScenePrimitive2D);
}
break;
}
case PRIMITIVE2D_ID_WRONGSPELLPRIMITIVE2D :
case PRIMITIVE2D_ID_MARKERARRAYPRIMITIVE2D :
case PRIMITIVE2D_ID_GRIDPRIMITIVE2D :
case PRIMITIVE2D_ID_HELPLINEPRIMITIVE2D :
{
// ignorable primitives
break;
}
case PRIMITIVE2D_ID_SHADOWPRIMITIVE2D :
{
// Ignore shadows; we do not want to have shadows hittable.
// Remove this one to make shadows hittable on demand.
break;
}
case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D :
case PRIMITIVE2D_ID_TEXTDECORATEDPORTIONPRIMITIVE2D :
{
// for text use the BoundRect of the primitive itself
const basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D()));
if(!aRange.isEmpty())
{
const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange));
mbHit = checkFillHitWithTolerance(basegfx::B2DPolyPolygon(aOutline), getDiscreteHitTolerance());
}
break;
}
case PRIMITIVE2D_ID_BITMAPPRIMITIVE2D :
{
if(!getHitTextOnly())
{
// The recently added BitmapEx::GetTransparency() makes it easy to extend
// the BitmapPrimitive2D HitTest to take the contained BotmapEx and it's
// transparency into account
const basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D()));
if(!aRange.isEmpty())
{
const primitive2d::BitmapPrimitive2D& rBitmapCandidate(static_cast< const primitive2d::BitmapPrimitive2D& >(rCandidate));
const BitmapEx& rBitmapEx = rBitmapCandidate.getBitmapEx();
const Size& rSizePixel(rBitmapEx.GetSizePixel());
if(rSizePixel.Width() && rSizePixel.Height())
{
basegfx::B2DHomMatrix aBackTransform(
getViewInformation2D().getObjectToViewTransformation() *
rBitmapCandidate.getTransform());
aBackTransform.invert();
const basegfx::B2DPoint aRelativePoint(aBackTransform * getDiscreteHitPosition());
const basegfx::B2DRange aUnitRange(0.0, 0.0, 1.0, 1.0);
if(aUnitRange.isInside(aRelativePoint))
{
const sal_Int32 nX(basegfx::fround(aRelativePoint.getX() * rSizePixel.Width()));
const sal_Int32 nY(basegfx::fround(aRelativePoint.getY() * rSizePixel.Height()));
mbHit = (0xff != rBitmapEx.GetTransparency(nX, nY));
}
}
else
{
// fallback to standard HitTest
const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange));
mbHit = checkFillHitWithTolerance(basegfx::B2DPolyPolygon(aOutline), getDiscreteHitTolerance());
}
}
}
break;
}
case PRIMITIVE2D_ID_METAFILEPRIMITIVE2D :
case PRIMITIVE2D_ID_CONTROLPRIMITIVE2D :
case PRIMITIVE2D_ID_FILLGRADIENTPRIMITIVE2D :
case PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D :
case PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D :
case PRIMITIVE2D_ID_MEDIAPRIMITIVE2D:
{
if(!getHitTextOnly())
{
// Class of primitives for which just the BoundRect of the primitive itself
// will be used for HitTest currently.
//
// This may be refined in the future, e.g:
// - For Bitamps, the mask and/or transparence information may be used
// - For MetaFiles, the MetaFile content may be used
const basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D()));
if(!aRange.isEmpty())
{
const basegfx::B2DPolygon aOutline(basegfx::tools::createPolygonFromRect(aRange));
mbHit = checkFillHitWithTolerance(basegfx::B2DPolyPolygon(aOutline), getDiscreteHitTolerance());
}
}
break;
}
case PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D :
{
// HiddenGeometryPrimitive2D; the default decomposition would return an empty seqence,
// so force this primitive to process its children directly if the switch is set
// (which is the default). Else, ignore invisible content
const primitive2d::HiddenGeometryPrimitive2D& rHiddenGeometry(static_cast< const primitive2d::HiddenGeometryPrimitive2D& >(rCandidate));
const primitive2d::Primitive2DSequence& rChildren = rHiddenGeometry.getChildren();
if(rChildren.hasElements())
{
if(getUseInvisiblePrimitiveContent())
{
process(rChildren);
}
}
break;
}
case PRIMITIVE2D_ID_POINTARRAYPRIMITIVE2D :
{
if(!getHitTextOnly())
{
const primitive2d::PointArrayPrimitive2D& rPointArrayCandidate(static_cast< const primitive2d::PointArrayPrimitive2D& >(rCandidate));
const std::vector< basegfx::B2DPoint >& rPositions = rPointArrayCandidate.getPositions();
const sal_uInt32 nCount(rPositions.size());
for(sal_uInt32 a(0); !getHit() && a < nCount; a++)
{
const basegfx::B2DPoint aPosition(getViewInformation2D().getObjectToViewTransformation() * rPositions[a]);
const basegfx::B2DVector aDistance(aPosition - getDiscreteHitPosition());
if(aDistance.getLength() <= getDiscreteHitTolerance())
{
mbHit = true;
}
}
}
break;
}
default :
{
// process recursively
process(rCandidate.get2DDecomposition(getViewInformation2D()));
break;
}
}
}
} // end of namespace processor2d
} // end of namespace drawinglayer
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */