39af1c3ff96acc63c68d07414ddc446dbc2c563d
[staging/HomeScreen.git] / libhomescreen / src / libhomescreen.cpp
1 extern "C" {
2 #include "homescreen.h" // generated from xml
3 }
4 #include "include/libhomescreen.hpp"
5
6 #include <stdio.h>
7 #include <stdlib.h>
8
9 LibHomeScreen::LibHomeScreen()
10 {
11     GError *err = NULL;
12
13     mp_libHomeScreenHomescreen_Proxy = lib_home_screen_homescreen_proxy_new_for_bus_sync(
14                 G_BUS_TYPE_SESSION,
15                 G_DBUS_PROXY_FLAGS_NONE,
16                 "org.agl.homescreen",
17                 "/HomeScreen",
18                 NULL,
19                 &err);
20
21     if (NULL != err)
22     {
23         fprintf(stderr, "Unable to create proxy: %s\n", err->message);
24     }
25 }
26
27 LibHomeScreen::~LibHomeScreen()
28 {
29     g_object_unref(mp_libHomeScreenHomescreen_Proxy);
30 }
31
32 sRectangle LibHomeScreen::getLayoutRenderAreaForSurfaceId(int surfaceId)
33 {
34     sRectangle result;
35     GError *err = NULL;
36
37     GVariant *out_renderArea;
38
39     lib_home_screen_homescreen_call_get_layout_render_area_for_surface_id_sync(
40                 mp_libHomeScreenHomescreen_Proxy,
41                 surfaceId,
42                 &out_renderArea,
43                 NULL,
44                 &err);
45
46     if (NULL != err)
47     {
48         fprintf(stderr, "Unable to call getLayoutRenderAreaForSurfaceId: %s\n", err->message);
49     }
50
51     g_variant_get(out_renderArea, "(iiii)", result.x, result.y, result.width, result.height);
52
53     return result;
54 }
55
56 void LibHomeScreen::hardKeyPressed(int key)
57 {
58     GError *err = NULL;
59
60     lib_home_screen_homescreen_call_hard_key_pressed_sync(
61                 mp_libHomeScreenHomescreen_Proxy,
62                 key,
63                 NULL,
64                 &err);
65
66     if (NULL != err)
67     {
68         fprintf(stderr, "Unable to call hardKeyPressed: %s\n", err->message);
69     }
70 }
71
72 void LibHomeScreen::renderSurfaceToArea(int surfaceId, const sRectangle &renderArea)
73 {
74     GError *err = NULL;
75
76     GVariant *variant;
77     GVariantBuilder *builder;
78     builder = g_variant_builder_new(G_VARIANT_TYPE("(iiii)"));
79     g_variant_builder_add(builder, "(iiii)", renderArea.x, renderArea.y, renderArea.width, renderArea.height);
80     variant = g_variant_new("(iiii)", builder);
81     g_variant_builder_unref(builder);
82
83     lib_home_screen_homescreen_call_render_surface_to_area_sync(
84                 mp_libHomeScreenHomescreen_Proxy,
85                 surfaceId,
86                 variant,
87                 NULL,
88                 &err);
89
90     if (NULL != err)
91     {
92         fprintf(stderr, "Unable to call renderSurfaceToArea: %s\n", err->message);
93     }
94 }
95
96 void LibHomeScreen::requestSurfaceIdToFullScreen(int surfaceId)
97 {
98     GError *err = NULL;
99
100     lib_home_screen_homescreen_call_request_surface_id_to_full_screen_sync(
101                 mp_libHomeScreenHomescreen_Proxy,
102                 surfaceId,
103                 NULL,
104                 &err);
105
106     if (NULL != err)
107     {
108         fprintf(stderr, "Unable to call requestSurfaceIdToFullScreen: %s\n", err->message);
109     }
110 }