[Digikam-devel] [Bug 137545] helper lines / cross wanted
Gilles Caulier
caulier.gilles at kdemail.net
Thu Jan 18 19:08:54 GMT 2007
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
http://bugs.kde.org/show_bug.cgi?id=137545
------- Additional Comments From caulier.gilles kdemail net 2007-01-18 20:08 -------
SVN commit 625037 by cgilles:
digikam from trunk : Perspective Tool : add Horizontal/Vertical guide lines like with Free Rotation tool
CCMAIL: digikam-devel kde org
CCBUGS: 137545, 131170
M +37 -7 imageeffect_perspective.cpp
M +7 -0 imageeffect_perspective.h
M +58 -4 perspectivewidget.cpp
M +12 -3 perspectivewidget.h
--- trunk/extragear/graphics/digikamimageplugins/perspective/imageeffect_perspective.cpp #625036:625037
@ -25,6 +25,7 @
#include <qvgroupbox.h>
#include <qlabel.h>
+#include <qspinbox.h>
#include <qpushbutton.h>
#include <qwhatsthis.h>
#include <qlayout.h>
@ -33,6 +34,7 @
// KDE includes.
+#include <kcolorbutton.h>
#include <kcursor.h>
#include <kconfig.h>
#include <klocale.h>
@ -83,7 +85,7 @
QFrame *frame = new QFrame(plainPage());
frame->setFrameStyle(QFrame::Panel|QFrame::Sunken);
- QVBoxLayout* l = new QVBoxLayout(frame, 5, 0);
+ QVBoxLayout* l = new QVBoxLayout(frame, 5, 0);
m_previewWidget = new PerspectiveWidget(525, 350, frame);
l->addWidget(m_previewWidget);
QWhatsThis::add( m_previewWidget, i18n("<p>This is the perspective transformation operation preview. "
@ -97,7 +99,7 @
Digikam::ImageIface iface(0, 0);
QWidget *gbox2 = new QWidget(plainPage());
- QGridLayout *gridLayout = new QGridLayout( gbox2, 11, 2, marginHint(), spacingHint());
+ QGridLayout *gridLayout = new QGridLayout( gbox2, 13, 2, marginHint(), spacingHint());
QLabel *label1 = new QLabel(i18n("New width:"), gbox2);
m_newWidthLabel = new QLabel(temp.setNum( iface.originalWidth()) + i18n(" px"), gbox2);
@ -148,8 +150,23 @
m_drawGridCheckBox = new QCheckBox(i18n("Draw grid"), gbox2);
gridLayout->addMultiCellWidget(m_drawGridCheckBox, 10, 10, 0, 2);
- gridLayout->setRowStretch(11, 10);
+ // -------------------------------------------------------------
+ QLabel *label7 = new QLabel(i18n("Guide color:"), gbox2);
+ m_guideColorBt = new KColorButton( QColor( Qt::red ), gbox2 );
+ QWhatsThis::add( m_guideColorBt, i18n("<p>Set here the color used to draw guides dashed-lines."));
+ gridLayout->addMultiCellWidget(label7, 11, 11, 0, 0);
+ gridLayout->addMultiCellWidget(m_guideColorBt, 11, 11, 2, 2);
+
+ QLabel *label8 = new QLabel(i18n("Guide width:"), gbox2);
+ m_guideSize = new QSpinBox( 1, 5, 1, gbox2);
+ QWhatsThis::add( m_guideSize, i18n("<p>Set here the width in pixels used to draw guides dashed-lines."));
+ gridLayout->addMultiCellWidget(label8, 12, 12, 0, 0);
+ gridLayout->addMultiCellWidget(m_guideSize, 12, 12, 2, 2);
+
+ gridLayout->setColStretch(1, 10);
+ gridLayout->setRowStretch(13, 10);
+
setUserAreaWidget(gbox2);
// -------------------------------------------------------------
@ -158,10 +175,16 @
this, SLOT(slotUpdateInfo(QRect, float, float, float, float)));
connect(m_drawWhileMovingCheckBox, SIGNAL(toggled(bool)),
- m_previewWidget, SLOT(toggleDrawWhileMoving(bool)));
+ m_previewWidget, SLOT(slotToggleDrawWhileMoving(bool)));
connect(m_drawGridCheckBox, SIGNAL(toggled(bool)),
- m_previewWidget, SLOT(toggleDrawGrid(bool)));
+ m_previewWidget, SLOT(slotToggleDrawGrid(bool)));
+
+ connect(m_guideColorBt, SIGNAL(changed(const QColor &)),
+ m_previewWidget, SLOT(slotChangeGuideColor(const QColor &)));
+
+ connect(m_guideSize, SIGNAL(valueChanged(int)),
+ m_previewWidget, SLOT(slotChangeGuideSize(int)));
}
ImageEffect_Perspective::~ImageEffect_Perspective()
@ -170,12 +193,17 @
void ImageEffect_Perspective::readUserSettings(void)
{
+ QColor defaultGuideColor(Qt::red);
KConfig *config = kapp->config();
config->setGroup("perspective Tool Dialog");
m_drawWhileMovingCheckBox->setChecked(config->readBoolEntry("Draw While Moving", true));
m_drawGridCheckBox->setChecked(config->readBoolEntry("Draw Grid", false));
- m_previewWidget->toggleDrawWhileMoving(m_drawWhileMovingCheckBox->isChecked());
- m_previewWidget->toggleDrawGrid(m_drawGridCheckBox->isChecked());
+ m_guideColorBt->setColor(config->readColorEntry("Guide Color", &defaultGuideColor));
+ m_guideSize->setValue(config->readNumEntry("Guide Width", 1));
+ m_previewWidget->slotToggleDrawWhileMoving(m_drawWhileMovingCheckBox->isChecked());
+ m_previewWidget->slotToggleDrawGrid(m_drawGridCheckBox->isChecked());
+ m_previewWidget->slotChangeGuideColor(m_guideColorBt->color());
+ m_previewWidget->slotChangeGuideSize(m_guideSize->value());
}
void ImageEffect_Perspective::writeUserSettings(void)
@ -184,6 +212,8 @
config->setGroup("perspective Tool Dialog");
config->writeEntry("Draw While Moving", m_drawWhileMovingCheckBox->isChecked());
config->writeEntry("Draw Grid", m_drawGridCheckBox->isChecked());
+ config->writeEntry("Guide Color", m_guideColorBt->color());
+ config->writeEntry("Guide Width", m_guideSize->value());
config->sync();
}
--- trunk/extragear/graphics/digikamimageplugins/perspective/imageeffect_perspective.h #625036:625037
@ -32,7 +32,10 @
class QLabel;
class QCheckBox;
+class QSpinBox;
+class KColorButton;
+
namespace DigikamPerspectiveImagesPlugin
{
@ -71,6 +74,10 @
QCheckBox *m_drawWhileMovingCheckBox;
QCheckBox *m_drawGridCheckBox;
+ QSpinBox *m_guideSize;
+
+ KColorButton *m_guideColorBt;
+
PerspectiveWidget *m_previewWidget;
};
--- trunk/extragear/graphics/digikamimageplugins/perspective/perspectivewidget.cpp #625036:625037
@ -65,6 +65,8 @
m_drawGrid = false;
m_drawWhileMoving = true;
m_currentResizing = ResizingNone;
+ m_guideColor = Qt::red;
+ m_guideSize = 1;
m_iface = new Digikam::ImageIface(w, h);
uchar *data = m_iface->setPreviewImageSize(w, h);
@ -168,6 +170,9 @
m_bottomRightPoint.setX(m_w-1);
m_bottomRightPoint.setY(m_h-1);
+ m_spot.setX(m_w / 2);
+ m_spot.setY(m_h / 2);
+
m_antiAlias = true;
updatePixmap();
repaint(false);
@ -196,25 +201,39 @
targetImg.bits(), targetImg.width(), targetImg.height());
}
-void PerspectiveWidget::toggleAntiAliasing(bool a)
+void PerspectiveWidget::slotToggleAntiAliasing(bool a)
{
m_antiAlias = a;
updatePixmap();
repaint(false);
}
-void PerspectiveWidget::toggleDrawWhileMoving(bool draw)
+void PerspectiveWidget::slotToggleDrawWhileMoving(bool draw)
{
m_drawWhileMoving = draw;
}
-void PerspectiveWidget::toggleDrawGrid(bool grid)
+void PerspectiveWidget::slotToggleDrawGrid(bool grid)
{
m_drawGrid = grid;
updatePixmap();
repaint(false);
}
+void PerspectiveWidget::slotChangeGuideColor(const QColor &color)
+{
+ m_guideColor = color;
+ updatePixmap();
+ repaint(false);
+}
+
+void PerspectiveWidget::slotChangeGuideSize(int size)
+{
+ m_guideSize = size;
+ updatePixmap();
+ repaint(false);
+}
+
void PerspectiveWidget::updatePixmap(void)
{
m_topLeftCorner.setRect(m_topLeftPoint.x() + m_rect.topLeft().x(),
@ -314,6 +333,17 @
p.drawEllipse( m_transformedCenter.x()+m_rect.topLeft().x(),
m_transformedCenter.y()+m_rect.topLeft().y(), 4, 4 );
+ // Drawing vertical and horizontal guide lines.
+
+ int xspot = m_spot.x() + m_rect.x();
+ int yspot = m_spot.y() + m_rect.y();
+ p.setPen(QPen(Qt::white, m_guideSize, Qt::SolidLine));
+ p.drawLine(xspot, m_rect.top(), xspot, m_rect.bottom());
+ p.drawLine(m_rect.left(), yspot, m_rect.right(), yspot);
+ p.setPen(QPen(m_guideColor, m_guideSize, Qt::DotLine));
+ p.drawLine(xspot, m_rect.top(), xspot, m_rect.bottom());
+ p.drawLine(m_rect.left(), yspot, m_rect.right(), yspot);
+
p.end();
emit signalPerspectiveChanged(getTargetSize(), getAngleTopLeft(), getAngleTopRight(),
@ -603,6 +633,9 @
void PerspectiveWidget::resizeEvent(QResizeEvent * e)
{
+ int old_w = m_w;
+ int old_h = m_h;
+
delete m_pixmap;
int w = e->size().width();
int h = e->size().height();
@ -629,6 +662,9 @
m_transformedCenter = QPoint(lroundf(m_transformedCenter.x()*xFactor),
lroundf(m_transformedCenter.y()*yFactor));
+ m_spot.setX((int)((float)m_spot.x() * ( (float)m_w / (float)old_w)));
+ m_spot.setY((int)((float)m_spot.y() * ( (float)m_h / (float)old_h)));
+
updatePixmap();
}
@ -645,10 +681,15 @
m_currentResizing = ResizingTopRight;
else if ( m_bottomLeftCorner.contains( e->x(), e->y() ) )
m_currentResizing = ResizingBottomLeft;
+ else
+ {
+ m_spot.setX(e->x()-m_rect.x());
+ m_spot.setY(e->y()-m_rect.y());
+ }
}
}
-void PerspectiveWidget::mouseReleaseEvent ( QMouseEvent * )
+void PerspectiveWidget::mouseReleaseEvent ( QMouseEvent * e )
{
if ( m_currentResizing != ResizingNone )
{
@ -662,6 +703,13 @
repaint(false);
}
}
+ else
+ {
+ m_spot.setX(e->x()-m_rect.x());
+ m_spot.setY(e->y()-m_rect.y());
+ updatePixmap();
+ repaint(false);
+ }
}
void PerspectiveWidget::mouseMoveEvent ( QMouseEvent * e )
@ -758,6 +806,12 @
setCursor( KCursor::sizeFDiagCursor() );
}
+ else
+ {
+ m_spot.setX(e->x()-m_rect.x());
+ m_spot.setY(e->y()-m_rect.y());
+ }
+
updatePixmap();
repaint(false);
}
--- trunk/extragear/graphics/digikamimageplugins/perspective/perspectivewidget.h #625036:625037
@ -30,6 +30,7 @
#include <qwidget.h>
#include <qpoint.h>
+#include <qcolor.h>
#include <qrect.h>
// Digikam includes.
@ -77,10 +78,13 @
public slots:
- void toggleAntiAliasing(bool a);
- void toggleDrawWhileMoving(bool draw);
- void toggleDrawGrid(bool grid);
+ void slotToggleAntiAliasing(bool a);
+ void slotToggleDrawWhileMoving(bool draw);
+ void slotToggleDrawGrid(bool grid);
+ void slotChangeGuideColor(const QColor &color);
+ void slotChangeGuideSize(int size);
+
signals:
void signalPerspectiveChanged( QRect newSize, float topLeftAngle, float topRightAngle,
@ -130,6 +134,8 @
int m_currentResizing;
+ int m_guideSize;
+
QRect m_rect;
// Tranformed center area for mouse position control.
@ -147,7 +153,10 @
QPoint m_topRightPoint;
QPoint m_bottomLeftPoint;
QPoint m_bottomRightPoint;
+ QPoint m_spot;
+ QColor m_guideColor;
+
// 60 points will be stored to compute a grid of 15x15 lines.
QPointArray m_grid;
More information about the Digikam-devel
mailing list