From kde-kimageshop Tue Jan 04 00:12:39 2011 From: Silvio Heinrich Date: Tue, 04 Jan 2011 00:12:39 +0000 To: kde-kimageshop Subject: Patch: Brush Outline with Crosshair Message-Id: <4D2265F7.9070100 () web ! de> X-MARC-Message: https://marc.info/?l=kde-kimageshop&m=129410001504140 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--------------050807040200040302070800" This is a multi-part message in MIME format. --------------050807040200040302070800 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Now i send the separated patches starting with the crosshair thing. The crosshair is now painted and the invisible cursor is used. --------------050807040200040302070800 Content-Type: text/x-diff; name="BrushOutlineCrosshair.patch" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="BrushOutlineCrosshair.patch" From 85875a0b55dff75b3fb1a7cbfd64e53094448b28 Mon Sep 17 00:00:00 2001 From: Silvio Heinrich Date: Tue, 28 Dec 2010 17:55:36 +0100 Subject: [PATCH 1/2] Add "Brush Outline and Crosshair" option to the general settings. it will use the crosshair cursor and paints the brush outline simultaneously this helps seeing the middle of the brush when using large brushes --- krita/image/kis_global.h | 5 ++- krita/ui/forms/wdggeneralsettings.ui | 5 ++++ krita/ui/tool/kis_tool_freehand.cc | 6 ++-- krita/ui/tool/kis_tool_paint.cc | 38 ++++++++++++++++++++++++++++++++- 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/krita/image/kis_global.h b/krita/image/kis_global.h index e66e806..beb8717 100644 --- a/krita/image/kis_global.h +++ b/krita/image/kis_global.h @@ -43,9 +43,10 @@ enum enumCursorStyle { CURSOR_STYLE_CROSSHAIR = 1, CURSOR_STYLE_POINTER = 2, CURSOR_STYLE_OUTLINE = 3, - CURSOR_STYLE_NO_CURSOR = 4 + CURSOR_STYLE_CROSS_OUTLINE = 4, + CURSOR_STYLE_NO_CURSOR = 5 #if defined(HAVE_OPENGL) - , CURSOR_STYLE_3D_MODEL = 5 + , CURSOR_STYLE_3D_MODEL = 6 #endif }; diff --git a/krita/ui/forms/wdggeneralsettings.ui b/krita/ui/forms/wdggeneralsettings.ui index aea9174..13e0e31 100644 --- a/krita/ui/forms/wdggeneralsettings.ui +++ b/krita/ui/forms/wdggeneralsettings.ui @@ -45,6 +45,11 @@ + Brush Outline and Crosshair + + + + No Cursor diff --git a/krita/ui/tool/kis_tool_freehand.cc b/krita/ui/tool/kis_tool_freehand.cc index a41e40e..7077bca 100644 --- a/krita/ui/tool/kis_tool_freehand.cc +++ b/krita/ui/tool/kis_tool_freehand.cc @@ -134,7 +134,7 @@ void KisToolFreehand::mousePressEvent(KoPointerEvent *e) m_outlineDocPoint = e->point; KisConfig cfg; - if(cfg.cursorStyle() == CURSOR_STYLE_OUTLINE) { + if(cfg.cursorStyle() == CURSOR_STYLE_OUTLINE || cfg.cursorStyle() == CURSOR_STYLE_CROSS_OUTLINE) { updateOutlineRect(); } @@ -197,7 +197,7 @@ void KisToolFreehand::mouseMoveEvent(KoPointerEvent *e) m_outlineDocPoint = e->point; KisConfig cfg; - if(cfg.cursorStyle() == CURSOR_STYLE_OUTLINE) { + if(cfg.cursorStyle() == CURSOR_STYLE_OUTLINE || cfg.cursorStyle() == CURSOR_STYLE_CROSS_OUTLINE) { updateOutlineRect(); } @@ -571,7 +571,7 @@ void KisToolFreehand::paint(QPainter& gc, const KoViewConverter &converter) if(m_explicitShowOutline || mode() == KisTool::GESTURE_MODE || - (cfg.cursorStyle() == CURSOR_STYLE_OUTLINE && + ((cfg.cursorStyle() == CURSOR_STYLE_OUTLINE || cfg.cursorStyle() == CURSOR_STYLE_CROSS_OUTLINE) && (mode() == HOVER_MODE || (mode() == PAINT_MODE && cfg.showOutlineWhilePainting())))) { diff --git a/krita/ui/tool/kis_tool_paint.cc b/krita/ui/tool/kis_tool_paint.cc index 7e0ef4a..1121985 100644 --- a/krita/ui/tool/kis_tool_paint.cc +++ b/krita/ui/tool/kis_tool_paint.cc @@ -353,10 +353,44 @@ void KisToolPaint::resetCursorStyle() { KisTool::resetCursorStyle(); KisConfig cfg; - if (cfg.cursorStyle() == CURSOR_STYLE_OUTLINE) { + + switch(cfg.cursorStyle()) + { + case CURSOR_STYLE_OUTLINE: + if (m_supportOutline) { + useCursor(KisCursor::blankCursor()); + break; + } + + case CURSOR_STYLE_CROSS_OUTLINE: + if (m_supportOutline) { + useCursor(KisCursor::crossCursor()); + break; + } + +#if defined(HAVE_OPENGL) + case CURSOR_STYLE_3D_MODEL: + if(isCanvasOpenGL()) { + if (m_supportOutline) { + useCursor(KisCursor::blankCursor()); + break; + } + } else { + useCursor(KisCursor::arrowCursor()); + break; + } +#endif + + default: + useCursor(cursor()); + break; + } +/* + if (cfg.cursorStyle() == CURSOR_STYLE_OUTLINE || cfg.cursorStyle() == CURSOR_STYLE_CROSS_OUTLINE) { if (m_supportOutline) { // do not show cursor, tool will paint outline useCursor(KisCursor::blankCursor()); + useCursor(KisCursor::crossCursor()); } else { // if the tool does not support outline, use tool icon cursor useCursor(cursor()); @@ -377,7 +411,7 @@ void KisToolPaint::resetCursorStyle() } } #endif - +//*/ } -- 1.7.1 From 89e165d60cf3ab9b9ea0b431517c7923bde8389c Mon Sep 17 00:00:00 2001 From: Silvio Heinrich Date: Mon, 3 Jan 2011 23:32:33 +0100 Subject: [PATCH 2/2] In "Brush Outline and Crosshair" mode Paint the crosshair instead of using the crosshair cursor --- krita/image/kis_global.h | 1 + krita/ui/tool/kis_tool_freehand.cc | 29 +++++++++++++++++++++-- krita/ui/tool/kis_tool_freehand.h | 4 ++- krita/ui/tool/kis_tool_paint.cc | 43 +++-------------------------------- 4 files changed, 34 insertions(+), 43 deletions(-) diff --git a/krita/image/kis_global.h b/krita/image/kis_global.h index beb8717..e74d7ef 100644 --- a/krita/image/kis_global.h +++ b/krita/image/kis_global.h @@ -1,6 +1,7 @@ /* * Copyright (c) 2000 Matthias Elter * Copyright (c) 2002 Patrick Julien + * Copyright (c) 2011 Silvio Heinrich * * 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 diff --git a/krita/ui/tool/kis_tool_freehand.cc b/krita/ui/tool/kis_tool_freehand.cc index 7077bca..7079fab 100644 --- a/krita/ui/tool/kis_tool_freehand.cc +++ b/krita/ui/tool/kis_tool_freehand.cc @@ -5,6 +5,7 @@ * Copyright (c) 2004 Bart Coppens * Copyright (c) 2007,2008,2010 Cyrille Berger * Copyright (c) 2009 Lukáš Tvrdý + * Copyright (c) 2011 Silvio Heinrich * * 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 @@ -578,7 +579,8 @@ void KisToolFreehand::paint(QPainter& gc, const KoViewConverter &converter) outlineMode = KisPaintOpSettings::CursorIsOutline; } - QPainterPath path = getOutlinePath(m_outlineDocPoint, outlineMode); + bool withCrossHair = (cfg.cursorStyle() == CURSOR_STYLE_CROSS_OUTLINE); + QPainterPath path = getOutlinePath(m_outlineDocPoint, outlineMode, withCrossHair); paintToolOutline(&gc,pixelToView(path)); } } @@ -593,8 +595,20 @@ QPointF KisToolFreehand::adjustPosition(const QPointF& point, const QPointF& str } QPainterPath KisToolFreehand::getOutlinePath(const QPointF &documentPos, - KisPaintOpSettings::OutlineMode outlineMode) + KisPaintOpSettings::OutlineMode outlineMode, + bool withCrossHair) { + static const int off = 1; + static const int len = 5; + static const int spc = 3; + + static const QPointF crossHairPts[8] = { + QPointF(-off,0), QPointF(-len,0), + QPointF(+off,0), QPointF(+len,0), + QPointF(0,-off), QPointF(0,-len), + QPointF(0,+off), QPointF(0,+len) + }; + qreal scale = 1.0; qreal rotation = 0; if (m_painter && m_painter->paintOp()){ @@ -605,6 +619,15 @@ QPainterPath KisToolFreehand::getOutlinePath(const QPointF &documentPos, QPointF imagePos = currentImage()->documentToPixel(documentPos); QPainterPath path = currentPaintOpPreset()->settings()-> brushOutline(imagePos, outlineMode, scale, rotation); + + qreal brushExtend = qMax(path.boundingRect().width(), path.boundingRect().height()); + + if(brushExtend >= (len+spc)*2 && withCrossHair) { + for(int i=0; i<8; i+=2) { + path.moveTo(imagePos + crossHairPts[i+0]); + path.lineTo(imagePos + crossHairPts[i+1]); + } + } return path; } @@ -623,7 +646,7 @@ void KisToolFreehand::decreaseBrushSize() void KisToolFreehand::updateOutlineRect() { - QRectF outlinePixelRect = getOutlinePath(m_outlineDocPoint, KisPaintOpSettings::CursorIsOutline).boundingRect(); + QRectF outlinePixelRect = getOutlinePath(m_outlineDocPoint, KisPaintOpSettings::CursorIsOutline, false).boundingRect(); QRectF outlineDocRect = currentImage()->pixelToDocument(outlinePixelRect); if(!m_oldOutlineRect.isEmpty()) { diff --git a/krita/ui/tool/kis_tool_freehand.h b/krita/ui/tool/kis_tool_freehand.h index f03c577..0d820fc 100644 --- a/krita/ui/tool/kis_tool_freehand.h +++ b/krita/ui/tool/kis_tool_freehand.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2003-2008 Boudewijn Rempt + * Copyright (c) 2011 Silvio Heinrich * * 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 @@ -107,7 +108,8 @@ private: void updateOutlineRect(); QPainterPath getOutlinePath(const QPointF &documentPos, - KisPaintOpSettings::OutlineMode outlineMode); + KisPaintOpSettings::OutlineMode outlineMode, + bool withCrossHair); private slots: void increaseBrushSize(); diff --git a/krita/ui/tool/kis_tool_paint.cc b/krita/ui/tool/kis_tool_paint.cc index 1121985..0d36d25 100644 --- a/krita/ui/tool/kis_tool_paint.cc +++ b/krita/ui/tool/kis_tool_paint.cc @@ -1,5 +1,6 @@ /* * Copyright (c) 2003-2009 Boudewijn Rempt + * Copyright (c) 2011 Silvio Heinrich * * 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 @@ -353,51 +354,17 @@ void KisToolPaint::resetCursorStyle() { KisTool::resetCursorStyle(); KisConfig cfg; - - switch(cfg.cursorStyle()) - { - case CURSOR_STYLE_OUTLINE: - if (m_supportOutline) { - useCursor(KisCursor::blankCursor()); - break; - } - - case CURSOR_STYLE_CROSS_OUTLINE: - if (m_supportOutline) { - useCursor(KisCursor::crossCursor()); - break; - } - -#if defined(HAVE_OPENGL) - case CURSOR_STYLE_3D_MODEL: - if(isCanvasOpenGL()) { - if (m_supportOutline) { - useCursor(KisCursor::blankCursor()); - break; - } - } else { - useCursor(KisCursor::arrowCursor()); - break; - } -#endif - - default: - useCursor(cursor()); - break; - } -/* if (cfg.cursorStyle() == CURSOR_STYLE_OUTLINE || cfg.cursorStyle() == CURSOR_STYLE_CROSS_OUTLINE) { if (m_supportOutline) { // do not show cursor, tool will paint outline useCursor(KisCursor::blankCursor()); - useCursor(KisCursor::crossCursor()); } else { // if the tool does not support outline, use tool icon cursor useCursor(cursor()); } } - -#if defined(HAVE_OPENGL) + + #if defined(HAVE_OPENGL) // TODO: maybe m_support 3D outline would be cooler. So far just freehand tool support 3D_MODEL cursor style if (cfg.cursorStyle() == CURSOR_STYLE_3D_MODEL) { if(isCanvasOpenGL()) { @@ -410,9 +377,7 @@ void KisToolPaint::resetCursorStyle() useCursor(KisCursor::arrowCursor()); } } -#endif -//*/ - + #endif } void KisToolPaint::updateTabletPressureSamples() -- 1.7.1 --------------050807040200040302070800 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kimageshop mailing list kimageshop@kde.org https://mail.kde.org/mailman/listinfo/kimageshop --------------050807040200040302070800--