[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51031] trunk/blender/source/blender/ editors/interface: avoid a sqrtf call in ui_hsvcircle_vals_from_pos() for values outside the circle.

Campbell Barton ideasman42 at gmail.com
Thu Oct 4 11:33:14 CEST 2012


Revision: 51031
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51031
Author:   campbellbarton
Date:     2012-10-04 09:33:14 +0000 (Thu, 04 Oct 2012)
Log Message:
-----------
avoid a sqrtf call in ui_hsvcircle_vals_from_pos() for values outside the circle.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_intern.h
    trunk/blender/source/blender/editors/interface/interface_widgets.c

Modified: trunk/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_intern.h	2012-10-04 09:20:58 UTC (rev 51030)
+++ trunk/blender/source/blender/editors/interface/interface_intern.h	2012-10-04 09:33:14 UTC (rev 51031)
@@ -365,7 +365,8 @@
 extern void ui_get_but_vectorf(uiBut *but, float vec[3]);
 extern void ui_set_but_vectorf(uiBut *but, const float vec[3]);
 
-extern void ui_hsvcircle_vals_from_pos(float *valrad, float *valdist, rcti *rect, float mx, float my);
+extern void ui_hsvcircle_vals_from_pos(float *val_rad, float *val_dist, const rcti *rect,
+                                       const float mx, const float my);
 
 extern void ui_get_but_string(uiBut *but, char *str, size_t maxlen);
 extern void ui_convert_to_unit_alt_name(uiBut *but, char *str, size_t maxlen);

Modified: trunk/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_widgets.c	2012-10-04 09:20:58 UTC (rev 51030)
+++ trunk/blender/source/blender/editors/interface/interface_widgets.c	2012-10-04 09:33:14 UTC (rev 51031)
@@ -1889,27 +1889,18 @@
 	
 }
 
-void ui_hsvcircle_vals_from_pos(float *valrad, float *valdist, rcti *rect, float mx, float my)
+void ui_hsvcircle_vals_from_pos(float *val_rad, float *val_dist, const rcti *rect,
+                                const float mx, const float my)
 {
 	/* duplication of code... well, simple is better now */
-	float centx = BLI_rcti_cent_x_fl(rect);
-	float centy = BLI_rcti_cent_y_fl(rect);
-	float radius, dist;
-	
-	if (BLI_rcti_size_x(rect) > BLI_rcti_size_y(rect))
-		radius = (float)BLI_rcti_size_y(rect) / 2;
-	else
-		radius = (float)BLI_rcti_size_x(rect) / 2;
+	const float centx = BLI_rcti_cent_x_fl(rect);
+	const float centy = BLI_rcti_cent_y_fl(rect);
+	const float radius = (float)mini(BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)) / 2.0f;
+	const float m_delta[2] = {mx - centx, my - centy};
+	const float dist_squared = len_squared_v2(m_delta);
 
-	mx -= centx;
-	my -= centy;
-	dist = sqrt(mx * mx + my * my);
-	if (dist < radius)
-		*valdist = dist / radius;
-	else
-		*valdist = 1.0f;
-	
-	*valrad = atan2f(mx, my) / (2.0f * (float)M_PI) + 0.5f;
+	*val_dist = (dist_squared < (radius * radius)) ? sqrtf(dist_squared) / radius : 1.0f;
+	*val_rad = atan2f(m_delta[0], m_delta[1]) / (2.0f * (float)M_PI) + 0.5f;
 }
 
 static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect)




More information about the Bf-blender-cvs mailing list