23#include <tqpushbutton.h>
24#include <tqwhatsthis.h>
25#include <tqcheckbox.h>
30#include <kiconloader.h>
32#include "kis_button_release_event.h"
33#include "kis_canvas_subject.h"
34#include "kis_cmb_composite.h"
35#include "kis_colorspace.h"
36#include "kis_config.h"
37#include "kis_cursor.h"
38#include "kis_global.h"
40#include "kis_int_spinbox.h"
41#include "kis_paint_device.h"
42#include "kis_tool_controller.h"
43#include "kis_tool_paint.h"
45KisToolPaint::KisToolPaint(
const TQString& UIName)
53 m_optionWidgetLayout = 0;
60 m_opacity = OPACITY_OPAQUE;
61 m_compositeOp = COMPOSITE_OVER;
64KisToolPaint::~KisToolPaint()
71 updateCompositeOpComboBox();
74void KisToolPaint::paint(KisCanvasPainter&)
78void KisToolPaint::paint(KisCanvasPainter&,
const TQRect&)
82void KisToolPaint::deactivate()
86void KisToolPaint::buttonPress(KisButtonPressEvent *)
90void KisToolPaint::move(KisMoveEvent *)
94void KisToolPaint::buttonRelease(KisButtonReleaseEvent * e)
96 kdDebug() <<
"buttonRelease" << endl;
97 if(e->button() == TQt::MidButton)
99 kdDebug() <<
"switch" << endl;
100 KisColor bg = m_subject->bgColor();
101 m_subject->setBGColor(m_subject->fgColor());
102 m_subject->setFGColor(bg);
106void KisToolPaint::doubleClick(KisDoubleClickEvent *)
110void KisToolPaint::keyPress(TQKeyEvent *)
114void KisToolPaint::keyRelease(TQKeyEvent *)
118TQWidget* KisToolPaint::createOptionWidget(TQWidget* parent)
120 m_optionWidget =
new TQWidget(parent);
121 m_optionWidget->setCaption(m_UIName);
123 m_lbOpacity =
new TQLabel(i18n(
"Opacity:"), m_optionWidget);
124 m_slOpacity =
new KisIntSpinbox( m_optionWidget,
"int_m_optionwidget");
125 m_slOpacity->setRange( 0, 100);
126 m_slOpacity->setValue(m_opacity / OPACITY_OPAQUE * 100);
127 connect(m_slOpacity, TQ_SIGNAL(valueChanged(
int)),
this, TQ_SLOT(slotSetOpacity(
int)));
129 m_lbComposite =
new TQLabel(i18n(
"Mode:"), m_optionWidget);
130 m_cmbComposite =
new KisCmbComposite(m_optionWidget);
131 connect(m_cmbComposite, TQ_SIGNAL(activated(
const KisCompositeOp&)),
this, TQ_SLOT(slotSetCompositeMode(
const KisCompositeOp&)));
133 TQVBoxLayout* verticalLayout =
new TQVBoxLayout(m_optionWidget);
134 verticalLayout->setMargin(0);
135 verticalLayout->setSpacing(3);
137 m_optionWidgetLayout =
new TQGridLayout(verticalLayout, 2, 3, 6);
139 m_optionWidgetLayout->addWidget(m_lbOpacity, 0, 0);
140 m_optionWidgetLayout->addWidget(m_slOpacity, 0, 1);
142 m_optionWidgetLayout->addWidget(m_lbComposite, 1, 0);
143 m_optionWidgetLayout->addWidget(m_cmbComposite, 1, 1);
145 verticalLayout->addItem(
new TQSpacerItem(0,0,TQSizePolicy::Fixed,TQSizePolicy::Expanding));
147 if (!quickHelp().isEmpty()) {
148 TQPushButton* push =
new TQPushButton(SmallIconSet(
"help" ),
"", m_optionWidget);
149 connect(push, TQ_SIGNAL(clicked()),
this, TQ_SLOT(slotPopupQuickHelp()));
151 TQHBoxLayout* hLayout =
new TQHBoxLayout(m_optionWidget);
152 hLayout->addWidget(push);
153 hLayout->addItem(
new TQSpacerItem(0,0,TQSizePolicy::Expanding,TQSizePolicy::Fixed));
154 verticalLayout->addLayout(hLayout);
156 return m_optionWidget;
159TQWidget* KisToolPaint::optionWidget()
161 return m_optionWidget;
164void KisToolPaint::addOptionWidgetLayout(TQLayout *layout)
166 Q_ASSERT(m_optionWidget != 0);
167 Q_ASSERT(m_optionWidgetLayout != 0);
168 int rowCount = m_optionWidgetLayout->numRows();
169 m_optionWidgetLayout->addMultiCellLayout(layout, rowCount, rowCount, 0, 1);
172void KisToolPaint::addOptionWidgetOption(TQWidget *control, TQWidget *label)
174 Q_ASSERT(m_optionWidget != 0);
175 Q_ASSERT(m_optionWidgetLayout != 0);
178 m_optionWidgetLayout->addWidget(label, m_optionWidgetLayout->numRows(), 0);
179 m_optionWidgetLayout->addWidget(control, m_optionWidgetLayout->numRows()-1, 1);
182 m_optionWidgetLayout->addMultiCellWidget(control, m_optionWidgetLayout->numRows(), m_optionWidgetLayout->numRows(), 0, 1);
185void KisToolPaint::slotSetOpacity(
int opacityPerCent)
187 m_opacity = opacityPerCent * OPACITY_OPAQUE / 100;
190void KisToolPaint::slotSetCompositeMode(
const KisCompositeOp& compositeOp)
192 m_compositeOp = compositeOp;
195TQCursor KisToolPaint::cursor()
200void KisToolPaint::setCursor(
const TQCursor& cursor)
205 KisToolControllerInterface *controller = m_subject->toolController();
207 if (controller && controller->currentTool() ==
this) {
208 m_subject->canvasController()->setCanvasCursor(m_cursor);
213void KisToolPaint::activate()
216 KisToolControllerInterface *controller = m_subject->toolController();
219 controller->setCurrentTool(
this);
221 updateCompositeOpComboBox();
224 m_paintOutline = (cfg.cursorStyle() == CURSOR_STYLE_OUTLINE);
228void KisToolPaint::notifyModified()
const
230 if (m_subject && m_subject->currentImg()) {
231 m_subject->currentImg()->setModified();
235void KisToolPaint::updateCompositeOpComboBox()
237 if (m_optionWidget && m_subject) {
238 KisImageSP img = m_subject->currentImg();
241 KisPaintDeviceSP device = img->activeDevice();
244 KisCompositeOpList compositeOps = device->colorSpace()->userVisiblecompositeOps();
245 m_cmbComposite->setCompositeOpList(compositeOps);
247 if (compositeOps.find(m_compositeOp) == compositeOps.end()) {
248 m_compositeOp = COMPOSITE_OVER;
250 m_cmbComposite->setCurrentItem(m_compositeOp);
256void KisToolPaint::slotPopupQuickHelp() {
257 TQWhatsThis::display(quickHelp());
260#include "kis_tool_paint.moc"
KisCanvasSubject is part of the Observer pattern.