summaryrefslogtreecommitdiffstats
path: root/kscreensaver/kdesavers/gravity.h
blob: 2cd7080fbe5e93b04bd110504e7d63662ed51398 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
///-----------------------------------------------------------------------------
//
// kgravity - Partical gravity Screen Saver for KDE 2
//
// Copyright (c)  Ian Reinhart Geiser 2001
//
/////
//NOTE:
// The base particle engine did not come from me, it was designed by Jeff Molofee <nehe@connect.ab.ca>
// I did some extensive modifications to make it work with QT's OpenGL but the base principal is about
// the same.
////

#ifndef __GRAVITY_H__
#define __GRAVITY_H__

#include <qdialog.h>
#include <qgl.h>
#ifdef Q_WS_MACX
#include <OpenGL/glu.h>
#include <OpenGL/gl.h>
#else
#include <GL/glu.h>
#include <GL/gl.h>
#endif
#include <kscreensaver.h>
#include <qtimer.h>
#include <qimage.h>
#include "gravitycfg.h"
#include <kinstance.h>
#include <qfile.h>
#include <qtextstream.h>

#define	MAX_PARTICLES	100


class Gravity : public QGLWidget
{
Q_OBJECT
	class particles						// Create A Structure For Particle
	{
	public:
		bool	active;					// Active (Yes/No)
		float	life;					// Particle Life
		float	fade;					// Fade Speed
		float	r;					// Red Value
		float	g;					// Green Value
		float	b;					// Blue Value
		float	x;					// X Position
		float	y;					// Y Position
		float	z;					// Z Position
		float	xo;					// X Position
		float	yo;					// Y Position
		float	zo;					// Z Position
		float	index;					// Index
		float	indexo;
		float	size;					// Particle Size
	};

public:
	Gravity( QWidget * parent=0, const char * name=0 );
	~Gravity();
	void setSize( float newSize );
	void setStars( bool doStars );
protected:
	/** paint the GL view */
	void paintGL ();
	/** resize the gl view */
	void resizeGL ( int w, int h );
	/** setup the GL enviroment */
	void initializeGL ();
	void buildParticle(int loop);

private:
	/** load the partical file */
	bool loadParticle();

	particles particle[MAX_PARTICLES];


	bool	rainbow;					// Rainbow Mode?
	bool	sp;						// Spacebar Pressed?
	bool	rp;						// Enter Key Pressed?
	float	slowdown;					// Slow Down Particles
	float	xspeed;						// Base X Speed (To Allow Keyboard Direction Of Tail)
	float	yspeed;						// Base Y Speed (To Allow Keyboard Direction Of Tail)
	float	zoom;					// Used To Zoom Out
	float	size;
	float	stars;
	GLuint	loop;						// Misc Loop Variable
	GLuint	col;						// Current Color Selection
	GLuint	delay;						// Rainbow Effect Delay
	GLuint	texture[1];
	QImage  tex;
	float	index;
	float	transIndex;
	GLfloat scale;
	GLUquadricObj *obj;
};

class KGravitySaver : public KScreenSaver
{
Q_OBJECT
public:
	KGravitySaver( WId drawable );
	virtual ~KGravitySaver();
	void readSettings();
public slots:
	void blank();
	void updateSize(int newSize);
	void doStars(bool starState);
//	void loadTextures(bool textures);
private:
	Gravity *gravity;
	QTimer  *timer;
};

class KGravitySetup : public SetupUi
{
	Q_OBJECT
public:
	KGravitySetup( QWidget *parent = NULL, const char *name = NULL );
    ~KGravitySetup();

protected:
	void readSettings();

private slots:
	void slotOkPressed();
	void aboutPressed();
private:
	KGravitySaver *saver;
	float	size;
	float	stars;
	float	zoom;
	float	speed;
};

#endif