Tizen Native API  8.0
Theme - Using overlays

Overlays are like extensions in that you tell Elementary that some other theme contains the styles you need for your program. The difference is that they will be look in first, so they can override the default style of any widget.

There's not much to say about them that hasn't been said in our previous example about extensions, so going quickly through the code we have a function to load or unload the theme, which will be called when we click any button.

#include <Elementary.h>
static void
_btn_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED)
{
   static int loaded = 1;
   if (loaded)
     elm_theme_overlay_del(NULL, edj_path);
   else
     elm_theme_overlay_add(NULL, edj_path);
   loaded = 1 - loaded;
}

And the main function, creating the window and adding some buttons to it. We load our theme as an overlay and nothing else. Notice there's no style set for any button there, which means they should be using the default that we override.

EAPI_MAIN int
elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
{
   Evas_Object *win, *box, *btn;

   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);

#ifdef PACKAGE_DATA_DIR
   elm_app_compile_data_dir_set(PACKAGE_DATA_DIR);
#endif
   if (ecore_file_exists("./theme_example.edj"))
     {
        strcpy(edj_path, "./theme_example.edj");
     }
   else
     {
        elm_app_info_set(elm_main, "elementary", "examples/theme_example.edj");
        snprintf(edj_path, sizeof(edj_path), "%s/examples/theme_example.edj",
                 elm_app_data_dir_get());
     }
   elm_theme_overlay_add(NULL, edj_path);

   win = elm_win_util_standard_add("theme", "Theme example");
   elm_win_autodel_set(win, EINA_TRUE);

   box = elm_box_add(win);
   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   elm_win_resize_object_add(win, box);
   evas_object_show(box);

   btn = elm_button_add(win);
   elm_object_text_set(btn, "Button 1");
   elm_box_pack_end(box, btn);
   evas_object_show(btn);
   evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, NULL);

   btn = elm_button_add(win);
   elm_object_text_set(btn, "Button 2");
   elm_box_pack_end(box, btn);
   evas_object_show(btn);
   evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, NULL);

   btn = elm_button_add(win);
   elm_object_text_set(btn, "Button 3");
   elm_box_pack_end(box, btn);
   evas_object_show(btn);
   evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, NULL);

   btn = elm_button_add(win);
   elm_object_text_set(btn, "Button 4");
   elm_box_pack_end(box, btn);
   evas_object_show(btn);
   evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, NULL);

   evas_object_resize(win, 300, 320);
   evas_object_show(win);

   elm_run();

   return 0;
}
ELM_MAIN()

That's pretty much it. The full code is here and the definition of the theme is the same as before, and can be found in here.