您可以创建新的共享对象的弹出窗口(webview)。 (你必须使用tizen ui应用程序)。
- /*
- * HEADER of popup function
- * popupso.h
- */
- #ifndef _POPUPSO_H_
- #define _POPUPSO_H_
- #include <stdbool.h>
- #include <tizen.h>
- typedef void (*Popup_Close_Cb)(bool checked, void *data);
- EXPORT_API bool webview_popup(const char* url, Popup_Close_Cb cb, void *data);
- #endif // _POPUPSO_H_
- /*
- * implementation of popup function
- * popupso.c
- */
- #include "popupso.h"
- #include <Elementary.h>
- #include <EWebKit.h>
- #include <dlog.h>
- #include <efl_extension.h>
- #ifdef LOG_TAG
- #undef LOG_TAG
- #endif
- #define LOG_TAG "popupso"
- #define PADDINGH 0.1
- #define PADDINGV 0.2
- static void win_back_cb(void *data, Evas_Object *obj, void *event_info)
- {
- evas_object_del(obj);
- }
- static void close_cb(void *data, Evas_Object *obj, void *event_info)
- {
- Evas_Object *popup_win = data;
- Evas_Object *check = evas_object_data_get(popup_win, "_checkbox");
- Popup_Close_Cb cb = evas_object_data_get(popup_win, "_cb");
- void *user_data = evas_object_data_get(popup_win, "_data");
- Eina_Bool checked = elm_check_state_get(check);
- evas_object_del(popup_win);
- cb(checked, user_data);
- }
- bool webview_popup(const char *url, Popup_Close_Cb cb, void *data)
- {
- Evas_Object *popup_win = elm_win_add(NULL, "TestWindow", ELM_WIN_DIALOG_BASIC);
- // very important! if you don't make it close on back, user can't close it until push check or another button.
- eext_object_event_callback_add(popup_win, EEXT_CALLBACK_BACK, win_back_cb, NULL);
- int w,h;
- elm_win_screen_size_get(popup_win, NULL, NULL, &w, &h);
- evas_object_move(popup_win, 0, 0);
- int pw = w - w*PADDINGH, ph = h - h*PADDINGV;
- evas_object_resize(popup_win, pw, ph);
- Evas_Object *bg = elm_bg_add(popup_win);
- elm_bg_color_set(bg, 255, 255, 255);
- evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_win_resize_object_add(popup_win, bg);
- evas_object_show(bg);
- Evas_Object *vbox = elm_box_add(popup_win);
- evas_object_size_hint_align_set(vbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_min_set(vbox, pw, ph);
- elm_win_resize_object_add(popup_win, vbox);
- evas_object_show(vbox);
- Evas_Object *webview = ewk_view_add(evas_object_evas_get(popup_win));
- evas_object_size_hint_align_set(webview, EVAS_HINT_FILL, EVAS_HINT_FILL);
- ewk_view_url_set(webview, url);
- elm_box_pack_end(vbox, webview);
- evas_object_show(webview);
- Evas_Object *hbox = elm_box_add(vbox);
- elm_box_horizontal_set(hbox, EINA_TRUE);
- evas_object_size_hint_align_set(webview, EVAS_HINT_FILL, 1.0);
- elm_box_pack_end(vbox, hbox);
- evas_object_show(hbox);
- Evas_Object *label = elm_label_add(hbox);
- elm_object_text_set(label, "don't open in today ");
- evas_object_size_hint_align_set(label, 1.0, 0.5);
- elm_box_pack_end(hbox, label);
- evas_object_show(label);
- Evas_Object *check = elm_check_add(hbox);
- evas_object_size_hint_align_set(check, 1.0, 0.5);
- elm_box_pack_end(hbox, check);
- evas_object_smart_callback_add(check, "changed", close_cb, popup_win);
- evas_object_show(check);
- evas_object_data_set(popup_win, "_checkbox", check);
- evas_object_data_set(popup_win, "_cb", cb);
- evas_object_data_set(popup_win, "_data", data);
- int bottom_h, label_h, check_h;
- evas_object_geometry_get(label, NULL, NULL, NULL, &label_h);
- evas_object_geometry_get(check, NULL, NULL, NULL, &check_h);
- bottom_h = label_h > check_h ? label_h : check_h;
- /* webview don't have default minimum size
- * so if you don't set webview's minimum size,
- * webview will be not show.
- */
- evas_object_size_hint_min_set(webview, pw, ph - bottom_h);
- evas_object_show(popup_win);
- return true;
- }
复制代码
|