Exemplo n.º 1
0
void StatusBar_Impl::position_parts()
{
	Rect rect(Point(0,0), statusbar->get_geometry().get_size());
	Rect content = statusbar->get_content_box();

	int xpos = content.right;
	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);
		xpos = rect_sizegrip.left;
	}

	for (unsigned int index = statusbar_parts.size(); index > 0; index--)
	{
		StatusBar_Part &statusbar_part = statusbar_parts[index-1];
		int left = xpos - statusbar_part.width;
		int right = xpos;
		Rect new_position(left, content.top, right, content.bottom);
		if (statusbar_part.component && statusbar_part.position != new_position)
			statusbar_part.component->set_geometry(part_status_part.get_content_box(new_position));

		statusbar_part.position = new_position;
		xpos = left;
	}
}
Exemplo n.º 2
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.º 3
0
void ToolBar_Impl::update_layout(Canvas &canvas)
{
    if (need_layout_update == false)
        return;
    need_layout_update = false;

    Rect rect = toolbar->get_size();
    Rect component_content = toolbar->get_content_box();

    Rect item_content = part_item_normal.get_content_box(component_content);
    int original_text_gap = part_item_normal.get_property_int(CssStr::text_gap, "3");

    if (horizontal)
    {
        int x = component_content.left;
        int center_y = item_content.get_center().y;
        int item_size = part_item_normal.get_css_width();

        std::vector<ToolBarItem>::size_type index, size;
        size = items.size();
        for (index = 0; index < size; index++)
        {
            ToolBarItem &item = items[index];
            item_content.left = x;
            Size text_size = toolbar->get_render_text_size(canvas, item.impl->text);
            int text_gap = original_text_gap;
            if (text_size.width == 0)
                text_gap = 0;

            if (layout == layout_left)
            {
                item.impl->icon_pos = Rect(Point(0, center_y-size_icon.height/2-item_content.top), size_icon);
                item_content.right = item_content.left + item.impl->icon_pos.get_width() + text_gap + text_size.width;
                item.impl->text_pos = Point(item.impl->icon_pos.right + text_gap, part_item_normal.get_vertical_text_align(canvas, item_content).baseline-item_content.top);
            }
            else if (layout == layout_center)
            {
                item.impl->icon_pos = Rect(Point(item_size/2-size_icon.width/2, 0), size_icon);
                item.impl->text_pos = Point(item_size/2-text_size.width/2, item.impl->icon_pos.bottom + text_gap + text_size.height);
                item_content.right = item_content.left + item_size;
            }

            Rect item_render = part_item_normal.get_border_box(item_content);
            Rect shrink_box = part_item_normal.get_content_shrink_box();
            item_render.translate(shrink_box.left,0);
            item.impl->position = item_render;

            x = item_render.right;
        }
    }
    else
    {
        int y = component_content.top;
        int center_x = item_content.get_center().x;
        int size_item = part_item_normal.get_css_height();

        std::vector<ToolBarItem>::size_type index, size;
        size = items.size();
        for (index = 0; index < size; index++)
        {
            ToolBarItem &item = items[index];

            item_content.top = y;
            Size text_size = toolbar->get_render_text_size(canvas, item.impl->text);

            int text_gap = original_text_gap;
            if (text_size.width == 0)
                text_gap = 0;

            if (layout == layout_left)
            {
                item.impl->icon_pos = Rect(Point(0,0), size_icon);
                item.impl->text_pos = Point(item.impl->icon_pos.right + text_gap, size_item/2+text_size.height/2);
                item_content.bottom = item_content.top + size_item;
            }
            else if (layout == layout_center)
            {
                item.impl->icon_pos = Rect(Point(center_x-size_icon.width/2, 0), size_icon);
                item.impl->text_pos = Point(center_x-text_size.width/2, item.impl->icon_pos.bottom + text_gap + text_size.height);
                item_content.bottom = item_content.top + item.impl->icon_pos.get_height() + text_gap + text_size.height;
            }

            Rect item_render = part_item_normal.get_border_box(item_content);
            Rect shrink_box = part_item_normal.get_content_shrink_box();
            item_render.translate(0, shrink_box.top);
            item.impl->position = item_render;

            y = item_render.bottom;
        }
    }

//	toolbar->request_repaint();
}