173a2ffbaSStephan Aßmus/*
273a2ffbaSStephan Aßmus * Copyright 2006, Haiku. All rights reserved.
373a2ffbaSStephan Aßmus * Distributed under the terms of the MIT License.
473a2ffbaSStephan Aßmus *
573a2ffbaSStephan Aßmus * Authors:
673a2ffbaSStephan Aßmus *		Stephan A��mus <superstippi@gmx.de>
773a2ffbaSStephan Aßmus */
873a2ffbaSStephan Aßmus
973a2ffbaSStephan Aßmus#ifndef SUPPORT_H
1073a2ffbaSStephan Aßmus#define SUPPORT_H
1173a2ffbaSStephan Aßmus
1273a2ffbaSStephan Aßmus#include <Rect.h>
1373a2ffbaSStephan Aßmus
1473a2ffbaSStephan Aßmus// constrain
1573a2ffbaSStephan Aßmusinline void
1673a2ffbaSStephan Aßmusconstrain(float& value, float min, float max)
1773a2ffbaSStephan Aßmus{
1873a2ffbaSStephan Aßmus	if (value < min)
1973a2ffbaSStephan Aßmus		value = min;
2073a2ffbaSStephan Aßmus	if (value > max)
2173a2ffbaSStephan Aßmus		value = max;
2273a2ffbaSStephan Aßmus}
2373a2ffbaSStephan Aßmus
245ffbe7d7SAugustin Cavalier#ifdef __i386__
25d2055064SJérôme Duval
2673a2ffbaSStephan Aßmus// constrain_int32_0_255_asm
2773a2ffbaSStephan Aßmusinline int32
2873a2ffbaSStephan Aßmusconstrain_int32_0_255_asm(int32 value) {
29e3138053SStephan Aßmus	asm("movl  $0,    %%ecx\n\t"
30e3138053SStephan Aßmus		"movl  $255,  %%edx\n\t"
31e3138053SStephan Aßmus		"cmpl  %%ecx, %%eax\n\t"
32e3138053SStephan Aßmus		"cmovl %%ecx, %%eax\n\t"
33e3138053SStephan Aßmus		"cmpl  %%edx, %%eax\n\t"
34e3138053SStephan Aßmus		"cmovg %%edx, %%eax"
35e3138053SStephan Aßmus		: "=a" (value)
36e3138053SStephan Aßmus		: "a" (value)
37e3138053SStephan Aßmus		: "%ecx", "%edx" );
38e3138053SStephan Aßmus	return value;
3973a2ffbaSStephan Aßmus}
4073a2ffbaSStephan Aßmus
41d2055064SJérôme Duval#define constrain_int32_0_255 constrain_int32_0_255_asm
42d2055064SJérôme Duval
43d2055064SJérôme Duval#else
44d2055064SJérôme Duval
4573a2ffbaSStephan Aßmusinline int32
46e3138053SStephan Aßmusconstrain_int32_0_255_c(int32 value)
47e3138053SStephan Aßmus{
48e3138053SStephan Aßmus	return max_c(0, min_c(255, value));
4973a2ffbaSStephan Aßmus}
5073a2ffbaSStephan Aßmus
51d2055064SJérôme Duval#define constrain_int32_0_255 constrain_int32_0_255_c
52d2055064SJérôme Duval
53d2055064SJérôme Duval#endif
5473a2ffbaSStephan Aßmus
5573a2ffbaSStephan Aßmus// rect_to_int
5673a2ffbaSStephan Aßmusinline void
5773a2ffbaSStephan Aßmusrect_to_int(BRect r,
5873a2ffbaSStephan Aßmus			int32& left, int32& top, int32& right, int32& bottom)
5973a2ffbaSStephan Aßmus{
6073a2ffbaSStephan Aßmus	left = (int32)floorf(r.left);
6173a2ffbaSStephan Aßmus	top = (int32)floorf(r.top);
6273a2ffbaSStephan Aßmus	right = (int32)ceilf(r.right);
6373a2ffbaSStephan Aßmus	bottom = (int32)ceilf(r.bottom);
6473a2ffbaSStephan Aßmus}
6573a2ffbaSStephan Aßmus
6673a2ffbaSStephan Aßmus
6773a2ffbaSStephan Aßmus# endif // SUPPORT_H
68