Subversion Repositories DIN Is Noise

Rev

Rev 2097 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
* bit_display.h
* DIN Is Noise is copyright (c) 2006-2025 Jagannathan Sampath
* DIN Is Noise is released under GNU Public License 2.0
* For more information, please visit https://dinisnoise.org/
*/


#ifndef __BIT_DISPLAY
#define __BIT_DISPLAY

#include "widget.h"
#include <vector>

struct ucolor_t;

struct bit_display : widget {

  int d_width; // display width of each bit
  int xstart, xend; // start, end of display

  std::vector<unsigned char> bits; // the bits
  int num_bits;
  int last_bit;
  int cur_id; // mouse @
  int prev_id;
  change_listener<bit_display>* lsnr;

  bit_display (int w = 256, int h = 64);
  void set_pos (int x, int y);
  void set_size (int w, int h);
  void set (void* bytes, int num_bytes);
  int handle_input ();
  void draw ();
  void calc_visual_params ();
  int find_bit_id ();
  void get_color (ucolor_t* uc);
  template <typename T> void get_data (T* ptr_) {
    unsigned char* ptr = (unsigned char*) ptr_;
    int num_bytes = sizeof (T);
    for (int i = 0, j = num_bits - 1; i < num_bytes; ++i) {
      unsigned char uci = 0;
      for (int k = 0; k < 8; ++k) {
        unsigned char bj = bits[j--];
        uci = uci | (bj << k);
      }
      ptr[i] = uci;
    }
  }
};

#endif