The text rendering is now abstracted into the TextRender abstract class. Additionally we have now an abstracted cairo rendering class CairoTextRender which is a subclass of the TextRender class. The CairoTextRender class is still platform independent and needs to be subclassed to implement the few platform dependent methods. You can reuse the cairo based text rendering now by subclassing CairoTextRender for the platform that you need. Conflicts: vcl/unx/generic/gdi/salgdi.cxx Change-Id: I8b07e3fe646a81563d308971d30e14a00fd921ad
117 lines
4.3 KiB
C++
117 lines
4.3 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 .
|
|
*/
|
|
|
|
#ifndef INCLUDED_VCL_INC_GRAPHITE_SERVERFONT_HXX
|
|
#define INCLUDED_VCL_INC_GRAPHITE_SERVERFONT_HXX
|
|
|
|
// We need this to enable namespace support in libgrengine headers.
|
|
#define GR_NAMESPACE
|
|
|
|
#ifndef _MSC_VER
|
|
#include <graphite_layout.hxx>
|
|
|
|
#include "generic/glyphcache.hxx"
|
|
|
|
class PhysicalFontFace;
|
|
|
|
// Modules
|
|
|
|
class VCL_PLUGIN_PUBLIC GraphiteLayoutImpl : public GraphiteLayout
|
|
{
|
|
public:
|
|
GraphiteLayoutImpl(const gr_face * pFace,
|
|
ServerFont & rServerFont) throw()
|
|
: GraphiteLayout(pFace), mrServerFont(rServerFont) {};
|
|
virtual ~GraphiteLayoutImpl() throw() {};
|
|
virtual sal_GlyphId getKashidaGlyph(int & width) SAL_OVERRIDE;
|
|
private:
|
|
ServerFont & mrServerFont;
|
|
};
|
|
|
|
// This class implments the server font specific parts.
|
|
// @author tse
|
|
|
|
class VCL_PLUGIN_PUBLIC GraphiteServerFontLayout : public ServerFontLayout
|
|
{
|
|
private:
|
|
// mutable so that the DrawOffset/DrawBase can be set
|
|
mutable GraphiteLayoutImpl maImpl;
|
|
grutils::GrFeatureParser * mpFeatures;
|
|
const sal_Unicode * mpStr;
|
|
public:
|
|
GraphiteServerFontLayout(ServerFont& pServerFont) throw();
|
|
|
|
virtual bool LayoutText( ImplLayoutArgs& rArgs) SAL_OVERRIDE
|
|
{
|
|
mpStr = rArgs.mpStr;
|
|
SalLayout::AdjustLayout(rArgs);
|
|
return maImpl.LayoutText(rArgs);
|
|
}; // first step of layout
|
|
virtual void AdjustLayout( ImplLayoutArgs& rArgs) SAL_OVERRIDE
|
|
{
|
|
SalLayout::AdjustLayout(rArgs);
|
|
maImpl.DrawBase() = maDrawBase;
|
|
maImpl.DrawOffset() = maDrawOffset;
|
|
maImpl.AdjustLayout(rArgs);
|
|
};
|
|
virtual DeviceCoordinate GetTextWidth() const SAL_OVERRIDE
|
|
{
|
|
return maImpl.GetTextWidth();
|
|
}
|
|
virtual DeviceCoordinate FillDXArray( DeviceCoordinate* dxa ) const SAL_OVERRIDE
|
|
{
|
|
return maImpl.FillDXArray(dxa);
|
|
}
|
|
virtual sal_Int32 GetTextBreak(DeviceCoordinate max_width, DeviceCoordinate extra, int factor) const SAL_OVERRIDE
|
|
{
|
|
return maImpl.GetTextBreak(max_width, extra, factor);
|
|
}
|
|
virtual void GetCaretPositions( int as, long* cxa ) const SAL_OVERRIDE
|
|
{
|
|
maImpl.GetCaretPositions(as, cxa);
|
|
}
|
|
|
|
// used by display layers
|
|
virtual int GetNextGlyphs( int l, sal_GlyphId* gia, Point& p, int& s,
|
|
long* gaa = NULL, int* cpa = NULL,
|
|
const PhysicalFontFace** pFallbackFonts = NULL ) const SAL_OVERRIDE
|
|
{
|
|
maImpl.DrawBase() = maDrawBase;
|
|
maImpl.DrawOffset() = maDrawOffset;
|
|
return maImpl.GetNextGlyphs(l, gia, p, s, gaa, cpa, pFallbackFonts);
|
|
}
|
|
|
|
virtual void MoveGlyph( int nStart, long nNewXPos ) SAL_OVERRIDE { maImpl.MoveGlyph(nStart, nNewXPos); };
|
|
virtual void DropGlyph( int nStart ) SAL_OVERRIDE { maImpl.DropGlyph(nStart); };
|
|
virtual void Simplify( bool bIsBase ) SAL_OVERRIDE { maImpl.Simplify(bIsBase); };
|
|
|
|
virtual ~GraphiteServerFontLayout() throw();
|
|
|
|
static bool IsGraphiteEnabledFont(ServerFont& rServerFont);
|
|
// For use with PspGraphics
|
|
const sal_Unicode* getTextPtr() const { return mpStr; };
|
|
int getMinCharPos() const { return mnMinCharPos; }
|
|
int getMaxCharPos() const { return mnEndCharPos; }
|
|
};
|
|
|
|
#endif
|
|
#endif // INCLUDED_VCL_INC_GRAPHITE_SERVERFONT_HXX
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|