LibreOffice Module vcl (master) 1
State.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#pragma once
21
22#include <tools/color.hxx>
23#include <tools/gen.hxx>
24#include <tools/fontenum.hxx>
25#include <i18nlangtag/lang.h>
27
29#include <vcl/font.hxx>
30#include <vcl/mapmod.hxx>
31#include <vcl/region.hxx>
32
33#include <memory>
34#include <optional>
35
36namespace vcl
37{
38// Flags for OutputDevice::Push() and State
39enum class PushFlags
40{
41 NONE = 0x0000,
42 LINECOLOR = 0x0001,
43 FILLCOLOR = 0x0002,
44 FONT = 0x0004,
45 TEXTCOLOR = 0x0008,
46 MAPMODE = 0x0010,
47 CLIPREGION = 0x0020,
48 RASTEROP = 0x0040,
49 TEXTFILLCOLOR = 0x0080,
50 TEXTALIGN = 0x0100,
51 REFPOINT = 0x0200,
52 TEXTLINECOLOR = 0x0400,
53 TEXTLAYOUTMODE = 0x0800,
54 TEXTLANGUAGE = 0x1000,
55 OVERLINECOLOR = 0x2000,
56 ALL = 0xFFFF
57};
58}
59
60namespace o3tl
61{
62template <> struct typed_flags<vcl::PushFlags> : is_typed_flags<vcl::PushFlags, 0xFFFF>
63{
64};
65}
66#define PUSH_ALLFONT \
67 (vcl::PushFlags::TEXTCOLOR | vcl::PushFlags::TEXTFILLCOLOR | vcl::PushFlags::TEXTLINECOLOR \
68 | vcl::PushFlags::OVERLINECOLOR | vcl::PushFlags::TEXTALIGN | vcl::PushFlags::TEXTLAYOUTMODE \
69 | vcl::PushFlags::TEXTLANGUAGE | vcl::PushFlags::FONT)
70
71namespace vcl::text
72{
73// Layout flags for Complex Text Layout
74// These are flag values, i.e they can be combined
76{
77 Default = 0x0000,
78 BiDiRtl = 0x0001,
79 BiDiStrong = 0x0002,
80 TextOriginLeft = 0x0004,
81 TextOriginRight = 0x0008
82};
83}
84
85namespace o3tl
86{
87template <>
89 : is_typed_flags<vcl::text::ComplexTextLayoutFlags, 0x000f>
90{
91};
92}
93
94namespace vcl
95{
96struct State
97{
98 State() = default;
99 State(State&&) = default;
100
101 std::unique_ptr<vcl::Region> mpClipRegion;
102 std::optional<MapMode> mpMapMode;
103 std::optional<vcl::Font> mpFont;
104 std::optional<Point> mpRefPoint;
105 std::optional<Color> mpLineColor;
106 std::optional<Color> mpFillColor;
107 std::optional<Color> mpTextColor;
108 std::optional<Color> mpTextFillColor;
109 std::optional<Color> mpTextLineColor;
110 std::optional<Color> mpOverlineColor;
116 bool mbMapActive = false;
117};
118}
119
120/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
RasterOp
Definition: RasterOp.hxx:23
ALIGN_TOP
#define LANGUAGE_SYSTEM
NONE
const sal_uInt16 TEXTCOLOR
TextAlign
ComplexTextLayoutFlags
Definition: State.hxx:76
PushFlags
Definition: State.hxx:40
std::optional< Color > mpTextColor
Definition: State.hxx:107
std::unique_ptr< vcl::Region > mpClipRegion
Definition: State.hxx:101
std::optional< Point > mpRefPoint
Definition: State.hxx:104
State()=default
std::optional< MapMode > mpMapMode
Definition: State.hxx:102
std::optional< Color > mpTextLineColor
Definition: State.hxx:109
PushFlags mnFlags
Definition: State.hxx:115
std::optional< vcl::Font > mpFont
Definition: State.hxx:103
std::optional< Color > mpFillColor
Definition: State.hxx:106
std::optional< Color > mpTextFillColor
Definition: State.hxx:108
TextAlign meTextAlign
Definition: State.hxx:111
RasterOp meRasterOp
Definition: State.hxx:112
LanguageType meTextLanguage
Definition: State.hxx:114
std::optional< Color > mpOverlineColor
Definition: State.hxx:110
std::optional< Color > mpLineColor
Definition: State.hxx:105
text::ComplexTextLayoutFlags mnTextLayoutMode
Definition: State.hxx:113
bool mbMapActive
Definition: State.hxx:116
State(State &&)=default