Changeset 72579 in webkit


Ignore:
Timestamp:
Nov 22, 2010 6:35:10 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2010-11-22 Alex Grilo <abgrilo@profusion.mobi>

Reviewed by Kenneth Rohde Christiansen.

[EFL] Tiled Backing Store for Webkit-Efl
https://bugs.webkit.org/show_bug.cgi?id=45397

This tile based backing store is a grid of tiles where each tile is
an Evas_Object showing a piece of the page content. The
new ewk_view_tiled.c is an implementation of some of the functions of
the original ewk_view, that makes calls to the Tiled Backing Store
specific functions.

The rendering occurs in the pixels stored in each tile (Evas_Object),
in the same way as the previous single backing store. Tiles not being
shown in the viewport are stored in a cache, and can be reused later
to avoid having to be rendered again.

Scrolling occurs as just moving the tiles, using Evas move operations,
and when more than one tile size is scrolled, a shift of rows or
columns needs to be done.

  • CMakeListsEfl.txt:
  • ewk/ewk_tiled_backing_store.c: Added. (_ewk_tiled_backing_store_updates_process): (_ewk_tiled_backing_store_flush): (_ewk_tiled_backing_store_tile_new): (_ewk_tiled_backing_store_item_move): (_ewk_tiled_backing_store_item_resize): (_ewk_tiled_backing_store_tile_associate): (_ewk_tiled_backing_store_tile_dissociate): (_ewk_tiled_backing_store_tile_dissociate_all): (_ewk_tiled_backing_store_pre_render_request_add): (_ewk_tiled_backing_store_pre_render_request_del): (_ewk_tiled_backing_store_pre_render_request_first): (_ewk_tiled_backing_store_pre_render_request_flush): (_ewk_tiled_backing_store_pre_render_request_remove_unassociated): (_ewk_tiled_backing_store_pre_render_request_remove_associated): (_ewk_tiled_backing_store_pre_render_request_process_single): (_ewk_tiled_backing_store_item_process_idler_cb): (_ewk_tiled_backing_store_item_process_idler_stop): (_ewk_tiled_backing_store_item_process_idler_start): (_ewk_tiled_backing_store_item_request_del): (_ewk_tiled_backing_store_item_request_add): (_ewk_tiled_backing_store_disable_render): (_ewk_tiled_backing_store_enable_render): (_ewk_tiled_backing_store_visible_tiles_rect): (_ewk_tiled_backing_store_tile_is_inside_viewport): (_ewk_tiled_backing_store_tile_is_adjacent_to_viewport): (_ewk_tiled_backing_store_item_fill): (_ewk_tiled_backing_store_item_add): (_ewk_tiled_backing_store_item_del): (_ewk_tiled_backing_store_item_smooth_scale_set): (_ewk_tiled_backing_store_changed): (_ewk_tiled_backing_store_view_cols_end_del): (_ewk_tiled_backing_store_view_cols_end_add): (_ewk_tiled_backing_store_view_row_del): (_ewk_tiled_backing_store_view_rows_range_del): (_ewk_tiled_backing_store_view_rows_all_del): (_ewk_tiled_backing_store_render): (_ewk_tiled_backing_store_model_matrix_create): (_ewk_tiled_backing_store_smart_member_del): (_ewk_tiled_backing_store_smart_member_add): (_ewk_tiled_backing_store_mem_dbg): (_ewk_tiled_backing_store_sig_usr): (_ewk_tiled_backing_store_smart_add): (_ewk_tiled_backing_store_smart_del): (_ewk_tiled_backing_store_smart_move): (_ewk_tiled_backing_store_smart_resize): (_ewk_tiled_backing_store_recalc_renderers): (_ewk_tiled_backing_store_smart_calculate_size): (_ewk_tiled_backing_store_view_dbg): (_ewk_tiled_backing_store_view_wrap_up): (_ewk_tiled_backing_store_view_wrap_down): (_ewk_tiled_backing_store_view_wrap_left): (_ewk_tiled_backing_store_view_wrap_right): (_ewk_tiled_backing_store_view_refill): (_ewk_tiled_backing_store_view_pos_apply): (_ewk_tiled_backing_store_smart_calculate_offset_force): (_ewk_tiled_backing_store_smart_calculate_offset): (_ewk_tiled_backing_store_smart_calculate_pos): (_ewk_tiled_backing_store_fill_renderers): (_ewk_tiled_backing_store_smart_calculate): (ewk_tiled_backing_store_add): (ewk_tiled_backing_store_render_cb_set): (ewk_tiled_backing_store_tile_unused_cache_get): (ewk_tiled_backing_store_tile_unused_cache_set): (_ewk_tiled_backing_store_scroll_full_offset_set_internal): (ewk_tiled_backing_store_scroll_full_offset_set): (ewk_tiled_backing_store_scroll_full_offset_add): (_ewk_tiled_backing_store_zoom_set_internal): (ewk_tiled_backing_store_zoom_set): (ewk_tiled_backing_store_zoom_weak_set): (ewk_tiled_backing_store_fix_offsets): (ewk_tiled_backing_store_zoom_weak_smooth_scale_set): (ewk_tiled_backing_store_update): (ewk_tiled_backing_store_updates_process_pre_set): (ewk_tiled_backing_store_updates_process_post_set): (ewk_tiled_backing_store_updates_process): (ewk_tiled_backing_store_updates_clear): (ewk_tiled_backing_store_contents_resize): (ewk_tiled_backing_store_disabled_update_set): (ewk_tiled_backing_store_flush): (ewk_tiled_backing_store_pre_render_region): (ewk_tiled_backing_store_pre_render_relative_radius): (ewk_tiled_backing_store_pre_render_cancel): (ewk_tiled_backing_store_disable_render): (ewk_tiled_backing_store_enable_render): (ewk_tiled_backing_store_process_entire_queue_set):
  • ewk/ewk_tiled_backing_store.h: Added.
  • ewk/ewk_tiled_matrix.c: Added. (_ewk_tile_matrix_cell_free): (_ewk_tile_matrix_tile_free): (ewk_tile_matrix_new): (ewk_tile_matrix_free): (ewk_tile_matrix_resize): (ewk_tile_matrix_unused_cache_get): (ewk_tile_matrix_tile_exact_get): (ewk_tile_matrix_tile_exact_exists): (ewk_tile_matrix_tile_nearest_get): (ewk_tile_matrix_tile_new): (ewk_tile_matrix_tile_put): (ewk_tile_matrix_tile_update): (ewk_tile_matrix_tile_update_full): (ewk_tile_matrix_tile_updates_clear): (_ewk_tile_matrix_slicer_setup): (ewk_tile_matrix_update): (ewk_tile_matrix_updates_process): (ewk_tile_matrix_updates_clear): (ewk_tile_matrix_dbg): (ewk_tile_matrix_freeze): (ewk_tile_matrix_thaw):
  • ewk/ewk_tiled_matrix.h: Added.
  • ewk/ewk_tiled_model.c: Added. (_ewk_tile_account_get): (_ewk_tile_account_allocated): (_ewk_tile_account_freed): (ewk_tile_accounting_dbg): (_ewk_tile_paint_rgb888): (_ewk_tile_paint_rgb565): (_ewk_tile_paint): (ewk_tile_new): (ewk_tile_free): (ewk_tile_show): (ewk_tile_hide): (ewk_tile_visible_get): (ewk_tile_update_full): (ewk_tile_update_area): (ewk_tile_updates_process): (ewk_tile_updates_clear): (ewk_tile_unused_cache_new): (ewk_tile_unused_cache_lock_area): (ewk_tile_unused_cache_unlock_area): (ewk_tile_unused_cache_free): (ewk_tile_unused_cache_clear): (ewk_tile_unused_cache_ref): (ewk_tile_unused_cache_unref): (ewk_tile_unused_cache_max_set): (ewk_tile_unused_cache_max_get): (ewk_tile_unused_cache_used_get): (ewk_tile_unused_cache_flush): (ewk_tile_unused_cache_auto_flush): (ewk_tile_unused_cache_dirty): (ewk_tile_unused_cache_freeze): (ewk_tile_unused_cache_thaw): (ewk_tile_unused_cache_tile_get): (ewk_tile_unused_cache_tile_put): (ewk_tile_unused_cache_dbg):
  • ewk/ewk_tiled_model.h: Added.
  • ewk/ewk_tiled_private.h: Added.
  • ewk/ewk_view.cpp: (_ewk_view_smart_add): (_ewk_view_smart_calculate): (_ewk_view_smart_show): (_ewk_view_smart_hide): (_ewk_view_smart_pre_render_relative_radius): (_ewk_view_zoom_animator_cb): (_ewk_view_smart_disable_render): (_ewk_view_smart_enable_render): (ewk_view_base_smart_set): (ewk_view_pre_render_region): (ewk_view_pre_render_relative_radius): (ewk_view_enable_render): (ewk_view_disable_render): (ewk_view_scroll): (ewk_view_did_first_visually_nonempty_layout): (ewk_view_dispatch_did_finish_loading): (ewk_view_transition_to_commited_for_newpage):
  • ewk/ewk_view.h:
  • ewk/ewk_view_tiled.c: Added. (_ewk_view_tiled_render_cb): (_ewk_view_tiled_updates_process_pre): (_ewk_view_tiled_smart_backing_store_add): (_ewk_view_tiled_contents_size_changed_cb): (_ewk_view_tiled_smart_add): (_ewk_view_tiled_smart_scrolls_process): (_ewk_view_tiled_smart_repaints_process): (_ewk_view_tiled_smart_contents_resize): (_ewk_view_tiled_smart_zoom_set): (_ewk_view_tiled_smart_zoom_weak_set): (_ewk_view_tiled_smart_zoom_weak_smooth_scale_set): (_ewk_view_tiled_smart_flush): (_ewk_view_tiled_smart_pre_render_region): (_ewk_view_tiled_smart_pre_render_relative_radius): (_ewk_view_tiled_smart_pre_render_cancel): (_ewk_view_tiled_smart_disable_render): (_ewk_view_tiled_smart_enable_render): (ewk_view_tiled_smart_set): (_ewk_view_tiled_smart_class_new): (ewk_view_tiled_add): (ewk_view_tiled_unused_cache_get): (ewk_view_tiled_unused_cache_set): (ewk_view_tiled_process_entire_queue_set):
Location:
trunk/WebKit/efl
Files:
8 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit/efl/CMakeListsEfl.txt

    r72067 r72579  
    6464    efl/ewk/ewk_main.cpp
    6565    efl/ewk/ewk_settings.cpp
     66    efl/ewk/ewk_tiled_backing_store.c
     67    efl/ewk/ewk_tiled_matrix.c
     68    efl/ewk/ewk_tiled_model.c
    6669    efl/ewk/ewk_util.cpp
    6770    efl/ewk/ewk_view.cpp
    6871    efl/ewk/ewk_view_single.c
     72    efl/ewk/ewk_view_tiled.c
    6973    efl/ewk/ewk_window_features.cpp
    7074)
  • trunk/WebKit/efl/ChangeLog

    r72097 r72579  
     12010-11-22  Alex Grilo  <abgrilo@profusion.mobi>
     2
     3        Reviewed by Kenneth Rohde Christiansen.
     4
     5        [EFL] Tiled Backing Store for Webkit-Efl
     6        https://bugs.webkit.org/show_bug.cgi?id=45397
     7
     8        This tile based backing store is a grid of tiles where each tile is
     9        an Evas_Object showing a piece of the page content. The
     10        new ewk_view_tiled.c is an implementation of some of the functions of
     11        the original ewk_view, that makes calls to the Tiled Backing Store
     12        specific functions.
     13
     14        The rendering occurs in the pixels stored in each tile (Evas_Object),
     15        in the same way as the previous single backing store. Tiles not being
     16        shown in the viewport are stored in a cache, and can be reused later
     17        to avoid having to be rendered again.
     18
     19        Scrolling occurs as just moving the tiles, using Evas move operations,
     20        and when more than one tile size is scrolled, a shift of rows or
     21        columns needs to be done.
     22
     23        * CMakeListsEfl.txt:
     24        * ewk/ewk_tiled_backing_store.c: Added.
     25        (_ewk_tiled_backing_store_updates_process):
     26        (_ewk_tiled_backing_store_flush):
     27        (_ewk_tiled_backing_store_tile_new):
     28        (_ewk_tiled_backing_store_item_move):
     29        (_ewk_tiled_backing_store_item_resize):
     30        (_ewk_tiled_backing_store_tile_associate):
     31        (_ewk_tiled_backing_store_tile_dissociate):
     32        (_ewk_tiled_backing_store_tile_dissociate_all):
     33        (_ewk_tiled_backing_store_pre_render_request_add):
     34        (_ewk_tiled_backing_store_pre_render_request_del):
     35        (_ewk_tiled_backing_store_pre_render_request_first):
     36        (_ewk_tiled_backing_store_pre_render_request_flush):
     37        (_ewk_tiled_backing_store_pre_render_request_remove_unassociated):
     38        (_ewk_tiled_backing_store_pre_render_request_remove_associated):
     39        (_ewk_tiled_backing_store_pre_render_request_process_single):
     40        (_ewk_tiled_backing_store_item_process_idler_cb):
     41        (_ewk_tiled_backing_store_item_process_idler_stop):
     42        (_ewk_tiled_backing_store_item_process_idler_start):
     43        (_ewk_tiled_backing_store_item_request_del):
     44        (_ewk_tiled_backing_store_item_request_add):
     45        (_ewk_tiled_backing_store_disable_render):
     46        (_ewk_tiled_backing_store_enable_render):
     47        (_ewk_tiled_backing_store_visible_tiles_rect):
     48        (_ewk_tiled_backing_store_tile_is_inside_viewport):
     49        (_ewk_tiled_backing_store_tile_is_adjacent_to_viewport):
     50        (_ewk_tiled_backing_store_item_fill):
     51        (_ewk_tiled_backing_store_item_add):
     52        (_ewk_tiled_backing_store_item_del):
     53        (_ewk_tiled_backing_store_item_smooth_scale_set):
     54        (_ewk_tiled_backing_store_changed):
     55        (_ewk_tiled_backing_store_view_cols_end_del):
     56        (_ewk_tiled_backing_store_view_cols_end_add):
     57        (_ewk_tiled_backing_store_view_row_del):
     58        (_ewk_tiled_backing_store_view_rows_range_del):
     59        (_ewk_tiled_backing_store_view_rows_all_del):
     60        (_ewk_tiled_backing_store_render):
     61        (_ewk_tiled_backing_store_model_matrix_create):
     62        (_ewk_tiled_backing_store_smart_member_del):
     63        (_ewk_tiled_backing_store_smart_member_add):
     64        (_ewk_tiled_backing_store_mem_dbg):
     65        (_ewk_tiled_backing_store_sig_usr):
     66        (_ewk_tiled_backing_store_smart_add):
     67        (_ewk_tiled_backing_store_smart_del):
     68        (_ewk_tiled_backing_store_smart_move):
     69        (_ewk_tiled_backing_store_smart_resize):
     70        (_ewk_tiled_backing_store_recalc_renderers):
     71        (_ewk_tiled_backing_store_smart_calculate_size):
     72        (_ewk_tiled_backing_store_view_dbg):
     73        (_ewk_tiled_backing_store_view_wrap_up):
     74        (_ewk_tiled_backing_store_view_wrap_down):
     75        (_ewk_tiled_backing_store_view_wrap_left):
     76        (_ewk_tiled_backing_store_view_wrap_right):
     77        (_ewk_tiled_backing_store_view_refill):
     78        (_ewk_tiled_backing_store_view_pos_apply):
     79        (_ewk_tiled_backing_store_smart_calculate_offset_force):
     80        (_ewk_tiled_backing_store_smart_calculate_offset):
     81        (_ewk_tiled_backing_store_smart_calculate_pos):
     82        (_ewk_tiled_backing_store_fill_renderers):
     83        (_ewk_tiled_backing_store_smart_calculate):
     84        (ewk_tiled_backing_store_add):
     85        (ewk_tiled_backing_store_render_cb_set):
     86        (ewk_tiled_backing_store_tile_unused_cache_get):
     87        (ewk_tiled_backing_store_tile_unused_cache_set):
     88        (_ewk_tiled_backing_store_scroll_full_offset_set_internal):
     89        (ewk_tiled_backing_store_scroll_full_offset_set):
     90        (ewk_tiled_backing_store_scroll_full_offset_add):
     91        (_ewk_tiled_backing_store_zoom_set_internal):
     92        (ewk_tiled_backing_store_zoom_set):
     93        (ewk_tiled_backing_store_zoom_weak_set):
     94        (ewk_tiled_backing_store_fix_offsets):
     95        (ewk_tiled_backing_store_zoom_weak_smooth_scale_set):
     96        (ewk_tiled_backing_store_update):
     97        (ewk_tiled_backing_store_updates_process_pre_set):
     98        (ewk_tiled_backing_store_updates_process_post_set):
     99        (ewk_tiled_backing_store_updates_process):
     100        (ewk_tiled_backing_store_updates_clear):
     101        (ewk_tiled_backing_store_contents_resize):
     102        (ewk_tiled_backing_store_disabled_update_set):
     103        (ewk_tiled_backing_store_flush):
     104        (ewk_tiled_backing_store_pre_render_region):
     105        (ewk_tiled_backing_store_pre_render_relative_radius):
     106        (ewk_tiled_backing_store_pre_render_cancel):
     107        (ewk_tiled_backing_store_disable_render):
     108        (ewk_tiled_backing_store_enable_render):
     109        (ewk_tiled_backing_store_process_entire_queue_set):
     110        * ewk/ewk_tiled_backing_store.h: Added.
     111        * ewk/ewk_tiled_matrix.c: Added.
     112        (_ewk_tile_matrix_cell_free):
     113        (_ewk_tile_matrix_tile_free):
     114        (ewk_tile_matrix_new):
     115        (ewk_tile_matrix_free):
     116        (ewk_tile_matrix_resize):
     117        (ewk_tile_matrix_unused_cache_get):
     118        (ewk_tile_matrix_tile_exact_get):
     119        (ewk_tile_matrix_tile_exact_exists):
     120        (ewk_tile_matrix_tile_nearest_get):
     121        (ewk_tile_matrix_tile_new):
     122        (ewk_tile_matrix_tile_put):
     123        (ewk_tile_matrix_tile_update):
     124        (ewk_tile_matrix_tile_update_full):
     125        (ewk_tile_matrix_tile_updates_clear):
     126        (_ewk_tile_matrix_slicer_setup):
     127        (ewk_tile_matrix_update):
     128        (ewk_tile_matrix_updates_process):
     129        (ewk_tile_matrix_updates_clear):
     130        (ewk_tile_matrix_dbg):
     131        (ewk_tile_matrix_freeze):
     132        (ewk_tile_matrix_thaw):
     133        * ewk/ewk_tiled_matrix.h: Added.
     134        * ewk/ewk_tiled_model.c: Added.
     135        (_ewk_tile_account_get):
     136        (_ewk_tile_account_allocated):
     137        (_ewk_tile_account_freed):
     138        (ewk_tile_accounting_dbg):
     139        (_ewk_tile_paint_rgb888):
     140        (_ewk_tile_paint_rgb565):
     141        (_ewk_tile_paint):
     142        (ewk_tile_new):
     143        (ewk_tile_free):
     144        (ewk_tile_show):
     145        (ewk_tile_hide):
     146        (ewk_tile_visible_get):
     147        (ewk_tile_update_full):
     148        (ewk_tile_update_area):
     149        (ewk_tile_updates_process):
     150        (ewk_tile_updates_clear):
     151        (ewk_tile_unused_cache_new):
     152        (ewk_tile_unused_cache_lock_area):
     153        (ewk_tile_unused_cache_unlock_area):
     154        (ewk_tile_unused_cache_free):
     155        (ewk_tile_unused_cache_clear):
     156        (ewk_tile_unused_cache_ref):
     157        (ewk_tile_unused_cache_unref):
     158        (ewk_tile_unused_cache_max_set):
     159        (ewk_tile_unused_cache_max_get):
     160        (ewk_tile_unused_cache_used_get):
     161        (ewk_tile_unused_cache_flush):
     162        (ewk_tile_unused_cache_auto_flush):
     163        (ewk_tile_unused_cache_dirty):
     164        (ewk_tile_unused_cache_freeze):
     165        (ewk_tile_unused_cache_thaw):
     166        (ewk_tile_unused_cache_tile_get):
     167        (ewk_tile_unused_cache_tile_put):
     168        (ewk_tile_unused_cache_dbg):
     169        * ewk/ewk_tiled_model.h: Added.
     170        * ewk/ewk_tiled_private.h: Added.
     171        * ewk/ewk_view.cpp:
     172        (_ewk_view_smart_add):
     173        (_ewk_view_smart_calculate):
     174        (_ewk_view_smart_show):
     175        (_ewk_view_smart_hide):
     176        (_ewk_view_smart_pre_render_relative_radius):
     177        (_ewk_view_zoom_animator_cb):
     178        (_ewk_view_smart_disable_render):
     179        (_ewk_view_smart_enable_render):
     180        (ewk_view_base_smart_set):
     181        (ewk_view_pre_render_region):
     182        (ewk_view_pre_render_relative_radius):
     183        (ewk_view_enable_render):
     184        (ewk_view_disable_render):
     185        (ewk_view_scroll):
     186        (ewk_view_did_first_visually_nonempty_layout):
     187        (ewk_view_dispatch_did_finish_loading):
     188        (ewk_view_transition_to_commited_for_newpage):
     189        * ewk/ewk_view.h:
     190        * ewk/ewk_view_tiled.c: Added.
     191        (_ewk_view_tiled_render_cb):
     192        (_ewk_view_tiled_updates_process_pre):
     193        (_ewk_view_tiled_smart_backing_store_add):
     194        (_ewk_view_tiled_contents_size_changed_cb):
     195        (_ewk_view_tiled_smart_add):
     196        (_ewk_view_tiled_smart_scrolls_process):
     197        (_ewk_view_tiled_smart_repaints_process):
     198        (_ewk_view_tiled_smart_contents_resize):
     199        (_ewk_view_tiled_smart_zoom_set):
     200        (_ewk_view_tiled_smart_zoom_weak_set):
     201        (_ewk_view_tiled_smart_zoom_weak_smooth_scale_set):
     202        (_ewk_view_tiled_smart_flush):
     203        (_ewk_view_tiled_smart_pre_render_region):
     204        (_ewk_view_tiled_smart_pre_render_relative_radius):
     205        (_ewk_view_tiled_smart_pre_render_cancel):
     206        (_ewk_view_tiled_smart_disable_render):
     207        (_ewk_view_tiled_smart_enable_render):
     208        (ewk_view_tiled_smart_set):
     209        (_ewk_view_tiled_smart_class_new):
     210        (ewk_view_tiled_add):
     211        (ewk_view_tiled_unused_cache_get):
     212        (ewk_view_tiled_unused_cache_set):
     213        (ewk_view_tiled_process_entire_queue_set):
     214
    12152010-11-16  Leandro Pereira  <leandro@profusion.mobi>
    2216
  • trunk/WebKit/efl/ewk/ewk_view.cpp

    r70931 r72579  
    9494    } scrolls;
    9595    unsigned int imh; /**< input method hints */
     96    struct {
     97        Eina_Bool view_cleared:1;
     98    } flags;
    9699    struct {
    97100        const char* user_agent;
     
    726729    evas_object_smart_member_add(sd->backing_store, o);
    727730    evas_object_show(sd->backing_store);
     731    evas_object_pass_events_set(sd->backing_store, EINA_TRUE);
     732
     733    sd->events_rect = evas_object_rectangle_add(sd->base.evas);
     734    evas_object_color_set(sd->events_rect, 0, 0, 0, 0);
     735    evas_object_smart_member_add(sd->events_rect, o);
     736    evas_object_show(sd->events_rect);
    728737
    729738    sd->main_frame = ewk_frame_add(sd->base.evas);
     
    816825        }
    817826        evas_object_resize(sd->main_frame, w, h);
     827        evas_object_resize(sd->events_rect, w, h);
    818828        sd->changed.frame_rect = EINA_TRUE;
    819829        sd->view.w = w;
     
    828838        evas_object_move(sd->main_frame, x, y);
    829839        evas_object_move(sd->backing_store, x, y);
     840        evas_object_move(sd->events_rect, x, y);
    830841        sd->changed.frame_rect = EINA_TRUE;
    831842        sd->view.x = x;
     
    849860        sd->changed.frame_rect = EINA_FALSE;
    850861    }
     862}
     863
     864static void _ewk_view_smart_show(Evas_Object *o)
     865{
     866    EWK_VIEW_SD_GET(o, sd);
     867    EWK_VIEW_PRIV_GET(sd, priv);
     868
     869    if (evas_object_clipees_get(sd->base.clipper))
     870        evas_object_show(sd->base.clipper);
     871    evas_object_show(sd->backing_store);
     872}
     873
     874static void _ewk_view_smart_hide(Evas_Object *o)
     875{
     876    EWK_VIEW_SD_GET(o, sd);
     877    EWK_VIEW_PRIV_GET(sd, priv);
     878
     879    evas_object_hide(sd->base.clipper);
     880    evas_object_hide(sd->backing_store);
    851881}
    852882
     
    898928}
    899929
     930static Eina_Bool _ewk_view_smart_pre_render_relative_radius(Ewk_View_Smart_Data* sd, unsigned int n, float zoom)
     931{
     932    WRN("not supported by engine. sd=%p, n=%u zoom=%f",
     933        sd, n, zoom);
     934    return EINA_FALSE;
     935}
     936
    900937static void _ewk_view_smart_pre_render_cancel(Ewk_View_Smart_Data* sd)
    901938{
     
    955992        _ewk_view_zoom_animated_finish(sd);
    956993        ewk_view_zoom_set(sd->self, priv->animated_zoom.zoom.end, cx, cy);
     994        sd->api->sc.calculate(sd->self);
    957995        return EINA_FALSE;
    958996    }
     
    9901028
    9911029    return attributes;
     1030}
     1031
     1032static Eina_Bool _ewk_view_smart_disable_render(Ewk_View_Smart_Data *sd)
     1033{
     1034    WRN("not supported by engine. sd=%p", sd);
     1035    return EINA_FALSE;
     1036}
     1037
     1038static Eina_Bool _ewk_view_smart_enable_render(Ewk_View_Smart_Data *sd)
     1039{
     1040    WRN("not supported by engine. sd=%p", sd);
     1041    return EINA_FALSE;
    9921042}
    9931043
     
    10311081    api->sc.move = _ewk_view_smart_move;
    10321082    api->sc.calculate = _ewk_view_smart_calculate;
     1083    api->sc.show = _ewk_view_smart_show;
     1084    api->sc.hide = _ewk_view_smart_hide;
    10331085    api->sc.data = EWK_VIEW_TYPE_STR; /* used by type checking */
    10341086
     
    10371089    api->flush = _ewk_view_smart_flush;
    10381090    api->pre_render_region = _ewk_view_smart_pre_render_region;
     1091    api->pre_render_relative_radius = _ewk_view_smart_pre_render_relative_radius;
    10391092    api->pre_render_cancel = _ewk_view_smart_pre_render_cancel;
     1093    api->disable_render = _ewk_view_smart_disable_render;
     1094    api->enable_render = _ewk_view_smart_enable_render;
    10401095
    10411096    api->focus_in = _ewk_view_smart_focus_in;
     
    21722227{
    21732228    EWK_VIEW_SD_GET_OR_RETURN(o, sd, EINA_FALSE);
     2229    EWK_VIEW_PRIV_GET_OR_RETURN(sd, priv, EINA_FALSE);
    21742230    EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api->pre_render_region, EINA_FALSE);
    2175     float cur_zoom = ewk_frame_zoom_get(sd->main_frame);
     2231    float cur_zoom;
    21762232    Evas_Coord cw, ch;
     2233
     2234    /* When doing animated zoom it's not possible to call pre-render since it
     2235     * would screw up parameters that animation is currently using
     2236     */
     2237    if (priv->animated_zoom.animator)
     2238        return EINA_FALSE;
     2239
     2240    cur_zoom = ewk_frame_zoom_get(sd->main_frame);
    21772241
    21782242    if (cur_zoom < 0.00001)
     
    22042268
    22052269/**
     2270 * Hint engine to pre-render region, given n extra cols/rows
     2271 *
     2272 * This is an alternative method to ewk_view_pre_render_region(). It does not
     2273 * make sense in all engines and therefore it might not be implemented at all.
     2274 *
     2275 * It's only useful if engine divide the area being rendered in smaller tiles,
     2276 * forming a grid. Then, browser could call this function to pre-render @param n
     2277 * rows/cols involving the current viewport.
     2278 *
     2279 * @param o view to ask pre-render on.
     2280 * @param n number of cols/rows that must be part of the region pre-rendered
     2281 *
     2282 * @see ewk_view_pre_render_region()
     2283 */
     2284Eina_Bool ewk_view_pre_render_relative_radius(Evas_Object* o, unsigned int n)
     2285{
     2286    EWK_VIEW_SD_GET_OR_RETURN(o, sd, EINA_FALSE);
     2287    EWK_VIEW_PRIV_GET_OR_RETURN(sd, priv, EINA_FALSE);
     2288    EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api->pre_render_relative_radius, EINA_FALSE);
     2289    float cur_zoom;
     2290
     2291    if (priv->animated_zoom.animator)
     2292        return EINA_FALSE;
     2293
     2294    cur_zoom = ewk_frame_zoom_get(sd->main_frame);
     2295    return sd->api->pre_render_relative_radius(sd, n, cur_zoom);
     2296}
     2297
     2298/**
    22062299 * Get input method hints
    22072300 *
     
    22272320    EINA_SAFETY_ON_NULL_RETURN(sd->api->pre_render_cancel);
    22282321    sd->api->pre_render_cancel(sd);
     2322}
     2323
     2324/**
     2325  * Enable processing of update requests.
     2326  *
     2327  * @param o view to enable rendering.
     2328  *
     2329  * @return @c EINA_TRUE if render was enabled, @c EINA_FALSE
     2330            otherwise (errors, rendering suspension not supported).
     2331  */
     2332Eina_Bool ewk_view_enable_render(const Evas_Object *o)
     2333{
     2334    EWK_VIEW_SD_GET_OR_RETURN(o, sd, EINA_FALSE);
     2335    EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api->enable_render, EINA_FALSE);
     2336    return sd->api->enable_render(sd);
     2337}
     2338
     2339/**
     2340  * Disable processing of update requests.
     2341  *
     2342  * @param o view to disable rendering.
     2343  *
     2344  * @return @c EINA_TRUE if render was disabled, @c EINA_FALSE
     2345            otherwise (errors, rendering suspension not supported).
     2346  */
     2347Eina_Bool ewk_view_disable_render(const Evas_Object *o)
     2348{
     2349    EWK_VIEW_SD_GET_OR_RETURN(o, sd, EINA_FALSE);
     2350    EINA_SAFETY_ON_NULL_RETURN_VAL(sd->api->disable_render, EINA_FALSE);
     2351    return sd->api->disable_render(sd);
    22292352}
    22302353
     
    39534076    EINA_SAFETY_ON_TRUE_RETURN(!dx && !dy);
    39544077
    3955     _ewk_view_scroll_add(priv, dx, dy, sx, sy, sw, sh, main_frame);
    39564078    _ewk_view_smart_changed(sd);
    39574079}
     
    42854407}
    42864408
     4409void ewk_view_did_first_visually_nonempty_layout(Evas_Object *o)
     4410{
     4411    EWK_VIEW_SD_GET_OR_RETURN(o, sd);
     4412    EWK_VIEW_PRIV_GET_OR_RETURN(sd, priv);
     4413    if (!priv->flags.view_cleared) {
     4414        ewk_view_frame_main_cleared(o);
     4415        ewk_view_enable_render(o);
     4416        priv->flags.view_cleared = EINA_TRUE;
     4417    }
     4418}
     4419
     4420/**
     4421 * @internal
     4422 * Dispatch finished loading.
     4423 *
     4424 * @param o view.
     4425 */
     4426void ewk_view_dispatch_did_finish_loading(Evas_Object *o)
     4427{
     4428    /* If we reach this point and rendering is still disabled, WebCore will not
     4429     * trigger the didFirstVisuallyNonEmptyLayout signal anymore. So, we
     4430     * forcefully re-enable the rendering.
     4431     */
     4432    ewk_view_did_first_visually_nonempty_layout(o);
     4433}
     4434
     4435void ewk_view_transition_to_commited_for_newpage(Evas_Object *o)
     4436{
     4437    EWK_VIEW_SD_GET_OR_RETURN(o, sd);
     4438    EWK_VIEW_PRIV_GET_OR_RETURN(sd, priv);
     4439
     4440    ewk_view_disable_render(o);
     4441    priv->flags.view_cleared = EINA_FALSE;
     4442}
     4443
     4444
    42874445/**
    42884446 * @internal
  • trunk/WebKit/efl/ewk/ewk_view.h

    r70091 r72579  
    115115    void (*flush)(Ewk_View_Smart_Data *sd);
    116116    Eina_Bool (*pre_render_region)(Ewk_View_Smart_Data *sd, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, float zoom);
     117    Eina_Bool (*pre_render_relative_radius)(Ewk_View_Smart_Data *sd, unsigned int n, float zoom);
    117118    void (*pre_render_cancel)(Ewk_View_Smart_Data *sd);
     119    Eina_Bool (*disable_render)(Ewk_View_Smart_Data *sd);
     120    Eina_Bool (*enable_render)(Ewk_View_Smart_Data *sd);
     121
    118122    // event handling:
    119123    //  - returns true if handled
     
    152156 * @see EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION
    153157 */
    154 #define EWK_VIEW_SMART_CLASS_INIT(smart_class_init) {smart_class_init, EWK_VIEW_SMART_CLASS_VERSION, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
     158#define EWK_VIEW_SMART_CLASS_INIT(smart_class_init) {smart_class_init, EWK_VIEW_SMART_CLASS_VERSION, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
    155159
    156160/**
     
    269273    Evas_Object *main_frame; /**< reference to main frame object */
    270274    Evas_Object *backing_store; /**< reference to backing store */
     275    Evas_Object *events_rect; /**< rectangle that should receive mouse events */
    271276    Ewk_View_Private_Data *_priv; /**< should never be accessed, c++ stuff */
    272277    struct {
     
    292297};
    293298
     299/**
     300 * Cache (pool) that contains unused tiles for ewk_view_tiled.
     301 *
     302 * This cache will maintain unused tiles and flush them when the total
     303 * memory exceeds the set amount when
     304 * ewk_tile_unused_cache_auto_flush() or explicitly set value when
     305 * ewk_tile_unused_cache_flush() is called.
     306 *
     307 * The tile may be shared among different ewk_view_tiled instances to
     308 * group maximum unused memory resident in the system.
     309 */
     310typedef struct _Ewk_Tile_Unused_Cache Ewk_Tile_Unused_Cache;
     311EAPI void   ewk_tile_unused_cache_max_set(Ewk_Tile_Unused_Cache *tuc, size_t max);
     312EAPI size_t ewk_tile_unused_cache_max_get(const Ewk_Tile_Unused_Cache *tuc);
     313EAPI size_t ewk_tile_unused_cache_used_get(const Ewk_Tile_Unused_Cache *tuc);
     314EAPI size_t ewk_tile_unused_cache_flush(Ewk_Tile_Unused_Cache *tuc, size_t bytes);
     315EAPI void   ewk_tile_unused_cache_auto_flush(Ewk_Tile_Unused_Cache *tuc);
     316
    294317EAPI Eina_Bool    ewk_view_base_smart_set(Ewk_View_Smart_Class *api);
    295318EAPI Eina_Bool    ewk_view_single_smart_set(Ewk_View_Smart_Class *api);
     319EAPI Eina_Bool    ewk_view_tiled_smart_set(Ewk_View_Smart_Class *api);
    296320
    297321EAPI Evas_Object *ewk_view_single_add(Evas *e);
     322EAPI Evas_Object *ewk_view_tiled_add(Evas *e);
     323
     324EAPI Ewk_Tile_Unused_Cache *ewk_view_tiled_unused_cache_get(const Evas_Object *o);
     325EAPI void                   ewk_view_tiled_unused_cache_set(Evas_Object *o, Ewk_Tile_Unused_Cache *cache);
     326
     327// FIXME: this function should be removed later, when we find the best flag to use.
     328EAPI void                   ewk_view_tiled_process_entire_queue_set(Evas_Object *o, Eina_Bool flag);
    298329
    299330EAPI void         ewk_view_fixed_layout_size_set(Evas_Object *o, Evas_Coord w, Evas_Coord h);
     
    371402
    372403EAPI Eina_Bool    ewk_view_pre_render_region(Evas_Object *o, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, float zoom);
     404EAPI Eina_Bool    ewk_view_pre_render_relative_radius(Evas_Object *o, unsigned int n);
    373405EAPI void         ewk_view_pre_render_cancel(Evas_Object *o);
     406EAPI Eina_Bool    ewk_view_enable_render(const Evas_Object *o);
     407EAPI Eina_Bool    ewk_view_disable_render(const Evas_Object *o);
    374408
    375409EAPI unsigned int ewk_view_imh_get(Evas_Object *o);
Note: See TracChangeset for help on using the changeset viewer.