[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-kimageshop
Subject:    QTablet events and a simple test tool
From:       Boudewijn Rempt <boud () valdyas ! org>
Date:       2003-10-04 14:53:41
[Download RAW message or body]

[" " (multipart/signed)]


Attached diff adds preliminary support for wacom tablets to Krita (easy, just 
added QTabletEvent handling). Todo is making Krita aware that it now has 
three active tools: stylus, eraser and pointer, and lots of other things,. 
but the basic event routing is present.

And I've added a new tool, one that actually does something to an image, 
namely adding red spots. The spots vary in size and transparency with the
pressure of the pen, so I know that it works, too. Since I don't have CVS 
access, I've attached the files implementing this tool-let separately.

In the interests of full disclosure I have to add that, while, yes, I am a 
programmer, been at it for twenty-two years now, since I was twelve, and 
yes,I have a few languages under my belt, but C++ is new for me. I only 
started reading _Accelerated C++_ a week ago. There's probably much to laugh 
at in this code. But I've been having fun :-).

Anyway, I'm off for a beer now.
-- 
Boudewijn Rempt | http://www.valdyas.org/index2.html

[Attachment #5 (application/pgp-signature)]
["krita_tablet+test_tool.diff" (text/x-diff)]

? .cdtproject
? .project
? core/kis_view.cc.flc
? tools/Makefile.flc
? tools/kis_tool_airbrush.loT
? tools/kis_tool_colorchanger.loT
? tools/kis_tool_ellipse.loT
? tools/kis_tool_eraser.loT
? tools/kis_tool_fill.loT
? tools/kis_tool_line.loT
? tools/kis_tool_paint.cc
? tools/kis_tool_paint.h
? tools/kis_tool_pen.loT
? tools/kis_tool_polygon.loT
? tools/kis_tool_polyline.loT
? tools/kis_tool_rectangle.loT
? tools/kis_tool_select_contiguous.loT
? tools/kis_tool_select_elliptical.loT
? tools/kis_tool_select_freehand.loT
? tools/kis_tool_select_polygonal.loT
? tools/kis_tool_stamp.loT
? tools/kis_tool_test.cc
? tools/kis_tool_test.h
Index: krita.rc
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/krita.rc,v
retrieving revision 1.37
diff -u -3 -u -p -r1.37 krita.rc
--- krita.rc	8 Jan 2003 03:30:50 -0000	1.37
+++ krita.rc	4 Oct 2003 14:47:07 -0000
@@ -117,6 +117,7 @@
   <Action name="tool_colorchanger"/>  
   <Action name="tool_stamp"/>
   <Action name="tool_gradient"/>  
+  <Action name="tool_test"/>  
 </Menu>
 
 <Menu name="Color"><text>C&amp;olor</text>
@@ -233,6 +234,7 @@
   <Action name="tool_fill"/>
   <Action name="tool_colorchanger"/>    
   <Action name="tool_stamp"/>
+  <Action name="tool_test"/>
 
   <Action name="dialog_gradient"/>  
   <Action name="current_tool_properties"/>  
Index: core/kis_painter.cc
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/core/kis_painter.cc,v
retrieving revision 1.49
diff -u -3 -u -p -r1.49 kis_painter.cc
--- core/kis_painter.cc	17 Mar 2003 20:10:17 -0000	1.49
+++ core/kis_painter.cc	4 Oct 2003 14:47:07 -0000
@@ -136,7 +136,7 @@ namespace {
 
 		if (m_tiles.count(tileNo) == 0) {
 			tile -> shareRef();
-			m_tiles[tileNo] = tile;	
+			m_tiles[tileNo] = tile;
 		}
 	}
 }
@@ -607,16 +607,19 @@ void KisPainter::fillRect(Q_INT32 x1, Q_
 	switch (m_device -> image() -> imgType()) {
 	case IMAGE_TYPE_GREY:
 	case IMAGE_TYPE_GREYA:
+            kdDebug() << "GREY.\n";
 		src[PIXEL_GRAY] = upscale(c.R());
 		src[PIXEL_GRAY_ALPHA] = opacity;
 		break;
 	case IMAGE_TYPE_INDEXED:
 	case IMAGE_TYPE_INDEXEDA:
+            kdDebug() << "INDEXED.\n";
 		src[PIXEL_INDEXED] = upscale(c.R());
 		src[PIXEL_INDEXED_ALPHA] = opacity;
 		break;
 	case IMAGE_TYPE_RGB:
 	case IMAGE_TYPE_RGBA:
+            kdDebug() << "RGBA.\n";
 		src[PIXEL_RED] = upscale(c.R());
 		src[PIXEL_GREEN] = upscale(c.G());
 		src[PIXEL_BLUE] = upscale(c.B());
@@ -624,6 +627,7 @@ void KisPainter::fillRect(Q_INT32 x1, Q_
 		break;
 	case IMAGE_TYPE_CMYK:
 	case IMAGE_TYPE_CMYKA:
+            kdDebug() << "CMYKA.\n";
 		src[PIXEL_CYAN] = upscale(c.C());
 		src[PIXEL_MAGENTA] = upscale(c.M());
 		src[PIXEL_YELLOW] = upscale(c.Y());
@@ -636,7 +640,8 @@ void KisPainter::fillRect(Q_INT32 x1, Q_
 	}
 
 	stride = m_device -> image() -> depth();
-	ydiff = y1 - TILE_HEIGHT * (y1 / TILE_HEIGHT);
+
+        ydiff = y1 - TILE_HEIGHT * (y1 / TILE_HEIGHT);
 
 	if (m_transaction) {
 		tc = new KisTileCommand(m_transaction -> name(), m_device, x1, y1, w, h);
@@ -655,7 +660,7 @@ void KisPainter::fillRect(Q_INT32 x1, Q_
 
 			if (!(tile = tm -> tile(x, y, TILEMODE_WRITE)))
 				continue;
-		
+
 			if (xmod > tile -> width())
 				continue;
 
Index: core/kis_tool.h
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/core/kis_tool.h,v
retrieving revision 1.33
diff -u -3 -u -p -r1.33 kis_tool.h
--- core/kis_tool.h	7 Mar 2003 22:05:53 -0000	1.33
+++ core/kis_tool.h	4 Oct 2003 14:47:07 -0000
@@ -49,6 +49,8 @@ public:
 	virtual void mousePress(QMouseEvent *e) = 0;
 	virtual void mouseMove(QMouseEvent *e) = 0;
 	virtual void mouseRelease(QMouseEvent *e) = 0;
+        // XXX: attempt add pre-emptively adding tablet events.
+        virtual void tabletEvent(QTabletEvent *e) = 0;
 	virtual void keyPress(QKeyEvent *e) = 0;
 	virtual void keyRelease(QKeyEvent *e) = 0;
 
Index: core/kis_tool_factory.cc
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/core/kis_tool_factory.cc,v
retrieving revision 1.14
diff -u -3 -u -p -r1.14 kis_tool_factory.cc
--- core/kis_tool_factory.cc	17 Mar 2003 20:10:17 -0000	1.14
+++ core/kis_tool_factory.cc	4 Oct 2003 14:47:07 -0000
@@ -21,18 +21,14 @@
 #include "kis_tool_factory.h"
 
 // tools
+
+
+// Non-working tools (Re-ordered because I became confused).
 #if 0
 #include "kis_tool_select_freehand.h"
-#endif
-#include "kis_tool_select_rectangular.h"
-#if 0
 #include "kis_tool_select_polygonal.h"
 #include "kis_tool_select_elliptical.h"
 #include "kis_tool_select_contiguous.h"
-#endif
-#include "kis_tool_move.h"
-#include "kis_tool_zoom.h"
-#if 0
 #include "kis_tool_brush.h"
 #include "kis_tool_airbrush.h"
 #include "kis_tool_pen.h"
@@ -41,24 +37,28 @@
 #include "kis_tool_polygon.h"
 #include "kis_tool_rectangle.h"
 #include "kis_tool_ellipse.h"
-#endif
-#include "kis_tool_colorpicker.h"
-#if 0
 #include "kis_tool_colorchanger.h"
 #include "kis_tool_eraser.h"
 #include "kis_tool_fill.h"
 #include "kis_tool_stamp.h"
 #endif
 
+// Working tools -- note that the 'paste' tool is added in the KisView, not here.
+#include "kis_tool_select_rectangular.h"
+#include "kis_tool_move.h"
+#include "kis_tool_zoom.h"
+#include "kis_tool_colorpicker.h"
+#include "kis_tool_test.h"
+
 /*
  * toolFactory
  *
  * Load every know tool, and make it available to the KisView.  Hopefully, someday
- * these tools will be parts, so we can discover which tools are available at \
runtime  + * these tools will be parts, so we can discover which tools are available \
                at runtime
  * instead of compile time.
  *
  * The doc becomes the parent of these tools, so you don't need to delete them. When
- * the doc is destroyed, they will get automatically deleted.  In other words, to be \
 + * the doc is destroyed, they will get automatically deleted.  In other words, to \
                be
  * safe, you should store the vector returned by this function inside the parent.  \
                This
  * way, nobody will use this vector after the parent dies.
  */
@@ -78,6 +78,12 @@ vKisToolSP toolFactory(KisView *view, Ki
 	tools.push_back(new EraserTool(doc, brush));
 #endif
 
+        // My test tool to put some pixels down. Note that
+        // the non-working painting tools had a canvas, and a brush,
+        // those don't exist here anymore. So, how is this going to work?
+        // How am I going to get something to paint on?
+        tools.push_back(new KisToolTest(view, doc) );
+
 	tools.push_back(new KisToolColorPicker(view, doc));
 
 #if 0
Index: core/kis_view.cc
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/core/kis_view.cc,v
retrieving revision 1.214
diff -u -3 -u -p -r1.214 kis_view.cc
--- core/kis_view.cc	26 Aug 2003 23:53:44 -0000	1.214
+++ core/kis_view.cc	4 Oct 2003 14:47:08 -0000
@@ -439,7 +439,7 @@ void KisView::setupActions()
 	m_imgMergeLinked = new KAction(i18n("Merge &Linked Layers"), 0, this, \
SLOT(merge_linked_layers()), actionCollection(), "merge_linked_layers");  
 	// setting actions
-	(void)new KAction(i18n("Paint Offset..."), "paint_offet", this, \
SLOT(setPaintOffset()), actionCollection(), "paint_offset"); +	(void)new \
KAction(i18n("Paint Offset..."), "paint_offset", this, SLOT(setPaintOffset()), \
actionCollection(), "paint_offset");  m_sidebarToggle = new \
KToggleAction(i18n("Show/Hide Sidebar"), "ok", 0, this, SLOT(showSidebar()), \
actionCollection(), "show_sidebar");  m_floatsidebarToggle = new \
KToggleAction(i18n("Dock/Undock Sidebar"), "attach", 0, this, SLOT(floatSidebar()), \
actionCollection(), "float_sidebar");  m_lsidebarToggle = new \
KToggleAction(i18n("Left/Right Sidebar"), "view_right", 0, this, \
SLOT(placeSidebarLeft()), actionCollection(), "left_sidebar"); @@ -754,14 +754,14 @@ \
void KisView::layerUpdateGUI(bool enable  {
 	KisImageSP img = currentImg();
 	KisLayerSP layer;
-	Q_INT32 nlayers;
-	Q_INT32 layerPos;
+	Q_INT32 nlayers = 0;
+	Q_INT32 layerPos = 0;
 
 	if (img) {
 		layer = img -> activeLayer();
 		nlayers = img -> nlayers();
 	}
-	
+
 	if (layer)
 		layerPos = img -> index(layer);
 
@@ -832,7 +832,7 @@ void KisView::paste_into()
 	KisImageSP img = currentImg();
 
 	Q_ASSERT(!QApplication::clipboard() -> image().isNull());
-	
+
 	if (img) {
 		KisSelectionSP selection = m_doc -> clipboardSelection();
 		KisLayerSP layer = m_doc -> layerAdd(img, img -> nextLayerName(), selection);
@@ -867,7 +867,7 @@ void KisView::removeSelection()
 				m_doc -> beginMacro(i18n("Remove Selection"));
 				img -> unsetSelection(true);
 				ur = rc;
-			
+
 				if (parent -> x() || parent -> y())
 					rc.moveBy(-parent -> x(), -parent -> y());
 
@@ -978,7 +978,7 @@ void KisView::selectAll()
 
 	if (img) {
 		KisPaintDeviceSP dev;
-	       
+
 		img -> unsetSelection();
 		dev = img -> activeDevice();
 
@@ -1591,7 +1591,7 @@ void KisView::placeSidebarLeft()
 */
 void KisView::preferences()
 {
- //   PreferencesDialog::editPreferences();
+//    PreferencesDialog::editPreferences();
 }
 
 Q_INT32 KisView::docWidth() const
@@ -1697,6 +1697,8 @@ void KisView::print(KPrinter& printer)
 void KisView::setupTools()
 {
 	m_toolSet = toolFactory(this, m_doc);
+        // Why is the paste tool local to the view,
+        // instead of added by the toolfactory?
 	m_paste = new KisToolPaste(this, m_doc);
 	m_toolSet.push_back(m_paste);
 	m_paste -> setup();
@@ -1758,7 +1760,7 @@ void KisView::canvasGotMousePressEvent(Q
 				return;
 			}
 		}
-	} 
+	}
 
 	if (m_tool) {
 		Q_INT32 x = static_cast<Q_INT32>((e -> pos().x() - canvasXOffset() + horzValue() * \
zoom()) / zoom()); @@ -1820,6 +1822,30 @@ void KisView::canvasGotMouseReleaseEvent
 	}
 }
 
+void KisView::canvasGotTabletEvent(QTabletEvent *e)
+{
+    KisImageSP img = currentImg();
+    if (img ) {
+        if ( m_tool ) {
+            // Compute offset between screen coordinates and (zoomed) canvas \
coordinates. +            Q_INT32 x = static_cast<Q_INT32>((e -> pos().x() - \
canvasXOffset() + horzValue() * zoom()) / zoom()); +            Q_INT32 y = \
static_cast<Q_INT32>((e -> pos().y() - canvasYOffset() + vertValue() * zoom()) / \
zoom()); +            // Synthesize a new tablet event.
+            // Pity I haven't got a tablet that's got tilt, too
+            QTabletEvent ev(e -> type(),
+                            QPoint(x, y),
+                            e -> globalPos(),
+                            e -> device(),
+                            e -> pressure(),
+                            e -> xTilt(),
+                            e -> yTilt(),
+                            e -> uniqueId());
+
+            m_tool->tabletEvent( &ev );
+        }
+    }
+}
+
 void KisView::canvasGotEnterEvent(QEvent *e)
 {
 	if (m_tool)
@@ -1918,7 +1944,7 @@ void KisView::layerProperties()
 		if (layer) {
 			KisPaintPropertyDlg dlg(layer -> name(), QPoint(layer -> x(), layer -> y()), \
layer -> opacity());  
-			if (dlg.exec() == QDialog::Accepted) { 
+			if (dlg.exec() == QDialog::Accepted) {
 				QPoint pt = dlg.getPosition();
 				bool changed = layer -> name() != dlg.getName();
 
@@ -2161,6 +2187,7 @@ void KisView::setupCanvas()
 	QObject::connect(m_canvas, SIGNAL(mousePressed(QMouseEvent*)), this, \
SLOT(canvasGotMousePressEvent(QMouseEvent*)));  QObject::connect(m_canvas, \
SIGNAL(mouseMoved(QMouseEvent*)), this, SLOT(canvasGotMouseMoveEvent(QMouseEvent*))); \
QObject::connect(m_canvas, SIGNAL(mouseReleased(QMouseEvent*)), this, \
SLOT(canvasGotMouseReleaseEvent(QMouseEvent*))); +        QObject::connect(m_canvas, \
SIGNAL(gotTabletEvent(QTabletEvent*)), this, \
SLOT(canvasGotTabletEvent(QTabletEvent*)));  QObject::connect(m_canvas, \
SIGNAL(gotPaintEvent(QPaintEvent*)), this, SLOT(canvasGotPaintEvent(QPaintEvent*)));  \
QObject::connect(m_canvas, SIGNAL(gotEnterEvent(QEvent*)), this, \
SLOT(canvasGotEnterEvent(QEvent*)));  QObject::connect(m_canvas, \
SIGNAL(gotLeaveEvent(QEvent*)), this, SLOT(canvasGotLeaveEvent(QEvent*))); @@ -2330,7 \
+2357,7 @@ void KisView::layerToImage()  if (img) {
 		KisSelectionSP selection = img -> selection();
 		KisLayerSP layer;
-	       
+
 		if (selection)
 			layer = selection.data();
 		else
@@ -2455,7 +2482,7 @@ bool KisView::eventFilter(QObject *o, QE
 
 		if (!img)
 			return super::eventFilter(o, e);
-		
+
 		mgr = img -> guides();
 
 		if (e -> type() == QEvent::MouseMove) {
@@ -2463,7 +2490,7 @@ bool KisView::eventFilter(QObject *o, QE
 			KisGuideSP gd;
 
 			if (m_currentGuide == 0 && flag) {
-				// No guide is being edited and moving mouse over the canvas.  
+				// No guide is being edited and moving mouse over the canvas.
 				// Create a new guide.
 				enterEvent(0);
 				eraseGuides();
Index: core/kis_view.h
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/core/kis_view.h,v
retrieving revision 1.101
diff -u -3 -u -p -r1.101 kis_view.h
--- core/kis_view.h	7 Mar 2003 22:05:53 -0000	1.101
+++ core/kis_view.h	4 Oct 2003 14:47:09 -0000
@@ -177,6 +177,7 @@ private slots:
 	void canvasGotMousePressEvent(QMouseEvent *e);
 	void canvasGotMouseMoveEvent(QMouseEvent *e);
 	void canvasGotMouseReleaseEvent(QMouseEvent *e);
+	void canvasGotTabletEvent(QTabletEvent *e);
 	void canvasGotPaintEvent(QPaintEvent *e);
 	void canvasGotEnterEvent(QEvent *e);
 	void canvasGotLeaveEvent(QEvent *e);
Index: tools/Makefile.am
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/tools/Makefile.am,v
retrieving revision 1.41
diff -u -3 -u -p -r1.41 Makefile.am
--- tools/Makefile.am	7 Dec 2002 04:27:35 -0000	1.41
+++ tools/Makefile.am	4 Oct 2003 14:47:09 -0000
@@ -3,8 +3,7 @@ INCLUDES = -I$(srcdir)/../core -I$(srcdi
 
 noinst_LTLIBRARIES = libkistools.la
 
-libkistools_la_SOURCES = kis_tool_non_paint.cc kis_tool_colorpicker.cc \
                kis_tool_move.cc kis_tool_select_rectangular.cc \
-	kis_tool_paste.cc kis_tool_zoom.cc
+libkistools_la_SOURCES = kis_tool_paint.cc kis_tool_non_paint.cc \
kis_tool_colorpicker.cc kis_tool_move.cc kis_tool_select_rectangular.cc \
kis_tool_paste.cc kis_tool_zoom.cc kis_tool_test.cc   #kis_tool_brush.cc
 #
 #  kis_tool_select_freehand.cc kis_tool_select_rectangular.cc \
                kis_tool_select_polygonal.cc 
Index: tools/kis_tool_ellipse.cc
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/tools/kis_tool_ellipse.cc,v
retrieving revision 1.21
diff -u -3 -u -p -r1.21 kis_tool_ellipse.cc
--- tools/kis_tool_ellipse.cc	17 Mar 2003 20:10:18 -0000	1.21
+++ tools/kis_tool_ellipse.cc	4 Oct 2003 14:47:09 -0000
@@ -31,7 +31,8 @@
 #include "kis_tool_ellipse.h"
 #include "kis_dlg_toolopts.h"
 
-EllipseTool::EllipseTool(KisDoc *doc, KisCanvas *canvas) : super(doc, canvas)
+EllipseTool::EllipseTool(KisDoc *doc, KisCanvas *canvas) :
+     super(doc, canvas)
 {
 	m_doc = doc;
 	m_dragging = false;
Index: tools/kis_tool_non_paint.cc
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/tools/kis_tool_non_paint.cc,v
retrieving revision 1.6
diff -u -3 -u -p -r1.6 kis_tool_non_paint.cc
--- tools/kis_tool_non_paint.cc	17 Mar 2003 20:10:18 -0000	1.6
+++ tools/kis_tool_non_paint.cc	4 Oct 2003 14:47:09 -0000
@@ -15,6 +15,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
+#include "kdebug.h"
 #include "kis_tool_memento.h"
 #include "kis_tool_non_paint.h"
 #include "kis_view.h"
@@ -65,6 +66,17 @@ void KisToolNonPaint::mouseRelease(QMous
 {
 }
 
+void KisToolNonPaint::tabletEvent(QTabletEvent *e)
+{
+//     kdDebug() << "received tablet event at position ("
+//               << e->pos().x()
+//               << ", "
+//               << e->pos().y()
+//               << ")"
+//               << endl;
+}
+
+
 void KisToolNonPaint::keyPress(QKeyEvent *)
 {
 }
Index: tools/kis_tool_non_paint.h
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/tools/kis_tool_non_paint.h,v
retrieving revision 1.5
diff -u -3 -u -p -r1.5 kis_tool_non_paint.h
--- tools/kis_tool_non_paint.h	7 Mar 2003 22:05:54 -0000	1.5
+++ tools/kis_tool_non_paint.h	4 Oct 2003 14:47:09 -0000
@@ -27,6 +27,7 @@ class QEvent;
 class QKeyEvent;
 class QPaintEvent;
 class QMouseEvent;
+class QTabletEvent;
 class QRect;
 class KDialog;
 class KisDoc;
@@ -52,6 +53,7 @@ public:
 	virtual void mousePress(QMouseEvent *e);
 	virtual void mouseMove(QMouseEvent *e);
 	virtual void mouseRelease(QMouseEvent *e);
+        virtual void tabletEvent(QTabletEvent *e);
 	virtual void keyPress(QKeyEvent *e);
 	virtual void keyRelease(QKeyEvent *e);
 	virtual KDialog *options();
Index: tools/kis_tool_rectangle.h
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/tools/kis_tool_rectangle.h,v
retrieving revision 1.17
diff -u -3 -u -p -r1.17 kis_tool_rectangle.h
--- tools/kis_tool_rectangle.h	7 Mar 2003 22:05:54 -0000	1.17
+++ tools/kis_tool_rectangle.h	4 Oct 2003 14:47:09 -0000
@@ -34,8 +34,8 @@ class KisDoc;
 class KisPainter;
 class KisView;
 
-class RectangleTool : public KisTool {
-	typedef KisTool super;
+class RectangleTool : public KisToolInterface {
+	typedef KisToolInterface super;
 
 public:
 	RectangleTool(KisDoc *doc, KisCanvas *canvas);
Index: tools/kis_tool_select_rectangular.cc
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/tools/kis_tool_select_rectangular.cc,v
retrieving revision 1.39
diff -u -3 -u -p -r1.39 kis_tool_select_rectangular.cc
--- tools/kis_tool_select_rectangular.cc	17 Mar 2003 20:10:18 -0000	1.39
+++ tools/kis_tool_select_rectangular.cc	4 Oct 2003 14:47:09 -0000
@@ -140,7 +140,7 @@ void KisToolRectangularSelect::mouseRele
 
 			if (!img)
 				return;
-			
+
 			m_startPos = m_view -> viewToWindow(m_startPos);
 			m_endPos = e -> pos();
 
@@ -215,7 +215,7 @@ void KisToolRectangularSelect::setup()
 {
 	KToggleAction *toggle;
 
-	toggle = new KToggleAction(i18n("&Rectangular Select"), "rectangular", 0, this, 
+	toggle = new KToggleAction(i18n("&Rectangular Select"), "rectangular", 0, this,
 			SLOT(activateSelf()), m_view -> actionCollection(), "tool_select_rectangular");
 	toggle -> setExclusiveGroup("tools");
 }
Index: ui/kis_canvas.cc
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/ui/kis_canvas.cc,v
retrieving revision 1.8
diff -u -3 -u -p -r1.8 kis_canvas.cc
--- ui/kis_canvas.cc	17 Mar 2003 20:10:19 -0000	1.8
+++ ui/kis_canvas.cc	4 Oct 2003 14:47:09 -0000
@@ -57,6 +57,11 @@ void KisCanvas::mouseMoveEvent(QMouseEve
 	emit mouseMoved(e);
 }
 
+void KisCanvas::tabletEvent( QTabletEvent *e )
+{
+    emit gotTabletEvent( e );
+}
+
 void KisCanvas::enterEvent(QEvent *e)
 {
 	emit gotEnterEvent(e);
Index: ui/kis_canvas.h
===================================================================
RCS file: /home/kdecvs/kde/koffice/krita/ui/kis_canvas.h,v
retrieving revision 1.7
diff -u -3 -u -p -r1.7 kis_canvas.h
--- ui/kis_canvas.h	7 Mar 2003 22:05:52 -0000	1.7
+++ ui/kis_canvas.h	4 Oct 2003 14:47:09 -0000
@@ -34,6 +34,7 @@ signals:
 	void mousePressed(QMouseEvent*);
 	void mouseMoved(QMouseEvent*);
 	void mouseReleased(QMouseEvent*);
+	void gotTabletEvent(QTabletEvent*);
 	void gotPaintEvent(QPaintEvent*);
 	void gotEnterEvent(QEvent*);
 	void gotLeaveEvent(QEvent*);
@@ -46,6 +47,7 @@ protected:
 	virtual void mousePressEvent(QMouseEvent *event);
 	virtual void mouseReleaseEvent(QMouseEvent *event);
 	virtual void mouseMoveEvent(QMouseEvent *event);
+        virtual void tabletEvent(QTabletEvent *event);
 	virtual void enterEvent(QEvent *event );
 	virtual void leaveEvent(QEvent *event);
 	virtual void wheelEvent(QWheelEvent *event);


["kis_tool_paint.cc" (text/x-c++src)]

/*
 *  Copyright (c) 2003 Boudewijn Rempt
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
#include "kdebug.h"
#include "kis_tool_memento.h"
#include "kis_tool_paint.h"
#include "kis_view.h"

KisToolPaint::KisToolPaint(KisView *view, KisDoc *doc)
{
	m_view = view;
	m_doc = doc;
}

KisToolPaint::~KisToolPaint()
{
}

void KisToolPaint::paint(QPainter&)
{
}

void KisToolPaint::paint(QPainter&, const QRect&)
{
}

void KisToolPaint::clear()
{
}

void KisToolPaint::clear(const QRect&)
{
}

void KisToolPaint::enter(QEvent *)
{
}

void KisToolPaint::leave(QEvent *)
{
}

void KisToolPaint::mousePress(QMouseEvent *)
{
}

void KisToolPaint::mouseMove(QMouseEvent *)
{
}

void KisToolPaint::mouseRelease(QMouseEvent *)
{
}

void KisToolPaint::tabletEvent(QTabletEvent *e)
{
//     kdDebug() << "received tablet event at position ("
//               << e->pos().x()
//               << ", "
//               << e->pos().y()
//               << ")"
//               << endl;
}


void KisToolPaint::keyPress(QKeyEvent *)
{
}

void KisToolPaint::keyRelease(QKeyEvent *)
{
}

KDialog *KisToolPaint::options()
{
	return 0;
}

void KisToolPaint::save(KisToolMementoSP)
{
}

void KisToolPaint::restore(KisToolMementoSP)
{
}

void KisToolPaint::cursor(QWidget *w) const
{
	if (w)
		w -> setCursor(m_cursor);
}

void KisToolPaint::setCursor(const QCursor& cursor)
{
	m_cursor = cursor;
}

void KisToolPaint::activateSelf()
{
	if (m_view)
		m_view -> activateTool(this);
}

void KisToolPaint::setup()
{
}

void KisToolPaint::activate()
{
}

#include "kis_tool_paint.moc"


["kis_tool_paint.h" (text/x-chdr)]

/*
 *  Copyright (c) 2003 Boudewijn Rempt
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
#if !defined KIS_TOOL_PAINT_H_
#define KIS_TOOL_PAINT_H_

#include <qcursor.h>
#include "kis_global.h"
#include "kis_types.h"
#include "kis_tool.h"

class QEvent;
class QKeyEvent;
class QPaintEvent;
class QMouseEvent;
class QTabletEvent;
class QRect;
class KDialog;
class KisDoc;
class KisView;

class KisToolPaint : public KisToolInterface {
	Q_OBJECT
	typedef KisToolInterface super;

public:
	KisToolPaint(KisView *view, KisDoc *doc);
	virtual ~KisToolPaint();
	
public:
	virtual void activate();
	virtual void setup();
	virtual void paint(QPainter& gc);
	virtual void paint(QPainter& gc, const QRect& rc);
	virtual void clear();
	virtual void clear(const QRect& rc);
	virtual void enter(QEvent *e);
	virtual void leave(QEvent *e);
	virtual void mousePress(QMouseEvent *e);
	virtual void mouseMove(QMouseEvent *e);
	virtual void mouseRelease(QMouseEvent *e);
        virtual void tabletEvent(QTabletEvent *e);
	virtual void keyPress(QKeyEvent *e);
	virtual void keyRelease(QKeyEvent *e);
	virtual KDialog *options();
	virtual void save(KisToolMementoSP memento);
	virtual void restore(KisToolMementoSP memento);
	virtual void cursor(QWidget *w) const;
	virtual void setCursor(const QCursor& cursor);

public slots:
	virtual void activateSelf();

private:
	KisView *m_view;
	KisDoc *m_doc;
	QCursor m_cursor;
};

#endif // KIS_TOOL_PAINT_H_


["kis_tool_test.cc" (text/x-c++src)]

/*
 *  Copyright (c) 2003 Boudewijn Rempt <boud@valdyas.org>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
#include <qpainter.h>
#include <qpen.h>

#include <kdebug.h>
#include <kaction.h>
#include <kcommand.h>
#include <klocale.h>
#include <koColor.h>

#include "kis_painter.h"
#include "kis_selection.h"
#include "kis_doc.h"
#include "kis_view.h"
#include "kis_tool_test.h"

namespace {
	class TestCmd : public KNamedCommand {
		typedef KNamedCommand super;

	public:
		TestCmd(KisImageSP owner);
		virtual ~TestCmd();

	public:
		virtual void execute();
		virtual void unexecute();

	private:
		KisImageSP m_owner;
	};

	TestCmd::TestCmd(KisImageSP owner ) : super(i18n("Testing 123"))
	{
            // At least we know on which image this command happened
            m_owner = owner;
	}

	TestCmd::~TestCmd()
	{
	}

	void TestCmd::execute()
	{
            // Redo the command
	}

	void TestCmd::unexecute()
	{
            // Undo the command
	}
}


KisToolTest::KisToolTest(KisView *view, KisDoc *doc) : super(view, doc)
{
    m_view = view;
    m_doc = doc;
}

KisToolTest::~KisToolTest()
{
}

void KisToolTest::mousePress(QMouseEvent *e)
{
    Q_INT32 x = e->pos().x();
    Q_INT32 y = e->pos().y();

    kdDebug() << "mousePress: " << e->pos().x() << ", " << e->pos().y() << endl;
    KisImageSP img = m_view -> currentImg();
    if (img) {
        KisPaintDeviceSP device = img -> activeDevice();
        if (device) {
            kdDebug() << "Going to paint" << endl;

            KisPainter *p = new KisPainter();
            p->begin(device);
            kdDebug() << "In the painter" << endl;
            p->fillRect( x,  y,  10,  10,  KoColor(QColor( "red" )) );
            p->end();
            //m_doc -> addCommand(new TestCmd(img));
            device->anchor();
         }

    }
    img -> invalidate(QRect( x,  y,  10,  10 ));
    m_view -> updateCanvas();
    kdDebug( "done painting" );
}


void KisToolTest::tabletEvent(QTabletEvent *e)
{
    Q_INT32 x = e->pos().x();
    Q_INT32 y = e->pos().y();

    kdDebug() << "tablet event: " << e->pos().x() << ", " << e->pos().y() << endl;
    KisImageSP img = m_view -> currentImg();
    if (img) {
        KisPaintDeviceSP device = img -> activeDevice();
        if (device) {
            kdDebug() << "Going to paint" << endl;

            KisPainter *p = new KisPainter();
            p->begin(device);
            kdDebug() << "In the painter" << endl;
            if ( e->type() == QEvent::TabletPress ) {
                p->fillRect( x,  y,  e->pressure(),  e->pressure(),  KoColor(QColor( \
"red" )), e->pressure() );  p->end();
                //m_doc -> addCommand(new TestCmd(img));
                img -> invalidate(QRect( x,  y,  10,  10 ));
                m_view -> updateCanvas();
                device->anchor();
            }
         }

    }
    e->accept();
    kdDebug( "done painting" );
}


void KisToolTest::setup()
{
	KToggleAction *toggle;
	toggle = new KToggleAction(i18n("&Test"), "Test", 0, this,
			SLOT(activateSelf()), m_view -> actionCollection(), "tool_test");
	toggle -> setExclusiveGroup("tools");
}


["kis_tool_test.h" (text/x-chdr)]

/*
 *  Copyright (c) 2003 Boudewijn Rempt <boud@valdyas.org>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

#if !defined KIS_TOOL_TEST_H_
#define KIS_TOOL_TEST_H_

#include <qpoint.h>
#include "kis_tool.h"
#include "kis_tool_paint.h"

class KisToolTest : public KisToolPaint {
	typedef KisToolPaint super;

public:
	KisToolTest(KisView *view, KisDoc *doc);
	virtual ~KisToolTest();

public:
        virtual void KisToolTest::setup();
	virtual void mousePress(QMouseEvent *e);
	virtual void tabletEvent(QTabletEvent *e);

private:
	KisView *m_view;
	KisDoc *m_doc;
};

#endif // KIS_TOOL_TEST_H_



_______________________________________________
kimageshop mailing list
kimageshop@mail.kde.org
http://mail.kde.org/mailman/listinfo/kimageshop


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic