#include <Ecore.h>
#include <Ecore_Evas.h>
#include <Evas.h>
#include <EWebKit.h>

#include <stdio.h>

#define EWK_THEME EWK_DATADIR"/themes/default.edj"

// Compile with:
// gcc -o hellobrowser2 hellobrowser2.c \
//     -DEWK_DATADIR="\"$(pkg-config --variable=datadir ewebkit)\"" \
//     $(pkg-config --cflags --libs ecore ecore-evas evas ewebkit)

static Eina_Bool
main_signal_exit(void *data, int ev_type, void *ev)
{
    ecore_evas_free(data);
    ecore_main_loop_quit();
    return EINA_TRUE;
}


// Rotate an evas object by 180 degrees
static void
_rotate_obj(Evas_Object *obj)
{
    Evas_Map *map = evas_map_new(4);

    evas_map_util_points_populate_from_object(map, obj);
    evas_map_util_rotate(map, 180.0, 400, 300);
    evas_map_alpha_set(map, 0);
    evas_map_smooth_set(map, 1);

    evas_object_map_set(obj, map);
    evas_object_map_enable_set(obj, 1);

    evas_map_free(map);
}

int main(int argc, char *argv[])
{
    Ecore_Evas *window;
    Evas *evas;
    Evas_Object *browser;

    // This is a simple browser with only a start page
    const char *default_url = "http://www.google.com/";


    // Init all EFL stuff we use
    evas_init();
    ecore_init();
    ecore_evas_init();
    ewk_init();

    // Create a new window, with size=800x600 and default engine
    window = ecore_evas_new(NULL, 0, 0, 800, 600, NULL);
    if (!window) {
        fprintf(stderr, "something went wrong... :(\n");
        return 1;
    }

    // Get the canvas off just-created window
    evas = ecore_evas_get(window);
    if (!evas) {
        fprintf(stderr, "something went wrong... :(\n");
        return 1;
    }

    // Add a View object into this canvas. A View object is where WebKit will
    // render stuff.
    browser = ewk_view_single_add(evas);

    // Set default theme
    ewk_view_theme_set(browser, EWK_THEME);

    // Set uri to load
    ewk_view_uri_set(browser, default_url);

    // Make a 10px border, resize and show
    evas_object_move(browser, 10, 10);
    evas_object_resize(browser, 780, 580);
    evas_object_show(browser);
    ecore_evas_show(window);

    // Focus it so it will receive pressed keys
    evas_object_focus_set(browser, 1);

    // Rotate for fun :-)
    _rotate_obj(browser);

    // Add a callback so clicks on "X" on top of window will call
    // main_signal_exit() function
    ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, main_signal_exit, window);
    ecore_main_loop_begin();

    // Destroy all the stuff we have used
    ewk_shutdown();
    ecore_evas_shutdown();
    ecore_shutdown();
    evas_shutdown();

    return 0;
}

