#ifndef STATE_H #define STATE_H #include "selection_info.h" #include "zoom_info.h" #include "pan_info.h" /* * Buffer object identifiers. */ #define NUM_BUFFERS 2 #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, DATAROSE_GEOMETRY } LISTS; #define NUM_LISTS 5 /* * 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; /* * Buffer objects. */ unsigned int buffers[NUM_BUFFERS]; /* * 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; /* * Display data rose. */ bool datarose; } STATE; #endif // STATE_H