You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ksquirrel/ksquirrel/sq_glselectionpainter.h

152 lines
3.4 KiB

/***************************************************************************
sq_glselectionpainter.h - description
-------------------
begin : Apr 4 2007
copyright : (C) 2007 by Baryshev Dmitry
email : ksquirrel.iv@gmail.com
***************************************************************************/
/***************************************************************************
* *
* 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