static int TouchCoOrdGet(LcdTouch_t* structure, int *pX, int *pY) { unsigned int Cnt = 0; *pX = 0; *pY = 0; for(Cnt = 0; Cnt < analog_touch_filter_level;Cnt++) { *pX += to_percentage(structure->LcdTouch_L_Calibration_Value,structure->LcdTouch_R_Calibration_Value,structure->screen_max_x,x_data[Cnt & (analog_touch_filter_level - 1)]); *pY += to_percentage(structure->LcdTouch_U_Calibration_Value,structure->LcdTouch_D_Calibration_Value,structure->screen_max_y,y_data[Cnt & (analog_touch_filter_level - 1)]); } *pX /= analog_touch_filter_level; *pY /= analog_touch_filter_level; return 1; }
static int TouchCoOrdGet(LcdTouch_t* Touch, int *pX, int *pY) { unsigned int Cnt = 0; *pX = 0; *pY = 0; MicroeTouch_t *MikroeTouch = Touch->UsrData; double X =(double)Touch->pDisplay->LcdTimings->X; double Y =(double)Touch->pDisplay->LcdTimings->Y; if(Touch->pDisplay->LcdTimings->orientation == LCD_ORIENTATION_LANDSCAPE || Touch->pDisplay->LcdTimings->orientation == LCD_ORIENTATION_LANDSCAPE_FLIP) { X =(double)Touch->pDisplay->LcdTimings->Y; Y =(double)Touch->pDisplay->LcdTimings->X; } for(Cnt = 0; Cnt < ANALOG_TOUCH_FILTER_LEVEL;Cnt++) { *pX += to_percentage(Touch->LcdTouch_L_Calibration_Value,Touch->LcdTouch_R_Calibration_Value,X,MikroeTouch->x_data[Cnt & (ANALOG_TOUCH_FILTER_LEVEL - 1)]); *pY += to_percentage(Touch->LcdTouch_U_Calibration_Value,Touch->LcdTouch_D_Calibration_Value,Y,MikroeTouch->y_data[Cnt & (ANALOG_TOUCH_FILTER_LEVEL - 1)]); } *pX /= ANALOG_TOUCH_FILTER_LEVEL; *pY /= ANALOG_TOUCH_FILTER_LEVEL; return 1; }
//####################################################################################### static void paint_scrollbar(tScrollBar* settings, tDisplay *pDisplay, signed int x_start, signed int y_start, signed int x_len, signed int y_len, tControlCommandData* control_comand) { tWindow *ParentWindow = (tWindow*)settings->Internals.ParentWindow; tRectangle back_up_clip = pDisplay->sClipRegion; pDisplay->sClipRegion.sXMin = x_start; pDisplay->sClipRegion.sYMin = y_start; pDisplay->sClipRegion.sXMax = x_start + x_len; pDisplay->sClipRegion.sYMax = y_start + y_len; clip_limit(&pDisplay->sClipRegion, &back_up_clip); if(settings->Internals.NeedEntireRefresh == true || settings->Internals.NeedEntireRepaint == true || settings->Internals.Control.Initiated == false) { if(settings->Enabled) gui_put_item(pDisplay, x_start, y_start, x_len, y_len, settings->Color.Enabled.BackGround, controls_color.Control_Color_Enabled_Border_Push, Cursor_Down,PAINT_STYLE_ROUNDED_CORNERS , true); else gui_put_item(pDisplay, x_start, y_start, x_len, y_len, settings->Color.Disabled.BackGround, settings->Color.Disabled.Border, Cursor_NoAction,PAINT_STYLE_ROUNDED_CORNERS , true); control_comand->WindowRefresh |= true; } signed int ValueBetweenMinAndMax = (settings->Internals.OldMaximum - settings->Internals.OldMinimum); tButton* ButtonSettings = settings->Internals.BtnSettings; tButton* BtnUpSettings = settings->Internals.BtnUpSettings; tButton* BtnDnSettings = settings->Internals.BtnDnSettings; if(settings->Size.X < settings->Size.Y) { BtnUpSettings->Position.X = 2; BtnUpSettings->Position.Y = 2; BtnUpSettings->Internals.PositionOffset.X = x_start - ParentWindow->Internals.Position.X; BtnUpSettings->Internals.PositionOffset.Y = y_start - ParentWindow->Internals.Position.Y; BtnUpSettings->Size.X = settings->Internals.Size.X - 4; BtnUpSettings->Size.Y = settings->Internals.Size.X - 4; BtnDnSettings->Position.X = 2; BtnDnSettings->Position.Y = settings->Internals.Size.Y - (settings->Internals.Size.X - 2); BtnDnSettings->Internals.PositionOffset.X = x_start - ParentWindow->Internals.Position.X; BtnDnSettings->Internals.PositionOffset.Y = y_start - ParentWindow->Internals.Position.Y; BtnDnSettings->Size.X = settings->Internals.Size.X - 4; BtnDnSettings->Size.Y = settings->Internals.Size.X - 4; } else { /* Left */ BtnUpSettings->Position.X = 2; BtnUpSettings->Position.Y = 2; BtnUpSettings->Internals.PositionOffset.X = x_start - ParentWindow->Internals.Position.X; BtnUpSettings->Internals.PositionOffset.Y = y_start - ParentWindow->Internals.Position.Y; BtnUpSettings->Size.X = settings->Internals.Size.Y - 4; BtnUpSettings->Size.Y = settings->Internals.Size.Y - 4; /* Right */ BtnDnSettings->Position.X = settings->Internals.Size.X - (settings->Internals.Size.Y - 2); BtnDnSettings->Position.Y = 2; BtnDnSettings->Internals.PositionOffset.X = x_start - ParentWindow->Internals.Position.X; BtnDnSettings->Internals.PositionOffset.Y = y_start - ParentWindow->Internals.Position.Y; BtnDnSettings->Size.X = settings->Internals.Size.Y - 4; BtnDnSettings->Size.Y = settings->Internals.Size.Y - 4; } if(control_comand->Cursor != Cursor_NoAction || settings->Internals.NeedEntireRefresh == true || settings->Internals.NeedEntireRepaint == true) { BtnUpSettings->Internals.NeedEntireRefresh = settings->Internals.NeedEntireRefresh; BtnUpSettings->Enabled = settings->Enabled; CursorState back = control_comand->Cursor; if(BtnUpSettings->Internals.NeedEntireRefresh) control_comand->Cursor = Cursor_Up; button((void*)BtnUpSettings, control_comand); //control_comand->Cursor = back; BtnDnSettings->Internals.NeedEntireRefresh = settings->Internals.NeedEntireRefresh; BtnDnSettings->Enabled = settings->Enabled; //CursorState back = control_comand->Cursor; //if(BtnDnSettings->Internals.NeedEntireRefresh) control_comand->Cursor = Cursor_Up; button((void*)BtnDnSettings, control_comand); control_comand->Cursor = back; } signed int BtnSize = 0; if(settings->Size.X < settings->Size.Y) BtnSize = settings->Size.Y - ((settings->Size.X - 2)<<1) - 4 - ValueBetweenMinAndMax; else BtnSize = settings->Size.X - ((settings->Size.Y - 2)<<1) - 4 - ValueBetweenMinAndMax; if(BtnSize < settings->Size.MinBtnSize) BtnSize = settings->Size.MinBtnSize; bool scroll_internal_modified = false; if(BtnUpSettings->Events.CursorDown || BtnUpSettings->Events.CursorMove || settings->Internals.OldValue != settings->Value) { BtnUpSettings->Events.CursorDown = false; BtnUpSettings->Events.CursorMove = false; if(settings->Value > settings->Minimum) { if(settings->Internals.OldValue == settings->Value) { settings->Value--; scroll_internal_modified = true; //control_comand->WindowRefresh |= true; //settings->Internals.NeedEntireRefresh = true; } else { settings->Internals.NeedEntireRefresh = false; //control_comand->CursorCoordonateUsed = true; //control_comand->WindowRefresh |= true; } } } if(BtnDnSettings->Events.CursorDown || BtnDnSettings->Events.CursorMove || settings->Internals.OldValue != settings->Value) { BtnDnSettings->Events.CursorDown = false; BtnDnSettings->Events.CursorMove = false; if(settings->Value < settings->Maximum) { if(settings->Internals.OldValue == settings->Value) { settings->Value++; scroll_internal_modified = true; //control_comand->WindowRefresh |= true; //settings->Internals.NeedEntireRefresh = true; } else { settings->Internals.NeedEntireRefresh = false; //control_comand->CursorCoordonateUsed = true; //control_comand->WindowRefresh |= true; } } } bool CursorBtnSelfModified = false; if(ValueBetweenMinAndMax < 1) { ValueBetweenMinAndMax = 1; if(settings->Size.X < settings->Size.Y) { ButtonSettings->Position.X = 2; ButtonSettings->Position.Y = settings->Size.X; //ButtonSettings->Position.X = settings->Position.X + 2; //ButtonSettings->Position.Y = settings->Position.Y + 2 + (settings->Size.X - 2); ButtonSettings->Size.X = settings->Size.X - 4; ButtonSettings->Size.Y = settings->Size.Y - 4 - ((settings->Size.X - 2)<<1); } else { ButtonSettings->Position.X = settings->Size.Y; ButtonSettings->Position.Y = 2; //ButtonSettings->Position.X = settings->Position.X + 2 + (settings->Size.Y - 2); //ButtonSettings->Position.Y = settings->Position.Y + 2; ButtonSettings->Size.X = settings->Size.X - 4 - ((settings->Size.Y - 2)<<1); ButtonSettings->Size.Y = settings->Size.Y - 4; } } else { if(control_comand->CursorCoordonateUsed == false&& settings->Enabled == true && settings->Visible == true) { if(settings->Size.X < settings->Size.Y) { ButtonSettings->Size.Y = BtnSize; ////signed int Steps = settings->Size.Y - 4 - BtnSize; //ButtonSettings->Position.X = settings->Position.X + 2; ////ButtonSettings->Position.Y = settings->Position.Y + 2; ButtonSettings->Size.X = settings->Size.X - 4; //ButtonSettings->Size.Y = settings->Size.Y - 4; if(ButtonSettings->Events.CursorDown == true) { settings->Internals.CoordonateOfTouchDown = control_comand->Y; settings->Internals.CoordonateOfButtonDown = ButtonSettings->Internals.Position.Y - settings->Internals.PositionOffset.Y; ButtonSettings->Events.CursorDown = false; } else if(control_comand->Cursor == Cursor_Move && settings->Internals.CursorDownInsideBox == true && ButtonSettings->Internals.CursorDownInsideBox == true) { ButtonSettings->Position.Y = settings->Internals.CoordonateOfButtonDown + ((control_comand->Y - (ParentWindow->Internals.Position.Y)) - settings->Internals.CoordonateOfTouchDown); if(ButtonSettings->Position.Y < settings->Position.Y + (settings->Size.X - 2) + 2) ButtonSettings->Position.Y = settings->Position.Y + 2 + (settings->Size.X - 2); else if((ButtonSettings->Position.Y + ButtonSettings->Size.Y) > (settings->Position.Y + settings->Size.Y) - 2 - (settings->Size.X - 2)) ButtonSettings->Position.Y = ((settings->Position.Y + settings->Size.Y) - 2) - ButtonSettings->Size.Y - (settings->Size.X - 2); settings->Value = percentage_to(settings->Minimum, settings->Maximum, settings->Size.Y - 4 - BtnSize - ((settings->Size.X - 2)<<1), (ButtonSettings->Position.Y - (settings->Position.Y + 2) - (settings->Size.X - 2))); CursorBtnSelfModified = true; } } else { ButtonSettings->Size.X = BtnSize; ////signed int Steps = settings->Size.X - 4 - BtnSize; //ButtonSettings->Position.Y = settings->Position.Y + 2; ////ButtonSettings->Position.X = settings->Position.X + 2; ButtonSettings->Size.Y = settings->Size.Y - 4; //ButtonSettings->Size.X = settings->Size.X - 4; if(ButtonSettings->Events.CursorDown == true) { settings->Internals.CoordonateOfTouchDown = control_comand->X; settings->Internals.CoordonateOfButtonDown = ButtonSettings->Internals.Position.X; ButtonSettings->Events.CursorDown = false; } else if(control_comand->Cursor == Cursor_Move && settings->Internals.CursorDownInsideBox == true && ButtonSettings->Internals.CursorDownInsideBox == true) { ButtonSettings->Position.X = settings->Internals.CoordonateOfButtonDown + ((control_comand->X - (ParentWindow->Internals.Position.X)) - settings->Internals.CoordonateOfTouchDown); if(ButtonSettings->Position.X < settings->Position.X + (settings->Size.Y - 2) + 2) ButtonSettings->Position.X = settings->Position.X + 2 + (settings->Size.Y - 2); else if((ButtonSettings->Position.X + ButtonSettings->Size.X) > (settings->Position.X + settings->Size.X) - 2 - (settings->Size.Y - 2)) ButtonSettings->Position.X = ((settings->Position.X + settings->Size.X) - 2) - ButtonSettings->Size.X - (settings->Size.Y - 2); settings->Value = percentage_to(settings->Minimum, settings->Maximum, settings->Size.X - 4 - BtnSize - ((settings->Size.Y - 2)<<1), (ButtonSettings->Position.X - (settings->Position.X + 2) - (settings->Size.Y - 2))); CursorBtnSelfModified = true; } } } } bool ValueIsChangedExternaly = false; if(settings->Internals.OldValue != settings->Value) { settings->Internals.OldValue = settings->Value; //settings->Events.ValueChanged = true; ValueIsChangedExternaly = true; settings->Events.ValueChanged = true; if(settings->Events.OnValueChanged.CallBack) { settings->Events.OnValueChanged.CallbackReturnData = settings->Events.OnValueChanged.CallBack(settings->Events.OnValueChanged.CallbackData); } } //if(settings->Enabled) ButtonSettings->Color.Scren = settings->Color.Enabled.BackGround; //else ButtonSettings->Color.Scren = settings->Color.Disabled.BackGround; ButtonSettings->Color.Scren = settings->Color.Scren; if(BtnSize > settings->Size.MinBtnSize) { if(settings->Size.X < settings->Size.Y) ButtonSettings->Position.Y = (settings->Value + 2 + (settings->Size.X - 2)) - settings->Minimum; else ButtonSettings->Position.X = (settings->Value + 2 + (settings->Size.Y - 2)) - settings->Minimum; } else { if(settings->Size.X < settings->Size.Y) ButtonSettings->Position.Y = 2 + (settings->Size.X - 2) + to_percentage(settings->Minimum, settings->Maximum, settings->Size.Y - ((settings->Size.X - 2)<<1) - 4 - settings->Size.MinBtnSize, settings->Value); else ButtonSettings->Position.X = 2 + (settings->Size.Y - 2) + to_percentage(settings->Minimum, settings->Maximum, settings->Size.X - ((settings->Size.Y - 2)<<1) - 4 - settings->Size.MinBtnSize, settings->Value); } if(settings->Internals.NeedEntireRefresh == true || settings->Internals.NeedEntireRepaint == true) { ButtonSettings->Internals.NoPaintBackGround = true; ButtonSettings->Internals.NeedEntireRefresh = true; ButtonSettings->Enabled = settings->Enabled; CursorState back = control_comand->Cursor; control_comand->Cursor = Cursor_Up; button((void*)ButtonSettings, control_comand); control_comand->Cursor = back; ButtonSettings->Internals.NoPaintBackGround = false; } else if(ButtonSettings->Position.X + ParentWindow->Internals.Position.X + ButtonSettings->Internals.PositionOffset.X != ButtonSettings->Internals.Position.X || ButtonSettings->Position.Y + ParentWindow->Internals.Position.Y + ButtonSettings->Internals.PositionOffset.Y != ButtonSettings->Internals.Position.Y) { ButtonSettings->Internals.NeedEntireRefresh = true; CursorState back = control_comand->Cursor; if(scroll_internal_modified) control_comand->Cursor = Cursor_Up; button((void*)ButtonSettings, control_comand); control_comand->Cursor = back; ButtonSettings->Internals.NoPaintBackGround = false; } else { CursorState back = control_comand->Cursor; if(CursorBtnSelfModified) control_comand->Cursor = Cursor_Down; if(ValueIsChangedExternaly) { ButtonSettings->Internals.NeedEntireRefresh = true; control_comand->Cursor = Cursor_Up; } button((void*)ButtonSettings, control_comand); control_comand->Cursor = back; } pDisplay->sClipRegion.sXMin = x_start; pDisplay->sClipRegion.sYMin = y_start; pDisplay->sClipRegion.sXMax = x_start + x_len; pDisplay->sClipRegion.sYMax = y_start + y_len; clip_limit(&pDisplay->sClipRegion, &back_up_clip); box_cache_clean(pDisplay, x_start, y_start, x_len, y_len); pDisplay->sClipRegion = back_up_clip; settings->Internals.NeedEntireRefresh = false; }