Exemplo n.º 1
0
void Window_Impl::on_render(Canvas &canvas, const Rect &update_rect)
{
	if (!has_frame)
		return;

	Rect rect = window->get_size();

	int caption_height = part_caption.get_css_height();
	int frameleft_width = part_frameleft.get_css_width();
	int frameright_width = part_frameright.get_css_width();
	int framebottom_height = part_framebottom.get_css_height();

	Rect caption_rect = Rect(rect.left, rect.top, rect.right, rect.top + caption_height);
	part_caption.render_box(canvas, caption_rect);

	Rect frameleft_rect = Rect(rect.left, rect.top + caption_height, rect.left + frameleft_width, rect.bottom - framebottom_height);
	part_frameleft.render_box(canvas, frameleft_rect);

	Rect frameright_rect = Rect(rect.right - frameright_width, rect.top + caption_height, rect.right, rect.bottom - framebottom_height);
	part_frameright.render_box(canvas, frameright_rect);

	Rect framebottom_rect = Rect(rect.left, rect.bottom - framebottom_height, rect.right, rect.bottom);
	part_framebottom.render_box(canvas, framebottom_rect);

	Rect part_buttonclose_rect = get_part_buttonclose_rect();
	part_buttonclose.render_box(canvas, part_buttonclose_rect);

	Size text_size = window->get_render_text_size(canvas, title);
	window->render_text(canvas, title,
		caption_rect.left + 10,
		caption_rect.top + caption_rect.get_height()/2 + text_size.height/2 - 2);
}
Exemplo n.º 2
0
void ProgressBar_Impl::on_render(Canvas &canvas, const Rect &update_rect)
{
	Rect rect = progressbar->get_size();
	
	if (marquee_mode)
	{
		if (rect.get_width() > 0)
		{
			Rect content_box = progressbar->get_content_box();

			Rect progress_rect;
			progress_rect.left = content_box.left + marquee_position;
			progress_rect.top = content_box.top;
			progress_rect.bottom = content_box.bottom;
			progress_rect.right = content_box.left + marquee_position + marquee_box_width;

			if (progress_rect.left < content_box.left)
			{
				progress_rect.left = 0;
				progress_rect.right -= (content_box.left - progress_rect.left);
			}

			if (progress_rect.right > content_box.right)
			{
				progress_rect.right -= (progress_rect.right - content_box.right);
			}
			
			part_progress.render_box(canvas, progress_rect);
		}
	}
	else
	{
		if (progress_max >= progress_min && 
			position >= progress_min &&
			position <= progress_max &&
			progress_min != progress_max &&
			rect.get_width() > 0)
		{
			Rect content_box = progressbar->get_content_box();

			Rect progress_rect;
			progress_rect.left = content_box.left;
			progress_rect.top = content_box.top;
			progress_rect.bottom = content_box.bottom;
			progress_rect.right = content_box.left + (position - progress_min) * content_box.get_width() / (progress_max - progress_min);

			part_progress.render_box(canvas, progress_rect);
		}
	}
}
Exemplo n.º 3
0
void RadioButton_Impl::on_render(Canvas &canvas, const Rect &update_rect)
{
	Rect rect = radio->get_size();

	Size pref_size = part_checker.get_css_size();
	Rect content_rect = radio->get_content_box();
	int ypos = content_rect.top + content_rect.get_height()/2 - pref_size.height/2;
	Rect checker_rect(content_rect.left, ypos, content_rect.left + pref_size.width, ypos + pref_size.height);
	part_checker.render_box(canvas, checker_rect);

	int text_gap = radio->get_property_int(CssStr::text_gap, "2");

	Size text_size = radio->render_text(canvas, text, checker_rect.right + text_gap, radio->get_vertical_text_align(canvas).baseline).get_size();

	if (radio->has_focus())
	{
		int focus_left = checker_rect.right + text_gap - 2; // todo: remove magic number hacks
		Rect focus_rect = RectPS(focus_left, content_rect.top, text_size.width+4, content_rect.bottom);
		part_focus.render_box(canvas, focus_rect);
	}
}
Exemplo n.º 4
0
void StatusBar_Impl::on_render(Canvas &canvas, const Rect &update_rect)
{
	Rect rect(Point(0,0), statusbar->get_geometry().get_size());
	Rect content = statusbar->get_content_box();

	Rect rect_status_text = content;

	if (show_size_grip)
	{
		int preferred_width = part_size_grip.get_css_width();
		Rect rect_sizegrip(content.right - preferred_width, content.top, content.right, content.bottom);
		part_size_grip.render_box(canvas, rect_sizegrip);
		rect_status_text.right = rect_sizegrip.left;
	}

	if (!statusbar_parts.empty())
		rect_status_text.right = statusbar_parts[0].position.left;

	part_status_text.render_box(canvas, rect_status_text);
	Rect status_text_content = part_status_text.get_content_box(rect_status_text);

	statusbar->render_text(canvas, status_text, status_text_content.left + 4, content.bottom - 6);

	for (unsigned int index = 0; index < statusbar_parts.size(); index++)
	{
		StatusBar_Part &statusbar_part = statusbar_parts[index];
		part_status_part.render_box(canvas, statusbar_part.position);
		Rect part_content = part_status_part.get_content_box(statusbar_part.position);
		int icon_width = 0;
		if (!statusbar_part.icon.is_null())
		{
			statusbar_part.icon.draw(canvas, (float)part_content.left + 4, (float)part_content.bottom - 6 - statusbar_part.icon.get_height());
			icon_width = statusbar_part.icon.get_width() + 4;
		}
		if (!statusbar_part.text.empty())
		{
			statusbar->render_text(canvas, statusbar_part.text, part_content.left + 4 + icon_width, part_content.bottom - 6);
		}
	}
}
Exemplo n.º 5
0
void TabHeader_Impl::on_render(Canvas &canvas, const Rect &update_rect)
{
	Rect rect = component->get_geometry();

	std::vector<Handle>::size_type i;
	for (i = 0; i < tabs.size(); i++)
	{
		Handle &handle = tabs[i];
		handle.part.render_box(canvas, handle.rect);

		Rect rect_handle_content = handle.part.get_content_box(handle.rect);

		Size text_size = handle.part.render_text(canvas, handle.label, rect_handle_content).get_size();

		if (component->has_focus() && i == selected_page)
		{
			Rect focus_rect = handle.rect;
			focus_rect.shrink(2,2,2,2);
			part_focus.render_box(canvas, focus_rect);
		}
	}
}