Files
libreoffice/vcl/inc/graphite_serverfont.hxx
Markus Mohrhard 26d5fe1bdd extract cairo rendering and abstract platform bits
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
2014-11-10 07:59:09 +01:00

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: */