Slider

Слайдер, рисуется на чистом draw_shape, легко кастомизируется на этапе проектирования комнаты.

/// @description Инициализация
//Site:   MidaDev.ru

hh1 = sprite_height;
hh2 = bbox_right - bbox_left;
//масштаб линейке поотношению к масштабу спрайта
slider_step_scal = hh2 / (slider_max - slider_min);

//факт захвата ползунка мышкой
grab_mouse = false;

alarm[2] = 1;

 

/// @description alarm[2] Обновление текcтового поля
//Site:   MidaDev.ru
//Author: Dimusikus

if instance_exists(slider_text_object) then if variable_instance_exists(slider_text_object, "text_text") then slider_text_object.text_text = slider_position;
	
alarm[2] = 1;
/// @description Draw Рисует контроллер
//Site:   MidaDev.ru
//Author: Dimusikus

//slider_ruler_color		цвет полоски
//slider_depth_ruler		толщина полоски
//slider_ruler_border_color тцвет бордюра полоски
//slider_step_scal			масштаб в экранных координатах
//slider_position			позиция бегунка
//slider_min				минимальное значение бегунка
//slider_max				максимальное значение бегунка
//grab_mouse				захват ползунка мышкой
//slider_markup				рисовать или нет масштабные риски
//slider_depth_begunok		масштаб бегунка
//
//
	//--------------------------------------------------------------------------------------------
	//рисуем полоску, заменить бы на draw_buttom........
	draw_set_color(slider_ruler_color);
	draw_rectangle(bbox_left, y - slider_depth_ruler, bbox_right, y + slider_depth_ruler, false);
	
	draw_set_color(slider_ruler_border_color);
	draw_rectangle(bbox_left, y - slider_depth_ruler, bbox_right, y + slider_depth_ruler, true);
	
	//--------------------------------------------------------------------------------------------
	//проверка на отхват мышкой, т.к. курсор может уехать за пределы ползунка, но это не значит
	//что кнопка мыши отпувстила сам ползунок
	if mouse_check_button_released(mb_left) then grab_mouse = false;
	
	//--------------------------------------------------------------------------------------------
	//рисуем ползунок, но сначала вычисляем его координаты все
	if grab_mouse
	{	//мышка навелась на кнопку
		//позицию ползунка приравниваем к позиции мышки
		poso = slider_min + (device_mouse_x_to_gui(0) - bbox_left) / slider_step_scal;		
		//масштабируем правильно позицию ползунка согласно slider_step
		poso = round(poso  / slider_step)*slider_step;
		
		//отклампиваем минимум и максимум значений ползунка
		slider_position =  clamp(poso , slider_min, slider_max);		
	}	
	
	//--------------------------------------------------------------------------------------------
	//вычисляем позицию ползунка на полоске
	xx = slider_step_scal * (slider_position - slider_min);
	
	//формируем масштаб ползунка в зависимости от настроек
	x1 = bbox_left + xx - slider_depth_begunok;
	y1 = bbox_top + 0 ;
	x2 = bbox_left + xx + slider_depth_begunok;
	y2 = bbox_bottom - 0;	
	
	//--------------------------------------------------------------------------------------------
	//ну уже и рисуем сам ползунок
	draw_set_color(slider_ruler_color);		
	draw_button(x1,y1,x2,y2, true);	
	
	//--------------------------------------------------------------------------------------------
	//рисуем масштабные метки под линейкой
	if (slider_markup) then
	{		
		//perc1 = slider_step / 100;
		//if (slider_max&1) {perc10 = perc1 * 16.6666;} else { perc10 = perc1 * 10;}
		//if (slider_max&1) {perc50 = perc1 * 33.3333;} else { perc50 = perc1 * 50;}
		
		draw_set_color(slider_ruler_color);		
		//рисуем в начале рисочку
		draw_point(bbox_left , bbox_bottom - 3);
		draw_point(bbox_left , bbox_bottom - 2);
					
		//если шак не меньше отдного пикселя то рисуем рисочки по всей длинне
		if (slider_step*slider_step_scal) >= 1 then
		for(i=0; i <= (slider_max - slider_min); i = i + slider_step)
		{			
			draw_point(bbox_left + i*slider_step_scal, bbox_bottom - 0);
			draw_point(bbox_left + i*slider_step_scal, bbox_bottom - 1);
		}
		
		//рисуем в конце рисочку
		//draw_point(bbox_left + (slider_max - slider_min)*slider_step_scal, bbox_bottom - 3);
		//draw_point(bbox_left + (slider_max - slider_min)*slider_step_scal, bbox_bottom - 2);		
		draw_point(bbox_right , bbox_bottom - 3);
		draw_point(bbox_right , bbox_bottom - 2);
				
		//вычисляем можно ли отобразить корректно середину линейки
		if !(((slider_max-slider_min)/slider_step)&1)
		{	
			draw_point(bbox_left + (slider_max - slider_min)/2*slider_step_scal, bbox_bottom - 3);
			draw_point(bbox_left + (slider_max - slider_min)/2*slider_step_scal, bbox_bottom - 2);
		};
	}
	

 

/// @description LeftPressed grab mouse

//произошол захват ползунка мышкой
grab_mouse = true;

 

/// @description LeftReleased ungrab mouse

//произошол отхват  ползунка мышкой
grab_mouse = false;