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