Fill.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is part of the libmspub 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 
10 #ifndef INCLUDED_FILL_H
11 #define INCLUDED_FILL_H
12 
13 #include <vector>
14 
15 #include <librevenge/librevenge.h>
16 
17 #include "ColorReference.h"
18 
19 namespace libmspub
20 {
21 class MSPUBCollector;
22 class Fill
23 {
24 protected:
26 public:
27  Fill(const MSPUBCollector *owner);
28  virtual void getProperties(librevenge::RVNGPropertyList *out) const = 0;
29  virtual ~Fill() { }
30 private:
31  Fill(const Fill &) : m_owner(nullptr) { }
32  Fill &operator=(const Fill &);
33 };
34 
35 class ImgFill : public Fill
36 {
37 protected:
38  unsigned m_imgIndex;
39 private:
41 protected:
43 public:
44  ImgFill(unsigned imgIndex, const MSPUBCollector *owner, bool isTexture, int rotation);
45  void getProperties(librevenge::RVNGPropertyList *out) const override;
46 private:
47  ImgFill(const ImgFill &) : Fill(nullptr), m_imgIndex(0), m_isTexture(false), m_rotation(0) { }
48  ImgFill &operator=(const ImgFill &);
49 };
50 
51 class PatternFill : public ImgFill
52 {
55 public:
56  PatternFill(unsigned imgIndex, const MSPUBCollector *owner, ColorReference fg, ColorReference bg);
57  void getProperties(librevenge::RVNGPropertyList *out) const override;
58 private:
59  PatternFill(const PatternFill &) : ImgFill(0, nullptr, true, 0), m_fg(0x08000000), m_bg(0x08000000) { }
60  PatternFill &operator=(const ImgFill &);
61 };
62 
63 class SolidFill : public Fill
64 {
66  double m_opacity;
67 public:
68  SolidFill(ColorReference color, double opacity, const MSPUBCollector *owner);
69  void getProperties(librevenge::RVNGPropertyList *out) const override;
70 private:
71  SolidFill(const SolidFill &) : Fill(nullptr), m_color(0x08000000), m_opacity(1) { }
72  SolidFill &operator=(const SolidFill &);
73 };
74 
75 class GradientFill : public Fill
76 {
77  struct StopInfo
78  {
80  unsigned m_offsetPercent;
81  double m_opacity;
82  StopInfo(ColorReference colorReference, unsigned offsetPercent, double opacity) : m_colorReference(colorReference), m_offsetPercent(offsetPercent), m_opacity(opacity) { }
83  };
84  std::vector<StopInfo> m_stops;
85  double m_angle;
86  int m_type;
87  double m_fillLeftVal;
88  double m_fillTopVal;
91 public:
92  GradientFill(const MSPUBCollector *owner, double angle = 0, int type = 7);
93  void setFillCenter(double left, double top, double right, double bottom);
94  void addColor(ColorReference c, unsigned offsetPercent, double opacity);
95  void addColorReverse(ColorReference c, unsigned offsetPercent, double opacity);
96  void completeComplexFill();
97  void getProperties(librevenge::RVNGPropertyList *out) const override;
98 private:
99  GradientFill(const GradientFill &) : Fill(nullptr), m_stops(), m_angle(0), m_type(7), m_fillLeftVal(0.0), m_fillTopVal(0.0), m_fillRightVal(0.0), m_fillBottomVal(0.0) { }
101 };
102 }
103 
104 #endif /* INCLUDED_FILL_H */
105 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
const MSPUBCollector * m_owner
Definition: Fill.h:25
ImgFill(const ImgFill &)
Definition: Fill.h:47
std::vector< StopInfo > m_stops
Definition: Fill.h:84
SolidFill(const SolidFill &)
Definition: Fill.h:71
double m_opacity
Definition: Fill.h:81
ColorReference m_color
Definition: Fill.h:65
double m_fillRightVal
Definition: Fill.h:89
ImgFill & operator=(const ImgFill &)
double m_fillBottomVal
Definition: Fill.h:90
Definition: Fill.h:22
int m_type
Definition: Fill.h:86
StopInfo(ColorReference colorReference, unsigned offsetPercent, double opacity)
Definition: Fill.h:82
PatternFill & operator=(const ImgFill &)
GradientFill & operator=(const GradientFill &)
double m_angle
Definition: Fill.h:85
void getProperties(librevenge::RVNGPropertyList *out) const override
Definition: Fill.cpp:91
Definition: Fill.h:35
bool m_isTexture
Definition: Fill.h:40
PatternFill(const PatternFill &)
Definition: Fill.h:59
ColorReference m_fg
Definition: Fill.h:53
Definition: Fill.h:51
Definition: ColorReference.h:19
void addColorReverse(ColorReference c, unsigned offsetPercent, double opacity)
Definition: Fill.cpp:119
ColorReference m_colorReference
Definition: Fill.h:79
virtual ~Fill()
Definition: Fill.h:29
Definition: Fill.h:75
SolidFill & operator=(const SolidFill &)
int m_rotation
Definition: Fill.h:42
void getProperties(librevenge::RVNGPropertyList *out) const override
Definition: Fill.cpp:29
ImgFill(unsigned imgIndex, const MSPUBCollector *owner, bool isTexture, int rotation)
Definition: Fill.cpp:25
void addColor(ColorReference c, unsigned offsetPercent, double opacity)
Definition: Fill.cpp:114
unsigned m_offsetPercent
Definition: Fill.h:80
void getProperties(librevenge::RVNGPropertyList *out) const override
Definition: Fill.cpp:55
unsigned m_imgIndex
Definition: Fill.h:38
ColorReference m_bg
Definition: Fill.h:54
double m_fillLeftVal
Definition: Fill.h:87
Fill(const MSPUBCollector *owner)
Definition: Fill.cpp:21
Definition: Arrow.h:13
GradientFill(const MSPUBCollector *owner, double angle=0, int type=7)
Definition: Fill.cpp:102
Fill & operator=(const Fill &)
void getProperties(librevenge::RVNGPropertyList *out) const override
Definition: Fill.cpp:134
void completeComplexFill()
Definition: Fill.cpp:124
SolidFill(ColorReference color, double opacity, const MSPUBCollector *owner)
Definition: Fill.cpp:87
void setFillCenter(double left, double top, double right, double bottom)
Definition: Fill.cpp:106
Definition: MSPUBCollector.h:44
GradientFill(const GradientFill &)
Definition: Fill.h:99
Definition: Fill.h:63
double m_fillTopVal
Definition: Fill.h:88
Fill(const Fill &)
Definition: Fill.h:31
PatternFill(unsigned imgIndex, const MSPUBCollector *owner, ColorReference fg, ColorReference bg)
Definition: Fill.cpp:51
virtual void getProperties(librevenge::RVNGPropertyList *out) const =0
double m_opacity
Definition: Fill.h:66

Generated for libmspub by doxygen 1.8.14