Esempio n. 1
0
/* Recursively allocates the size of all the widgets */
static void _etk_main_size_allocate_recursive(Etk_Widget *widget, Etk_Bool is_top_level)
{
   Eina_List *l;
   Etk_Geometry geometry;

   if (!widget)
      return;

   if (is_top_level)
   {
      etk_toplevel_evas_position_get(ETK_TOPLEVEL(widget), &geometry.x, &geometry.y);
      etk_toplevel_size_get(ETK_TOPLEVEL(widget), &geometry.w, &geometry.h);
   }
   else
   {
      int left, right, top, bottom;

      etk_widget_geometry_get(widget, &geometry.x, &geometry.y, &geometry.w, &geometry.h);
      etk_widget_padding_get(widget, &left, &right, &top, &bottom);
      geometry.x -= left;
      geometry.y -= top;
      geometry.w += left + right;
      geometry.h += top + bottom;
   }
   etk_widget_size_allocate(widget, geometry);

   for (l = widget->children; l; l = l->next)
      _etk_main_size_allocate_recursive(ETK_WIDGET(l->data), ETK_FALSE);
}
Esempio n. 2
0
static Etk_Bool _etk_cairo_size_requested_cb(Etk_Object *object, Etk_Size *size, void *data)
{
  Etk_Cairo *cairo;
  unsigned char *pixels = NULL;
  int static old_w = -1, old_h = -1;
  int w, h;

  if (!(cairo = ETK_CAIRO(object)))
    return ETK_TRUE;

  etk_widget_geometry_get(ETK_WIDGET(cairo), NULL, NULL, &w, &h);

  if (old_w == w && old_h == h)
    return ETK_TRUE;

  old_w = w;
  old_h = h;

  _etk_cairo_rebuild(cairo);
  cairo_rectangle(cairo->cairo.cr, 0, 0, w, h);
  etk_signal_emit(ETK_CAIRO_REDRAW_REQUIRED_SIGNAL, object, NULL);
  pixels =  cairo_image_surface_get_data(cairo->cairo.surface);

  if (pixels)
    etk_image_set_from_data(ETK_IMAGE(cairo->image), w, h, pixels, ETK_FALSE);

  return ETK_TRUE;
}
Esempio n. 3
0
/* Adds a rectangle object to the canvas */
static void _etk_test_canvas_object_add(void *data)
{
   Etk_Canvas *canvas;
   Evas *evas;
   Evas_Object *object;
   Etk_Widget *etk_evas_object;
   int x, y;
   int cw, ch;

   if (!(canvas = ETK_CANVAS(data)) || !(evas = etk_widget_toplevel_evas_get(ETK_WIDGET(canvas))))
      return;

   etk_widget_geometry_get(ETK_WIDGET(canvas), NULL, NULL, &cw, &ch);
   x = rand() % cw;
   y = rand() % ch;

   /* Add a rectangle */
   if (rand() % 4 != 0)
   {
      int w, h;
      int r, g, b, a;

      object = evas_object_rectangle_add(evas);
      w = ETK_MAX(abs(rand() % (cw - x)), 10);
      h = ETK_MAX(abs(rand() % (ch - y)), 10);
      evas_object_resize(object, w, h);

      r = rand() % 255;
      g = rand() % 255;
      b = rand() % 255;
      a = ETK_MAX(rand() % 255, 40);
      evas_color_argb_premul(a, &r, &g, &b);

      evas_object_color_set(object, r, g, b, a);
      etk_evas_object = etk_evas_object_new();
			etk_evas_object_set_object(ETK_EVAS_OBJECT(etk_evas_object), object);
   }
   /* Or add an image */
   else
   {
      object = evas_object_image_add(evas);
      evas_object_image_file_set(object, PACKAGE_DATA_DIR "/images/test.png", NULL);
      evas_object_image_fill_set(object, 0, 0, 48, 48);
      evas_object_resize(object, 48, 48);
      etk_evas_object = etk_evas_object_new();
      etk_evas_object_set_object(ETK_EVAS_OBJECT(etk_evas_object), object);
   }

   etk_canvas_put(canvas, etk_evas_object, x, y);
   etk_widget_show_all(etk_evas_object);
}
Esempio n. 4
0
/* Rebuilds the cairo surface */
void _etk_cairo_rebuild(Etk_Cairo *cairo)
{
  int w, h;

  if (!cairo)
    return;

  if (cairo->cairo.surface)
    cairo_surface_destroy(cairo->cairo.surface);

  if (cairo->cairo.cr)
    cairo_destroy(cairo->cairo.cr);

  etk_widget_geometry_get(ETK_WIDGET(cairo), NULL, NULL, &w, &h);

  cairo->cairo.surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h);
  cairo->cairo.cr = cairo_create(cairo->cairo.surface);
}