23#include "ko_cmyk_widget.h"
36#include <koFrameButton.h>
37#include <koColorSlider.h>
38#include <kcolordialog.h>
39#include <kdualcolorbutton.h>
41KoCMYKWidget::KoCMYKWidget(TQWidget *parent,
const char *name) : super(parent,
name)
44 m_ColorButton -> setFixedSize(m_ColorButton->sizeHint());
45 TQGridLayout *mGrid =
new TQGridLayout(
this, 4, 5, 5, 2);
48 mCSlider =
new KoColorSlider(
this);
49 mCSlider->setMaximumHeight(20);
50 mCSlider->slotSetRange(0, 255);
51 mCSlider->setFocusPolicy( TQWidget::ClickFocus );
53 mMSlider =
new KoColorSlider(
this);
54 mMSlider->setMaximumHeight(20);
55 mMSlider->slotSetRange(0, 255);
56 mMSlider->setFocusPolicy( TQWidget::ClickFocus );
58 mYSlider =
new KoColorSlider(
this);
59 mYSlider->setMaximumHeight(20);
60 mYSlider->slotSetRange(0, 255);
61 mYSlider->setFocusPolicy( TQWidget::ClickFocus );
63 mKSlider =
new KoColorSlider(
this);
64 mKSlider->setMaximumHeight(20);
65 mKSlider->slotSetRange(0, 255);
66 mKSlider->setFocusPolicy( TQWidget::ClickFocus );
69 mCLabel =
new TQLabel(
"C",
this);
70 mCLabel->setFixedWidth(12);
71 mCLabel->setFixedHeight(20);
72 mMLabel =
new TQLabel(
"M",
this);
73 mMLabel->setFixedWidth(12);
74 mMLabel->setFixedHeight(20);
75 mYLabel =
new TQLabel(
"Y",
this);
76 mYLabel->setFixedWidth(12);
77 mYLabel->setFixedHeight(20);
78 mKLabel =
new TQLabel(
"K",
this);
79 mKLabel->setFixedWidth(12);
80 mKLabel->setFixedHeight(20);
83 mCIn =
new TQSpinBox(0, 255, 1,
this);
84 mCIn->setFixedWidth(50);
85 mCIn->setFixedHeight(20);
86 mCIn->setFocusPolicy( TQWidget::ClickFocus );
87 TQToolTip::add( mCIn, i18n(
"Cyan" ) );
89 mMIn =
new TQSpinBox(0, 255, 1,
this);
90 mMIn->setFixedWidth(50);
91 mMIn->setFixedHeight(20);
92 mMIn->setFocusPolicy( TQWidget::ClickFocus );
93 TQToolTip::add( mMIn, i18n(
"Magenta" ) );
95 mYIn =
new TQSpinBox(0, 255, 1,
this);
96 mYIn->setFixedWidth(50);
97 mYIn->setFixedHeight(20);
98 mYIn->setFocusPolicy( TQWidget::ClickFocus );
99 TQToolTip::add( mYIn, i18n(
"Yellow" ) );
101 mKIn =
new TQSpinBox(0, 255, 1,
this);
102 mKIn->setFixedWidth(50);
103 mKIn->setFixedHeight(20);
104 mKIn->setFocusPolicy( TQWidget::ClickFocus );
105 TQToolTip::add( mKIn, i18n(
"Black" ) );
107 mGrid->addMultiCellWidget(m_ColorButton, 0, 4, 0, 0, TQt::AlignTop);
108 mGrid->addWidget(mCLabel, 0, 1);
109 mGrid->addWidget(mMLabel, 1, 1);
110 mGrid->addWidget(mYLabel, 2, 1);
111 mGrid->addWidget(mKLabel, 3, 1);
112 mGrid->addMultiCellWidget(mCSlider, 0, 0, 2, 3);
113 mGrid->addMultiCellWidget(mMSlider, 1, 1, 2, 3);
114 mGrid->addMultiCellWidget(mYSlider, 2, 2, 2, 3);
115 mGrid->addMultiCellWidget(mKSlider, 3, 3, 2, 3);
116 mGrid->addWidget(mCIn, 0, 4);
117 mGrid->addWidget(mMIn, 1, 4);
118 mGrid->addWidget(mYIn, 2, 4);
119 mGrid->addWidget(mKIn, 3, 4);
121 connect(m_ColorButton, TQ_SIGNAL(fgChanged(
const TQColor &)),
this, TQ_SLOT(slotFGColorSelected(
const TQColor &)));
122 connect(m_ColorButton, TQ_SIGNAL(bgChanged(
const TQColor &)),
this, TQ_SLOT(slotBGColorSelected(
const TQColor &)));
125 connect(mCSlider, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(slotCChanged(
int)));
126 connect(mMSlider, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(slotMChanged(
int)));
127 connect(mYSlider, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(slotYChanged(
int)));
128 connect(mKSlider, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(slotKChanged(
int)));
131 connect(mCIn, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(slotCChanged(
int)));
132 connect(mMIn, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(slotMChanged(
int)));
133 connect(mYIn, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(slotYChanged(
int)));
134 connect(mKIn, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(slotKChanged(
int)));
137void KoCMYKWidget::slotCChanged(
int c)
139 if (m_ColorButton->current() == KDualColorButton::Foreground){
140 CMYKColor col = RgbToCmyk(m_fgColor);
142 m_fgColor = CmykToRgb(col);
143 m_ColorButton->setCurrent(KDualColorButton::Foreground);
144 emit sigFgColorChanged(m_fgColor);
147 CMYKColor col = RgbToCmyk(m_bgColor);
149 m_bgColor = CmykToRgb(col);
150 m_ColorButton->setCurrent(KDualColorButton::Background);
151 emit sigBgColorChanged(m_bgColor);
155void KoCMYKWidget::slotMChanged(
int m)
157 if (m_ColorButton->current() == KDualColorButton::Foreground){
158 CMYKColor col = RgbToCmyk(m_fgColor);
160 m_fgColor = CmykToRgb(col);
161 m_ColorButton->setCurrent(KDualColorButton::Foreground);
162 emit sigFgColorChanged(m_fgColor);
165 CMYKColor col = RgbToCmyk(m_bgColor);
167 m_bgColor = CmykToRgb(col);
168 m_ColorButton->setCurrent(KDualColorButton::Background);
169 emit sigBgColorChanged(m_bgColor);
173void KoCMYKWidget::slotYChanged(
int y)
175 if (m_ColorButton->current() == KDualColorButton::Foreground){
176 CMYKColor col = RgbToCmyk(m_fgColor);
178 m_fgColor = CmykToRgb(col);
179 m_ColorButton->setCurrent(KDualColorButton::Foreground);
180 emit sigFgColorChanged(m_fgColor);
183 CMYKColor col = RgbToCmyk(m_bgColor);
185 m_bgColor = CmykToRgb(col);
186 m_ColorButton->setCurrent(KDualColorButton::Background);
187 emit sigBgColorChanged(m_bgColor);
191void KoCMYKWidget::slotKChanged(
int k)
193 if (m_ColorButton->current() == KDualColorButton::Foreground){
194 CMYKColor col = RgbToCmyk(m_fgColor);
196 m_fgColor = CmykToRgb(col);
197 m_ColorButton->setCurrent(KDualColorButton::Foreground);
198 emit sigFgColorChanged(m_fgColor);
201 CMYKColor col = RgbToCmyk(m_bgColor);
203 m_bgColor = CmykToRgb(col);
204 m_ColorButton->setCurrent(KDualColorButton::Background);
205 emit sigBgColorChanged(m_bgColor);
209void KoCMYKWidget::setFgColor(
const TQColor & c)
211 update(c, m_bgColor);
214void KoCMYKWidget::setBgColor(
const TQColor & c)
216 update(m_fgColor, c);
219void KoCMYKWidget::update(
const TQColor fgColor,
const TQColor bgColor)
224 TQColor color = (m_ColorButton->current() == KDualColorButton::Foreground)? m_fgColor : m_bgColor;
226 CMYKColor col = RgbToCmyk(color);
228 disconnect(m_ColorButton, TQ_SIGNAL(fgChanged(
const TQColor &)),
this, TQ_SLOT(slotFGColorSelected(
const TQColor &)));
229 disconnect(m_ColorButton, TQ_SIGNAL(bgChanged(
const TQColor &)),
this, TQ_SLOT(slotBGColorSelected(
const TQColor &)));
231 m_ColorButton->setForeground( m_fgColor );
232 m_ColorButton->setBackground( m_bgColor );
234 connect(m_ColorButton, TQ_SIGNAL(fgChanged(
const TQColor &)),
this, TQ_SLOT(slotFGColorSelected(
const TQColor &)));
235 connect(m_ColorButton, TQ_SIGNAL(bgChanged(
const TQColor &)),
this, TQ_SLOT(slotBGColorSelected(
const TQColor &)));
237 mCSlider->blockSignals(
true);
238 mCIn->blockSignals(
true);
239 mMSlider->blockSignals(
true);
240 mMIn->blockSignals(
true);
241 mYSlider->blockSignals(
true);
242 mYIn->blockSignals(
true);
243 mKSlider->blockSignals(
true);
244 mKIn->blockSignals(
true);
246 CMYKColor minC = col;
248 CMYKColor maxC = col;
251 mCSlider->slotSetColor1(CmykToRgb(minC));
252 mCSlider->slotSetColor2(CmykToRgb(maxC));
253 mCSlider->slotSetValue(
int(col.C * 255));
254 mCIn->setValue(
int(col.C * 255));
256 CMYKColor minM = col;
258 CMYKColor maxM = col;
261 mMSlider->slotSetColor1(CmykToRgb(minM));
262 mMSlider->slotSetColor2(CmykToRgb(maxM));
263 mMSlider->slotSetValue(
int(col.M * 255));
264 mMIn->setValue(
int(col.M * 255));
266 CMYKColor minY = col;
268 CMYKColor maxY = col;
271 mYSlider->slotSetColor1(CmykToRgb(minY));
272 mYSlider->slotSetColor2(CmykToRgb(maxY));
273 mYSlider->slotSetValue(
int(col.Y * 255));
274 mYIn->setValue(
int(col.Y * 255));
276 CMYKColor minK = col;
278 CMYKColor maxK = col;
281 mKSlider->slotSetColor1(CmykToRgb(minK));
282 mKSlider->slotSetColor2(CmykToRgb(maxK));
283 mKSlider->slotSetValue(
int(col.K * 255));
284 mKIn->setValue(
int(col.K * 255));
286 mCSlider->blockSignals(
false);
287 mCIn->blockSignals(
false);
288 mMSlider->blockSignals(
false);
289 mMIn->blockSignals(
false);
290 mYSlider->blockSignals(
false);
291 mYIn->blockSignals(
false);
292 mKSlider->blockSignals(
false);
293 mKIn->blockSignals(
false);
296void KoCMYKWidget::slotFGColorSelected(
const TQColor& c)
298 m_fgColor = TQColor(c);
299 emit sigFgColorChanged(m_fgColor);
302void KoCMYKWidget::slotBGColorSelected(
const TQColor& c)
304 m_bgColor = TQColor(c);
305 emit sigBgColorChanged(m_bgColor);
308CMYKColor KoCMYKWidget::RgbToCmyk(
const TQColor& col)
310 kdDebug() <<
"--[ KoCMYKWidget::RgbToCmyk ]--------------------------------------" << endl;
314 float r = col.red() / 255.0;
315 float g = col.green() / 255.0;
316 float b = col.blue() / 255.0;
318 kdDebug() <<
"float r = col.red() / 255.0;" << endl;
319 kdDebug() <<
" r = " << col.red() <<
" / 255.0 = " << r << endl;
320 kdDebug() <<
"float g = col.green() / 255.0;" << endl;
321 kdDebug() <<
" g = " << col.green() <<
" / 255.0 = " << g << endl;
322 kdDebug() <<
"float b = col.blue() / 255.0;" << endl;
323 kdDebug() <<
" b = " << col.blue() <<
" / 255.0 = " << b << endl;
330 kdDebug() <<
"float ac = 1.0 - r;" << endl;
331 kdDebug() <<
" ac = 1.0 - " << r <<
" = " << ac << endl;
332 kdDebug() <<
"float am = 1.0 - g;" << endl;
333 kdDebug() <<
" am = 1.0 - " << g <<
" = " << am << endl;
334 kdDebug() <<
"float ay = 1.0 - b;" << endl;
335 kdDebug() <<
" ay = 1.0 - " << b <<
" = " << ay << endl;
344 if ((r == 0.0) && (g == 0.0) && (b == 0.0))
346 kdDebug() <<
"r = g = b = 0.0: Therefor k = 1.0" << endl;
351 kdDebug() <<
"r = g = b != 0.0: Therefor k = min(ac,am,ay)" << endl;
353 if (kMin(ac,am) == ac)
358 c = (ac - k) / (1.0 - k);
359 m = (am - k) / (1.0 - k);
360 y = (ay - k) / (1.0 - k);
363 kdDebug() <<
"float k = " << k << endl;
366 kdDebug() <<
"float c = (ac - k) / (1.0 - k);" << endl;
367 kdDebug() <<
" c = (" << ac <<
" - " << k <<
") / (1.0 - " << k <<
") = " << c << endl;
368 kdDebug() <<
"float m = (am - k) / (1.0 - k);" << endl;
369 kdDebug() <<
" m = (" << am <<
" - " << k <<
") / (1.0 - " << k <<
") = " << m << endl;
370 kdDebug() <<
"float y = (ay - k) / (1.0 - k);" << endl;
371 kdDebug() <<
" y = (" << ay <<
" - " << k <<
") / (1.0 - " << k <<
") = " << y << endl;
380 kdDebug() <<
"===================================================================" << endl;
385TQColor KoCMYKWidget::CmykToRgb(
const CMYKColor& c)
388 float ac = kMin(1.0, c.C * (1.0 - c.K) + c.K);
389 float am = kMin(1.0, c.M * (1.0 - c.K) + c.K);
390 float ay = kMin(1.0, c.Y * (1.0 - c.K) + c.K);
393 int r = int((1.0 - ac) * 255.0);
394 int g = int((1.0 - am) * 255.0);
395 int b = int((1.0 - ay) * 255.0);
403#include "ko_cmyk_widget.moc"
const char * name(StdAction id)