Lab4

Dependencies:   SeeedStudioTFTv2 TFT_fonts mbed

Fork of Seeed_TFT_Touch_Shield by Shields

Committer:
uswickra
Date:
Fri Sep 26 15:33:34 2014 +0000
Revision:
6:ebffa73d4f95
Parent:
4:ebcf8d366b91
fix report

Who changed what in which revision?

UserRevisionLine numberNew contents of line
uswickra 4:ebcf8d366b91 1 #include "Panel.h"
uswickra 6:ebffa73d4f95 2 #include "Arial12x12.h"
uswickra 4:ebcf8d366b91 3
uswickra 4:ebcf8d366b91 4 Panel::Panel(int x_0, int y_0, int x_1, int y_1, int p_color, int bd_color, int r = 1, int c = 1)
uswickra 4:ebcf8d366b91 5 {
uswickra 4:ebcf8d366b91 6 x0 = x_0;
uswickra 4:ebcf8d366b91 7 y0 = y_0;
uswickra 4:ebcf8d366b91 8 x1 = x_1;
uswickra 4:ebcf8d366b91 9 y1 = y_1 ;
uswickra 4:ebcf8d366b91 10 init(p_color, bd_color, r, c);
uswickra 6:ebffa73d4f95 11 //calculate pixels per row/col
uswickra 4:ebcf8d366b91 12 pp_row = TFT.height() / (rows+0.0) ;
uswickra 4:ebcf8d366b91 13 pp_col = TFT.width() / (cols+0.0) ;
uswickra 4:ebcf8d366b91 14 redraw();
uswickra 4:ebcf8d366b91 15 }
uswickra 4:ebcf8d366b91 16
uswickra 4:ebcf8d366b91 17 Panel::Panel(int p_color, int bd_color, int w, int h, int r, int c)
uswickra 4:ebcf8d366b91 18 {
uswickra 4:ebcf8d366b91 19 x0 = -1;
uswickra 4:ebcf8d366b91 20 y0 = -1;
uswickra 4:ebcf8d366b91 21 x1 = -1;
uswickra 4:ebcf8d366b91 22 y1 = -1 ;
uswickra 4:ebcf8d366b91 23 init(p_color, bd_color, r, c);
uswickra 4:ebcf8d366b91 24
uswickra 4:ebcf8d366b91 25 //space on parent
uswickra 4:ebcf8d366b91 26 width = w ;
uswickra 4:ebcf8d366b91 27 height = h ;
uswickra 4:ebcf8d366b91 28 //don't redraw we want to programatically do the drawing and change state
uswickra 4:ebcf8d366b91 29 // redraw();
uswickra 4:ebcf8d366b91 30 }
uswickra 4:ebcf8d366b91 31
uswickra 4:ebcf8d366b91 32 void Panel::init(int p_color, int bd_color, int r, int c)
uswickra 4:ebcf8d366b91 33 {
uswickra 4:ebcf8d366b91 34 back_color = p_color;
uswickra 4:ebcf8d366b91 35 border_color = bd_color;
uswickra 4:ebcf8d366b91 36 rows = r ;
uswickra 4:ebcf8d366b91 37 cols = c ;
uswickra 4:ebcf8d366b91 38
uswickra 4:ebcf8d366b91 39 curr_row = 0;
uswickra 4:ebcf8d366b91 40 curr_col = 0;
uswickra 4:ebcf8d366b91 41
uswickra 4:ebcf8d366b91 42 //state info
uswickra 4:ebcf8d366b91 43 state_changed = true ;
uswickra 4:ebcf8d366b91 44 push_children = true ;
uswickra 6:ebffa73d4f95 45 draw_text = false;
uswickra 6:ebffa73d4f95 46 cursor_x0 = x0;
uswickra 6:ebffa73d4f95 47 cursor_y0 = y0 ;
uswickra 6:ebffa73d4f95 48 next_cursor_x0 = cursor_x0 ;
uswickra 6:ebffa73d4f95 49 next_cursor_y0 = cursor_y0;
uswickra 4:ebcf8d366b91 50 }
uswickra 4:ebcf8d366b91 51
uswickra 4:ebcf8d366b91 52 void Panel::paint()
uswickra 4:ebcf8d366b91 53 {
uswickra 4:ebcf8d366b91 54 TFT.rect(x0,y0,x1,y1,border_color);
uswickra 4:ebcf8d366b91 55 //paint fill
uswickra 4:ebcf8d366b91 56 TFT.fillrect(x0+2,y0+2,x1-2,y1-2,back_color);
uswickra 6:ebffa73d4f95 57 if(draw_text) {
uswickra 6:ebffa73d4f95 58 TFT.set_font((unsigned char*) Arial12x12);
uswickra 6:ebffa73d4f95 59 TFT.locate(cursor_x0 ,cursor_y0);
uswickra 6:ebffa73d4f95 60 TFT.printf(input_string);
uswickra 6:ebffa73d4f95 61 draw_text = false;
uswickra 6:ebffa73d4f95 62 }
uswickra 4:ebcf8d366b91 63 }
uswickra 4:ebcf8d366b91 64
uswickra 4:ebcf8d366b91 65 bool Panel::addWidget(AbstractWidget *p)
uswickra 4:ebcf8d366b91 66 {
uswickra 4:ebcf8d366b91 67 //include as a child
uswickra 6:ebffa73d4f95 68 if(push_children) {
uswickra 4:ebcf8d366b91 69 children.push_back(p);
uswickra 4:ebcf8d366b91 70 }
uswickra 6:ebffa73d4f95 71
uswickra 4:ebcf8d366b91 72 //adjust pixels per row/col values for panel 'p'
uswickra 6:ebffa73d4f95 73 //this is [number of pixels taken by p] / [row or col divisions]
uswickra 4:ebcf8d366b91 74 p->pp_row = (pp_row*p->height)/p->rows;
uswickra 4:ebcf8d366b91 75 p->pp_col = (pp_col*p->width)/p->cols;
uswickra 4:ebcf8d366b91 76 //re-adjust absolute cordinates of Panel 'p'
uswickra 4:ebcf8d366b91 77 //get parents x,y locations and curr row, col numbers to calculate new location
uswickra 4:ebcf8d366b91 78 //also update next available row/col
uswickra 4:ebcf8d366b91 79
uswickra 4:ebcf8d366b91 80 while(curr_row < rows && curr_col < cols) {
uswickra 4:ebcf8d366b91 81 int rows_to_bottom = rows - curr_row ;
uswickra 4:ebcf8d366b91 82 int cols_to_right = cols - curr_col ;
uswickra 4:ebcf8d366b91 83
uswickra 4:ebcf8d366b91 84 if(cols_to_right >= p->width) {
uswickra 4:ebcf8d366b91 85 //we are good to fit widget to the right
uswickra 4:ebcf8d366b91 86 //now check if rows would fit widget
uswickra 4:ebcf8d366b91 87 if(rows_to_bottom >= p->height) {
uswickra 4:ebcf8d366b91 88 //ok all is good
uswickra 4:ebcf8d366b91 89 //update x,y for this widget
uswickra 4:ebcf8d366b91 90 p->x0 = x0 + pp_col*curr_col ;
uswickra 4:ebcf8d366b91 91 p->y0 = y0 + pp_row*curr_row ;
uswickra 4:ebcf8d366b91 92 p->x1 = p->x0 + pp_col*p->width;
uswickra 6:ebffa73d4f95 93 if(p->x1 + pp_col*1 > x1) {
uswickra 4:ebcf8d366b91 94 //lookahead if the panel that is added now is in the last coloumn adjust it x corner to boundary
uswickra 6:ebffa73d4f95 95 p->x1 = x1;
uswickra 4:ebcf8d366b91 96 }
uswickra 4:ebcf8d366b91 97 p->y1 = p->y0 + pp_row*p->height;
uswickra 6:ebffa73d4f95 98 if(p->y1 + pp_row*1 > y1) {
uswickra 4:ebcf8d366b91 99 //if the panel that is added is in the last row then adjust its x corner to boundary
uswickra 6:ebffa73d4f95 100 p->y1 = y1;
uswickra 4:ebcf8d366b91 101 }
uswickra 4:ebcf8d366b91 102 //keep previous row,col for updates to this widget
uswickra 4:ebcf8d366b91 103 prev_col = curr_col;
uswickra 4:ebcf8d366b91 104 prev_row = curr_row;
uswickra 4:ebcf8d366b91 105 //set next col
uswickra 4:ebcf8d366b91 106 if ((curr_col + p->width) >= cols) {
uswickra 4:ebcf8d366b91 107 curr_col = 0 ;
uswickra 4:ebcf8d366b91 108 } else {
uswickra 4:ebcf8d366b91 109 curr_col = (curr_col + p->width);
uswickra 4:ebcf8d366b91 110 } ;
uswickra 4:ebcf8d366b91 111 if(curr_col == 0) {
uswickra 4:ebcf8d366b91 112 curr_row = curr_row + p->height ;
uswickra 4:ebcf8d366b91 113 } else {
uswickra 4:ebcf8d366b91 114 curr_row = curr_row + p->height - 1 ;
uswickra 4:ebcf8d366b91 115 }
uswickra 4:ebcf8d366b91 116 //printf("next row: %d next col: %d \n", curr_row, curr_col);
uswickra 4:ebcf8d366b91 117 break;
uswickra 4:ebcf8d366b91 118 } else {
uswickra 4:ebcf8d366b91 119 //not going to fit with a sweep algorithm
uswickra 4:ebcf8d366b91 120 return false;
uswickra 4:ebcf8d366b91 121 }
uswickra 4:ebcf8d366b91 122 } else {
uswickra 4:ebcf8d366b91 123 //go to the next row and col 0 and start again
uswickra 4:ebcf8d366b91 124 curr_row += 1 ;
uswickra 4:ebcf8d366b91 125 curr_col = 0 ;
uswickra 4:ebcf8d366b91 126 }
uswickra 4:ebcf8d366b91 127 }
uswickra 6:ebffa73d4f95 128
uswickra 4:ebcf8d366b91 129 pc.printf("c_row: %d c_col: %d --- child x0,y0 : %d,%d x1,y1 : %d,%d --- pp_row, pp_col : %f,%f \r\n", curr_row, curr_col,
uswickra 6:ebffa73d4f95 130 p->x0,p->y0,p->x1,p->y1,p->pp_row ,p->pp_col);
uswickra 4:ebcf8d366b91 131
uswickra 4:ebcf8d366b91 132 return true;
uswickra 4:ebcf8d366b91 133
uswickra 4:ebcf8d366b91 134 }
uswickra 6:ebffa73d4f95 135
uswickra 6:ebffa73d4f95 136 void Panel::trigger_action(ActionType type, ActionEvent evnt, void* target)
uswickra 6:ebffa73d4f95 137 {
uswickra 6:ebffa73d4f95 138 //do something
uswickra 6:ebffa73d4f95 139 if(type == CORD_STR) {
uswickra 6:ebffa73d4f95 140 char* input_str = evnt.str;
uswickra 6:ebffa73d4f95 141 int len = strlen(input_str);
uswickra 6:ebffa73d4f95 142
uswickra 6:ebffa73d4f95 143 int x_pixels = len*12;
uswickra 6:ebffa73d4f95 144 cursor_x0 = next_cursor_x0 ;
uswickra 6:ebffa73d4f95 145 cursor_y0 = next_cursor_y0 ;
uswickra 6:ebffa73d4f95 146
uswickra 6:ebffa73d4f95 147 if(cursor_x0 < 240 && cursor_y0 < 320 ) {
uswickra 6:ebffa73d4f95 148 if(cursor_x0 + x_pixels >= 240) {
uswickra 6:ebffa73d4f95 149 next_cursor_y0 = cursor_y0 + 14;
uswickra 6:ebffa73d4f95 150 next_cursor_x0 = x0 ;
uswickra 6:ebffa73d4f95 151 } else {
uswickra 6:ebffa73d4f95 152 next_cursor_x0 = (cursor_x0 + x_pixels);
uswickra 6:ebffa73d4f95 153 }
uswickra 6:ebffa73d4f95 154 input_string = input_str;
uswickra 6:ebffa73d4f95 155 draw_text = true;
uswickra 6:ebffa73d4f95 156 state_changed = true;
uswickra 6:ebffa73d4f95 157 }
uswickra 6:ebffa73d4f95 158
uswickra 6:ebffa73d4f95 159 }
uswickra 6:ebffa73d4f95 160 }