a

Committer:
fundokukiri
Date:
Wed Oct 09 12:55:47 2019 +0000
Revision:
0:a7fb0dba4c8a
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fundokukiri 0:a7fb0dba4c8a 1 //-----------------------------------------------------------
fundokukiri 0:a7fb0dba4c8a 2 //
fundokukiri 0:a7fb0dba4c8a 3 // F746_SLIDER class
fundokukiri 0:a7fb0dba4c8a 4 //
fundokukiri 0:a7fb0dba4c8a 5 //-----------------------------------------------------------
fundokukiri 0:a7fb0dba4c8a 6
fundokukiri 0:a7fb0dba4c8a 7 #include "F746_SLIDER.hpp"
fundokukiri 0:a7fb0dba4c8a 8
fundokukiri 0:a7fb0dba4c8a 9 extern uint16_t SliderDisplayValue_;
fundokukiri 0:a7fb0dba4c8a 10
fundokukiri 0:a7fb0dba4c8a 11 // Draw Slider
fundokukiri 0:a7fb0dba4c8a 12 void Slider::Render()
fundokukiri 0:a7fb0dba4c8a 13 {
fundokukiri 0:a7fb0dba4c8a 14 active_ = true;
fundokukiri 0:a7fb0dba4c8a 15 char min_[3]; //string Slider minimum;
fundokukiri 0:a7fb0dba4c8a 16 char max_[3]; //string Slider maximum;
fundokukiri 0:a7fb0dba4c8a 17
fundokukiri 0:a7fb0dba4c8a 18 switch(STYLE_)
fundokukiri 0:a7fb0dba4c8a 19 {
fundokukiri 0:a7fb0dba4c8a 20 case 1: // Style 1 - Normal Slider
fundokukiri 0:a7fb0dba4c8a 21 lcd_.SetTextColor(SLIDER_COLOUR_); // Slider rectangle
fundokukiri 0:a7fb0dba4c8a 22 lcd_.FillRect(SliderX_, SliderY_, SliderW_, 40);
fundokukiri 0:a7fb0dba4c8a 23 lcd_.SetTextColor(LCD_COLOR_GRAY); // Slider Control rectangle
fundokukiri 0:a7fb0dba4c8a 24 uint16_t xC = (SliderW_/(Max_-Min_)* valueControl_); // Calculate initial value of Slider control
fundokukiri 0:a7fb0dba4c8a 25 lcd_.FillRect(SliderX_+xC-20, SliderY_, 40, 40);
fundokukiri 0:a7fb0dba4c8a 26 break;
fundokukiri 0:a7fb0dba4c8a 27
fundokukiri 0:a7fb0dba4c8a 28 case 2: // Style 2 - 3D Slider
fundokukiri 0:a7fb0dba4c8a 29 lcd_.SetTextColor(LCD_COLOR_DARKGRAY); // Set Textcolour to shadow colour
fundokukiri 0:a7fb0dba4c8a 30 lcd_.FillRect(SliderX_+2, SliderY_+2, SliderW_+3, 40+3); // Draws shadow
fundokukiri 0:a7fb0dba4c8a 31 lcd_.SetTextColor(SLIDER_COLOUR_); // Slider rectangle
fundokukiri 0:a7fb0dba4c8a 32 lcd_.FillRect(SliderX_, SliderY_, SliderW_, 40);
fundokukiri 0:a7fb0dba4c8a 33 lcd_.SetTextColor(LCD_COLOR_GRAY); // Slider Control rectangle
fundokukiri 0:a7fb0dba4c8a 34 xC = (SliderW_/(Max_-Min_)* valueControl_); // Calculate initial value of Slider control
fundokukiri 0:a7fb0dba4c8a 35 lcd_.FillRect(SliderX_+xC-20, SliderY_, 40, 40);
fundokukiri 0:a7fb0dba4c8a 36 break;
fundokukiri 0:a7fb0dba4c8a 37 }
fundokukiri 0:a7fb0dba4c8a 38
fundokukiri 0:a7fb0dba4c8a 39 if (LABEL_.length() != 0)
fundokukiri 0:a7fb0dba4c8a 40 {
fundokukiri 0:a7fb0dba4c8a 41 lcd_.SetFont(FONTS_);
fundokukiri 0:a7fb0dba4c8a 42 lcd_.SetBackColor(LCD_COLOR_WHITE);
fundokukiri 0:a7fb0dba4c8a 43 lcd_.SetTextColor(LCD_COLOR_BLACK);
fundokukiri 0:a7fb0dba4c8a 44
fundokukiri 0:a7fb0dba4c8a 45 sprintf(min_, "%2d", (int) Min_); // Convert minimum value to string
fundokukiri 0:a7fb0dba4c8a 46 lcd_.DisplayStringAt(SliderX_, SliderY_+50, (uint8_t *)min_, LEFT_MODE); // Display Slider minimum value
fundokukiri 0:a7fb0dba4c8a 47
fundokukiri 0:a7fb0dba4c8a 48 sprintf(max_, "%2d", (int) Max_); // Convert maximum value to string
fundokukiri 0:a7fb0dba4c8a 49 lcd_.DisplayStringAt((SliderX_+SliderW_-40), (SliderY_+50), (uint8_t *)max_, LEFT_MODE); // Display Slider minimum value
fundokukiri 0:a7fb0dba4c8a 50
fundokukiri 0:a7fb0dba4c8a 51 uint16_t x0 = SliderX_ + (SliderW_ - FONT_WIDTH_*(LABEL_.length()))/2; // Calcukate middle x value for Slider name
fundokukiri 0:a7fb0dba4c8a 52 uint16_t y0 = SliderY_ + (SliderH_ - FONT_HEIGHT_)/2 + 1; // Calcukate y value for Slider name
fundokukiri 0:a7fb0dba4c8a 53 lcd_.DisplayStringAt(x0, y0-50, (uint8_t *)LABEL_.c_str(),
fundokukiri 0:a7fb0dba4c8a 54 LEFT_MODE); // Write Slider name
fundokukiri 0:a7fb0dba4c8a 55 }
fundokukiri 0:a7fb0dba4c8a 56 }
fundokukiri 0:a7fb0dba4c8a 57
fundokukiri 0:a7fb0dba4c8a 58
fundokukiri 0:a7fb0dba4c8a 59 // Service Slider
fundokukiri 0:a7fb0dba4c8a 60 void Slider::Service()
fundokukiri 0:a7fb0dba4c8a 61 {
fundokukiri 0:a7fb0dba4c8a 62 uint16_t xC_; // X value of Control rectangle
fundokukiri 0:a7fb0dba4c8a 63 uint16_t valueControl_; // Value of Slider control to display
fundokukiri 0:a7fb0dba4c8a 64
fundokukiri 0:a7fb0dba4c8a 65 switch(STYLE_)
fundokukiri 0:a7fb0dba4c8a 66 {
fundokukiri 0:a7fb0dba4c8a 67 case 1: // Style 1 - Normal button
fundokukiri 0:a7fb0dba4c8a 68 lcd_.SetTextColor(SLIDER_COLOUR_); // Draw Slider rectangle
fundokukiri 0:a7fb0dba4c8a 69 lcd_.FillRect(SliderX_, SliderY_, SliderW_, 40);
fundokukiri 0:a7fb0dba4c8a 70 break;
fundokukiri 0:a7fb0dba4c8a 71
fundokukiri 0:a7fb0dba4c8a 72 case 2: // Style 2 - 3D button
fundokukiri 0:a7fb0dba4c8a 73 lcd_.SetTextColor(LCD_COLOR_DARKGRAY); // Set Textcolour to shadow colour
fundokukiri 0:a7fb0dba4c8a 74 lcd_.FillRect(SliderX_+2, SliderY_+2, SliderW_+3, 40+3);// Draws shadow
fundokukiri 0:a7fb0dba4c8a 75 lcd_.SetTextColor(SLIDER_COLOUR_); // Slider rectangle
fundokukiri 0:a7fb0dba4c8a 76 lcd_.FillRect(SliderX_, SliderY_, SliderW_, 40);
fundokukiri 0:a7fb0dba4c8a 77 lcd_.SetTextColor(LCD_COLOR_GRAY); // Slider Control rectangle
fundokukiri 0:a7fb0dba4c8a 78 break;
fundokukiri 0:a7fb0dba4c8a 79 }
fundokukiri 0:a7fb0dba4c8a 80
fundokukiri 0:a7fb0dba4c8a 81 uint16_t newX = state_.touchX[0]; // Find new x value of touch
fundokukiri 0:a7fb0dba4c8a 82
fundokukiri 0:a7fb0dba4c8a 83 if ((newX >= SliderX_) and (newX <= SliderX_+ 40)) // if touch at beginning of Slider
fundokukiri 0:a7fb0dba4c8a 84 {
fundokukiri 0:a7fb0dba4c8a 85 { xC_ = SliderX_; } // Sets x value of Slider control to left x value defined for slider rectangle
fundokukiri 0:a7fb0dba4c8a 86 }
fundokukiri 0:a7fb0dba4c8a 87
fundokukiri 0:a7fb0dba4c8a 88 else if ((newX >= SliderX_+SliderW_-40) and (newX <= SliderX_+ SliderW_)) // if touch at the end of Slider
fundokukiri 0:a7fb0dba4c8a 89 {
fundokukiri 0:a7fb0dba4c8a 90 xC_ = SliderX_+SliderW_-40; // Sets x value of Slider control to right x value defined for slider rectangle - width of slider control
fundokukiri 0:a7fb0dba4c8a 91 }
fundokukiri 0:a7fb0dba4c8a 92
fundokukiri 0:a7fb0dba4c8a 93 else xC_ = newX - 20; // if touch inside Slider
fundokukiri 0:a7fb0dba4c8a 94
fundokukiri 0:a7fb0dba4c8a 95 lcd_.SetTextColor(LCD_COLOR_YELLOW); // Colour to change the control of the Slider when touched
fundokukiri 0:a7fb0dba4c8a 96 lcd_.FillRect(xC_, SliderY_, 40, 40);
fundokukiri 0:a7fb0dba4c8a 97
fundokukiri 0:a7fb0dba4c8a 98 valueControl_ = (newX - SliderX_) * (Max_ - Min_) / SliderW_ + Min_; // Value to display of the control of the Slider
fundokukiri 0:a7fb0dba4c8a 99 if (valueControl_== (Min_+1))valueControl_= Min_; // Set value value to display to minimum
fundokukiri 0:a7fb0dba4c8a 100 if (valueControl_== (Max_-1))valueControl_= Max_; // Set value value to display to maximum
fundokukiri 0:a7fb0dba4c8a 101
fundokukiri 0:a7fb0dba4c8a 102
fundokukiri 0:a7fb0dba4c8a 103 lcd_.SetTextColor(LCD_COLOR_BLACK);
fundokukiri 0:a7fb0dba4c8a 104 SliderDisplayValue_ = valueControl_;
fundokukiri 0:a7fb0dba4c8a 105 lcd_.SetTextColor(LCD_COLOR_YELLOW);
fundokukiri 0:a7fb0dba4c8a 106 }
fundokukiri 0:a7fb0dba4c8a 107
fundokukiri 0:a7fb0dba4c8a 108
fundokukiri 0:a7fb0dba4c8a 109
fundokukiri 0:a7fb0dba4c8a 110 bool Slider::Moved() // Check touch detected
fundokukiri 0:a7fb0dba4c8a 111 {
fundokukiri 0:a7fb0dba4c8a 112 ts_.GetState(&state_); // Get state of touch
fundokukiri 0:a7fb0dba4c8a 113 if (!state_.touchDetected) return false;
fundokukiri 0:a7fb0dba4c8a 114 if (!active_) return false;
fundokukiri 0:a7fb0dba4c8a 115 if (!SliderBoundaryCheck()) return false;
fundokukiri 0:a7fb0dba4c8a 116 Service(); // Run Service routine
fundokukiri 0:a7fb0dba4c8a 117 return SliderBoundaryCheck();
fundokukiri 0:a7fb0dba4c8a 118 }
fundokukiri 0:a7fb0dba4c8a 119
fundokukiri 0:a7fb0dba4c8a 120
fundokukiri 0:a7fb0dba4c8a 121 bool Slider::SliderBoundaryCheck() // Check if touch is within Slider boundaries
fundokukiri 0:a7fb0dba4c8a 122 {
fundokukiri 0:a7fb0dba4c8a 123 int nTouch = multiTouch ? state_.touchDetected : 1;
fundokukiri 0:a7fb0dba4c8a 124 for (int n=0; n<nTouch; n++)
fundokukiri 0:a7fb0dba4c8a 125 {
fundokukiri 0:a7fb0dba4c8a 126 uint16_t x = state_.touchX[n]; // Find x value of touch
fundokukiri 0:a7fb0dba4c8a 127 uint16_t y = state_.touchY[n]; // Find y value of touch
fundokukiri 0:a7fb0dba4c8a 128
fundokukiri 0:a7fb0dba4c8a 129 if ( (SliderX_ <= x) && (x <= SliderX_+SliderW_) &&
fundokukiri 0:a7fb0dba4c8a 130 (SliderY_ <= y) && (y <= SliderY_+SliderH_) ) return true; // Check if touch is within Slider defined values
fundokukiri 0:a7fb0dba4c8a 131 }
fundokukiri 0:a7fb0dba4c8a 132 return false;
fundokukiri 0:a7fb0dba4c8a 133 }
fundokukiri 0:a7fb0dba4c8a 134
fundokukiri 0:a7fb0dba4c8a 135 TS_StateTypeDef Slider::state_;
fundokukiri 0:a7fb0dba4c8a 136 bool Slider::multiTouch = false; // Disable multitouch for Slider
fundokukiri 0:a7fb0dba4c8a 137