COPASI API  4.16.103
CQEffectDescription.cpp
Go to the documentation of this file.
1 // Copyright (C) 2013 by Pedro Mendes, Virginia Tech Intellectual
2 // Properties, Inc., University of Heidelberg, and The University
3 // of Manchester.
4 // All rights reserved.
5 
6 #include <QtGui/QGraphicsItem>
7 #include <QtGui/QGraphicsEffect>
8 
10 #include <qlayout/CQCopasiEffect.h>
11 
12 qreal linear(qreal a, qreal b, qreal t)
13 {
14  return a * (1 - t) + b * t;
15 }
16 
17 /**
18  * Interpolate between a, and b
19  *
20  * 0.0 <= t <= 1.0
21  */
22 QColor interpolate(const QColor &a, const QColor &b, float t)
23 {
24  int ah, as, av, aa;
25  a.getHsv(&ah, &as, &av, &aa);
26 
27  int bh, bs, bv, ba;
28  b.getHsv(&bh, &bs, &bv, &ba);
29 
30  int rh, rs, rv, ra;
31  rh = linear(ah, bh, t);
32  rs = linear(as, bs, t);
33  rv = linear(av, bv, t);
34  ra = linear(aa, ba, t);
35 
36  return QColor::fromHsv(rh, rs, rv, ra);
37 }
38 
39 CQEffectDescription::CQEffectDescription(const std::string& cn, Mode mode, const QColor &startColor, const QColor& endColor)
40  : mCN(cn)
41  , mStartColor(startColor)
42  , mEndColor(endColor)
43  , mScaleStart(0.5)
44  , mScaleEnd(2.0)
45  , mMode(mode)
46 {
47 }
48 
49 CQEffectDescription::CQEffectDescription(const std::string& cn, qreal startScale, qreal endScale)
50  : mCN(cn)
51  , mStartColor(Qt::white)
52  , mEndColor(Qt::red)
53  , mScaleStart(startScale)
54  , mScaleEnd(endScale)
55  , mMode(Scale)
56 {
57 }
58 
60 {
61 }
62 
63 const std::string& CQEffectDescription::getCN()const
64 {
65  return mCN;
66 }
67 
69 {
70  return mStartColor;
71 }
72 
73 const QColor& CQEffectDescription::getEndColor() const
74 {
75  return mEndColor;
76 }
77 
79 {
80  return mScaleStart;
81 }
82 
84 {
85  return mScaleEnd;
86 }
87 
89 {
90  return mMode;
91 }
93 {
94  mMode = mode;
95 }
96 
98 {
99  QGraphicsItem *item = scene.getItemFor(mCN);
100 
101  if (item == NULL)
102  return;
103 
104  QGraphicsEffect* effect = item->graphicsEffect();
105 
106  if (effect == NULL)
107  return;
108 
109  effect->setEnabled(false);
110 }
111 
113 {
114  QGraphicsItem *item = scene.getItemFor(mCN);
115 
116  if (item == NULL)
117  return;
118 
119  switch (mMode)
120  {
121  default:
122  case DropShadow:
123  {
124  QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect(&scene);
125  effect->setColor(interpolate(mStartColor, mEndColor, t));
126  effect->setBlurRadius(25);
127  effect->setEnabled(true);
128  effect->setOffset(0);
129  item->setGraphicsEffect(effect);
130  }
131  break;
132 
133  case Colorize:
134  {
135  QGraphicsColorizeEffect* effect = new QGraphicsColorizeEffect(&scene);
136  effect->setColor(interpolate(mStartColor, mEndColor, t));
137  effect->setStrength(1);
138  effect->setEnabled(true);
139  item->setGraphicsEffect(effect);
140  }
141  break;
142 
143  case Scale:
144  {
145  CQCopasiEffect* effect = new CQCopasiEffect();
146  effect->setScale(linear(mScaleStart, mScaleEnd, t));
147  effect->setEnabled(true);
148  item->setGraphicsEffect(effect);
149  }
150  break;
151  }
152 }
153 
154 void CQEffectDescription::setCN(const std::string& cn)
155 {
156  mCN = cn;
157 }
158 
159 void CQEffectDescription::setStartColor(const QColor& color)
160 {
161  mStartColor = color;
162 }
163 
164 void CQEffectDescription::setEndColor(const QColor& color)
165 {
166  mEndColor = color;
167 }
168 
170 {
171  mScaleStart = scale;
172 }
173 
175 {
176  mScaleEnd = scale;
177 }
const QColor & getEndColor() const
void setScaleStart(qreal scale)
QColor interpolate(const QColor &a, const QColor &b, float t)
virtual void removeFromScene(CQLayoutScene &scene)
qreal linear(qreal a, qreal b, qreal t)
const std::string & getCN() const
void applyToScene(CQLayoutScene &scene, qreal t)
CQEffectDescription(const std::string &cn, qreal startScale, qreal endScale)
void setStartColor(const QColor &color)
void setCN(const std::string &cn)
const QColor & getStartColor() const
qreal getScaleStart() const
void setScaleEnd(qreal scale)
void setScale(qreal scale)
void setEndColor(const QColor &color)
QGraphicsItem * getItemFor(const std::string &cn)