Example #1
0
int check_ui_object_clipped (ui_object *obj)
{

	int
		flag;

	ui_object
		*parent;

	float
		x1,
		x2,
		y1,
		y2,
		x_min,
		y_min,
		x_max,
		y_max,
		old_vp_x1,
		old_vp_y1,
		old_vp_x2,
		old_vp_y2;

	old_vp_x1 = active_viewport.x_min;
	old_vp_y1 = active_viewport.y_min;
	old_vp_x2 = active_viewport.x_max;
	old_vp_y2 = active_viewport.y_max;

	parent = get_ui_object_parent (obj);

	ASSERT (parent);

	x1 = get_ui_object_x (parent);
	y1 = get_ui_object_y (parent);
	x2 = x1 + get_ui_object_x_size (parent);
	y2 = y1 + get_ui_object_y_size (parent);

	x_min = get_ui_object_x (obj);
	y_min = get_ui_object_y (obj);
	x_max = x_min + get_ui_object_x_size (obj);
	y_max = y_min + get_ui_object_y_size (obj);
	
	set_viewport (x1, y1, x2, y2);

	flag = ui_clip_area (&x_min, &y_min, &x_max, &y_max);

	set_viewport (old_vp_x1, old_vp_y1, old_vp_x2, old_vp_y2);

	return flag;
}
Example #2
0
static void update_vslider_ui_object (ui_object *obj)
{

	float
		parent_x1,
		parent_y1,
		parent_x2,
		parent_y2,
		parent_x_origin,
		parent_y_origin;

	float
		x1,
		y1,
		x2,
		y2;

	ui_object
		*parent;

   area_ui_object
      *area;

	float
		old_viewport_x1,
		old_viewport_y1,
		old_viewport_x2,
		old_viewport_y2;

   // store parents viewport data

	old_viewport_x1 = active_viewport.x_min;
	old_viewport_y1 = active_viewport.y_min;
	old_viewport_x2 = active_viewport.x_max;
	old_viewport_y2 = active_viewport.y_max;

   area = (area_ui_object *) obj->data;

	// store parents viewport data

	parent = get_ui_object_parent (obj);

	parent_x_origin = get_ui_object_x_origin (parent);

	parent_y_origin = get_ui_object_y_origin (parent);

	parent_x1 = get_ui_object_x (parent);

	parent_y1 = get_ui_object_y (parent);

	parent_x2 = parent_x1 + get_ui_object_x_size (parent);

	parent_y2 = parent_y1 + get_ui_object_y_size (parent);

	recalculate_slider_size (obj);

   if (area->drawable)
   {

		ui_set_origin (0, 0);

      draw_ui_object (obj);

      if (area->child)
      {

			x1 = get_ui_object_x (obj);

			y1 = get_ui_object_y (obj);

			x2 = x1 + get_ui_object_x_size (obj);

			y2 = y1 + get_ui_object_y_size (obj);

			ui_clip_area (&x1, &y1, &x2, &y2);

			set_viewport (x1, y1, x2, y2);
	
			ui_set_origin (0, 0);
	
         update_ui_object (area->child);
      }
	}

	set_viewport (old_viewport_x1, old_viewport_y1, old_viewport_x2, old_viewport_y2);

	if (area->next)
	{

		parent = get_ui_object_parent (obj);

		if (parent)
		{
	
			set_viewport (parent_x1, parent_y1, parent_x2, parent_y2);
	
			ui_set_origin (parent_x_origin, parent_y_origin);
		}

		update_ui_object (area->next);
	}
}
Example #3
0
static void update_mslider_ui_object (ui_object *obj)
{

	float
		parent_x1,
		parent_y1,
		parent_x2,
		parent_y2,
		parent_x_origin,
		parent_y_origin;

	float
		min,
		max,
		x1,
		y1,
		x2,
		y2;

	ui_object
		*object_to_slide,
		*parent;

   area_ui_object
      *area;

	float
		old_viewport_x1,
		old_viewport_y1,
		old_viewport_x2,
		old_viewport_y2;

   // store parents viewport data

	old_viewport_x1 = active_viewport.x_min;
	old_viewport_y1 = active_viewport.y_min;
	old_viewport_x2 = active_viewport.x_max;
	old_viewport_y2 = active_viewport.y_max;

   area = obj->data;

	// Scroll if required

	if (scroll)
	{

		min = get_ui_object_slider_min (obj);
	
		max = get_ui_object_slider_max (obj);
	
		object_to_slide = get_ui_object_next (obj);
  
		scroll_slider (object_to_slide, min, max, scroll);
	}

	// store parents viewport data

	parent = get_ui_object_parent (obj);

	parent_x_origin = get_ui_object_x_origin (parent);

	parent_y_origin = get_ui_object_y_origin (parent);

	parent_x1 = get_ui_object_x (parent);

	parent_y1 = get_ui_object_y (parent);

	parent_x2 = parent_x1 + get_ui_object_x_size (parent);

	parent_y2 = parent_y1 + get_ui_object_y_size (parent);

   if (area->drawable)
   {

		ui_set_origin (0, 0);

      draw_ui_object (obj);

      if (area->child)
      {

			x1 = get_ui_object_x (obj);

			y1 = get_ui_object_y (obj);

			x2 = x1 + get_ui_object_x_size (obj);

			y2 = y1 + get_ui_object_y_size (obj);

			ui_clip_area (&x1, &y1, &x2, &y2);

			set_viewport (x1, y1, x2, y2);
	
			ui_set_origin (0, 0);
	
         update_ui_object (area->child);
      }
	}

	if (area->next)
	{

		parent = get_ui_object_parent (obj);

		if (parent)
		{
	
			set_viewport (parent_x1, parent_y1, parent_x2, parent_y2);
	
			ui_set_origin (parent_x_origin, parent_y_origin);
		}

		update_ui_object (area->next);
	}

	set_viewport (old_viewport_x1, old_viewport_y1, old_viewport_x2, old_viewport_y2);
}
Example #4
0
static void update_menu_ui_object (ui_object *obj)
{

	float
		x1,
		y1,
		x2,
		y2,
		parent_x1,
		parent_y1,
		parent_x2,
		parent_y2,
		grand_parent_x_origin = 0.0,
		grand_parent_y_origin = 0.0;

	ui_object
		*stack_head,
		*grand_parent,
		*parent;

   area_ui_object
      *area;

   area = obj->data;

	// store parents viewport data

	parent = get_ui_object_parent (obj);

	grand_parent = get_ui_object_parent (parent);

	if (parent)
	{
	
  		if (grand_parent)
		{
	
			grand_parent_x_origin = get_ui_object_x_origin (grand_parent);

			grand_parent_y_origin = get_ui_object_y_origin (grand_parent);
		}

		ui_set_origin (grand_parent_x_origin, grand_parent_y_origin);

		parent_x1 = get_ui_object_x (parent);

		parent_y1 = get_ui_object_y (parent);

		parent_x2 = parent_x1 + get_ui_object_x_size (parent);

		parent_y2 = parent_y1 + get_ui_object_y_size (parent);

		x1 = parent_x1;

		y1 = parent_y1;

		x2 = parent_x2;

		y2 = parent_y2;

		ui_clip_area (&x1, &y1, &x2, &y2);

		x1 += grand_parent_x_origin;

		y1 += grand_parent_y_origin;

		x2 += grand_parent_x_origin;

		y2 += grand_parent_y_origin;

		set_viewport (x1, y1, x2, y2);
	}

   if (area->drawable)
   {

      draw_ui_object (obj);
	}

	// and its list head

	stack_head = obj->stack_head;

	if (stack_head)
	{
	
		parent = get_ui_object_parent (stack_head);
	
		grand_parent = get_ui_object_parent (parent);
	
		if (parent)
		{

			if (grand_parent)
			{
		
				grand_parent_x_origin = get_ui_object_x_origin (grand_parent);

				grand_parent_y_origin = get_ui_object_y_origin (grand_parent);
			}
	
			ui_set_origin (grand_parent_x_origin, grand_parent_y_origin);

			parent_x1 = get_ui_object_x (parent);

			parent_y1 = get_ui_object_y (parent);

			parent_x2 = parent_x1 + get_ui_object_x_size (parent);

			parent_y2 = parent_y1 + get_ui_object_y_size (parent);
	
			x1 = parent_x1;

			y1 = parent_y1;

			x2 = parent_x2;

			y2 = parent_y2;

			ui_clip_area (&x1, &y1, &x2, &y2);
	
			x1 += grand_parent_x_origin;

			y1 += grand_parent_y_origin;

			x2 += grand_parent_x_origin;

			y2 += grand_parent_y_origin;

			set_viewport (x1, y1, x2, y2);
		}
	
		if (area->drawable)
		{
	
			draw_ui_object (stack_head);
		}
	}

	// list head end

	if (area->next)
	{

		parent = get_ui_object_parent (obj);

		grand_parent = get_ui_object_parent (parent);

		if (parent)
		{

			if (grand_parent)
			{
		
				grand_parent_x_origin = get_ui_object_x_origin (grand_parent);

				grand_parent_y_origin = get_ui_object_y_origin (grand_parent);
			}

			ui_set_origin (grand_parent_x_origin, grand_parent_y_origin);
	
			parent_x1 = get_ui_object_x (parent);

			parent_y1 = get_ui_object_y (parent);

			parent_x2 = parent_x1 + get_ui_object_x_size (parent);

			parent_y2 = parent_y1 + get_ui_object_y_size (parent);
	
			x1 = parent_x1;

			y1 = parent_y1;

			x2 = parent_x2;

			y2 = parent_y2;
	
			x1 += grand_parent_x_origin;

			y1 += grand_parent_y_origin;

			x2 += grand_parent_x_origin;

			y2 += grand_parent_y_origin;

			set_viewport (x1, y1, x2, y2);
			
			parent_x1 += get_ui_object_x_origin (parent);

			parent_y1 += get_ui_object_y_origin (parent);

			ui_set_origin (parent_x1, parent_y1);
		}

		update_ui_object (area->next);
	}
}
Example #5
0
void ui_draw_button (float x1, float y1, float x2, float y2, int state)
{

	float
		new_x1,
		new_y1,
		new_x2,
		new_y2;

	int
		int_x1,
		int_y1,
		int_x2,
		int_y2;


	rgb_colour
		background_colour,
		top_line_colour,
		bottom_line_colour,
		left_line_colour,
		right_line_colour,
		top_left_pixel_colour,
		bottom_left_pixel_colour,
		top_right_pixel_colour,
		bottom_right_pixel_colour;

	x1 -= ui_x_origin;
	y1 -= ui_y_origin;
	x2 -= ui_x_origin;
	y2 -= ui_y_origin;

	new_x1 = x1;

	new_y1 = y1;

	new_x2 = x2;

	new_y2 = y2;

	// clip button to ui viewport

	ui_clip_area (&new_x1, &new_y1, &new_x2, &new_y2);

	// button coords should be in viewport coords,
	// so add ui_origin to convert into screen coords

	x1 += ui_x_origin;

	y1 += ui_y_origin;

	x2 += ui_x_origin;

	y2 += ui_y_origin;

	new_x1 += ui_x_origin;

	new_y1 += ui_y_origin;

	new_x2 += ui_x_origin;

	new_y2 += ui_y_origin;

	// check if possible to draw

	if ((new_x2 - new_x1 < 2) || (new_y2 - new_y1 <= 2))
	{

		return;
	}

	// convert variabless to ints to save crap conversion

	convert_float_to_int (new_x1, &int_x1);
	convert_float_to_int (new_y1, &int_y1);
	convert_float_to_int (new_x2, &int_x2);
	convert_float_to_int (new_y2, &int_y2);

	// assign correct colours

	switch (state)
	{

		case UI_OBJECT_STATE_ON:
		{

			background_colour = ui_button_down_background;
			top_line_colour = ui_button_down_dark_edge;
			bottom_line_colour = ui_button_down_light_edge;
			left_line_colour = ui_button_down_dark_edge;
			right_line_colour = ui_button_down_light_edge;
			top_left_pixel_colour = ui_button_down_dark_edge;
			bottom_left_pixel_colour = ui_button_down_light_edge;
			top_right_pixel_colour = ui_button_down_light_edge;
			bottom_right_pixel_colour = ui_button_down_light_edge;

			break;
		}
		case UI_OBJECT_STATE_OFF:
		{

			background_colour = ui_button_up_background;
			top_line_colour = ui_button_up_light_edge;
			bottom_line_colour = ui_button_up_dark_edge;
			left_line_colour = ui_button_up_light_edge;
			right_line_colour = ui_button_up_dark_edge;
			top_left_pixel_colour = ui_button_up_light_edge;
			bottom_left_pixel_colour = ui_button_up_light_edge;
			top_right_pixel_colour = ui_button_up_light_edge;
			bottom_right_pixel_colour = ui_button_up_dark_edge;

			break;
		}
		case UI_OBJECT_STATE_HIGHLIGHTED:
		{

			background_colour = ui_button_highlighted_background;
			top_line_colour = ui_button_highlighted_light_edge;
			bottom_line_colour = ui_button_highlighted_dark_edge;
			left_line_colour = ui_button_highlighted_light_edge;
			right_line_colour = ui_button_highlighted_dark_edge;
			top_left_pixel_colour = ui_button_highlighted_light_edge;
			bottom_left_pixel_colour = ui_button_highlighted_light_edge;
			top_right_pixel_colour = ui_button_highlighted_light_edge;
			bottom_right_pixel_colour = ui_button_highlighted_dark_edge;

			break;
		}
	}

	// draw background

	if (x1 != new_x1)
	{

		if (y1 != new_y1)
		{

			set_block (int_x1, int_y1, int_x2, int_y2, background_colour);
		}
		else
		{

			set_block (int_x1, int_y1 + 1, int_x2, int_y2, background_colour);
		}
	}
	else if (y1 != new_y1)
	{

		set_block (int_x1 + 1 , int_y1, int_x2, int_y2, background_colour);
	}
	else
	{

		set_block (int_x1 + 1 , int_y1 + 1, int_x2 - 1, int_y2 - 1, background_colour);
	}

	// draw top line

	if (y1 == new_y1)
	{

	  	if ((x1 == new_x1) && (x2 == new_x2))
		{

			draw_line (new_x1 + 2, new_y1, new_x2 - 2, new_y1, top_line_colour);
		}
	  	else if (x1 == new_x1)
		{

			draw_line (new_x1 + 2, new_y1, new_x2, new_y1, top_line_colour);
		}
	  	else if (x2 == new_x2)
		{

			draw_line (new_x1, new_y1, new_x2 - 2, new_y1, top_line_colour);
		}
	  	else
		{

			draw_line (new_x1, new_y1, new_x2, new_y1, top_line_colour);
		}
	}

	// draw botton line

	if (y2 == new_y2)
	{

	  	if ((x1 == new_x1) && (x2 == new_x2))
		{

			draw_line (new_x1 + 2, new_y2, new_x2 - 2, new_y2, bottom_line_colour);
		}
	  	else if (x1 == new_x1)
		{

			draw_line (new_x1 + 2, new_y2, new_x2, new_y2, bottom_line_colour);
		}
	  	else if (x2 == new_x2)
		{

			draw_line (new_x1, new_y2, new_x2 - 2, new_y2, bottom_line_colour);
		}
	  	else
		{

			draw_line (new_x1, new_y2, new_x2, new_y2, bottom_line_colour);
		}
	}

	// draw left side

	if (x1 == new_x1)
	{

	  	if ((y1 == new_y1) && (y2 == new_y2))
		{

			draw_line (new_x1, new_y1 + 2, new_x1, new_y2 - 2, left_line_colour);
		}
	  	else if (y1 == new_y1)
		{

			draw_line (new_x1, new_y1 + 2, new_x1, new_y2, left_line_colour);
		}
	  	else if (y2 == new_y2)
		{

			draw_line (new_x1, new_y1, new_x1, new_y2 - 2, left_line_colour);
		}
	  	else
		{

			draw_line (new_x1, new_y1, new_x1, new_y2, left_line_colour);
		}
	}

	// draw right side

	if (x2 == new_x2)
	{

	  	if ((y1 == new_y1) && (y2 == new_y2))
		{

			draw_line (new_x2, new_y1 + 2, new_x2, new_y2 - 2, right_line_colour);
		}
	  	else if (y1 == new_y1)
		{

			draw_line (new_x2, new_y1 + 2, new_x2, new_y2, right_line_colour);
		}
	  	else if (y2 == new_y2)
		{

			draw_line (new_x2, new_y1, new_x2, new_y2 - 2, right_line_colour);
		}
	  	else
		{

			draw_line (new_x2, new_y1, new_x2, new_y2, right_line_colour);
		}
	}

	// draw odd pixels in corners

	if (x1 == new_x1)
	{

		// top left
		if (y1 == new_y1)
		{

			set_pixel (int_x1 + 1, int_y1 + 1, top_left_pixel_colour);
		}

		// bottom left
		if (y2 == new_y2)
		{

			set_pixel (int_x1 + 1, int_y2 - 1, bottom_left_pixel_colour);
		}
	}

	if (x2 == new_x2)
	{

		// top right
		if (y1 == new_y1)
		{

			set_pixel (int_x2 - 1, int_y1 + 1, top_right_pixel_colour);
		}

		// bottom right
		if (y2 == new_y2)
		{

			set_pixel (int_x2 - 1, int_y2 - 1, bottom_right_pixel_colour);
		}
	}
}
Example #6
0
void ui_draw_area (float x1, float y1, float x2, float y2, ui_object *obj)
{

	float
		new_x1,
		new_y1,
		new_x2,
		new_y2;

	int
		state,
		int_x1,
		int_y1,
		int_x2,
		int_y2;

	rgb_colour
		background_colour,
		top_line_colour,
		bottom_line_colour,
		left_line_colour,
		right_line_colour;

	state = get_ui_object_state (obj);

	new_x1 = x1;

	new_y1 = y1;

	new_x2 = x2;

	new_y2 = y2;

	// clip area to ui viewport

	ui_clip_area (&new_x1, &new_y1, &new_x2, &new_y2);
	ui_clip_area (&x1, &y1, &x2, &y2);

	// button coords should be in viewport coords,
	// so add ui_origin to convert into screen coords

	x1 += ui_x_origin;

	y1 += ui_y_origin;

	x2 += ui_x_origin;

	y2 += ui_y_origin;

	new_x1 += ui_x_origin;

	new_y1 += ui_y_origin;

	new_x2 += ui_x_origin;

	new_y2 += ui_y_origin;

	// check if possible to draw

	if ((new_x2 - new_x1 < 2) || (new_y2 - new_y1 <= 2))
	{

		return;
	}

	// convert variabless to ints to save crap conversion

	convert_float_to_int (new_x1, &int_x1);
	convert_float_to_int (new_y1, &int_y1);
	convert_float_to_int (new_x2, &int_x2);
	convert_float_to_int (new_y2, &int_y2);

	// assign correct colours

	switch (state)
	{

		case UI_OBJECT_STATE_ON:
		case UI_OBJECT_STATE_OFF:
		{
			
			background_colour = get_ui_object_colour (obj); //ui_area_background;
			top_line_colour = ui_area_light_edge;
			bottom_line_colour = ui_area_dark_edge;
			left_line_colour = ui_area_light_edge;
			right_line_colour = ui_area_dark_edge;
			
			break;
		}

		case UI_OBJECT_STATE_HIGHLIGHTED:
		{
			
			background_colour = get_ui_object_highlighted_colour (obj); // ui_area_highlighted_background;
			top_line_colour = ui_area_highlighted_light_edge;
			bottom_line_colour = ui_area_highlighted_dark_edge;
			left_line_colour = ui_area_highlighted_light_edge;
			right_line_colour = ui_area_highlighted_dark_edge;

			break;
		}
	}

	// draw background

	if (x1 != new_x1)
	{

		if (y1 != new_y1)
		{
			
			set_block (int_x1, int_y1, int_x2, int_y2, background_colour);
		}
		else
		{

			set_block (int_x1, int_y1 + 1, int_x2, int_y2, background_colour);
		}
	}
	else if (y1 != new_y1)
	{

		set_block (int_x1 + 1 , int_y1, int_x2, int_y2, background_colour);
	}
	else
	{

		set_block (int_x1 + 1 , int_y1 + 1, int_x2, int_y2, background_colour);
	}

	// draw top line

	if (y1 == new_y1)
	{
		
	  	if ((x1 == new_x1) && (x2 == new_x2))
		{
			
			draw_line (new_x1 + 1, new_y1, new_x2 - 1, new_y1, top_line_colour);
		}
	  	else if (x1 == new_x1)
		{
			
			draw_line (new_x1 + 1, new_y1, new_x2, new_y1, top_line_colour);
		}
	  	else if (x2 == new_x2)
		{
			
			draw_line (new_x1, new_y1, new_x2 - 1, new_y1, top_line_colour);
		}
	  	else
		{
			
			draw_line (new_x1, new_y1, new_x2, new_y1, top_line_colour);
		}
	}

	// draw botton line

	if (y2 == new_y2)
	{

	  	if ((x1 == new_x1) && (x2 == new_x2))
		{
			
			draw_line (new_x1 + 1, new_y2, new_x2 - 1, new_y2, bottom_line_colour);
		}
	  	else if (x1 == new_x1)
		{

			draw_line (new_x1 + 1, new_y2, new_x2, new_y2, bottom_line_colour);
		}
	  	else if (x2 == new_x2)
		{
			
			draw_line (new_x1, new_y2, new_x2 - 1, new_y2, bottom_line_colour);
		}
	  	else
		{
			
			draw_line (new_x1, new_y2, new_x2, new_y2, bottom_line_colour);
		}
	}

	// draw left side

	if (x1 == new_x1)
	{
		
	  	if ((y1 == new_y1) && (y2 == new_y2))
		{
			
			draw_line (new_x1, new_y1 + 1, new_x1, new_y2 - 1, left_line_colour);
		}
	  	else if (y1 == new_y1)
		{

			draw_line (new_x1, new_y1 + 1, new_x1, new_y2, left_line_colour);
		}
	  	else if (y2 == new_y2)
		{
			
			draw_line (new_x1, new_y1, new_x1, new_y2 - 1, left_line_colour);
		}
	  	else
		{
			
			draw_line (new_x1, new_y1, new_x1, new_y2, left_line_colour);
		}
	}

	// draw right side

	if (x2 == new_x2)
	{

	  	if ((y1 == new_y1) && (y2 == new_y2))
		{
			
			draw_line (new_x2, new_y1 + 1, new_x2, new_y2 - 1, right_line_colour);
		}
	  	else if (y1 == new_y1)
		{

			draw_line (new_x2, new_y1 + 1, new_x2, new_y2, right_line_colour);
		}
	  	else if (y2 == new_y2)
		{
			
			draw_line (new_x2, new_y1, new_x2, new_y2 - 1, right_line_colour);
		}
	  	else
		{
			
			draw_line (new_x2, new_y1, new_x2, new_y2, right_line_colour);
		}
	}
}