INTEGRATION: CWS presentationengine01 (1.2.2); FILE MERGED

2004/11/01 22:21:49 thb 1.2.2.7: #110496# Performance optimizations: added profiling traces
2004/08/23 19:15:49 thb 1.2.2.6: #110496# Added more overridable attributes (needed for slideshow attribute animations
2004/07/20 19:09:01 thb 1.2.2.5: #110496# Unified include statements; removed external prefix from boost includes
2004/06/03 14:18:46 thb 1.2.2.4: #110496# Fixed crash occuring when no font was set before text rendering
2004/05/11 15:20:28 hdu 1.2.2.3: #116716# adjust to new BiDi options
2004/04/12 15:13:20 thb 1.2.2.2: #110496# Adaptions after canvas01 merge
2004/04/05 15:58:49 thb 1.2.2.1: Resync with canvas01 changes
This commit is contained in:
Rüdiger Timm
2004-11-26 19:57:05 +00:00
parent b58d00b2b2
commit abc3686091

View File

@@ -2,9 +2,9 @@
*
* $RCSfile: textaction.cxx,v $
*
* $Revision: 1.2 $
* $Revision: 1.3 $
*
* last change: $Author: thb $ $Date: 2004-03-18 10:41:07 $
* last change: $Author: rt $ $Date: 2004-11-26 20:57:05 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -59,8 +59,16 @@
*
************************************************************************/
#include "textaction.hxx"
#include "outdevstate.hxx"
#include <textaction.hxx>
#include <outdevstate.hxx>
#ifndef _RTL_LOGFILE_HXX_
#include <rtl/logfile.hxx>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_RENDERING_XCANVAS_HPP_
#include <drafts/com/sun/star/rendering/XCanvas.hpp>
#endif
#ifndef _BGFX_MATRIX_B2DHOMMATRIX_HXX
#include <basegfx/matrix/b2dhommatrix.hxx>
@@ -80,7 +88,7 @@
#include <canvas/canvastools.hxx>
#endif
#include "mtftools.hxx"
#include <mtftools.hxx>
using namespace ::drafts::com::sun::star;
@@ -90,11 +98,38 @@ namespace cppcanvas
{
namespace internal
{
void TextAction::init( const ::Point& rStartPoint,
const OutDevState& rState )
void TextAction::init( const ::Point& rStartPoint,
const OutDevState& rState,
const ::comphelper::OptionalValue< ::basegfx::B2DHomMatrix >& rTextTransform )
{
// ensure that mxFont is valid. It is possible that text actions
// are generated without previously setting a font. Then, just
// take a default font
if( !mxFont.is() )
{
// Use completely default FontRequest
const rendering::FontRequest aFontRequest;
geometry::Matrix2D aFontMatrix;
::canvas::tools::setIdentityMatrix2D( aFontMatrix );
mxFont =
mpCanvas->getUNOCanvas()->createFont( aFontRequest,
uno::Sequence< beans::PropertyValue >(),
aFontMatrix );
}
tools::initRenderState(maState,rState);
if( rTextTransform.isValid() )
{
// prepend extra font transform to render state
// (prepend it, because it's interpreted in the unit
// rect coordinate space)
::canvas::tools::prependToRenderState( maState,
rTextTransform.getValue() );
}
::basegfx::B2DHomMatrix aLocalTransformation( rState.fontTransform );
aLocalTransformation.translate( rStartPoint.X(),
@@ -102,15 +137,26 @@ namespace cppcanvas
::canvas::tools::appendToRenderState( maState,
aLocalTransformation );
// append text transform, if given
maState.DeviceColor = rState.textColor;
if( maOffsets.getLength() )
{
mxTextLayout = mxFont->createTextLayout( maStringContext, rState.textDirection, 0 );
if( mxTextLayout.is() )
mxTextLayout->applyLogicalAdvancements( maOffsets );
}
}
TextAction::TextAction( const ::Point& rStartPoint,
const ::rtl::OUString& rText,
sal_Int32 nStartPos,
sal_Int32 nLen,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState ) :
TextAction::TextAction( const ::Point& rStartPoint,
const ::rtl::OUString& rText,
sal_Int32 nStartPos,
sal_Int32 nLen,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
const ::comphelper::OptionalValue< ::basegfx::B2DHomMatrix >& rTextTransform ) :
mxFont( rState.xFont ),
maStringContext( rText, nStartPos, nLen ),
maOffsets(),
@@ -118,16 +164,17 @@ namespace cppcanvas
maState(),
maTextDirection( rState.textDirection )
{
init( rStartPoint, rState );
init( rStartPoint, rState, rTextTransform );
}
TextAction::TextAction( const ::Point& rStartPoint,
const ::rtl::OUString& rText,
sal_Int32 nStartPos,
sal_Int32 nLen,
uno::Sequence< double > aOffsets,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState ) :
TextAction::TextAction( const ::Point& rStartPoint,
const ::rtl::OUString& rText,
sal_Int32 nStartPos,
sal_Int32 nLen,
::com::sun::star::uno::Sequence< double > aOffsets,
const CanvasSharedPtr& rCanvas,
const OutDevState& rState,
const ::comphelper::OptionalValue< ::basegfx::B2DHomMatrix >& rTextTransform ) :
mxFont( rState.xFont ),
maStringContext( rText, nStartPos, nLen ),
maOffsets( aOffsets ),
@@ -135,21 +182,26 @@ namespace cppcanvas
maState(),
maTextDirection( rState.textDirection )
{
init( rStartPoint, rState );
init( rStartPoint, rState, rTextTransform );
}
TextAction::~TextAction()
{
}
bool TextAction::render() const
bool TextAction::render( const ::basegfx::B2DHomMatrix& rTransformation ) const
{
if( maOffsets.getLength() )
mpCanvas->getUNOCanvas()->drawOffsettedText( maStringContext, mxFont, maOffsets,
mpCanvas->getViewState(), maState, maTextDirection );
RTL_LOGFILE_CONTEXT( aLog, "::cppcanvas::internal::TextAction::render()" );
RTL_LOGFILE_CONTEXT_TRACE1( aLog, "::cppcanvas::internal::TextAction: 0x%X", this );
rendering::RenderState aLocalState( maState );
::canvas::tools::prependToRenderState(aLocalState, rTransformation);
if( mxTextLayout.is() )
mpCanvas->getUNOCanvas()->drawTextLayout( mxTextLayout, mpCanvas->getViewState(), aLocalState );
else
mpCanvas->getUNOCanvas()->drawText( maStringContext, mxFont,
mpCanvas->getViewState(), maState, maTextDirection );
mpCanvas->getViewState(), aLocalState, maTextDirection );
return true;
}