27 files changed, 179 insertions, 549 deletions
diff --git a/src/model/state/state.h b/src/model/state/state.h new file mode 100644 index 0000000..ac1e035 --- a/dev/null +++ b/src/model/state/state.h @@ -0,0 +1,122 @@ +#ifndef STATE_H +#define STATE_H + +#include "selection_info.h" +#include "zoom_info.h" +#include "pan_info.h" + +/* + * Buffer object identifiers. + */ +#define BASE_VERTICES 0 +#define BASE_COLORS 1 + +#define CLEAR_COLOR 1.0, 1.0, 1.0, 1.0 +#define DRAW_COLOR 0.0, 0.0, 0.0 + +#define DEFAULT_COLOR_R 0.00 +#define DEFAULT_COLOR_G 0.00 +#define DEFAULT_COLOR_B 0.01 +#define DEFAULT_COLOR_A (1.0 / 7.0) + +#define SELECT_COLOR_R 0.00 +#define SELECT_COLOR_G 0.00 +#define SELECT_COLOR_B 0.00 +#define SELECT_COLOR_A 0.75 + +typedef enum +{ PROTEIN_GEOMETRY, PROTEIN_SELECTED_GEOMETRY, DENSITY_LEGEND_GEOMETRY, + MAP_GEOMETRY +} LISTS; +#define NUM_LISTS 2 + +/* + * Maintain state of the model. + */ +typedef struct +{ + /* + * Number of nodes having coordinates assigned. + */ + unsigned int rows; + + /* + * Display lists. + */ + unsigned int list_offset; + + /* + * Track the bounding box of the points. + */ + struct + { + float min_x; + float max_x; + float min_y; + float max_y; + } bb; + + /* + * Minimum coordinate for the orthographic projection. + */ + float ortho_min; + + /* + * Maximum coordinate for the orthographic projection. + */ + float ortho_max; + + /* + * Orthographic coordinates after aspect preserving scaling. + */ + struct + { + double min_x; + double max_x; + double min_y; + double max_y; + } ortho; + + /* + * Viewport size. + */ + struct + { + int w; + int h; + } viewport; + + /* + * Buffer objects. + */ + unsigned int buffers[1]; + + /* + * GI Identifiers indexed by row. Storage is [rows][20]. + */ + char *gi_data; + + /* + * 2D coordinates for each protein. Storage is [rows][2]. + */ + float *base_vertices_data; + + /* + * RGB color for each protein. Storage is [rows][4]. + */ + float *base_colors_data; + + SELECTION_INFO selection; + + ZOOM_INFO zoom; + + PAN_INFO pan; + + /* + * Display a legend on the map. + */ + bool legend; + +} STATE; + +#endif // STATE_H |