RutBin * rut_bin_new (RutContext *ctx) { RutBin *bin = g_slice_new0 (RutBin); static CoglBool initialized = FALSE; if (initialized == FALSE) { _rut_bin_init_type (); initialized = TRUE; } bin->ref_count = 1; bin->context = rut_refable_ref (ctx); bin->x_position = RUT_BIN_POSITION_EXPAND; bin->y_position = RUT_BIN_POSITION_EXPAND; rut_list_init (&bin->preferred_size_cb_list); rut_object_init (&bin->_parent, &rut_bin_type); rut_graphable_init (RUT_OBJECT (bin)); bin->child_transform = rut_transform_new (ctx); rut_graphable_add_child (bin, bin->child_transform); return bin; }
RutBin * rut_bin_new (RutContext *ctx) { RutBin *bin = rut_object_alloc0 (RutBin, &rut_bin_type, _rut_bin_init_type); bin->ref_count = 1; bin->context = ctx; bin->x_position = RUT_BIN_POSITION_EXPAND; bin->y_position = RUT_BIN_POSITION_EXPAND; rut_list_init (&bin->preferred_size_cb_list); rut_graphable_init (RUT_OBJECT (bin)); bin->child_transform = rut_transform_new (ctx); rut_graphable_add_child (bin, bin->child_transform); rut_refable_unref (bin->child_transform); return bin; }
RutIconButton * rut_icon_button_new (RutContext *ctx, const char *label, RutIconButtonPosition label_position, const char *normal_icon, const char *hover_icon, const char *active_icon, const char *disabled_icon) { RutIconButton *button = g_slice_new0 (RutIconButton); float natural_width, natural_height; static CoglBool initialized = FALSE; if (initialized == FALSE) { _rut_icon_button_init_type (); initialized = TRUE; } rut_object_init (RUT_OBJECT (button), &rut_icon_button_type); button->ref_count = 1; rut_list_init (&button->on_click_cb_list); rut_graphable_init (RUT_OBJECT (button)); rut_paintable_init (RUT_OBJECT (button)); button->ctx = ctx; button->state = ICON_BUTTON_STATE_NORMAL; button->stack = rut_stack_new (ctx, 100, 100); button->layout = rut_box_layout_new (ctx, RUT_BOX_LAYOUT_PACKING_TOP_TO_BOTTOM); rut_stack_add (button->stack, button->layout); rut_refable_unref (button->layout); button->bin = rut_bin_new (ctx); rut_box_layout_add (button->layout, TRUE, button->bin); rut_refable_unref (button->bin); button->label_position = label_position; if (label) { RutBin *bin = rut_bin_new (ctx); rut_bin_set_x_position (bin, RUT_BIN_POSITION_CENTER); button->label = rut_text_new_with_text (ctx, NULL, label); rut_bin_set_child (bin, button->label); rut_box_layout_add (button->layout, FALSE, bin); rut_refable_unref (bin); update_layout (button); } rut_icon_button_set_normal (button, normal_icon); rut_icon_button_set_hover (button, hover_icon); rut_icon_button_set_active (button, active_icon); rut_icon_button_set_disabled (button, disabled_icon); button->input_region = rut_input_region_new_rectangle (0, 0, 100, 100, _rut_icon_button_input_cb, button); rut_stack_add (button->stack, button->input_region); rut_refable_unref (button->input_region); rut_sizable_get_preferred_width (button->stack, -1, NULL, &natural_width); rut_sizable_get_preferred_height (button->stack, natural_width, NULL, &natural_height); rut_sizable_set_size (button->stack, natural_width, natural_height); rut_graphable_add_child (button, button->stack); return button; }
RutButton * rut_button_new (RutContext *ctx, const char *label) { RutButton *button = g_slice_new0 (RutButton); GError *error = NULL; float text_width, text_height; static CoglBool initialized = FALSE; if (initialized == FALSE) { _rut_button_init_type (); initialized = TRUE; } rut_object_init (RUT_OBJECT (button), &rut_button_type); button->ref_count = 1; rut_list_init (&button->on_click_cb_list); rut_graphable_init (RUT_OBJECT (button)); rut_paintable_init (RUT_OBJECT (button)); button->ctx = ctx; button->state = BUTTON_STATE_NORMAL; button->normal_texture = rut_load_texture_from_data_file (ctx, "button.png", &error); if (button->normal_texture) { button->background_normal = rut_nine_slice_new (ctx, button->normal_texture, 11, 5, 13, 5, button->width, button->height); } else { g_warning ("Failed to load button texture: %s", error->message); g_error_free (error); } button->hover_texture = rut_load_texture_from_data_file (ctx, "button-hover.png", &error); if (button->hover_texture) { button->background_hover = rut_nine_slice_new (ctx, button->hover_texture, 11, 5, 13, 5, button->width, button->height); } else { g_warning ("Failed to load button-hover texture: %s", error->message); g_error_free (error); } button->active_texture = rut_load_texture_from_data_file (ctx, "button-active.png", &error); if (button->active_texture) { button->background_active = rut_nine_slice_new (ctx, button->active_texture, 11, 5, 13, 5, button->width, button->height); } else { g_warning ("Failed to load button-active texture: %s", error->message); g_error_free (error); } button->disabled_texture = rut_load_texture_from_data_file (ctx, "button-disabled.png", &error); if (button->disabled_texture) { button->background_disabled = rut_nine_slice_new (ctx, button->disabled_texture, 11, 5, 13, 5, button->width, button->height); } else { g_warning ("Failed to load button-disabled texture: %s", error->message); g_error_free (error); } button->text = rut_text_new_with_text (ctx, NULL, label); button->text_transform = rut_transform_new (ctx); rut_graphable_add_child (button, button->text_transform); rut_graphable_add_child (button->text_transform, button->text); rut_sizable_get_size (button->text, &text_width, &text_height); button->width = text_width + BUTTON_HPAD; button->height = text_height + BUTTON_VPAD; cogl_color_init_from_4f (&button->text_color, 0, 0, 0, 1); button->input_region = rut_input_region_new_rectangle (0, 0, button->width, button->height, _rut_button_input_cb, button); //rut_input_region_set_graphable (button->input_region, button); rut_graphable_add_child (button, button->input_region); queue_allocation (button); return button; }