Fix slider dragging #36
			
				
			
		
		
		
	|  | @ -538,6 +538,9 @@ ui_sig ui_box_sig(ui_box* box) | ||||||
| 	{ | 	{ | ||||||
| 		vec2 mousePos = ui_mouse_position(); | 		vec2 mousePos = ui_mouse_position(); | ||||||
| 
 | 
 | ||||||
|  | 		sig.mouse = (vec2){mousePos.x - box->rect.x, mousePos.y - box->rect.y}; | ||||||
|  | 		sig.delta = ui_mouse_delta(); | ||||||
|  | 		sig.wheel = ui_mouse_wheel(); | ||||||
| 		sig.hovering = ui_box_hovering(box, mousePos); | 		sig.hovering = ui_box_hovering(box, mousePos); | ||||||
| 
 | 
 | ||||||
| 		if(box->flags & UI_FLAG_CLICKABLE) | 		if(box->flags & UI_FLAG_CLICKABLE) | ||||||
|  | @ -547,6 +550,10 @@ ui_sig ui_box_sig(ui_box* box) | ||||||
| 				sig.pressed = mp_mouse_pressed(input, MP_MOUSE_LEFT); | 				sig.pressed = mp_mouse_pressed(input, MP_MOUSE_LEFT); | ||||||
| 				if(sig.pressed) | 				if(sig.pressed) | ||||||
| 				{ | 				{ | ||||||
|  | 					if(!box->dragging) | ||||||
|  | 					{ | ||||||
|  | 						box->pressedMouse = sig.mouse; | ||||||
|  | 					} | ||||||
| 					box->dragging = true; | 					box->dragging = true; | ||||||
| 				} | 				} | ||||||
| 				sig.doubleClicked = mp_mouse_double_clicked(input, MP_MOUSE_LEFT); | 				sig.doubleClicked = mp_mouse_double_clicked(input, MP_MOUSE_LEFT); | ||||||
|  | @ -570,9 +577,6 @@ ui_sig ui_box_sig(ui_box* box) | ||||||
| 			sig.dragging = box->dragging; | 			sig.dragging = box->dragging; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		sig.mouse = (vec2){mousePos.x - box->rect.x, mousePos.y - box->rect.y}; |  | ||||||
| 		sig.delta = ui_mouse_delta(); |  | ||||||
| 		sig.wheel = ui_mouse_wheel(); |  | ||||||
| 	} | 	} | ||||||
| 	return(sig); | 	return(sig); | ||||||
| } | } | ||||||
|  | @ -1757,18 +1761,14 @@ ui_box* ui_slider(const char* label, f32 thumbRatio, f32* scrollValue) | ||||||
| 
 | 
 | ||||||
| 		//NOTE: interaction
 | 		//NOTE: interaction
 | ||||||
| 		ui_sig thumbSig = ui_box_sig(thumb); | 		ui_sig thumbSig = ui_box_sig(thumb); | ||||||
|  | 		ui_sig trackSig = ui_box_sig(track); | ||||||
| 		if(thumbSig.dragging) | 		if(thumbSig.dragging) | ||||||
| 		{ | 		{ | ||||||
| 			f32 trackExtents = track->rect.c[2+trackAxis] - thumb->rect.c[2+trackAxis]; | 			f32 trackExtents = track->rect.c[2+trackAxis] - thumb->rect.c[2+trackAxis]; | ||||||
| 			f32 delta = thumbSig.delta.c[trackAxis]/trackExtents; | 			*scrollValue = (trackSig.mouse.c[trackAxis] - thumb->pressedMouse.c[trackAxis]) / trackExtents; | ||||||
| 			f32 oldValue = *scrollValue; |  | ||||||
| 
 |  | ||||||
| 			*scrollValue += delta; |  | ||||||
| 			*scrollValue = Clamp(*scrollValue, 0, 1); | 			*scrollValue = Clamp(*scrollValue, 0, 1); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		ui_sig trackSig = ui_box_sig(track); |  | ||||||
| 
 |  | ||||||
| 		if(ui_box_active(frame)) | 		if(ui_box_active(frame)) | ||||||
| 		{ | 		{ | ||||||
| 			//NOTE: activated from outside
 | 			//NOTE: activated from outside
 | ||||||
|  |  | ||||||
|  | @ -318,6 +318,7 @@ struct ui_box | ||||||
| 	bool hot; | 	bool hot; | ||||||
| 	bool active; | 	bool active; | ||||||
| 	vec2 scroll; | 	vec2 scroll; | ||||||
|  | 	vec2 pressedMouse; | ||||||
| 
 | 
 | ||||||
| 	// animation data
 | 	// animation data
 | ||||||
| 	f32 hotTransition; | 	f32 hotTransition; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue