Files
libreoffice/canvas/source/cairo/cairo_canvashelper_text.cxx

402 lines
16 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_canvas.hxx"
#include <canvas/debug.hxx>
#include <canvas/canvastools.hxx>
#include <tools/diagnose_ex.h>
#include <vcl/virdev.hxx>
#include <vcl/metric.hxx>
#include <vcl/canvastools.hxx>
#include <basegfx/polygon/b2dpolypolygon.hxx>
#include <basegfx/tools/canvastools.hxx>
#include "cairo_canvasfont.hxx"
#include "cairo_textlayout.hxx"
#include "cairo_canvashelper.hxx"
using namespace ::cairo;
using namespace ::com::sun::star;
namespace cairocanvas
{
enum ColorType
{
LINE_COLOR, FILL_COLOR, TEXT_COLOR, IGNORE_COLOR
};
uno::Reference< rendering::XCanvasFont > CanvasHelper::createFont( const rendering::XCanvas* ,
const rendering::FontRequest& fontRequest,
const uno::Sequence< beans::PropertyValue >& extraFontProperties,
const geometry::Matrix2D& fontMatrix )
{
return uno::Reference< rendering::XCanvasFont >( new CanvasFont( fontRequest, extraFontProperties, fontMatrix, mpSurfaceProvider ));
}
uno::Sequence< rendering::FontInfo > CanvasHelper::queryAvailableFonts( const rendering::XCanvas* ,
const rendering::FontInfo& /*aFilter*/,
const uno::Sequence< beans::PropertyValue >& /*aFontProperties*/ )
{
// TODO
return uno::Sequence< rendering::FontInfo >();
}
static bool
setupFontTransform( ::OutputDevice& rOutDev,
::Point& o_rPoint,
::Font& io_rVCLFont,
const rendering::ViewState& rViewState,
const rendering::RenderState& rRenderState )
{
::basegfx::B2DHomMatrix aMatrix;
::canvas::tools::mergeViewAndRenderTransform(aMatrix,
rViewState,
rRenderState);
::basegfx::B2DTuple aScale;
::basegfx::B2DTuple aTranslate;
double nRotate, nShearX;
aMatrix.decompose( aScale, aTranslate, nRotate, nShearX );
// query font metric _before_ tampering with width and height
if( !::rtl::math::approxEqual(aScale.getX(), aScale.getY()) )
{
// retrieve true font width
const sal_Int32 nFontWidth( rOutDev.GetFontMetric( io_rVCLFont ).GetWidth() );
const sal_Int32 nScaledFontWidth( ::basegfx::fround(nFontWidth * aScale.getX()) );
if( !nScaledFontWidth )
{
// scale is smaller than one pixel - disable text
// output altogether
return false;
}
io_rVCLFont.SetWidth( nScaledFontWidth );
}
if( !::rtl::math::approxEqual(aScale.getY(), 1.0) )
{
const sal_Int32 nFontHeight( io_rVCLFont.GetHeight() );
io_rVCLFont.SetHeight( ::basegfx::fround(nFontHeight * aScale.getY()) );
}
io_rVCLFont.SetOrientation( static_cast< short >( ::basegfx::fround(-fmod(nRotate, 2*M_PI)*(1800.0/M_PI)) ) );
// TODO(F2): Missing functionality in VCL: shearing
o_rPoint.X() = ::basegfx::fround(aTranslate.getX());
o_rPoint.Y() = ::basegfx::fround(aTranslate.getY());
return true;
}
static int
setupOutDevState( OutputDevice& rOutDev,
const rendering::XCanvas* pOwner,
const rendering::ViewState& viewState,
const rendering::RenderState& renderState,
ColorType eColorType )
{
::canvas::tools::verifyInput( renderState,
BOOST_CURRENT_FUNCTION,
const_cast<rendering::XCanvas*>(pOwner), // only for refcount
2,
eColorType == IGNORE_COLOR ? 0 : 3 );
int nTransparency(0);
// TODO(P2): Don't change clipping all the time, maintain current clip
// state and change only when update is necessary
// accumulate non-empty clips into one region
// ==========================================
Region aClipRegion;
if( viewState.Clip.is() )
{
::basegfx::B2DPolyPolygon aClipPoly(
::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(
viewState.Clip) );
if( aClipPoly.count() )
{
// setup non-empty clipping
::basegfx::B2DHomMatrix aMatrix;
aClipPoly.transform(
::basegfx::unotools::homMatrixFromAffineMatrix( aMatrix,
viewState.AffineTransform ) );
aClipRegion = Region::GetRegionFromPolyPolygon( ::PolyPolygon( aClipPoly ) );
}
}
if( renderState.Clip.is() )
{
::basegfx::B2DPolyPolygon aClipPoly(
::basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(
renderState.Clip) );
::basegfx::B2DHomMatrix aMatrix;
aClipPoly.transform(
::canvas::tools::mergeViewAndRenderTransform( aMatrix,
viewState,
renderState ) );
if( aClipPoly.count() )
{
// setup non-empty clipping
Region aRegion = Region::GetRegionFromPolyPolygon( ::PolyPolygon( aClipPoly ) );
if( aClipRegion.IsEmpty() )
aClipRegion = aRegion;
else
aClipRegion.Intersect( aRegion );
}
else
{
// clip polygon is empty
aClipRegion.SetEmpty();
}
}
// setup accumulated clip region. Note that setting an
// empty clip region denotes "clip everything" on the
// OutputDevice (which is why we translate that into
// SetClipRegion() here). When both view and render clip
// are empty, aClipRegion remains default-constructed,
// i.e. empty, too.
if( aClipRegion.IsEmpty() )
{
rOutDev.SetClipRegion();
}
else
{
rOutDev.SetClipRegion( aClipRegion );
}
if( eColorType != IGNORE_COLOR )
{
Color aColor( COL_WHITE );
if( renderState.DeviceColor.getLength() > 2 )
{
aColor = ::vcl::unotools::stdColorSpaceSequenceToColor( renderState.DeviceColor );
}
// extract alpha, and make color opaque
// afterwards. Otherwise, OutputDevice won't draw anything
nTransparency = aColor.GetTransparency();
aColor.SetTransparency(0);
switch( eColorType )
{
case LINE_COLOR:
rOutDev.SetLineColor( aColor );
rOutDev.SetFillColor();
break;
case FILL_COLOR:
rOutDev.SetFillColor( aColor );
rOutDev.SetLineColor();
break;
case TEXT_COLOR:
rOutDev.SetTextColor( aColor );
break;
default:
ENSURE_OR_THROW( false,
"CanvasHelper::setupOutDevState(): Unexpected color type");
break;
}
}
return nTransparency;
}
bool setupTextOutput( OutputDevice& rOutDev,
const rendering::XCanvas* pOwner,
::Point& o_rOutPos,
const rendering::ViewState& viewState,
const rendering::RenderState& renderState,
const uno::Reference< rendering::XCanvasFont >& xFont )
{
setupOutDevState( rOutDev, pOwner, viewState, renderState, TEXT_COLOR );
::Font aVCLFont;
CanvasFont* pFont = dynamic_cast< CanvasFont* >( xFont.get() );
ENSURE_ARG_OR_THROW( pFont,
"CanvasHelper::setupTextOutput(): Font not compatible with this canvas" );
aVCLFont = pFont->getVCLFont();
Color aColor( COL_BLACK );
if( renderState.DeviceColor.getLength() > 2 )
{
aColor = ::vcl::unotools::stdColorSpaceSequenceToColor(renderState.DeviceColor );
}
// setup font color
aVCLFont.SetColor( aColor );
aVCLFont.SetFillColor( aColor );
// no need to replicate this for mp2ndOutDev, we're modifying only aVCLFont here.
if( !setupFontTransform( rOutDev, o_rOutPos, aVCLFont, viewState, renderState ) )
return false;
rOutDev.SetFont( aVCLFont );
return true;
}
uno::Reference< rendering::XCachedPrimitive > CanvasHelper::drawText( const rendering::XCanvas* pOwner,
const rendering::StringContext& text,
const uno::Reference< rendering::XCanvasFont >& xFont,
const rendering::ViewState& viewState,
const rendering::RenderState& renderState,
sal_Int8 textDirection )
{
#ifdef CAIRO_CANVAS_PERF_TRACE
struct timespec aTimer;
mxDevice->startPerfTrace( &aTimer );
#endif
ENSURE_ARG_OR_THROW( xFont.is(),
"CanvasHelper::drawText(): font is NULL");
if( !mpVirtualDevice )
INTEGRATION: CWS cairoquartz01 (1.5.16); FILE MERGED 2008/03/10 20:54:26 mox 1.5.16.12: Win32 specific workaround, not relevant for Mac OS X/Quartz 2008/03/09 07:43:54 mox 1.5.16.11: Fix building on Mac OS X 2008/02/29 06:09:05 mox 1.5.16.10: Sync with latest win32 backend changes. 2007/07/18 21:32:40 radekdoulik 1.5.16.9: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Removed platform dependend code from cairo_canvashelper_text.cxx 2007/07/18 20:48:35 radekdoulik 1.5.16.8: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Fixed xlib backend build. Fixed pixmap double free in xlib backend. Fixed render format generation in xlib backend. 2007/07/02 15:49:00 thb 1.5.16.7: #i10000# Made code compile again under Win (windows.h nastily defines macros min and max) 2007/06/20 14:57:14 mox 1.5.16.6: Cleanup headers and fix compilation bugs. 2007/06/19 19:22:15 mox 1.5.16.5: Alternative "legacy" code path for Quartz. 2007/06/04 21:13:49 mox 1.5.16.4: Enable building different platforms with both Cairo 1.0 and Cairo 1.2 APIs. Only Quartz uses the Cairo 1.2 API by default. 2007/06/02 23:05:32 thb 1.5.16.3: #i70519# Merged in tml's fixes for WinCairo; made code compile warning-free under Linux; added prex/postx.h (which where already referenced); cleaned up a bit; replaces plain round() call with basegfx::fround; asserting unexpected/unimplemented case at selected places 2007/05/01 21:21:43 mox 1.5.16.2: urther fixes: - separate X11 cairo 1.0 API to legacy file: cairo_cairolegacy.cxx. - maximize the use of crossplatform code - fix quartz bugs 2007/04/12 20:15:59 mox 1.5.16.1: Issue number: #69066# initial Cairo Quartz implementation
2008-04-02 08:41:46 +00:00
mpVirtualDevice = mpSurface->createVirtualDevice();
if( mpVirtualDevice )
{
INTEGRATION: CWS cairoquartz01 (1.5.16); FILE MERGED 2008/03/10 20:54:26 mox 1.5.16.12: Win32 specific workaround, not relevant for Mac OS X/Quartz 2008/03/09 07:43:54 mox 1.5.16.11: Fix building on Mac OS X 2008/02/29 06:09:05 mox 1.5.16.10: Sync with latest win32 backend changes. 2007/07/18 21:32:40 radekdoulik 1.5.16.9: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Removed platform dependend code from cairo_canvashelper_text.cxx 2007/07/18 20:48:35 radekdoulik 1.5.16.8: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Fixed xlib backend build. Fixed pixmap double free in xlib backend. Fixed render format generation in xlib backend. 2007/07/02 15:49:00 thb 1.5.16.7: #i10000# Made code compile again under Win (windows.h nastily defines macros min and max) 2007/06/20 14:57:14 mox 1.5.16.6: Cleanup headers and fix compilation bugs. 2007/06/19 19:22:15 mox 1.5.16.5: Alternative "legacy" code path for Quartz. 2007/06/04 21:13:49 mox 1.5.16.4: Enable building different platforms with both Cairo 1.0 and Cairo 1.2 APIs. Only Quartz uses the Cairo 1.2 API by default. 2007/06/02 23:05:32 thb 1.5.16.3: #i70519# Merged in tml's fixes for WinCairo; made code compile warning-free under Linux; added prex/postx.h (which where already referenced); cleaned up a bit; replaces plain round() call with basegfx::fround; asserting unexpected/unimplemented case at selected places 2007/05/01 21:21:43 mox 1.5.16.2: urther fixes: - separate X11 cairo 1.0 API to legacy file: cairo_cairolegacy.cxx. - maximize the use of crossplatform code - fix quartz bugs 2007/04/12 20:15:59 mox 1.5.16.1: Issue number: #69066# initial Cairo Quartz implementation
2008-04-02 08:41:46 +00:00
#if defined CAIRO_HAS_WIN32_SURFACE
// FIXME: Some kind of work-araound...
cairo_rectangle (mpSurface->getCairo().get(), 0, 0, 0, 0);
cairo_fill(mpSurface->getCairo().get());
INTEGRATION: CWS cairoquartz01 (1.5.16); FILE MERGED 2008/03/10 20:54:26 mox 1.5.16.12: Win32 specific workaround, not relevant for Mac OS X/Quartz 2008/03/09 07:43:54 mox 1.5.16.11: Fix building on Mac OS X 2008/02/29 06:09:05 mox 1.5.16.10: Sync with latest win32 backend changes. 2007/07/18 21:32:40 radekdoulik 1.5.16.9: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Removed platform dependend code from cairo_canvashelper_text.cxx 2007/07/18 20:48:35 radekdoulik 1.5.16.8: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Fixed xlib backend build. Fixed pixmap double free in xlib backend. Fixed render format generation in xlib backend. 2007/07/02 15:49:00 thb 1.5.16.7: #i10000# Made code compile again under Win (windows.h nastily defines macros min and max) 2007/06/20 14:57:14 mox 1.5.16.6: Cleanup headers and fix compilation bugs. 2007/06/19 19:22:15 mox 1.5.16.5: Alternative "legacy" code path for Quartz. 2007/06/04 21:13:49 mox 1.5.16.4: Enable building different platforms with both Cairo 1.0 and Cairo 1.2 APIs. Only Quartz uses the Cairo 1.2 API by default. 2007/06/02 23:05:32 thb 1.5.16.3: #i70519# Merged in tml's fixes for WinCairo; made code compile warning-free under Linux; added prex/postx.h (which where already referenced); cleaned up a bit; replaces plain round() call with basegfx::fround; asserting unexpected/unimplemented case at selected places 2007/05/01 21:21:43 mox 1.5.16.2: urther fixes: - separate X11 cairo 1.0 API to legacy file: cairo_cairolegacy.cxx. - maximize the use of crossplatform code - fix quartz bugs 2007/04/12 20:15:59 mox 1.5.16.1: Issue number: #69066# initial Cairo Quartz implementation
2008-04-02 08:41:46 +00:00
#endif
::Point aOutpos;
if( !setupTextOutput( *mpVirtualDevice, pOwner, aOutpos, viewState, renderState, xFont ) )
return uno::Reference< rendering::XCachedPrimitive >(NULL); // no output necessary
// change text direction and layout mode
sal_uLong nLayoutMode(0);
switch( textDirection )
{
case rendering::TextDirection::WEAK_LEFT_TO_RIGHT:
nLayoutMode |= TEXT_LAYOUT_BIDI_LTR;
// FALLTHROUGH intended
case rendering::TextDirection::STRONG_LEFT_TO_RIGHT:
nLayoutMode |= TEXT_LAYOUT_BIDI_LTR | TEXT_LAYOUT_BIDI_STRONG;
nLayoutMode |= TEXT_LAYOUT_TEXTORIGIN_LEFT;
break;
case rendering::TextDirection::WEAK_RIGHT_TO_LEFT:
nLayoutMode |= TEXT_LAYOUT_BIDI_RTL;
// FALLTHROUGH intended
case rendering::TextDirection::STRONG_RIGHT_TO_LEFT:
nLayoutMode |= TEXT_LAYOUT_BIDI_RTL | TEXT_LAYOUT_BIDI_STRONG;
nLayoutMode |= TEXT_LAYOUT_TEXTORIGIN_RIGHT;
break;
}
// TODO(F2): alpha
mpVirtualDevice->SetLayoutMode( nLayoutMode );
CWS-TOOLING: integrate CWS cairocanvastext01 2009-05-12 07:10:00 +0200 mox r271795 : Rename ::GetLayoutData() to ::GetSysTextLayoutData() to avoid build breakage in sc module. 2009-05-11 23:40:57 +0200 mox r271794 : merge fixes (again). These files should have been removed by the rebase. 2009-05-11 20:17:44 +0200 mox r271791 : fix build breakage on UNX 2009-05-11 16:53:15 +0200 mox r271779 : Documentation fix 2009-05-11 16:49:16 +0200 mox r271778 : merge fixes 2009-05-11 14:10:36 +0200 mox r271769 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@271427 (milestone: DEV300:m47) 2009-05-11 10:55:11 +0200 mox r271760 : merge fixes 2009-05-11 10:49:44 +0200 mox r271759 : manual merge to DEV300_m47 2009-05-11 10:42:11 +0200 mox r271758 : merge fixes 2009-05-11 10:29:16 +0200 mox r271757 : Manual merge to DEV300_m47 2009-05-11 10:21:13 +0200 mox r271756 : manual merge to DEV300_m47 2009-05-11 10:10:29 +0200 mox r271755 : manual merge to DEV300_m47 2009-05-11 10:01:33 +0200 mox r271754 : Manual merge to DEV300_m47 2009-05-11 09:59:30 +0200 mox r271753 : manual merge to DEV300_m47 2009-05-11 09:57:33 +0200 mox r271752 : merge fixes 2009-05-11 09:56:05 +0200 mox r271751 : merge fixes 2009-05-11 09:53:26 +0200 mox r271749 : Manual merge to DEV300_m47 2009-05-11 09:49:34 +0200 mox r271748 : manual merge to DEV300_m47 2009-05-11 09:43:20 +0200 mox r271747 : manual merge to DEV300_m47 2009-05-11 09:30:10 +0200 mox r271745 : Manual merge to DEV300_m47 2009-05-11 09:28:59 +0200 mox r271744 : manual merge to DEV300_m47 2009-05-11 09:24:49 +0200 mox r271743 : Fix to merge 2009-05-11 09:21:55 +0200 mox r271742 : Manual merge to DEV300_m47 2009-05-11 09:18:13 +0200 mox r271741 : merge fixes 2009-05-11 09:00:50 +0200 mox r271739 : Manual merge to DEV300_m47 2009-05-09 13:26:10 +0200 mox r271734 : cleanup 2009-05-09 13:17:22 +0200 mox r271733 : WNT build fixes 2009-05-09 09:23:59 +0200 mox r271732 : Implement proper cross-platform font width calculation Implement faux bold support 2009-02-21 19:47:08 +0100 mox r268339 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@267171 (milestone: DEV300:m41) 2009-01-19 21:51:21 +0100 mox r266530 : Fix compilation on win32 2009-01-19 21:37:20 +0100 mox r266529 : Fix typo 2009-01-19 21:35:28 +0100 mox r266528 : Better debug 2009-01-19 21:13:30 +0100 mox r266527 : Win32 fixes for proper text rendering 2009-01-19 21:12:56 +0100 mox r266526 : Win32 fixes for proper text rendering 2008-12-27 13:04:05 +0100 mox r265814 : configure fixes 2008-12-27 11:37:00 +0100 mox r265813 : x86_64 works only with system-cairo 2008-12-26 20:02:32 +0100 mox r265809 : Use the fix for 64bit builds 2008-12-25 16:58:11 +0100 mox r265802 : Fix build breaker on WNT 2008-12-24 23:04:58 +0100 mox r265801 : Unbreak build after rebase. 2008-12-23 18:52:32 +0100 mox r265790 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@265758 (milestone: DEV300:m38) 2008-12-23 18:23:09 +0100 mox r265789 : Fix the fix 2008-12-23 18:21:27 +0100 mox r265788 : Fix OS2 stuff 2008-12-11 19:50:40 +0100 mox r265354 : Fix build breaker on Mac 2008-12-09 22:00:53 +0100 mox r265139 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@264807 (milestone: DEV300:m37) 2008-12-08 23:02:32 +0100 thb r265052 : Removed outdated parts from readme 2008-12-08 22:26:54 +0100 mox r265051 : cleanup 2008-12-07 19:55:31 +0100 mox r264967 : Fix for non-intel processors. 2008-12-07 19:47:11 +0100 mox r264963 : sysdata fixes 2008-12-07 19:23:27 +0100 mox r264959 : Sysdata fixes 2008-12-07 19:01:48 +0100 mox r264958 : Fix sysdata usage 2008-12-07 11:41:33 +0100 mox r264951 : sysdata fixes 2008-12-07 11:38:32 +0100 mox r264950 : sysdata fixes 2008-12-06 23:15:06 +0100 mox r264947 : Try to fix error: __sync_val_compare_and_swap_4 2008-12-06 23:09:30 +0100 mox r264945 : Revert unnecessary change. 2008-12-06 23:04:40 +0100 mox r264944 : Use pre/postx from tools module. 2008-12-06 22:49:08 +0100 mox r264943 : Use proper pre/post includes. 2008-12-06 22:48:03 +0100 mox r264942 : Use pre/postx from tools module. 2008-12-06 22:24:10 +0100 mox r264941 : Fix build breaker. 2008-12-06 21:55:46 +0100 mox r264940 : Make pre/postx.h properly available 2008-12-06 21:54:23 +0100 mox r264939 : Make pre/postx.h properly available. 2008-12-06 21:43:09 +0100 mox r264938 : Try to fix error: __sync_val_compare_and_swap_4 2008-12-06 21:12:18 +0100 mox r264937 : Remove obsolete pre-built binaries 2008-12-06 21:07:40 +0100 mox r264936 : WNT: do not hardcode pixman version in cairo build 2008-12-06 19:26:44 +0100 mox r264934 : Revert pixman upgrade. 2008-12-06 18:35:14 +0100 mox r264933 : Fix build breaker 2008-12-06 18:31:11 +0100 mox r264932 : Use static pixman lib on unx/32bit to avoid linking problems 2008-12-06 17:22:52 +0100 mox r264930 : Update pixman to 0.13.2 2008-12-06 13:30:41 +0100 mox r264928 : Fix accidentally changed property 2008-12-06 13:09:00 +0100 mox r264927 : Fix accidental prop changes 2008-12-06 12:40:08 +0100 mox r264926 : Fix build breaker on Win32 2008-12-06 12:39:22 +0100 mox r264925 : Fix build breaker on Win32 2008-12-06 12:30:23 +0100 mox r264924 : Fix build breakers on win32 2008-12-06 11:45:33 +0100 mox r264923 : revert. 2008-12-06 11:43:05 +0100 mox r264922 : Try to fix header include problems on WNT 2008-12-06 09:57:35 +0100 mox r264921 : Cleanup accidental props 2008-11-29 14:43:51 +0100 mox r264580 : Move headers around to make all platforms compile 2008-11-29 14:41:59 +0100 mox r264579 : WaE fixes for X11 2008-11-29 13:13:49 +0100 mox r264578 : Fix build breaker on linux 2008-11-29 12:21:03 +0100 mox r264577 : Fix build breaker 2008-11-29 12:13:50 +0100 mox r264576 : Try to fix build breaker 2008-11-28 22:51:27 +0100 mox r264573 : Revert header includes to common style 2008-11-18 18:59:15 +0100 mox r263794 : Fix build breaker. 2008-11-17 20:28:19 +0100 mox r263740 : Revert most configure hacks 2008-11-17 20:12:51 +0100 mox r263739 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@263288 (milestone: DEV300:m35) 2008-11-14 21:22:22 +0100 mox r263698 : ZLIB_FIX define set 2008-11-14 18:48:22 +0100 mox r263694 : hardcode zlib paths 2008-11-14 16:23:07 +0100 mox r263683 : Fix typo 2008-11-13 20:16:13 +0100 mox r263662 : WaE fix 2008-11-13 19:44:29 +0100 mox r263661 : Properly include zlib headers for win32 2008-11-12 20:05:51 +0100 mox r263610 : Add debugging code. 2008-11-10 19:44:35 +0100 mox r263537 : Try to fix build breaker 2008-11-09 22:34:35 +0100 mox r263504 : Remove accidentally added svn:ignore properties. 2008-11-09 22:33:21 +0100 mox r263503 : prop should be actually deleted. 2008-11-09 22:30:06 +0100 mox r263502 : props should be empty. 2008-11-09 22:23:22 +0100 mox r263501 : Try fix props again... 2008-11-09 22:11:26 +0100 mox r263500 : try to fix svn:ignore 2008-11-09 21:30:01 +0100 mox r263499 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@262620 (milestone: DEV300:m34) 2008-11-09 20:30:55 +0100 mox r263498 : add missing cairo patch 2008-11-09 10:56:33 +0100 mox r263494 : Resync cairo module with cws cairosource01 2008-11-01 09:32:19 +0100 mox r262870 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@262620 (milestone: DEV300:m34) 2008-10-26 20:55:48 +0100 mox r262663 : Fix build breaker 2008-10-25 13:10:00 +0200 mox r262662 : CWS rebase to m33 2008-10-12 19:47:56 +0200 mox r262170 : Migrate CWS cairocanvastext01 to SVN.
2009-05-18 12:01:49 +00:00
OSL_TRACE(":cairocanvas::CanvasHelper::drawText(O,t,f,v,r,d): %s", ::rtl::OUStringToOString( text.Text.copy( text.StartPosition, text.Length ),
RTL_TEXTENCODING_UTF8 ).getStr());
TextLayout* pTextLayout = new TextLayout(text, textDirection, 0, CanvasFont::Reference(dynamic_cast< CanvasFont* >( xFont.get() )), mpSurfaceProvider);
pTextLayout->draw( mpSurface, *mpVirtualDevice, aOutpos, viewState, renderState );
}
return uno::Reference< rendering::XCachedPrimitive >(NULL);
}
uno::Reference< rendering::XCachedPrimitive > CanvasHelper::drawTextLayout( const rendering::XCanvas* pOwner,
const uno::Reference< rendering::XTextLayout >& xLayoutedText,
const rendering::ViewState& viewState,
const rendering::RenderState& renderState )
{
ENSURE_ARG_OR_THROW( xLayoutedText.is(),
"CanvasHelper::drawTextLayout(): layout is NULL");
TextLayout* pTextLayout = dynamic_cast< TextLayout* >( xLayoutedText.get() );
if( pTextLayout )
{
if( !mpVirtualDevice )
INTEGRATION: CWS cairoquartz01 (1.5.16); FILE MERGED 2008/03/10 20:54:26 mox 1.5.16.12: Win32 specific workaround, not relevant for Mac OS X/Quartz 2008/03/09 07:43:54 mox 1.5.16.11: Fix building on Mac OS X 2008/02/29 06:09:05 mox 1.5.16.10: Sync with latest win32 backend changes. 2007/07/18 21:32:40 radekdoulik 1.5.16.9: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Removed platform dependend code from cairo_canvashelper_text.cxx 2007/07/18 20:48:35 radekdoulik 1.5.16.8: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Fixed xlib backend build. Fixed pixmap double free in xlib backend. Fixed render format generation in xlib backend. 2007/07/02 15:49:00 thb 1.5.16.7: #i10000# Made code compile again under Win (windows.h nastily defines macros min and max) 2007/06/20 14:57:14 mox 1.5.16.6: Cleanup headers and fix compilation bugs. 2007/06/19 19:22:15 mox 1.5.16.5: Alternative "legacy" code path for Quartz. 2007/06/04 21:13:49 mox 1.5.16.4: Enable building different platforms with both Cairo 1.0 and Cairo 1.2 APIs. Only Quartz uses the Cairo 1.2 API by default. 2007/06/02 23:05:32 thb 1.5.16.3: #i70519# Merged in tml's fixes for WinCairo; made code compile warning-free under Linux; added prex/postx.h (which where already referenced); cleaned up a bit; replaces plain round() call with basegfx::fround; asserting unexpected/unimplemented case at selected places 2007/05/01 21:21:43 mox 1.5.16.2: urther fixes: - separate X11 cairo 1.0 API to legacy file: cairo_cairolegacy.cxx. - maximize the use of crossplatform code - fix quartz bugs 2007/04/12 20:15:59 mox 1.5.16.1: Issue number: #69066# initial Cairo Quartz implementation
2008-04-02 08:41:46 +00:00
mpVirtualDevice = mpSurface->createVirtualDevice();
if( mpVirtualDevice )
{
INTEGRATION: CWS cairoquartz01 (1.5.16); FILE MERGED 2008/03/10 20:54:26 mox 1.5.16.12: Win32 specific workaround, not relevant for Mac OS X/Quartz 2008/03/09 07:43:54 mox 1.5.16.11: Fix building on Mac OS X 2008/02/29 06:09:05 mox 1.5.16.10: Sync with latest win32 backend changes. 2007/07/18 21:32:40 radekdoulik 1.5.16.9: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Removed platform dependend code from cairo_canvashelper_text.cxx 2007/07/18 20:48:35 radekdoulik 1.5.16.8: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Fixed xlib backend build. Fixed pixmap double free in xlib backend. Fixed render format generation in xlib backend. 2007/07/02 15:49:00 thb 1.5.16.7: #i10000# Made code compile again under Win (windows.h nastily defines macros min and max) 2007/06/20 14:57:14 mox 1.5.16.6: Cleanup headers and fix compilation bugs. 2007/06/19 19:22:15 mox 1.5.16.5: Alternative "legacy" code path for Quartz. 2007/06/04 21:13:49 mox 1.5.16.4: Enable building different platforms with both Cairo 1.0 and Cairo 1.2 APIs. Only Quartz uses the Cairo 1.2 API by default. 2007/06/02 23:05:32 thb 1.5.16.3: #i70519# Merged in tml's fixes for WinCairo; made code compile warning-free under Linux; added prex/postx.h (which where already referenced); cleaned up a bit; replaces plain round() call with basegfx::fround; asserting unexpected/unimplemented case at selected places 2007/05/01 21:21:43 mox 1.5.16.2: urther fixes: - separate X11 cairo 1.0 API to legacy file: cairo_cairolegacy.cxx. - maximize the use of crossplatform code - fix quartz bugs 2007/04/12 20:15:59 mox 1.5.16.1: Issue number: #69066# initial Cairo Quartz implementation
2008-04-02 08:41:46 +00:00
#if defined CAIRO_HAS_WIN32_SURFACE
// FIXME: Some kind of work-araound...
cairo_rectangle( mpSurface->getCairo().get(), 0, 0, 0, 0);
cairo_fill(mpSurface->getCairo().get());
INTEGRATION: CWS cairoquartz01 (1.5.16); FILE MERGED 2008/03/10 20:54:26 mox 1.5.16.12: Win32 specific workaround, not relevant for Mac OS X/Quartz 2008/03/09 07:43:54 mox 1.5.16.11: Fix building on Mac OS X 2008/02/29 06:09:05 mox 1.5.16.10: Sync with latest win32 backend changes. 2007/07/18 21:32:40 radekdoulik 1.5.16.9: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Removed platform dependend code from cairo_canvashelper_text.cxx 2007/07/18 20:48:35 radekdoulik 1.5.16.8: Issue number: 69066 Submitted by: radekdoulik Reviewed by: radekdoulik Fixed xlib backend build. Fixed pixmap double free in xlib backend. Fixed render format generation in xlib backend. 2007/07/02 15:49:00 thb 1.5.16.7: #i10000# Made code compile again under Win (windows.h nastily defines macros min and max) 2007/06/20 14:57:14 mox 1.5.16.6: Cleanup headers and fix compilation bugs. 2007/06/19 19:22:15 mox 1.5.16.5: Alternative "legacy" code path for Quartz. 2007/06/04 21:13:49 mox 1.5.16.4: Enable building different platforms with both Cairo 1.0 and Cairo 1.2 APIs. Only Quartz uses the Cairo 1.2 API by default. 2007/06/02 23:05:32 thb 1.5.16.3: #i70519# Merged in tml's fixes for WinCairo; made code compile warning-free under Linux; added prex/postx.h (which where already referenced); cleaned up a bit; replaces plain round() call with basegfx::fround; asserting unexpected/unimplemented case at selected places 2007/05/01 21:21:43 mox 1.5.16.2: urther fixes: - separate X11 cairo 1.0 API to legacy file: cairo_cairolegacy.cxx. - maximize the use of crossplatform code - fix quartz bugs 2007/04/12 20:15:59 mox 1.5.16.1: Issue number: #69066# initial Cairo Quartz implementation
2008-04-02 08:41:46 +00:00
#endif
// TODO(T3): Race condition. We're taking the font
// from xLayoutedText, and then calling draw() at it,
// without exclusive access. Move setupTextOutput(),
// e.g. to impltools?
::Point aOutpos;
if( !setupTextOutput( *mpVirtualDevice, pOwner, aOutpos, viewState, renderState, xLayoutedText->getFont() ) )
return uno::Reference< rendering::XCachedPrimitive >(NULL); // no output necessary
// TODO(F2): What about the offset scalings?
CWS-TOOLING: integrate CWS cairocanvastext01 2009-05-12 07:10:00 +0200 mox r271795 : Rename ::GetLayoutData() to ::GetSysTextLayoutData() to avoid build breakage in sc module. 2009-05-11 23:40:57 +0200 mox r271794 : merge fixes (again). These files should have been removed by the rebase. 2009-05-11 20:17:44 +0200 mox r271791 : fix build breakage on UNX 2009-05-11 16:53:15 +0200 mox r271779 : Documentation fix 2009-05-11 16:49:16 +0200 mox r271778 : merge fixes 2009-05-11 14:10:36 +0200 mox r271769 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@271427 (milestone: DEV300:m47) 2009-05-11 10:55:11 +0200 mox r271760 : merge fixes 2009-05-11 10:49:44 +0200 mox r271759 : manual merge to DEV300_m47 2009-05-11 10:42:11 +0200 mox r271758 : merge fixes 2009-05-11 10:29:16 +0200 mox r271757 : Manual merge to DEV300_m47 2009-05-11 10:21:13 +0200 mox r271756 : manual merge to DEV300_m47 2009-05-11 10:10:29 +0200 mox r271755 : manual merge to DEV300_m47 2009-05-11 10:01:33 +0200 mox r271754 : Manual merge to DEV300_m47 2009-05-11 09:59:30 +0200 mox r271753 : manual merge to DEV300_m47 2009-05-11 09:57:33 +0200 mox r271752 : merge fixes 2009-05-11 09:56:05 +0200 mox r271751 : merge fixes 2009-05-11 09:53:26 +0200 mox r271749 : Manual merge to DEV300_m47 2009-05-11 09:49:34 +0200 mox r271748 : manual merge to DEV300_m47 2009-05-11 09:43:20 +0200 mox r271747 : manual merge to DEV300_m47 2009-05-11 09:30:10 +0200 mox r271745 : Manual merge to DEV300_m47 2009-05-11 09:28:59 +0200 mox r271744 : manual merge to DEV300_m47 2009-05-11 09:24:49 +0200 mox r271743 : Fix to merge 2009-05-11 09:21:55 +0200 mox r271742 : Manual merge to DEV300_m47 2009-05-11 09:18:13 +0200 mox r271741 : merge fixes 2009-05-11 09:00:50 +0200 mox r271739 : Manual merge to DEV300_m47 2009-05-09 13:26:10 +0200 mox r271734 : cleanup 2009-05-09 13:17:22 +0200 mox r271733 : WNT build fixes 2009-05-09 09:23:59 +0200 mox r271732 : Implement proper cross-platform font width calculation Implement faux bold support 2009-02-21 19:47:08 +0100 mox r268339 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@267171 (milestone: DEV300:m41) 2009-01-19 21:51:21 +0100 mox r266530 : Fix compilation on win32 2009-01-19 21:37:20 +0100 mox r266529 : Fix typo 2009-01-19 21:35:28 +0100 mox r266528 : Better debug 2009-01-19 21:13:30 +0100 mox r266527 : Win32 fixes for proper text rendering 2009-01-19 21:12:56 +0100 mox r266526 : Win32 fixes for proper text rendering 2008-12-27 13:04:05 +0100 mox r265814 : configure fixes 2008-12-27 11:37:00 +0100 mox r265813 : x86_64 works only with system-cairo 2008-12-26 20:02:32 +0100 mox r265809 : Use the fix for 64bit builds 2008-12-25 16:58:11 +0100 mox r265802 : Fix build breaker on WNT 2008-12-24 23:04:58 +0100 mox r265801 : Unbreak build after rebase. 2008-12-23 18:52:32 +0100 mox r265790 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@265758 (milestone: DEV300:m38) 2008-12-23 18:23:09 +0100 mox r265789 : Fix the fix 2008-12-23 18:21:27 +0100 mox r265788 : Fix OS2 stuff 2008-12-11 19:50:40 +0100 mox r265354 : Fix build breaker on Mac 2008-12-09 22:00:53 +0100 mox r265139 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@264807 (milestone: DEV300:m37) 2008-12-08 23:02:32 +0100 thb r265052 : Removed outdated parts from readme 2008-12-08 22:26:54 +0100 mox r265051 : cleanup 2008-12-07 19:55:31 +0100 mox r264967 : Fix for non-intel processors. 2008-12-07 19:47:11 +0100 mox r264963 : sysdata fixes 2008-12-07 19:23:27 +0100 mox r264959 : Sysdata fixes 2008-12-07 19:01:48 +0100 mox r264958 : Fix sysdata usage 2008-12-07 11:41:33 +0100 mox r264951 : sysdata fixes 2008-12-07 11:38:32 +0100 mox r264950 : sysdata fixes 2008-12-06 23:15:06 +0100 mox r264947 : Try to fix error: __sync_val_compare_and_swap_4 2008-12-06 23:09:30 +0100 mox r264945 : Revert unnecessary change. 2008-12-06 23:04:40 +0100 mox r264944 : Use pre/postx from tools module. 2008-12-06 22:49:08 +0100 mox r264943 : Use proper pre/post includes. 2008-12-06 22:48:03 +0100 mox r264942 : Use pre/postx from tools module. 2008-12-06 22:24:10 +0100 mox r264941 : Fix build breaker. 2008-12-06 21:55:46 +0100 mox r264940 : Make pre/postx.h properly available 2008-12-06 21:54:23 +0100 mox r264939 : Make pre/postx.h properly available. 2008-12-06 21:43:09 +0100 mox r264938 : Try to fix error: __sync_val_compare_and_swap_4 2008-12-06 21:12:18 +0100 mox r264937 : Remove obsolete pre-built binaries 2008-12-06 21:07:40 +0100 mox r264936 : WNT: do not hardcode pixman version in cairo build 2008-12-06 19:26:44 +0100 mox r264934 : Revert pixman upgrade. 2008-12-06 18:35:14 +0100 mox r264933 : Fix build breaker 2008-12-06 18:31:11 +0100 mox r264932 : Use static pixman lib on unx/32bit to avoid linking problems 2008-12-06 17:22:52 +0100 mox r264930 : Update pixman to 0.13.2 2008-12-06 13:30:41 +0100 mox r264928 : Fix accidentally changed property 2008-12-06 13:09:00 +0100 mox r264927 : Fix accidental prop changes 2008-12-06 12:40:08 +0100 mox r264926 : Fix build breaker on Win32 2008-12-06 12:39:22 +0100 mox r264925 : Fix build breaker on Win32 2008-12-06 12:30:23 +0100 mox r264924 : Fix build breakers on win32 2008-12-06 11:45:33 +0100 mox r264923 : revert. 2008-12-06 11:43:05 +0100 mox r264922 : Try to fix header include problems on WNT 2008-12-06 09:57:35 +0100 mox r264921 : Cleanup accidental props 2008-11-29 14:43:51 +0100 mox r264580 : Move headers around to make all platforms compile 2008-11-29 14:41:59 +0100 mox r264579 : WaE fixes for X11 2008-11-29 13:13:49 +0100 mox r264578 : Fix build breaker on linux 2008-11-29 12:21:03 +0100 mox r264577 : Fix build breaker 2008-11-29 12:13:50 +0100 mox r264576 : Try to fix build breaker 2008-11-28 22:51:27 +0100 mox r264573 : Revert header includes to common style 2008-11-18 18:59:15 +0100 mox r263794 : Fix build breaker. 2008-11-17 20:28:19 +0100 mox r263740 : Revert most configure hacks 2008-11-17 20:12:51 +0100 mox r263739 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@263288 (milestone: DEV300:m35) 2008-11-14 21:22:22 +0100 mox r263698 : ZLIB_FIX define set 2008-11-14 18:48:22 +0100 mox r263694 : hardcode zlib paths 2008-11-14 16:23:07 +0100 mox r263683 : Fix typo 2008-11-13 20:16:13 +0100 mox r263662 : WaE fix 2008-11-13 19:44:29 +0100 mox r263661 : Properly include zlib headers for win32 2008-11-12 20:05:51 +0100 mox r263610 : Add debugging code. 2008-11-10 19:44:35 +0100 mox r263537 : Try to fix build breaker 2008-11-09 22:34:35 +0100 mox r263504 : Remove accidentally added svn:ignore properties. 2008-11-09 22:33:21 +0100 mox r263503 : prop should be actually deleted. 2008-11-09 22:30:06 +0100 mox r263502 : props should be empty. 2008-11-09 22:23:22 +0100 mox r263501 : Try fix props again... 2008-11-09 22:11:26 +0100 mox r263500 : try to fix svn:ignore 2008-11-09 21:30:01 +0100 mox r263499 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@262620 (milestone: DEV300:m34) 2008-11-09 20:30:55 +0100 mox r263498 : add missing cairo patch 2008-11-09 10:56:33 +0100 mox r263494 : Resync cairo module with cws cairosource01 2008-11-01 09:32:19 +0100 mox r262870 : CWS-TOOLING: rebase CWS cairocanvastext01 to trunk@262620 (milestone: DEV300:m34) 2008-10-26 20:55:48 +0100 mox r262663 : Fix build breaker 2008-10-25 13:10:00 +0200 mox r262662 : CWS rebase to m33 2008-10-12 19:47:56 +0200 mox r262170 : Migrate CWS cairocanvastext01 to SVN.
2009-05-18 12:01:49 +00:00
pTextLayout->draw( mpSurface, *mpVirtualDevice, aOutpos, viewState, renderState );
}
}
else
{
ENSURE_ARG_OR_THROW( false,
"CanvasHelper::drawTextLayout(): TextLayout not compatible with this canvas" );
}
return uno::Reference< rendering::XCachedPrimitive >(NULL);
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */