/* -*- 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_COMMONSALLAYOUT_HXX #define INCLUDED_VCL_INC_COMMONSALLAYOUT_HXX #include #ifdef _WIN32 #include "win/winlayout.hxx" #elif defined(MACOSX) || defined(IOS) #include "quartz/ctfonts.hxx" #include #else #include "unx/freetype_glyphcache.hxx" #endif #include #include #include class CommonSalLayout : public GenericSalLayout { hb_font_t* mpHbFont; const FontSelectPattern& mrFontSelData; css::uno::Reference mxBreak; #ifdef _WIN32 HDC mhDC; HFONT mhFont; WinFontInstance& mrWinFontInstance; double mnAveWidthFactor; #elif defined(MACOSX) || defined(IOS) const CoreTextStyle& mrCoreTextStyle; #else FreetypeFont& mrFreetypeFont; #endif void ParseFeatures(const OUString& name); OString msLanguage; std::vector maFeatures; void getScale(double* nXScale, double* nYScale); hb_set_t* mpVertGlyphs; bool HasVerticalAlternate(sal_UCS4 aChar, sal_UCS4 aNextChar); public: #if defined(_WIN32) explicit CommonSalLayout(HDC, WinFontInstance&, const WinFontFace&); const FontSelectPattern& getFontSelData() const { return mrFontSelData; }; HFONT getHFONT() const { return mhFont; } WinFontInstance& getWinFontInstance() const { return mrWinFontInstance; } bool hasHScale() const; #elif defined(MACOSX) || defined(IOS) explicit CommonSalLayout(const CoreTextStyle&); const CoreTextStyle& getFontData() const { return mrCoreTextStyle; }; #else explicit CommonSalLayout(FreetypeFont&); const FreetypeFont& getFontData() const { return mrFreetypeFont; }; #endif virtual void InitFont() const override; void SetNeedFallback(ImplLayoutArgs&, sal_Int32, bool); void AdjustLayout(ImplLayoutArgs&) override; bool LayoutText(ImplLayoutArgs&) override; void DrawText(SalGraphics&) const override; std::shared_ptr CreateTextLayoutCache(OUString const&) const override; virtual bool GetCharWidths(DeviceCoordinate* pCharWidths) const override; virtual void ApplyDXArray(ImplLayoutArgs&) override; virtual bool IsKashidaPosValid(int nCharPos) const override; }; enum class VerticalOrientation { Upright = 0, Rotated = 1, TransformedUpright = 2, TransformedRotated = 3 }; namespace vcl { VerticalOrientation GetVerticalOrientation(uint32_t cCh); } // namespace vcl #endif // INCLUDED_VCL_INC_COMMONSALLAYOUT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */