office-gobmx/vcl/inc/qt5/Qt5FontFace.hxx
Jan-Marek Glogowski 90dd969e7d tdf#136915 correctly create QFont from Qt5FontFace
Store the origin of the Qt5FontFace and therefore the type of the
font ID and use either QFont::fromString or QFontDatabase::font to
generate the correct QFont instance.

Interestingly the QFont::fromString worked with the minimal font
string, ignoring the font style, but now fails with error messages
when including the point size. Guess Qt supports partial font
strings, as long as they match the segment types from the start.

Change-Id: I6b30423a5ae9abd8ee50d6087a3ec61d85f6320f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104652
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2020-10-22 15:53:24 +02:00

71 lines
2.5 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 .
*/
#pragma once
#include <vclpluginapi.h>
#include <PhysicalFontFace.hxx>
#include <tools/ref.hxx>
#include <vcl/fontcapabilities.hxx>
#include <vcl/fontcharmap.hxx>
#include <QtCore/QString>
#include <QtGui/QFont>
class FontAttributes;
class FontSelectPattern;
class Qt5FontFace final : public PhysicalFontFace
{
public:
static Qt5FontFace* fromQFont(const QFont& rFont);
static Qt5FontFace* fromQFontDatabase(const QString& aFamily, const QString& aStyle);
static void fillAttributesFromQFont(const QFont& rFont, FontAttributes& rFA);
VCLPLUG_QT5_PUBLIC static FontWeight toFontWeight(const int nWeight);
VCLPLUG_QT5_PUBLIC static FontWidth toFontWidth(const int nStretch);
VCLPLUG_QT5_PUBLIC static FontItalic toFontItalic(const QFont::Style eStyle);
sal_IntPtr GetFontId() const override;
QFont CreateFont() const;
int GetFontTable(const char pTagName[5], unsigned char*) const;
FontCharMapRef GetFontCharMap() const override;
bool GetFontCapabilities(vcl::FontCapabilities&) const override;
bool HasChar(sal_uInt32 cChar) const;
rtl::Reference<LogicalFontInstance>
CreateFontInstance(const FontSelectPattern& rFSD) const override;
private:
typedef enum { Font, FontDB } FontIdType;
Qt5FontFace(const Qt5FontFace&);
Qt5FontFace(const FontAttributes&, const QString& rFontID, const FontIdType);
const QString m_aFontId;
const FontIdType m_eFontIdType;
mutable FontCharMapRef m_xCharMap;
mutable vcl::FontCapabilities m_aFontCapabilities;
mutable bool m_bFontCapabilitiesRead;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */