add .gitignore
[xgalaxy.git] / xgalaxy.h
1 #ifndef __XGALAXY_H__
2 #define __XGALAXY_H__
3
4 #include <gtk/gtk.h>
5 #include <pthread.h>
6 #include "galaxy.h"
7
8 typedef struct {
9         double  mass;
10         Vector  c; /* coordinate */
11         Vector  v; /* velocity */
12 } StarEntry;
13
14 typedef struct {
15         Vector  d;
16         double  w;
17 } Quaternion;
18
19 typedef struct {
20         GtkWidget       *window;
21
22         GtkWidget       *deltaField;
23         GtkWidget       *errorField;
24         GtkWidget       *dataField;
25
26         GtkWidget       *dataEnergyField;
27         GtkWidget       *dataImpulseField;
28         GtkWidget       *dataMomentField;
29
30         GtkWidget       *resEnergyField;
31         GtkWidget       *resImpulseField;
32         GtkWidget       *resMomentField;
33         GtkWidget       *resDeltaField;
34         GtkWidget       *resTimeField;
35         GtkWidget       *resField;
36
37         GtkWidget       *notebook;
38
39         GtkWidget       *XSlider;
40         GtkWidget       *YSlider;
41         GtkWidget       *ZSlider;
42         double          Xangle;
43         double          Yangle;
44         double          Zangle;
45         Quaternion              angle;
46         double          Scale;
47
48         GtkWidget       *drawing_area;
49         GdkPixmap       *pixmap;
50
51         GtkWidget       *buttonRun;
52         GtkWidget       *buttonPause;
53
54         Galaxy          galaxy;
55         
56         char            *filename;
57
58         u_int32_t       nentry; 
59         u_int32_t       lenentry;       
60         Star            *entry;
61         Star            *tmpentry;
62
63
64         /* state */
65         volatile u_int32_t
66                 runing:1,
67                 paused:1,
68                 request_to_exit:1,
69                 page_active:4,
70                 trace:1,
71                 locksignal:1,
72                 drawaxis:1,
73                 unused:22;
74
75         double  scaleX; 
76         double  scaleY;
77
78         pthread_mutex_t  mutex;
79         pthread_t        thread;        
80
81         double  runTime;
82
83         double beginx;
84         double beginy;
85         Quaternion motion;
86 } XGlalaxyStruct;
87
88 #define XG_TIME_TICK    (20)
89
90 extern XGlalaxyStruct XGalaxy;
91
92 /*entry*/
93 void freeStarEntry();
94 void addEntry(Star *star);
95 void deleteEntry(u_int32_t i);
96 void editEntry(u_int32_t i, int col, double val);
97 void cntEntry();
98
99 void galaxy_set_title();
100 /* menu action */
101 gboolean show_resCList( GtkWidget *w, GdkEventExpose *event, gpointer   data );
102 void clearData( GtkWidget *w, gpointer   data );
103 void saveAsFile( GtkWidget *w, gpointer   data );
104 void saveFile( GtkWidget *w, gpointer   data );
105 void openFile( GtkWidget *w, gpointer   data );
106 void showAbout(  GtkWidget *w, gpointer   data );
107 void actionRun( GtkWidget *w, gpointer   data );
108 void actionPause( GtkWidget *w, gpointer   data );
109 void actionStop( GtkWidget *w, gpointer   data );
110
111 /* graphics */
112 gint expose_event( GtkWidget *widget, GdkEventExpose *event );
113 gint configure_event( GtkWidget *widget, GdkEventConfigure *event );
114 void angle_changed(GtkRange *range, gpointer user_data);
115 void fitGalaxy();
116 void drawGalaxy();
117 void drawStars();
118 void drawAxis();
119 void clearDraw();
120 void DrawDisk(GdkGC   *gc, double CenterX, double CenterY, double Radius, double Feather, double brightness);
121 void antialiasedLine(GdkGC   *gc, int x0, int y0, int x1, int y1, GdkColor *color);
122 gboolean mouse_motion_notify(GtkWidget      *widget, GdkEventMotion *event);
123
124 /*quaternions*/
125 void vector_vmul(Vector *res, Vector *a, Vector *b);
126 double vector_smul(Vector *a, Vector *b);
127 void vector_mul(Vector *res, Vector *a, double b);
128 void quater_vmul(Quaternion *res, Quaternion *a, Quaternion *b);
129 void quater_inverse(Quaternion *res, Quaternion *a);
130 void rotate(Vector *res, Vector *v, Quaternion *q);
131 void quater_normalize(Quaternion *q);
132 double vector_length(Vector *v);
133 void vector_normal(Vector *v);
134 void vector_add(Vector *res, Vector *a, Vector *b);
135 void vector_sub(Vector *res, Vector *a, Vector *b);
136 double quater_length(Quaternion *a);
137 void quater_to_matrix( Quaternion *q, double m[3][3]  );
138 void matrix_to_quater(  double m[3][3], Quaternion *q );
139 void quater_to_angles( Quaternion *q, Vector *a);
140 #endif