Subversion Repositories libOLED

Rev

Rev 15 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ///
  2. /// Dial drawing library : used to display anything from compass display to arcs of "meter" displays
  3. ///
  4. #pragma once
  5. #include <cstdint>
  6.  
  7. class displayDial_t
  8. {
  9. public:
  10.   /// \param display the parent display
  11.   /// \param x x pos
  12.   /// \param y y pos
  13.   /// \param siz = size
  14.   /// \param angle Angle from straight up for lowest (-angle) and highest (angle) reading
  15.   displayDial_t(display_t &display,
  16.                 uint8_t x,
  17.                 uint8_t y,
  18.                 uint8_t siz,
  19.                 uint16_t angle = 90);
  20.  
  21.   /// @brief Construct a display with angle from Angle high to angle low
  22.   /// @param display
  23.   /// @param x
  24.   /// @param y
  25.   /// @param siz
  26.   /// @param angle_high Angle relative to straight up for highest reading
  27.   /// @param angle_low Angle relative to straight up for lowest reading
  28.   displayDial_t(display_t &display,
  29.                 uint8_t x,
  30.                 uint8_t y,
  31.                 uint8_t siz,
  32.                 int16_t angle_low,
  33.                 int16_t angle_high);
  34.  
  35.   /// @brief  Put the dial needle on the display
  36.   /// @param position values are from  0 .. math.SINE_STEPS
  37.   void draw_needle(int16_t position);
  38.  
  39.   /// @brief draw the scale
  40.   /// \param low low end of range
  41.   /// \param high high end of range
  42.   /// \param width length of long marker
  43.   /// \param num_step number of ticks
  44.   /// \param scale
  45.   void draw_scale(int16_t low, int16_t high, uint8_t width, uint8_t num_step, int16_t scale);
  46.  
  47.   /// @brief print min/max limits
  48.   virtual void draw_limits(){};
  49.  
  50.   /// @brief Draw value on display
  51.   /// @param val integer value to show with fake decimal point
  52.   /// @param dp  decimal point code
  53.   virtual void draw_value(int val, int dp){};
  54.  
  55.   /// @brief Set units string on display
  56.   /// @param str Constant string to refer to
  57.   void set_units(char const *str){m_unitStr = str; };
  58.  
  59. protected:
  60.  
  61.   void draw_value_items(int val, int dpCode, int wid,  int x , int y );
  62.  
  63.  
  64.   display_t &m_display;
  65.   uint8_t const m_xo;         ///< Position of origin
  66.   uint8_t const m_yo;         ///< Position of origin
  67.   uint8_t const m_siz;        ///< Display size
  68.   int16_t const m_angleLow;   ///< Angle for lowest value
  69.   int16_t const m_angleRange; ///< Angle range from lowest to highest  value
  70.   int16_t m_low;              ///< lower scale limit
  71.   int16_t m_high;             ///< upper scale limit
  72.   char const *  m_unitStr;     ///< Units_string
  73. };
  74.  
  75. //////////////////////////////////////////////////
  76. /// A display using the whole graphics area, 180 degree sweep
  77. class displayFullDial_t : public displayDial_t
  78. {
  79. public:
  80.   /// @brief Constructor for full-screen display
  81.   /// @param display The display it is being shown on
  82.   displayFullDial_t(display_t &display);
  83.  
  84.   /// @brief  draw axes limits
  85.   virtual void draw_limits() final;
  86.  
  87.   /// @brief Draw value on display
  88.   /// @param val integer value to show with fake decimal point
  89.   /// @param dp  decimal point code
  90.   virtual void draw_value(int val, int dp) final;
  91.  
  92.  
  93. };
  94.  
  95. //////////////////////////////////////////////////
  96. /// A display using left hand side of graphics area, 90 degree quadrant
  97. class displayLeftQuadrantDial_t : public displayDial_t
  98. {
  99. public:
  100.   /// @brief Constructor for left quadrant display
  101.   /// @param display The display it is being shown on
  102.   displayLeftQuadrantDial_t(display_t &display);
  103.  
  104.   /// @brief  draw axes limits
  105.   virtual void draw_limits() final;
  106.  
  107.   /// @brief Draw value on display
  108.   /// @param val integer value to show with fake decimal point
  109.   /// @param dp  decimal point code
  110.   virtual void draw_value(int val, int dp) final;
  111.  
  112.  
  113. };
  114.  
  115. //////////////////////////////////////////////////
  116. /// A display using right hand side of graphics area, 90 degree quadrant
  117. class displayRightQuadrantDial_t : public displayDial_t
  118. {
  119. public:
  120.   /// @brief Constructor for right quadrant display
  121.   /// @param display The display it is being shown on
  122.   displayRightQuadrantDial_t(display_t &display);
  123.   /// @brief  draw axes limits
  124.   virtual void draw_limits() final;
  125.  
  126.   /// @brief Draw value on display
  127.   /// @param val integer value to show with fake decimal point
  128.   /// @param dp  decimal point code
  129.   virtual void draw_value(int val, int dp) final;
  130.  
  131.  
  132. };