summaryrefslogtreecommitdiffstats
path: root/src/ksquirrelpart/sq_glselectionpainter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ksquirrelpart/sq_glselectionpainter.h')
-rw-r--r--src/ksquirrelpart/sq_glselectionpainter.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/src/ksquirrelpart/sq_glselectionpainter.h b/src/ksquirrelpart/sq_glselectionpainter.h
new file mode 100644
index 0000000..ea39286
--- /dev/null
+++ b/src/ksquirrelpart/sq_glselectionpainter.h
@@ -0,0 +1,151 @@
+/***************************************************************************
+ sq_glselectionpainter.h - description
+ -------------------
+ begin : Apr 4 2007
+ copyright : (C) 2007 by Baryshev Dmitry
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef SQ_GLSELECTIONPAINTER_H
+#define SQ_GLSELECTIONPAINTER_H
+
+#include <tqrect.h>
+#include <tqpoint.h>
+
+class SQ_GLWidget;
+
+/*
+ * This is a selection painter for SQ_GLWidget.
+ *
+ * Selection can be shown as rectangle and ellipse.
+ *
+ * Ellipsis selection mainly used in redeye filter.
+ */
+
+class SQ_GLSelectionPainter
+{
+ public:
+ enum Type { Rectangle, Ellipse };
+
+ SQ_GLSelectionPainter(SQ_GLWidget *widget);
+ ~SQ_GLSelectionPainter();
+
+ void setSourceSize(int, int);
+
+ TQPoint center() const;
+
+ void draw();
+
+ /*
+ * Set selection type - rectangle or ellipse
+ */
+ int type() const;
+
+ /*
+ * when selection is drawn and visible, it's valid.
+ * After end() it becomes invalid.
+ */
+ bool valid() const;
+
+ void setVisible(bool vis);
+
+ void begin(Type tp, int x, int y, bool U = true);
+ void move(int x, int y);
+ void setGeometry(const TQRect &rc);
+ void end();
+
+ /*
+ * Selected rectangle geometry
+ */
+ TQPoint pos() const;
+ TQSize size() const;
+
+ private:
+ void drawEllipse(float xradius, float yradius);
+ void drawRect();
+ void hackXY(int &x, int &y);
+
+ private:
+ SQ_GLWidget *w;
+ int sourcew, sourceh;
+ int sw, sh, sx, sy;
+
+ int angle;
+ int xmoveold, ymoveold;
+ bool m_valid, m_shown;
+ Type m_type;
+};
+
+inline
+TQPoint SQ_GLSelectionPainter::pos() const
+{
+ return valid() ? TQPoint(sourcew/2 + sx, sourceh/2 - sy) : TQPoint();
+}
+
+inline
+TQSize SQ_GLSelectionPainter::size() const
+{
+ return valid() ? TQSize(sw, sh) : TQSize();
+}
+
+inline
+int SQ_GLSelectionPainter::type() const
+{
+ return m_type;
+}
+
+inline
+void SQ_GLSelectionPainter::setGeometry(const TQRect &rc)
+{
+ int X = rc.x(), Y = rc.y();
+
+ hackXY(X, Y);
+
+ sx = X;
+ sy = Y;
+ sw = rc.width();
+ sh = rc.height();
+}
+
+inline
+void SQ_GLSelectionPainter::setSourceSize(int w, int h)
+{
+ sourcew = w;
+ sourceh = h;
+}
+
+inline
+void SQ_GLSelectionPainter::setVisible(bool vis)
+{
+ if(m_valid) m_shown = vis;
+}
+
+inline
+bool SQ_GLSelectionPainter::valid() const
+{
+ return m_valid && m_shown;
+}
+
+inline
+TQPoint SQ_GLSelectionPainter::center() const
+{
+ return TQPoint(sx + sw/2, sy - sh/2);
+}
+
+inline
+void SQ_GLSelectionPainter::hackXY(int &x, int &y)
+{
+ x -= sourcew / 2;
+ y = sourceh / 2 - y;
+}
+
+#endif