Добрый день. Никак не могу разобраться в туториале на сайте Тайзена.
То ли пример какой-то незаконченный, то ли я чего либо не понял.
Код:
#include "primer.h"
#include <Ecore.h>
#include <Ecore_Evas.h>
#include <Ecore_Getopt.h>
#include <Eet.h>
#include <Eina.h>
#include <Elementary.h>
#include <Evas.h>
#include <EWebKit.h>
#include <app.h>
typedef struct
_Browser_Window
{
Evas_Object *elm_window;
Evas_Object *ewk_view;
Evas_Object *back_button;
Evas_Object *forward_button;
} Browser_Window;
static void
win_delete_request_cb(void *data, Evas_Object *obj, void *event_info)
{
ui_app_exit();
}
static void
win_back_cb(void *data, Evas_Object *obj, void *event_info)
{
Browser_Window *ad = data;
/* Let window go to hide state. */
elm_win_lower(ad->elm_window);
}
static void
create_base_gui(Browser_Window *ad)
{
/* Window */
/* Create and initialize elm_win.
elm_win is mandatory to manipulate window. */
ad->elm_window = elm_win_util_standard_add(PACKAGE, PACKAGE);
elm_win_autodel_set(ad->elm_window, EINA_TRUE);
if (elm_win_wm_rotation_supported_get(ad->elm_window)) {
int rots[4] = { 0, 90, 180, 270 };
elm_win_wm_rotation_available_rotations_set(ad->elm_window, (const int *)(&rots), 4);
}
evas_object_smart_callback_add(ad->elm_window, "delete,request", win_delete_request_cb, NULL);
eext_object_event_callback_add(ad->elm_window, EEXT_CALLBACK_BACK, win_back_cb, ad);
//ad->conform = elm_conformant_add(ad->win);
elm_win_indicator_mode_set(ad->elm_window, ELM_WIN_INDICATOR_SHOW);
elm_win_indicator_opacity_set(ad->elm_window, ELM_WIN_INDICATOR_OPAQUE);
/* Show window after base gui is set up */
evas_object_show(ad->elm_window);
}
static void
on_key_down(void *user_data, Evas *e, Evas_Object *ewk_view, void *event_info)
{
Browser_Window *window = (Browser_Window *)user_data;
Evas_Event_Key_Down *ev = (Evas_Event_Key_Down*) event_info;
const Evas_Modifier *mod = evas_key_modifier_get(e);
Eina_Bool ctrlPressed = evas_key_modifier_is_set(mod, "Control");
Eina_Bool altPressed = evas_key_modifier_is_set(mod, "Alt");
}
static void
view_focus_set(Browser_Window *window, Eina_Bool focus)
{
elm_object_focus_set(elm_object_top_widget_get(window->elm_window), EINA_FALSE);
evas_object_focus_set(window->ewk_view, focus);
};
static void
on_mouse_down(void *user_data, Evas *e, Evas_Object *ewk_view, void *event_info)
{
Browser_Window *window = (Browser_Window *)user_data;
Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info;
if (ev->button == 1)
view_focus_set(window, EINA_TRUE);
}
static Browser_Window*
window_create(Evas_Object *opener, int width, int height, Eina_Bool view_mode)
{
// Allocate memory
Browser_Window *window = calloc(1, sizeof(Browser_Window));
if (!window)
{
// "ERROR: could not create browser window."
return NULL;
}
// Create window
window->elm_window = elm_win_add(NULL, "minibrowser-window", ELM_WIN_BASIC);
// evas_object_smart_callback_add(window->win, "delete,request", on_window_deletion, &window);
Evas_Object *vertical_layout = elm_box_add(window->elm_window);
elm_box_padding_set(vertical_layout, 0, 2);
evas_object_size_hint_weight_set(vertical_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(window->elm_window, vertical_layout);
evas_object_show(vertical_layout);
// Create horizontal layout for top bar
Evas_Object *horizontal_layout = elm_box_add(window->elm_window);
elm_box_horizontal_set(horizontal_layout, EINA_TRUE);
evas_object_size_hint_weight_set(horizontal_layout, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(horizontal_layout, EVAS_HINT_FILL, 0.0);
elm_box_pack_end(vertical_layout, horizontal_layout);
evas_object_show(horizontal_layout);
Evas *evas = evas_object_evas_get(window->elm_window);
window->ewk_view = ewk_view_add(evas);
ewk_view_user_agent_set(window->ewk_view, NULL);
evas_object_event_callback_add(window->ewk_view, EVAS_CALLBACK_KEY_DOWN, on_key_down, window);
evas_object_event_callback_add(window->ewk_view, EVAS_CALLBACK_MOUSE_DOWN, on_mouse_down, window);
elm_win_resize_object_add(window->elm_window, window->ewk_view);
evas_object_show(window->ewk_view);
evas_object_show(window->elm_window);
view_focus_set(window, EINA_TRUE);
return window;
}
static bool
app_create(void *data)
{
Browser_Window *ad = data;
window_create(NULL, 0, 0, EINA_FALSE);
create_base_gui(ad);
return true;
}
static Browser_Window*
window_find_with_elm_window(Evas_Object *elm_window)
{
Eina_List *l;
void *data;
if (!elm_window)
return NULL;
//EINA_LIST_FOREACH(windows, l, data)
{
Browser_Window *window = (Browser_Window *)data;
if (window->elm_window == elm_window)
return window;
}
return NULL;
}
static Browser_Window*
window_find_with_ewk_view(Evas_Object *ewk_view)
{
Eina_List *l;
void *data;
if (!ewk_view)
return NULL;
//EINA_LIST_FOREACH(windows, l, data)
{
Browser_Window *window = (Browser_Window *)data;
if (window->ewk_view == ewk_view)
return window;
}
return NULL;
}
static void
app_control(app_control_h app_control, void *data)
{
/* Handle the launch request. */
}
static void
app_pause(void *data)
{
/* Take necessary actions when application becomes invisible. */
}
static void
app_resume(void *data)
{
/* Take necessary actions when application becomes visible. */
}
static void
app_terminate(void *data)
{
ewk_shutdown();
}
static void
ui_app_lang_changed(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_LANGUAGE_CHANGED*/
char *locale = NULL;
system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
elm_language_set(locale);
free(locale);
return;
}
static void
ui_app_orient_changed(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_DEVICE_ORIENTATION_CHANGED*/
return;
}
static void
ui_app_region_changed(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_REGION_FORMAT_CHANGED*/
}
static void
ui_app_low_battery(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_LOW_BATTERY*/
}
static void
ui_app_low_memory(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_LOW_MEMORY*/
}
int
main(int argc, char *argv[])
{
Browser_Window ad = {0,};
int ret = 0;
ui_app_lifecycle_callback_s event_callback = {0,};
app_event_handler_h handlers[5] = {NULL, };
int args = 1;
Browser_Window window;
memset(&window, 0x00, sizeof(Browser_Window));
ui_app_lifecycle_callback_s ops;
memset(&ops, 0x00, sizeof(ui_app_lifecycle_callback_s));
ops.create = app_create;
ops.terminate = app_terminate;
ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, &ad);
ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, &ad);
ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, &ad);
ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &ad);
ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, &ad);
ret = ui_app_main(argc, argv, &event_callback, &ad);
if (ret != APP_ERROR_NONE) {
dlog_print(DLOG_ERROR, LOG_TAG, "app_main() is failed. err = %d", ret);
}
return ui_app_main(argc, argv, &ops, &window);
}