20#include "koColorSlider.h"
27#include <kpixmapeffect.h>
29KoColorFrame::KoColorFrame(TQWidget *parent):
32 setFrameStyle(Panel | Sunken);
33 setBackgroundMode(NoBackground);
36 mC1 = TQColor(0, 0, 0);
37 mC2 = TQColor(255, 255, 255);
39 mColorChanged =
false;
44const TQColor KoColorFrame::colorAt(
const TQPoint &p)
48 mImage = mPixmap.convertToImage();
52 if(p.x() >= mPixmap.width() || p.y() >= mPixmap.height())
53 return TQColor(255,255,255);
55 return TQColor(mImage.pixel(p.x(), p.y()));
58void KoColorFrame::slotSetColor1(
const TQColor &c)
66void KoColorFrame::slotSetColor2(
const TQColor &c)
73void KoColorFrame::drawContents(TQPainter *p)
75 TQRect r = contentsRect();
77 if((mPixmap.size() != r.size()) || mColorChanged)
79 mPixmap.resize(r.width() + 1, r.height() + 1);
80 KPixmapEffect::gradient(mPixmap, mC1, mC2, KPixmapEffect::HorizontalGradient);
81 mColorChanged =
false;
85 p->drawPixmap(r.left(), r.top(), mPixmap);
88void KoColorFrame::mousePressEvent(TQMouseEvent *e)
90 if(e->button() & TQt::LeftButton)
92 emit clicked(e->pos());
95 TQPoint pos = TQPoint(e->pos().x() - contentsRect().left(), e->pos().y() - contentsRect().top());
99 else if(pos.x() >= contentsRect().width())
100 pos.setX(contentsRect().width()-1);
104 else if(pos.y() >= contentsRect().height())
105 pos.setY(contentsRect().height()-1);
107 TQColor c = colorAt(pos);
108 emit colorSelected(c);
111 TQFrame::mousePressEvent(e);
114void KoColorFrame::mouseReleaseEvent(TQMouseEvent *e)
116 if(e->button() & TQt::LeftButton)
119 TQFrame::mouseReleaseEvent(e);
122void KoColorFrame::mouseMoveEvent(TQMouseEvent *e)
127 int x = e->pos().x();
128 int y = e->pos().y();
130 int left = contentsRect().left();
131 int right = contentsRect().left() + contentsRect().width();
132 int top = contentsRect().top();
133 int bottom = contentsRect().top() + contentsRect().height();
159 TQPoint pos = TQPoint(x - contentsRect().left(), y - contentsRect().top());
161 TQColor c = colorAt(pos);
162 emit colorSelected(c);
165 TQFrame::mouseMoveEvent(e);
170KoSliderWidget::KoSliderWidget(TQWidget *parent):
178void KoSliderWidget::paintEvent(TQPaintEvent *)
185 p.drawLine(0, 5, 5, 0);
186 p.drawLine(10, 5, 5, 0);
187 p.drawLine(0, 5, 10, 5);
191void KoSliderWidget::mousePressEvent(TQMouseEvent *e)
193 if(e->button() & TQt::LeftButton)
199 TQWidget::mousePressEvent(e);
202void KoSliderWidget::mouseReleaseEvent(TQMouseEvent *e)
204 if(e->button() & TQt::LeftButton)
207 TQWidget::mouseReleaseEvent(e);
210void KoSliderWidget::mouseMoveEvent(TQMouseEvent *e)
214 TQWidget *p = parentWidget();
219 TQPoint newPos = p->mapFromGlobal(TQCursor::pos()) - mPos;
222 newPos.setY(pos().y());
226 if(newPos.x() > p->width() - width())
227 newPos.setX(p->width() - width());
230 emit positionChanged(newPos.x());
233 TQWidget::mouseMoveEvent(e);
238KoColorSlider::KoColorSlider(TQWidget *parent):
241 mColorFrame =
new KoColorFrame(
this);
242 mSlider =
new KoSliderWidget(
this);
248 connect(mSlider, TQ_SIGNAL(positionChanged(
int)),
this, TQ_SLOT(slotSliderMoved(
int)));
249 connect(mColorFrame, TQ_SIGNAL(clicked(
const TQPoint &)),
this, TQ_SLOT(slotFrameClicked(
const TQPoint &)));
252KoColorSlider::~KoColorSlider()
258int KoColorSlider::minValue()
263int KoColorSlider::maxValue()
268void KoColorSlider::slotSetRange(
int min,
int max)
277void KoColorSlider::resizeEvent(TQResizeEvent *e)
279 TQWidget::resizeEvent(e);
282 mColorFrame->setGeometry(mSlider->width() / 2, 0, width() - mSlider->width() / 2 * 2, height() - mSlider->height());
283 slotSetValue(mValue);
286void KoColorSlider::slotSetColor1(
const TQColor &c)
288 mColorFrame->slotSetColor1(c);
291void KoColorSlider::slotSetColor2(
const TQColor &c)
293 mColorFrame->slotSetColor2(c);
296void KoColorSlider::slotSetValue(
int value)
305 int range = mMax - mMin;
310 float factor = v / range;
311 int x =
static_cast<int>(factor * mColorFrame->contentsRect().width());
313 mSlider->move(TQPoint(x, height() - mSlider->height()));
316void KoColorSlider::slotSliderMoved(
int x)
320 if(x > mColorFrame->contentsRect().width())
321 x = mColorFrame->contentsRect().width();
324 factor /= mColorFrame->contentsRect().width();
325 int range = mMax - mMin;
327 mValue =
static_cast<int>(factor * range);
329 emit valueChanged(mValue);
330 emit colorSelected(mColorFrame->colorAt(TQPoint(x, mColorFrame->contentsRect().height()/2)));
333void KoColorSlider::slotFrameClicked(
const TQPoint &p)
335 TQPoint local = mColorFrame->mapToParent(p);
336 TQPoint pos = TQPoint(local.x() - mSlider->width() / 2, height() - mSlider->height());
340 else if(pos.x() > width() - mSlider->width())
341 pos.setX(width() - mSlider->width());
344 slotSliderMoved(pos.x());
347void KoColorSlider::mousePressEvent(TQMouseEvent *e)
349 if(e->button() & TQt::LeftButton)
351 TQPoint pos = TQPoint(e->pos().x() - mSlider->width() / 2, height() - mSlider->height());
355 else if(pos.x() > width() - mSlider->width())
356 pos.setX(width() - mSlider->width());
359 slotSliderMoved(pos.x());
362 TQWidget::mousePressEvent(e);
365#include "koColorSlider.moc"