diff options
Diffstat (limited to 'cppcanvas/source/inc/action.hxx')
-rw-r--r-- | cppcanvas/source/inc/action.hxx | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/cppcanvas/source/inc/action.hxx b/cppcanvas/source/inc/action.hxx new file mode 100644 index 000000000..082e6d43f --- /dev/null +++ b/cppcanvas/source/inc/action.hxx @@ -0,0 +1,145 @@ +/* -*- 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 <sal/types.h> + +namespace basegfx +{ + class B2DHomMatrix; + class B2DRange; +} + + +/* Definition of Action interface */ + +namespace cppcanvas::internal + { + /** Interface for internal render actions + + This interface is implemented by all objects generated + from the metafile renderer, and corresponds roughly to the + VCL meta action. + */ + class Action + { + public: + /** Used for rendering action subsets + + There are several cases where an Action might have + subsettable content, e.g. text, or referenced + metafiles, like the transparent action. + + Generally, at the metafile renderer, all actions are + 'flattened' out, i.e. a meta action rendering the + string "Hello" counts five indices, and a transparent + action containing a metafile with 100 actions counts + at least 100 indices (contained transparency or text + actions recursively add to this value). From the + outside, the subset to render is referenced via this + flat index range + */ + struct Subset + { + /** Denotes start of the subset. + + The index given here specifies the first subaction + to render. + */ + sal_Int32 mnSubsetBegin; + + /** Denotes end of the subset + + The index given here specifies the first subaction + <em>not<em> to render, i.e. one action behind the + subset to be rendered + */ + sal_Int32 mnSubsetEnd; + }; + + virtual ~Action() {} + + /** Render this action to the associated canvas + + @param rTransformation + Transformation matrix to apply before rendering + + @return true, if rendering was successful. If + rendering failed, false is returned. + */ + virtual bool render( const ::basegfx::B2DHomMatrix& rTransformation ) const = 0; + + /** Render the given part of the action to the associated + canvas. + + @param rTransformation + Transformation matrix to apply before rendering + + @param rSubset + Subset of the action to render. See Subset description + for index semantics. + + @return true, if rendering was successful. If the + specified subset is invalid for this action, or if + rendering failed for other reasons, false is returned. + */ + virtual bool renderSubset( const ::basegfx::B2DHomMatrix& rTransformation, + const Subset& rSubset ) const = 0; + + /** Query bounds of this action on the associated canvas + + @param rTransformation + Transformation matrix to apply + + @return the bounds for this action in device + coordinate space. + */ + virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const = 0; + + /** Query bounds for the given part of the action on the + associated canvas. + + @param rTransformation + Transformation matrix to apply. + + @param rSubset + Subset of the action to query. See Subset description + for index semantics. + + @return the bounds for the given subset in device + coordinate space. + */ + virtual ::basegfx::B2DRange getBounds( const ::basegfx::B2DHomMatrix& rTransformation, + const Subset& rSubset ) const = 0; + + /** Query action count. + + This method returns the number of subset actions + contained in this action. The render( Subset ) method + must accept subset ranges up to the value returned + here. + + @return the number of subset actions + */ + virtual sal_Int32 getActionCount() const = 0; + }; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |