Enlightenment CVS committal

Author  : moom16
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_editable_text_object.c etk_entry.c etk_scrolled_view.c 
        etk_tree.c etk_tree.h etk_widget.c etk_widget.h 


Log Message:
* Make the tree scrollable (vertically only for now). Still need to fix 
some problems with the drag button size
* Fix some theme issues


===================================================================
RCS file: 
/cvsroot/enlightenment/e17/proto/etk/src/lib/etk_editable_text_object.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- etk_editable_text_object.c  1 Nov 2005 12:22:46 -0000       1.4
+++ etk_editable_text_object.c  2 Nov 2005 13:53:39 -0000       1.5
@@ -88,9 +88,8 @@
       return;
    
    evas_object_textblock_text_markup_set(editable_text_sd->text_object, text);
-   editable_text_sd->cursor_at_the_end = TRUE;
    _etk_editable_text_size_update(object);
-   _etk_editable_text_cursor_position_update(object, NULL);
+   etk_editable_text_object_cursor_move_at_end(object);
 }
 
 /**
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_entry.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- etk_entry.c 1 Nov 2005 12:04:10 -0000       1.6
+++ etk_entry.c 2 Nov 2005 13:53:39 -0000       1.7
@@ -199,7 +199,7 @@
 
    if (!(entry = ETK_ENTRY(object)) || !entry->editable_object)
       return;
-   etk_editable_text_object_cursor_show(entry->editable_object);   
+   etk_editable_text_object_cursor_show(entry->editable_object);
 }
 
 /* Called when the entry is unfocused */
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_scrolled_view.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- etk_scrolled_view.c 31 Oct 2005 23:45:32 -0000      1.2
+++ etk_scrolled_view.c 2 Nov 2005 13:53:39 -0000       1.3
@@ -91,7 +91,7 @@
 
 /**
  * @brief A convenience function that creates a viewport, adds the child to it 
and attach the viewport to the scrolled view. @n
- * It's useful for widgets that has no scrolling ability
+ * It's useful for widgets that have no scrolling ability
  * @param scrolled_view a scrolled view
  * @param the child to add to the viewport
  */
@@ -270,7 +270,8 @@
 static void _etk_scrolled_view_size_allocate(Etk_Widget *widget, Etk_Geometry 
geometry)
 {
    Etk_Scrolled_View *scrolled_view;
-   Etk_Size hscrollbar_requisition, vscrollbar_requisition, scroll_size;
+   Etk_Size hscrollbar_requisition, vscrollbar_requisition;
+   Etk_Size scroll_size;
    Etk_Geometry child_geometry;
    Etk_Widget *child;
    Etk_Bool show_vscrollbar = FALSE, show_hscrollbar = FALSE;
@@ -279,10 +280,12 @@
    if (!(scrolled_view = ETK_SCROLLED_VIEW(widget)))
       return;
 
-   if (!(child = ETK_BIN(scrolled_view)->child))
+   if (!(child = ETK_BIN(scrolled_view)->child) || !child->scroll_size_get || 
!child->scroll)
    {
       etk_widget_hide(scrolled_view->hscrollbar);
       etk_widget_hide(scrolled_view->vscrollbar);
+      if (child)
+         etk_widget_size_allocate(child, geometry);
       return;
    }
 
@@ -291,20 +294,28 @@
    if (scrolled_view->vpolicy == ETK_POLICY_AUTO || scrolled_view->vpolicy == 
ETK_POLICY_SHOW)
       etk_widget_size_request_full(scrolled_view->vscrollbar, 
&vscrollbar_requisition, FALSE);
    child->scroll_size_get(child, &scroll_size);
-
-   if ((scrolled_view->hpolicy == ETK_POLICY_AUTO && scroll_size.w > 
geometry.w) || scrolled_view->hpolicy == ETK_POLICY_SHOW)
+   
+   visible_width = geometry.w;
+   visible_height = geometry.h;
+   if (child->scroll_margins_get)
+   {
+      Etk_Size margins_size;
+      
+      child->scroll_margins_get(child, &margins_size);
+      visible_width -= margins_size.w;
+      visible_height -= margins_size.h;
+   }
+   
+   if ((scrolled_view->hpolicy == ETK_POLICY_AUTO && scroll_size.w > 
visible_width) || scrolled_view->hpolicy == ETK_POLICY_SHOW)
       show_hscrollbar = TRUE;
-   if ((scrolled_view->vpolicy == ETK_POLICY_AUTO && scroll_size.h > 
(geometry.h - (show_hscrollbar ? hscrollbar_requisition.h : 0))) ||
+   if ((scrolled_view->vpolicy == ETK_POLICY_AUTO && scroll_size.h > 
(visible_height - (show_hscrollbar ? hscrollbar_requisition.h : 0))) ||
       scrolled_view->vpolicy == ETK_POLICY_SHOW)
    {
       show_vscrollbar = TRUE;
-      if (scrolled_view->hpolicy == ETK_POLICY_AUTO && scroll_size.w > 
(geometry.w - vscrollbar_requisition.w))
+      if (scrolled_view->hpolicy == ETK_POLICY_AUTO && scroll_size.w > 
(visible_width - vscrollbar_requisition.w))
          show_hscrollbar = TRUE;
    }
 
-   visible_width = geometry.w;
-   visible_height = geometry.h;
-
    if (show_hscrollbar)
    {
       visible_height -= hscrollbar_requisition.h;
@@ -340,8 +351,8 @@
 
    child_geometry.x = geometry.x;
    child_geometry.y = geometry.y;
-   child_geometry.w = visible_width;
-   child_geometry.h = visible_height;
+   child_geometry.w = geometry.w - (show_vscrollbar ? vscrollbar_requisition.w 
: 0);
+   child_geometry.h = geometry.h - (show_hscrollbar ? hscrollbar_requisition.h 
: 0);
    etk_widget_size_allocate(child, child_geometry);
 }
 
@@ -359,7 +370,6 @@
 
    if (!(scrolled_view = ETK_SCROLLED_VIEW(data)) || !(child = 
ETK_BIN(scrolled_view)->child) || !child->scroll)
       return;
-
    child->scroll(child, value, ETK_RANGE(scrolled_view->vscrollbar)->value);
 }
 
@@ -371,7 +381,6 @@
 
    if (!(scrolled_view = ETK_SCROLLED_VIEW(data)) || !(child = 
ETK_BIN(scrolled_view)->child) || !child->scroll)
       return;
-
    child->scroll(child, ETK_RANGE(scrolled_view->hscrollbar)->value, value);
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tree.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- etk_tree.c  30 Oct 2005 10:56:30 -0000      1.12
+++ etk_tree.c  2 Nov 2005 13:53:39 -0000       1.13
@@ -5,6 +5,7 @@
 #include <string.h>
 #include <math.h>
 #include <Edje.h>
+#include "etk_scrolled_view.h"
 #include "etk_button.h"
 #include "etk_toplevel_widget.h"
 #include "etk_signal.h"
@@ -77,8 +78,10 @@
 static Etk_Type *_etk_grid_type_get();
 static void _etk_grid_constructor(Etk_grid *grid);
 static void _etk_grid_move_resize(Etk_Widget *widget, int x, int y, int w, int 
h);
+static void _etk_grid_scroll(Etk_Widget *widget, int x, int y);
+static void _etk_grid_scroll_size_get(Etk_Widget *widget, Etk_Size 
*scroll_size);
+static void _etk_grid_scroll_margins_get(Etk_Widget *widget, Etk_Size 
*margins_size);
 static void _etk_grid_realize_cb(Etk_Object *object, void *data);
-static void _etk_grid_mouse_wheel_cb(Etk_Object *object, void *event_info, 
void *data);
 
 static void _etk_tree_constructor(Etk_Tree *tree);
 static void _etk_tree_destructor(Etk_Tree *tree);
@@ -1036,17 +1039,13 @@
 void etk_tree_row_expand(Etk_Tree_Row *row)
 {
    Etk_Tree_Node *n;
-   float offset;
 
    if (!row || row->node.expanded || !row->tree || (row->tree->mode != 
ETK_TREE_MODE_TREE))
       return;
 
-   offset = row->tree->xscroll_percent * row->tree->item_height * 
row->tree->root.num_visible_children;
    row->node.expanded = TRUE;
    for (n = row->node.parent; n && n->expanded; n = n->parent)
       n->num_visible_children += row->node.num_visible_children;
-   row->tree->xscroll_percent = offset / (row->tree->item_height * 
row->tree->root.num_visible_children);
-   row->tree->xscroll_percent = ETK_CLAMP(row->tree->xscroll_percent, 0.0, 
1.0);
 
    etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_EXPANDED_SIGNAL], 
ETK_OBJECT(row->tree), NULL, row);
    if (!row->tree->frozen)
@@ -1060,17 +1059,13 @@
 void etk_tree_row_collapse(Etk_Tree_Row *row)
 {
    Etk_Tree_Node *n;
-   float offset;
 
    if (!row || !row->node.expanded || !row->tree || (row->tree->mode != 
ETK_TREE_MODE_TREE))
       return;
 
-   offset = row->tree->xscroll_percent * row->tree->item_height * 
row->tree->root.num_visible_children;
    row->node.expanded = FALSE;
    for (n = row->node.parent; n && n->expanded; n = n->parent)
       n->num_visible_children -= row->node.num_visible_children;
-   row->tree->xscroll_percent = offset / (row->tree->item_height * 
row->tree->root.num_visible_children);
-   row->tree->xscroll_percent = ETK_CLAMP(row->tree->xscroll_percent, 0.0, 
1.0);
 
    etk_signal_emit(_etk_tree_signals[ETK_TREE_ROW_COLLAPSED_SIGNAL], 
ETK_OBJECT(row->tree), NULL, row);
    if (!row->tree->frozen)
@@ -1105,8 +1100,10 @@
       return;
 
    ETK_WIDGET(grid)->move_resize = _etk_grid_move_resize;
+   ETK_WIDGET(grid)->scroll = _etk_grid_scroll;
+   ETK_WIDGET(grid)->scroll_size_get = _etk_grid_scroll_size_get;
+   ETK_WIDGET(grid)->scroll_margins_get = _etk_grid_scroll_margins_get;
    etk_signal_connect_after("realize", ETK_OBJECT(grid), 
ETK_CALLBACK(_etk_grid_realize_cb), NULL);
-   etk_signal_connect("mouse_wheel", ETK_OBJECT(grid), 
ETK_CALLBACK(_etk_grid_mouse_wheel_cb), NULL);
 }
 
 /* Moves and resizes the tree grid */
@@ -1153,6 +1150,48 @@
    _etk_tree_update(tree);
 }
 
+/* Scrolls the tree grid */
+static void _etk_grid_scroll(Etk_Widget *widget, int x, int y)
+{
+   Etk_Tree *tree;
+   
+   if (!widget || !(tree = ETK_TREE_GRID(widget)->tree))
+      return;
+   
+   tree->xoffset = x;
+   tree->yoffset = y;
+   etk_widget_redraw_queue(widget);
+}
+
+/* Gets the scrolling size of the tree grid */
+static void _etk_grid_scroll_size_get(Etk_Widget *widget, Etk_Size 
*scroll_size)
+{
+   Etk_Tree *tree;
+   int i;
+   int width = 0;
+   
+   if (!widget || !(tree = ETK_TREE_GRID(widget)->tree) || !scroll_size)
+      return;
+   
+   for (i = 0; i < tree->num_cols; i++)
+   {
+      if (tree->columns[i]->visible)
+         width += tree->columns[i]->width;
+   }
+   scroll_size->w = width;
+   scroll_size->h = tree->root.num_visible_children * tree->item_height;
+}
+
+/* Gets the scrolling margins size of the tree grid */
+static void _etk_grid_scroll_margins_get(Etk_Widget *widget, Etk_Size 
*margins_size)
+{
+   if (!widget || !margins_size)
+      return;
+   
+   margins_size->w = widget->left_inset + widget->left_padding + 
widget->right_inset + widget->right_padding;
+   margins_size->h = widget->top_inset + widget->top_padding + 
widget->bottom_inset + widget->bottom_padding;
+}
+
 /**************************
  * Tree
  **************************/
@@ -1162,11 +1201,14 @@
 {
    if (!tree)
       return;
-
+   
+   tree->scrolled_view = etk_scrolled_view_new();
+   etk_widget_parent_set(tree->scrolled_view, ETK_CONTAINER(tree));
+   etk_widget_show(tree->scrolled_view);
+   
    tree->grid = etk_widget_new(ETK_TREE_GRID_TYPE, "theme_group", "tree", 
NULL);
-
    ETK_TREE_GRID(tree->grid)->tree = tree;
-   etk_widget_parent_set(tree->grid, ETK_CONTAINER(tree));
+   etk_container_add(ETK_CONTAINER(tree->scrolled_view), tree->grid);
    etk_widget_show(tree->grid);
 
    tree->num_cols = 0;
@@ -1191,8 +1233,8 @@
    tree->frozen = FALSE;
    tree->mode = ETK_TREE_MODE_LIST;
    tree->multiple_select = FALSE;
-   tree->xscroll_percent = 0.0;
-   tree->yscroll_percent = 0.0;
+   tree->xoffset = 0;
+   tree->yoffset = 0.0;
 
    ETK_WIDGET(tree)->size_allocate = _etk_tree_size_allocate;
 }
@@ -1377,7 +1419,7 @@
    /* Allocate size for the tree grid */
    geometry.y += max_header_height;
    geometry.h -= max_header_height;
-   etk_widget_size_allocate(tree->grid, geometry);
+   etk_widget_size_allocate(tree->scrolled_view, geometry);
 }
 
 /**************************
@@ -1583,20 +1625,6 @@
       _etk_tree_col_realize(tree, i);
 }
 
-/* Called when the mouse wheel is used over the tree grid. TODO: scrollbars */
-static void _etk_grid_mouse_wheel_cb(Etk_Object *object, void *event_info, 
void *data)
-{
-   Etk_Tree *tree;
-   Etk_Event_Mouse_Wheel *event;
-
-   if (!object || !(tree = ETK_TREE_GRID(object)->tree) || !(event = 
event_info))
-      return;
-
-   tree->xscroll_percent += event->z * ((float)3 / 
tree->root.num_visible_children);
-   tree->xscroll_percent = ETK_CLAMP(tree->xscroll_percent, 0.0, 1.0);
-   _etk_tree_update(tree);
-}
-
 /**************************
  * Tree
  **************************/
@@ -1744,7 +1772,7 @@
 {
    Evas_List *l;
    Etk_Tree_Item_Objects *item_objects;
-   int invisible_height, offset, first_visible_nth, delta;
+   int first_visible_nth, delta;
    int x, y, w, h;
    int i;
 
@@ -1786,12 +1814,8 @@
       }
    }
 
-   invisible_height = (tree->root.num_visible_children * tree->item_height) - 
h;
-   if (invisible_height < 0)
-      invisible_height = 0;
-   offset = invisible_height * tree->xscroll_percent;
-   first_visible_nth = offset / tree->item_height;
-   delta = offset - (first_visible_nth * tree->item_height);
+   first_visible_nth = tree->yoffset / tree->item_height;
+   delta = tree->yoffset - (first_visible_nth * tree->item_height);
 
    l = tree->items_objects;
    _etk_tree_rows_draw(tree, &tree->root, &l, x, w, h, 0, y - delta, 
first_visible_nth, (first_visible_nth % 2));
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_tree.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- etk_tree.h  30 Oct 2005 00:07:45 -0000      1.7
+++ etk_tree.h  2 Nov 2005 13:53:39 -0000       1.8
@@ -74,6 +74,7 @@
    /* Inherit form Etk_Widget */
    Etk_Container container;
 
+   Etk_Widget *scrolled_view;
    Etk_Widget *grid;
 
    int num_cols;
@@ -92,8 +93,8 @@
    Etk_Bool multiple_select;
    Etk_Bool frozen;
    Etk_Bool built;
-   float xscroll_percent;
-   float yscroll_percent;
+   int xoffset;
+   int yoffset;
 
    int item_height;
    int image_height;
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_widget.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- etk_widget.c        1 Nov 2005 10:38:31 -0000       1.9
+++ etk_widget.c        2 Nov 2005 13:53:39 -0000       1.10
@@ -1288,6 +1288,7 @@
    widget->last_size_requisition.h = 0;
 
    widget->scroll_size_get = NULL;
+   widget->scroll_margins_get = NULL;
    widget->scroll = NULL;
 
    widget->realized = FALSE;
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/etk/src/lib/etk_widget.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- etk_widget.h        1 Nov 2005 00:18:41 -0000       1.7
+++ etk_widget.h        2 Nov 2005 13:53:39 -0000       1.8
@@ -166,6 +166,7 @@
    void (*move_resize)(Etk_Widget *widget, int x, int y, int w, int h);
 
    void (*scroll_size_get)(Etk_Widget *widget, Etk_Size *scroll_size);
+   void (*scroll_margins_get)(Etk_Widget *widget, Etk_Size *margin_size);
    void (*scroll)(Etk_Widget *widget, int x, int y);
 
    void (*show)(Etk_Widget *widget);




-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to