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;
}
예제 #2
0
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;
}
예제 #3
0
//#######################################################################################
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;
}