1 /*
2 * bit_display.h
3 * DIN Is Noise is copyright (c) 2006-2021 Jagannathan Sampath
4 * DIN Is Noise is released under GNU Public License 2.0
5 * For more information, please visit https://dinisnoise.org/
6 */
7 
8 #ifndef __BIT_DISPLAY
9 #define __BIT_DISPLAY
10 
11 #include "widget.h"
12 #include <vector>
13 
14 struct ucolor_t;
15 
16 struct bit_display : widget {
17 
18 	int d_width; // display width of each bit
19 	int xstart, xend; // start, end of display
20 
21 	std::vector<unsigned char> bits; // the bits
22 	int num_bits;
23 	int last_bit;
24 	int cur_id; // mouse @
25 	int prev_id;
26 	change_listener<bit_display>* lsnr;
27 
28 	bit_display (int w = 256, int h = 64);
29 	void set_pos (int x, int y);
30 	void set_size (int w, int h);
31 	void set (void* bytes, int num_bytes);
32 	int handle_input ();
33 	void draw ();
34 	void calc_visual_params ();
35 	int find_bit_id ();
36 	void get_color (ucolor_t* uc);
get_databit_display37 	template <typename T> void get_data (T* ptr_) {
38 		unsigned char* ptr = (unsigned char*) ptr_;
39 		int num_bytes = sizeof (T);
40 		for (int i = 0, j = num_bits - 1; i < num_bytes; ++i) {
41 			unsigned char uci = 0;
42 			for (int k = 0; k < 8; ++k) {
43 				unsigned char bj = bits[j--];
44 				uci = uci | (bj << k);
45 			}
46 			ptr[i] = uci;
47 		}
48 	}
49 };
50 
51 #endif
52 
53 
54 
55