Пример #1
0
void
rut_icon_button_set_size (RutObject *self,
                          float width,
                          float height)
{
  RutIconButton *button = self;

  rut_sizable_set_size (button->stack, width, height);
}
Пример #2
0
static void
allocate_cb (RutObject *graphable,
             void *user_data)
{
  RutShim *shim = graphable;

  if (shim->child)
    rut_sizable_set_size (shim->child, shim->width, shim->height);
}
Пример #3
0
static void
_rut_button_allocate_cb (RutObject *graphable,
                         void *user_data)
{
  RutButton *button = graphable;
  float text_min_width, text_natural_width;
  float text_min_height, text_natural_height;
  int text_width, text_height;
  int text_x, text_y;

  rut_sizable_get_preferred_width (button->text,
                                   -1,
                                   &text_min_width,
                                   &text_natural_width);

  rut_sizable_get_preferred_height (button->text,
                                    -1,
                                    &text_min_height,
                                    &text_natural_height);

  if (button->width > (BUTTON_HPAD + text_natural_width))
    text_width = text_natural_width;
  else
    text_width = MAX (0, button->width - BUTTON_HPAD);

  if (button->height > (BUTTON_VPAD + text_natural_height))
    text_height = text_natural_height;
  else
    text_height = MAX (0, button->height - BUTTON_VPAD);

  rut_sizable_set_size (button->text, text_width, text_height);

  rut_transform_init_identity (button->text_transform);

  text_x = (button->width / 2) - (text_width / 2.0);
  text_y = (button->height / 2) - (text_height / 2.0);
  rut_transform_translate (button->text_transform, text_x, text_y, 0);
}
Пример #4
0
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;
}
Пример #5
0
static void
allocate_cb (RutObject *graphable,
             void *user_data)
{
    RutBin *bin = RUT_BIN (graphable);

    if (bin->child)
    {
        float child_width, child_height;
        float child_x = bin->left_padding;
        float child_y = bin->top_padding;
        float available_width =
            bin->width - bin->left_padding - bin->right_padding;
        float available_height =
            bin->height - bin->top_padding - bin->bottom_padding;

        rut_sizable_get_preferred_width (bin->child,
                                         -1, /* for_height */
                                         NULL, /* min_width_p */
                                         &child_width);

        if (child_width > available_width)
            child_width = available_width;

        switch (bin->x_position)
        {
        case RUT_BIN_POSITION_BEGIN:
            break;

        case RUT_BIN_POSITION_CENTER:
            if (child_width < available_width)
                child_x = nearbyintf (bin->width / 2.0f - child_width / 2.0f);
            break;

        case RUT_BIN_POSITION_END:
            if (child_width < available_width)
                child_x = bin->width - bin->right_padding - child_width;
            break;

        case RUT_BIN_POSITION_EXPAND:
            child_width = available_width;
            break;
        }

        rut_sizable_get_preferred_height (bin->child,
                                          child_width, /* for_width */
                                          NULL, /* min_height_p */
                                          &child_height);

        if (child_height > available_height)
            child_height = available_height;

        switch (bin->y_position)
        {
        case RUT_BIN_POSITION_BEGIN:
            break;

        case RUT_BIN_POSITION_CENTER:
            if (child_height < available_height)
                child_y = nearbyintf (bin->height / 2.0f - child_height / 2.0f);
            break;

        case RUT_BIN_POSITION_END:
            if (child_height < available_height)
                child_y = bin->height - bin->bottom_padding - child_height;
            break;

        case RUT_BIN_POSITION_EXPAND:
            child_height = available_height;
            break;
        }

        rut_transform_init_identity (bin->child_transform);
        rut_transform_translate (bin->child_transform, child_x, child_y, 0.0f);
        rut_sizable_set_size (bin->child, child_width, child_height);
    }
}
Пример #6
0
RutPropInspector *
rut_prop_inspector_new (RutContext *ctx,
                        RutProperty *property,
                        RutPropInspectorCallback inspector_property_changed_cb,
                        RutPropInspectorControlledCallback inspector_controlled_cb,
                        bool with_label,
                        void *user_data)
{
  RutPropInspector *inspector =
    rut_object_alloc0 (RutPropInspector,
                       &rut_prop_inspector_type,
                       _rut_prop_inspector_init_type);
  RutBin *grab_padding;

  inspector->ref_count = 1;
  inspector->context = ctx;

  rut_graphable_init (inspector);

  inspector->target_prop = property;
  inspector->inspector_property_changed_cb = inspector_property_changed_cb;
  inspector->controlled_changed_cb = inspector_controlled_cb;
  inspector->user_data = user_data;

  inspector->top_stack = rut_stack_new (ctx, 1, 1);
  rut_graphable_add_child (inspector, inspector->top_stack);
  rut_refable_unref (inspector->top_stack);

  inspector->top_hbox = rut_box_layout_new (ctx, RUT_BOX_LAYOUT_PACKING_LEFT_TO_RIGHT);
  rut_stack_add (inspector->top_stack, inspector->top_hbox);
  rut_refable_unref (inspector->top_hbox);

  /* XXX: Hack for now, to make sure its possible to drag and drop any
   * property without inadvertanty manipulating the property value...
   */
  grab_padding = rut_bin_new (inspector->context);
  rut_bin_set_right_padding (grab_padding, 15);
  rut_box_layout_add (inspector->top_hbox, false, grab_padding);
  rut_refable_unref (grab_padding);

  if (inspector->controlled_changed_cb && property->spec->animatable)
    add_controlled_toggle (inspector, property);

  inspector->widget_stack = rut_stack_new (ctx, 1, 1);
  rut_box_layout_add (inspector->top_hbox, true, inspector->widget_stack);
  rut_refable_unref (inspector->widget_stack);

  inspector->widget_hbox =
    rut_box_layout_new (inspector->context, RUT_BOX_LAYOUT_PACKING_LEFT_TO_RIGHT);
  rut_stack_add (inspector->widget_stack, inspector->widget_hbox);
  rut_refable_unref (inspector->widget_hbox);

  inspector->disabled_overlay =
    rut_rectangle_new4f (ctx, 1, 1, 0.5, 0.5, 0.5, 0.5);
  inspector->input_region =
    rut_input_region_new_rectangle (0, 0, 1, 1, block_input_cb, NULL);

  add_control (inspector, property, with_label);

  rut_prop_inspector_reload_property (inspector);

  rut_sizable_set_size (inspector, 10, 10);

  inspector->target_prop_closure =
    rut_property_connect_callback (property,
                                   target_property_changed_cb,
                                   inspector);

  return inspector;
}