Ticket #1982: 01_adding_scrolled_view_margins.patch

File 01_adding_scrolled_view_margins.patch, 6.2 KB (added by tick, 11 years ago)

adding optional margins for scrolled_view

  • etk/src/lib/etk_scrolled_view.c

    commit 87362324a5c59ca45700010769bef27ccc5086cf
    Author: I-Fan, Chen <tick@openmoko.com>
    Date:   Tue Sep 16 23:24:07 2008 +0800
    
        adding extra_hmargin and extra_vmargin for scrolled_view
        known issue:
        if scrolled_view is a little larger than child but small than child + 2*margin, it won't scroll.
    
    diff --git a/etk/src/lib/etk_scrolled_view.c b/etk/src/lib/etk_scrolled_view.c
    index 9084fde..b381dcc 100644
    a b unsigned int etk_scrolled_view_drag_damping_get(Etk_Scrolled_View *scrolled_view 
    330330   return scrolled_view->drag.damping_magic; 
    331331} 
    332332 
     333void etk_scrolled_view_extra_vmargin_set(Etk_Scrolled_View *scrolled_view, int margin) 
     334{ 
     335   if (!scrolled_view) 
     336      return; 
     337   margin = margin > 0 ? margin : 0; 
     338   scrolled_view->extra_vmargin = margin; 
     339} 
     340 
     341int etk_scrolled_view_extra_vmargin_get(Etk_Scrolled_View *scrolled_view) 
     342{ 
     343   if (!scrolled_view) 
     344      return -1; 
     345   return scrolled_view->extra_vmargin; 
     346} 
     347 
     348void etk_scrolled_view_extra_hmargin_set(Etk_Scrolled_View *scrolled_view, int margin)  
     349{ 
     350   if (!scrolled_view) 
     351      return; 
     352   margin = margin > 0 ? margin : 0; 
     353   scrolled_view->extra_hmargin = margin; 
     354} 
     355 
     356int etk_scrolled_view_extra_hmargin_get(Etk_Scrolled_View *scrolled_view)  
     357{ 
     358   if (!scrolled_view) 
     359      return -1; 
     360   return scrolled_view->extra_hmargin; 
     361} 
     362 
    333363/************************** 
    334364 * 
    335365 * Etk specific functions 
    static void _etk_scrolled_view_constructor(Etk_Scrolled_View *scrolled_view) 
    352382   scrolled_view->drag.dragable    = ETK_FALSE; 
    353383   scrolled_view->drag.bouncy      = ETK_TRUE; 
    354384   scrolled_view->drag.damping_magic = ETK_SCROLLED_VIEW_DRAG_DAMPING_MAGIC; 
     385   scrolled_view->extra_hmargin     = 0; 
     386   scrolled_view->extra_vmargin     = 0; 
    355387 
    356388   // FIXME This can be put in etk_config (Make whole system be configured) 
    357389   etk_scrolled_view_drag_sample_interval_set(scrolled_view, ETK_SCROLLED_VIEW_DRAG_SAMPLE_INTERVAL_MAGIC); 
    static void _etk_scrolled_view_size_allocate(Etk_Widget *widget, Etk_Geometry ge 
    528560      scrollview_size.h -= margins_size.h; 
    529561   } 
    530562 
    531    scrollbar_size.w = vscrollbar_size.w; 
    532    scrollbar_size.h = hscrollbar_size.h; 
    533563   child->scroll_size_get(child, scrollview_size, scrollbar_size, &scroll_size); 
     564   scroll_size.w += 2 * scrolled_view->extra_hmargin; 
     565   scroll_size.h += 2 * scrolled_view->extra_vmargin; 
    534566 
    535567   if ((scrolled_view->hpolicy == ETK_POLICY_AUTO && scroll_size.w > scrollview_size.w) 
    536568      || scrolled_view->hpolicy == ETK_POLICY_SHOW) 
    static void _etk_scrolled_view_size_allocate(Etk_Widget *widget, Etk_Geometry ge 
    538570      show_hscrollbar = ETK_TRUE; 
    539571   } 
    540572   if ((scrolled_view->vpolicy == ETK_POLICY_AUTO 
    541          && scroll_size.h > (scrollview_size.h - (show_hscrollbar ? hscrollbar_size.h : 0))) 
     573         && scroll_size.h > (scrollview_size.h - (show_hscrollbar ? hscrollbar_size.h : 0) )) 
    542574      || scrolled_view->vpolicy == ETK_POLICY_SHOW) 
    543575   { 
    544576      show_vscrollbar = ETK_TRUE; 
    static void _etk_scrolled_view_size_allocate(Etk_Widget *widget, Etk_Geometry ge 
    576608   else 
    577609      etk_widget_hide(scrolled_view->vscrollbar); 
    578610 
    579    etk_range_range_set(ETK_RANGE(scrolled_view->hscrollbar), 0, scroll_size.w); 
    580    etk_range_page_size_set(ETK_RANGE(scrolled_view->hscrollbar), scrollview_size.w); 
    581    etk_range_range_set(ETK_RANGE(scrolled_view->vscrollbar), 0, scroll_size.h); 
    582    etk_range_page_size_set(ETK_RANGE(scrolled_view->vscrollbar), scrollview_size.h); 
     611   etk_range_range_set(ETK_RANGE(scrolled_view->hscrollbar),  
     612         0 - scrolled_view->extra_hmargin,  
     613         scroll_size.w + scrolled_view->extra_hmargin); 
     614   etk_range_page_size_set(ETK_RANGE(scrolled_view->hscrollbar),  
     615         scrollview_size.w + (scrolled_view->extra_hmargin * 2)); 
     616   etk_range_range_set(ETK_RANGE(scrolled_view->vscrollbar),  
     617         0 - scrolled_view->extra_vmargin,  
     618         scroll_size.h + scrolled_view->extra_vmargin); 
     619   etk_range_page_size_set(ETK_RANGE(scrolled_view->vscrollbar),  
     620         scrollview_size.h + (scrolled_view->extra_vmargin * 2)); 
    583621 
    584622   /* Moves and resizes the child */ 
    585623   child_geometry.x = geometry.x; 
    static Etk_Bool _etk_scrolled_view_child_scroll_size_changed_cb(Etk_Object *obje 
    10291067   scrollbar_size.w = vscrollbar_requisition.w; 
    10301068   scrollbar_size.h = hscrollbar_requisition.h; 
    10311069   child->scroll_size_get(child, scrollview_size, scrollbar_size, &scroll_size); 
    1032  
    1033    etk_range_range_set(ETK_RANGE(scrolled_view->hscrollbar), 0, scroll_size.w); 
    1034    etk_range_range_set(ETK_RANGE(scrolled_view->vscrollbar), 0, scroll_size.h); 
     1070   scroll_size.w += scrolled_view->extra_hmargin * 2 ; 
     1071   scroll_size.h += scrolled_view->extra_vmargin * 2 ; 
     1072 
     1073   etk_range_range_set(ETK_RANGE(scrolled_view->hscrollbar),  
     1074         0 - scrolled_view->extra_hmargin,  
     1075         scroll_size.w + scrolled_view->extra_hmargin); 
     1076   etk_range_range_set(ETK_RANGE(scrolled_view->vscrollbar),  
     1077         0 - scrolled_view->extra_hmargin,  
     1078         scroll_size.h + scrolled_view->extra_vmargin); 
    10351079   etk_widget_redraw_queue(ETK_WIDGET(scrolled_view)); 
    10361080 
    10371081   return ETK_TRUE; 
  • etk/src/lib/etk_scrolled_view.h

    diff --git a/etk/src/lib/etk_scrolled_view.h b/etk/src/lib/etk_scrolled_view.h
    index ebe0a3f..7a1b0e9 100644
    a b struct Etk_Scrolled_View 
    9191   Etk_Scrolled_View_Policy hpolicy; 
    9292   Etk_Scrolled_View_Policy vpolicy; 
    9393 
     94   int extra_hmargin; 
     95   int extra_vmargin; 
    9496   struct Etk_Scrolled_View_Mouse_Drag drag; 
    9597}; 
    9698 
    double etk_scrolled_view_drag_sample_interval_set(Etk_Scrolled_View *scroll 
    112114double      etk_scrolled_view_drag_sample_interval_get(Etk_Scrolled_View *scrolled_view); 
    113115unsigned int etk_scrolled_view_drag_damping_set(Etk_Scrolled_View *scrolled_view, unsigned int damping); 
    114116unsigned int etk_scrolled_view_drag_damping_get(Etk_Scrolled_View *scrolled_view); 
     117void        etk_scrolled_view_extra_vmargin_set(Etk_Scrolled_View *scrolled_view, int margin); 
     118int        etk_scrolled_view_extra_vmargin_get(Etk_Scrolled_View *scrolled_view); 
     119void        etk_scrolled_view_extra_hmargin_set(Etk_Scrolled_View *scrolled_view, int margin); 
     120int        etk_scrolled_view_extra_hmargin_get(Etk_Scrolled_View *scrolled_view); 
     121 
    115122 
    116123/** @} */ 
    117124