There are two sets of getters there; and the non-const ones may copy the COW mpImplFont, and may call its AskConfig. The name overload is unfortunate. It is not obvious at the call site, which of the two will be called; and what is different. IMO, the way to fix it would be to keep only one set of getters (the const one), and make the call to AskConfig explicit (in the places that set font name, and know that resolution of other properties will be needed). But in this change, I only rename the non-const getters, making sure to keep the behavior unchanged (at least the intention is to have a non-functional change, meaning that the places that called non-const overload, now use the renamed functions), to make it clear where we actually may copy and initialize it. Change-Id: I9a5cd91d5c1c0de7ff8577b9b982d165e4cdd2c1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183116 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins
196 lines
7.6 KiB
C++
196 lines
7.6 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_FONT_HXX
|
|
#define INCLUDED_VCL_FONT_HXX
|
|
|
|
#include <rtl/ustring.hxx>
|
|
#include <sal/types.h>
|
|
#include <vcl/dllapi.h>
|
|
#include <tools/color.hxx>
|
|
#include <tools/fontenum.hxx>
|
|
#include <tools/long.hxx>
|
|
#include <tools/degree.hxx>
|
|
#include <i18nlangtag/lang.h>
|
|
#include <vcl/fntstyle.hxx>
|
|
#include <o3tl/cow_wrapper.hxx>
|
|
|
|
class Size;
|
|
class LanguageTag;
|
|
class SvStream;
|
|
|
|
class ImplFont;
|
|
class FontAttributes;
|
|
namespace vcl { class Font; }
|
|
// need to first declare these outside the vcl namespace, or the friend declarations won't work right
|
|
VCL_DLLPUBLIC SvStream& ReadFont( SvStream& rIStm, vcl::Font& );
|
|
VCL_DLLPUBLIC SvStream& WriteFont( SvStream& rOStm, const vcl::Font& );
|
|
|
|
namespace vcl {
|
|
|
|
class SAL_WARN_UNUSED VCL_DLLPUBLIC Font
|
|
{
|
|
public:
|
|
explicit Font();
|
|
Font( const Font& ); // TODO make me explicit
|
|
Font( Font&& ) noexcept;
|
|
explicit Font( const OUString& rFamilyName, const Size& );
|
|
explicit Font( const OUString& rFamilyName, const OUString& rStyleName, const Size& );
|
|
explicit Font( FontFamily eFamily, const Size& );
|
|
virtual ~Font();
|
|
|
|
const OUString& GetFamilyName() const;
|
|
FontFamily GetFamilyTypeMaybeAskConfig();
|
|
FontFamily GetFamilyType() const;
|
|
const OUString& GetStyleName() const;
|
|
|
|
FontWeight GetWeightMaybeAskConfig();
|
|
FontWeight GetWeight() const;
|
|
FontItalic GetItalicMaybeAskConfig();
|
|
FontItalic GetItalic() const;
|
|
FontPitch GetPitchMaybeAskConfig();
|
|
FontPitch GetPitch() const;
|
|
FontWidth GetWidthTypeMaybeAskConfig();
|
|
FontWidth GetWidthType() const;
|
|
TextAlign GetAlignment() const;
|
|
rtl_TextEncoding GetCharSet() const;
|
|
FontEmphasisMark GetEmphasisMarkStyle() const;
|
|
|
|
void SetFamilyName( const OUString& rFamilyName );
|
|
void SetStyleName( const OUString& rStyleName );
|
|
void SetFamily( FontFamily );
|
|
|
|
void SetPitch( FontPitch ePitch );
|
|
void SetItalic( FontItalic );
|
|
void SetWeight( FontWeight );
|
|
void SetWidthType( FontWidth );
|
|
void SetAlignment( TextAlign );
|
|
void SetCharSet( rtl_TextEncoding );
|
|
|
|
// Device dependent functions
|
|
int GetQuality() const;
|
|
|
|
void SetQuality(int);
|
|
void IncreaseQualityBy(int);
|
|
void DecreaseQualityBy(int);
|
|
|
|
// setting the color on the font is obsolete, the only remaining
|
|
// valid use is for keeping backward compatibility with old MetaFiles
|
|
const Color& GetColor() const;
|
|
const Color& GetFillColor() const;
|
|
|
|
bool IsTransparent() const;
|
|
|
|
void SetColor( const Color& );
|
|
void SetFillColor( const Color& );
|
|
|
|
void SetTransparent( bool bTransparent );
|
|
|
|
void SetFontSize( const Size& );
|
|
const Size& GetFontSize() const;
|
|
void SetFontHeight( tools::Long nHeight );
|
|
tools::Long GetFontHeight() const;
|
|
void SetAverageFontWidth( tools::Long nWidth );
|
|
tools::Long GetAverageFontWidth() const;
|
|
SAL_DLLPRIVATE const Size& GetAverageFontSize() const;
|
|
SAL_DLLPRIVATE const FontFamily& GetFontFamily() const;
|
|
|
|
// tdf#127471 for corrections on EMF/WMF we need the AvgFontWidth in Windows-specific notation
|
|
tools::Long GetOrCalculateAverageFontWidth() const;
|
|
|
|
// Prefer LanguageTag over LanguageType
|
|
SAL_DLLPRIVATE void SetLanguageTag( const LanguageTag & );
|
|
SAL_DLLPRIVATE const LanguageTag& GetLanguageTag() const;
|
|
SAL_DLLPRIVATE void SetCJKContextLanguageTag( const LanguageTag& );
|
|
SAL_DLLPRIVATE const LanguageTag& GetCJKContextLanguageTag() const;
|
|
void SetLanguage( LanguageType );
|
|
LanguageType GetLanguage() const;
|
|
void SetCJKContextLanguage( LanguageType );
|
|
LanguageType GetCJKContextLanguage() const;
|
|
|
|
void SetOrientation( Degree10 nLineOrientation );
|
|
Degree10 GetOrientation() const;
|
|
void SetVertical( bool bVertical );
|
|
bool IsVertical() const;
|
|
void SetKerning( FontKerning nKerning );
|
|
FontKerning GetKerning() const;
|
|
bool IsKerning() const;
|
|
void SetFixKerning(const short nSpacing);
|
|
short GetFixKerning() const;
|
|
bool IsFixKerning() const;
|
|
|
|
void SetOutline( bool bOutline );
|
|
bool IsOutline() const;
|
|
void SetShadow( bool bShadow );
|
|
bool IsShadow() const;
|
|
void SetRelief( FontRelief );
|
|
FontRelief GetRelief() const;
|
|
void SetUnderline( FontLineStyle );
|
|
FontLineStyle GetUnderline() const;
|
|
void SetOverline( FontLineStyle );
|
|
FontLineStyle GetOverline() const;
|
|
void SetStrikeout( FontStrikeout );
|
|
FontStrikeout GetStrikeout() const;
|
|
void SetEmphasisMark( FontEmphasisMark );
|
|
FontEmphasisMark GetEmphasisMark() const;
|
|
void SetWordLineMode( bool bWordLine );
|
|
bool IsWordLineMode() const;
|
|
|
|
void Merge( const Font& rFont );
|
|
SAL_DLLPRIVATE void GetFontAttributes( FontAttributes& rAttrs ) const;
|
|
|
|
Font& operator=( const Font& );
|
|
Font& operator=( Font&& ) noexcept;
|
|
bool operator==( const Font& ) const;
|
|
bool operator!=( const Font& rFont ) const
|
|
{ return !(Font::operator==( rFont )); }
|
|
bool IsSameInstance( const Font& ) const;
|
|
SAL_DLLPRIVATE bool EqualIgnoreColor( const Font& ) const;
|
|
|
|
// Compute value usable as hash.
|
|
SAL_DLLPRIVATE size_t GetHashValueIgnoreColor() const;
|
|
|
|
friend VCL_DLLPUBLIC SvStream& ::ReadFont( SvStream& rIStm, vcl::Font& );
|
|
friend VCL_DLLPUBLIC SvStream& ::WriteFont( SvStream& rOStm, const vcl::Font& );
|
|
|
|
static Font identifyFont( const void* pBuffer, sal_uInt32 nLen );
|
|
|
|
typedef o3tl::cow_wrapper< ImplFont > ImplType;
|
|
|
|
inline bool IsUnderlineAbove() const;
|
|
|
|
private:
|
|
ImplType mpImplFont;
|
|
};
|
|
|
|
inline bool Font::IsUnderlineAbove() const
|
|
{
|
|
if (!IsVertical())
|
|
return false;
|
|
// the underline is right for Japanese only
|
|
return (LANGUAGE_JAPANESE == GetLanguage()) ||
|
|
(LANGUAGE_JAPANESE == GetCJKContextLanguage());
|
|
}
|
|
|
|
}
|
|
|
|
#endif // _VCL_FONT_HXX
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|