[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