1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
|
/* -*- 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/.
*/
#include <sal/config.h>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <basegfx/numeric/ftools.hxx>
#include <tools/diagnose_ex.h>
#include "ogl_textlayout.hxx"
using namespace ::com::sun::star;
namespace oglcanvas
{
TextLayout::TextLayout( const rendering::StringContext& aText,
sal_Int8 nDirection,
sal_Int64 /*nRandomSeed*/,
const CanvasFont::ImplRef& rFont ) :
TextLayoutBaseT( m_aMutex ),
maText( aText ),
maLogicalAdvancements(),
mpFont( rFont ),
mnTextDirection( nDirection )
{
}
void SAL_CALL TextLayout::disposing()
{
mpFont.clear();
}
// XTextLayout
uno::Sequence< uno::Reference< rendering::XPolyPolygon2D > > SAL_CALL TextLayout::queryTextShapes( ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return uno::Sequence< uno::Reference< rendering::XPolyPolygon2D > >();
}
uno::Sequence< geometry::RealRectangle2D > SAL_CALL TextLayout::queryInkMeasures( ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return uno::Sequence< geometry::RealRectangle2D >();
}
uno::Sequence< geometry::RealRectangle2D > SAL_CALL TextLayout::queryMeasures( ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return uno::Sequence< geometry::RealRectangle2D >();
}
uno::Sequence< double > SAL_CALL TextLayout::queryLogicalAdvancements( ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
return maLogicalAdvancements;
}
void SAL_CALL TextLayout::applyLogicalAdvancements( const uno::Sequence< double >& aAdvancements ) throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
if( aAdvancements.getLength() != maText.Length )
{
SAL_INFO("canvas.ogl", "TextLayout::applyLogicalAdvancements(): mismatching number of advancements");
throw lang::IllegalArgumentException();
}
maLogicalAdvancements = aAdvancements;
}
geometry::RealRectangle2D SAL_CALL TextLayout::queryTextBounds( ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
ENSURE_OR_THROW( mpFont.get(),
"TextLayout::queryTextBounds(): invalid font" );
// fake text bounds by either taking the advancement values,
// or assuming square glyph boxes (width similar to height)
const rendering::FontRequest& rFontRequest( mpFont->getFontRequest() );
const double nFontSize( ::std::max( rFontRequest.CellSize,
rFontRequest.ReferenceAdvancement ) );
if( maLogicalAdvancements.getLength() )
{
return geometry::RealRectangle2D( 0, -nFontSize/2,
maLogicalAdvancements[ maLogicalAdvancements.getLength()-1 ],
nFontSize/2 );
}
else
{
return geometry::RealRectangle2D( 0, -nFontSize/2,
nFontSize * maText.Length,
nFontSize/2 );
}
}
double SAL_CALL TextLayout::justify( double /*nSize*/ ) throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return 0.0;
}
double SAL_CALL TextLayout::combinedJustify( const uno::Sequence< uno::Reference< rendering::XTextLayout > >& /*aNextLayouts*/,
double /*nSize*/ ) throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return 0.0;
}
rendering::TextHit SAL_CALL TextLayout::getTextHit( const geometry::RealPoint2D& /*aHitPoint*/ ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return rendering::TextHit();
}
rendering::Caret SAL_CALL TextLayout::getCaret( sal_Int32 /*nInsertionIndex*/,
sal_Bool /*bExcludeLigatures*/ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return rendering::Caret();
}
sal_Int32 SAL_CALL TextLayout::getNextInsertionIndex( sal_Int32 /*nStartIndex*/,
sal_Int32 /*nCaretAdvancement*/,
sal_Bool /*bExcludeLigatures*/ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return 0;
}
uno::Reference< rendering::XPolyPolygon2D > SAL_CALL TextLayout::queryVisualHighlighting( sal_Int32 /*nStartIndex*/,
sal_Int32 /*nEndIndex*/ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return uno::Reference< rendering::XPolyPolygon2D >();
}
uno::Reference< rendering::XPolyPolygon2D > SAL_CALL TextLayout::queryLogicalHighlighting( sal_Int32 /*nStartIndex*/,
sal_Int32 /*nEndIndex*/ ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return uno::Reference< rendering::XPolyPolygon2D >();
}
double SAL_CALL TextLayout::getBaselineOffset( ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return 0.0;
}
sal_Int8 SAL_CALL TextLayout::getMainTextDirection( ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
return mnTextDirection;
}
uno::Reference< rendering::XCanvasFont > SAL_CALL TextLayout::getFont( ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
return mpFont.get();
}
rendering::StringContext SAL_CALL TextLayout::getText( ) throw (uno::RuntimeException, std::exception)
{
::osl::MutexGuard aGuard( m_aMutex );
return maText;
}
bool TextLayout::draw( const rendering::ViewState& /*rViewState*/,
const rendering::RenderState& /*rRenderState*/,
const uno::Reference< rendering::XGraphicDevice >& /*xGraphicDevice*/ ) const
{
::osl::MutexGuard aGuard( m_aMutex );
// TODO
return true;
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|