Source Code (Use browser search to find items of interest.)

Class Index

khelpcenter'KEyesWidget (./kdebase/khelpcenter/kcmhelpcenter/eyes.h:13)

class KEyesWidget : public QFrame
{
	Q_OBJECT

public:

	KEyesWidget( QWidget *parent=0, const char * name=0, WFlags f=0 );
	~KEyesWidget();

public slots:

	void lookAt( QPoint &p );

protected:
	virtual void paintEvent( QPaintEvent * );
	virtual void resizeEvent( QResizeEvent * );

private:
	myPoint computePupil( double eyeX, QPoint mouse ) const;	
	void computePupils( QPoint mouse, myPoint pupils[2] ) const;

	void eyeLiner( QPainter & );
	void eyeBalls(  QPainter & );
	void eyeShape( QPainter & );

	double xScale, yScale;
	double xTranslate, yTranslate;

	bool		shapeWindow;
	QPoint		mouse;		// old mouse position
	myPoint		pupil[2];	// pupil position

	// defined constants
	static const float eyePadding, eyeThickness,
	    eyeRadius, ballRadius, ballPad;

	// calculated constants
	static const float eyeX, eyeDiameter, irisRadius, irisDiameter,
	    eyesWidth, eyesHeight, ballDiameter, ballAllowed;
};

khelpcenter'KEyesWidget::KEyesWidget() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:29)

KEyesWidget::KEyesWidget( QWidget *parent, const char * name, WFlags f ) :
             QFrame( parent, name/*, WType_TopLevel | WStyle_Customize | WStyle_Tool*/ )
{
	setBackgroundMode( NoBackground );	

	resize( 150, 100 );
}


khelpcenter'KEyesWidget::~KEyesWidget() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:37)

KEyesWidget::~KEyesWidget()
{
}


khelpcenter'KEyesWidget::lookAt() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:41)

void KEyesWidget::lookAt( QPoint &p )
{
	mouse = p;
}


khelpcenter'KEyesWidget::paintEvent() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:46)

void KEyesWidget::paintEvent( QPaintEvent * )
{
	computePupils( mouse, pupil );

	QPainter painter( this );
	painter.translate( xTranslate, yTranslate );
	eyeLiner( painter );
	eyeBalls( painter );
}


khelpcenter'KEyesWidget::resizeEvent() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:56)

void KEyesWidget::resizeEvent( QResizeEvent * )
{
	xTranslate = width() / 2.0;
        yTranslate = height() / 2.0;
	
	xScale = width() / eyesWidth;
	yScale = height() / eyesHeight;

	QBitmap shapeMask( width(), height() );
	shapeMask.fill( color0 );
	QPainter painter( &shapeMask );
	painter.translate( xTranslate, yTranslate );
	eyeShape( painter );
	painter.end();
	setMask( shapeMask );
}


khelpcenter'KEyesWidget::computePupil() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:73)

myPoint KEyesWidget::computePupil( double eye_x, QPoint mouse ) const
{
	mouse -= ( geometry().topLeft() + QPoint( xTranslate, yTranslate ));

	ASSERT( xScale != 0.0 );
	ASSERT( yScale != 0.0 );
	double mx = (double) mouse.x() / xScale - eye_x,
	       my = (double) mouse.y() / yScale;

	// (mx, my) is the mouse position relative to the origin

	myPoint ret;

	if( mx == 0.0 && my == 0.0 )
	{
		ret.x = eye_x;
		ret.y = 0.0;
	} else {
		double r = hypot( mx, my );
		if( r <= ballAllowed )
		{
			ret.x = mx + eye_x;
			ret.y = my;
		} else {
			double phi = atan2( my, mx );
			ret.x = eye_x + ballAllowed * cos(phi);
			ret.y = ballAllowed * sin( phi );
		}
	}

	return ret;
}


khelpcenter'KEyesWidget::computePupils() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:106)

void KEyesWidget::computePupils( QPoint mouse, myPoint pupils[2] ) const
{
	pupils[0] = computePupil( -eyeX, mouse );
	pupils[1] = computePupil( +eyeX, mouse );
}


khelpcenter'KEyesWidget::eyeLiner() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:112)

void KEyesWidget::eyeLiner( QPainter &painter )
{
	// black outline
	painter.setPen( black );
	painter.setBrush( black );
	// left
	painter.drawEllipse( xScale * (-eyeX - eyeRadius), -yScale * eyeRadius,
	                     xScale * eyeDiameter, yScale * eyeDiameter );
	// right
	painter.drawEllipse( xScale * (eyeX - eyeRadius), -yScale * eyeRadius,
	                     xScale * eyeDiameter, yScale * eyeDiameter );

	// white iris
	painter.setPen( white );
	painter.setBrush( white );
	// left
	painter.drawEllipse( xScale * (-eyeX - irisRadius), -yScale * irisRadius,
	                     xScale * irisDiameter, yScale * irisDiameter );
	// right
	painter.drawEllipse( xScale * (eyeX - irisRadius), -yScale * irisRadius,
	                     xScale * irisDiameter, yScale * irisDiameter );
}


khelpcenter'KEyesWidget::eyeBalls() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:135)

void KEyesWidget::eyeBalls( QPainter &painter )
{
	painter.setPen( black );
	painter.setBrush( black );

	// left
	painter.drawEllipse( xScale * (pupil[0].x - ballRadius), yScale * (pupil[0].y - ballRadius),
	                     xScale * ballDiameter, yScale * ballDiameter );
	// right
	painter.drawEllipse( xScale * (pupil[1].x - ballRadius), yScale * (pupil[1].y - ballRadius),
	                     xScale * ballDiameter, yScale * ballDiameter );
}


khelpcenter'KEyesWidget::eyeShape() (./kdebase/khelpcenter/kcmhelpcenter/eyes.cpp:148)

void KEyesWidget::eyeShape( QPainter &painter )
{
	painter.setPen( color1 );
	painter.setBrush( color1 );

	painter.drawEllipse( xScale * (eyeX - eyeRadius), -yScale * eyeRadius,
	                     xScale * eyeDiameter, yScale * eyeDiameter );
	painter.drawEllipse( xScale * (-eyeX - eyeRadius), -yScale * eyeRadius,
	                     xScale * eyeDiameter, yScale * eyeDiameter );
}