Connected implementation for Accessibility_Magnifier_exit ()
[platform/core/uifw/at-spi2-atk.git] / util / mag_control.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <libbonobo.h>
5 #include "Magnifier.h"
6 #include "mag_client.h"
7
8 static CORBA_Environment ev;
9
10 int main(int argc, char ** argv){
11
12   if (!bonobo_init (&argc, argv))
13   {
14     g_error ("Could not initialize Bonobo");
15   }
16
17   CORBA_exception_init (&ev);
18   
19   if(argc == 1){
20           get_magnifier ();
21   }
22
23   else
24     {
25       switch (*argv[1])
26         {
27         case 'z':       
28           printf ("setting mag factor to %f\n", (float) atof (argv[1]+1));
29           magnifier_set_magnification (0, (float) atof (argv[1]+1),
30                                        (float) atof (argv[1]+1));
31           break;
32         case 's':
33           printf ("resizing region 0 to 100x100 at (600, 0)\n");
34           magnifier_resize_region (0, 600, 0, 700, 100);
35           break;
36         case 'd':
37           printf ("destroying/clearing all regions.\n");
38           magnifier_clear_all_regions ();
39           break;
40         case 'q':
41           printf ("exiting magnifier.\n");
42           magnifier_exit ();
43           break;
44         case 'c':
45           printf ("creating 3x region at 100,100; 300x200\n");
46           magnifier_create_region (3.0, 3.0, 100, 100, 400, 300);
47         }
48     }
49   return 0;
50 }
51
52 Accessibility_Magnifier 
53 get_magnifier()
54 {
55   static Accessibility_Magnifier magnifier = NULL;
56   static gboolean is_error = FALSE;
57   CORBA_Object oclient;
58   char *obj_id;
59   
60   if (!magnifier && !is_error)
61   {
62     CORBA_exception_init (&ev);
63     obj_id = "OAFIID:Accessibility_Util_Magnifier:proto0.1";
64
65     oclient = bonobo_activation_activate_from_id (obj_id, 0, NULL, &ev);
66     if (ev._major != CORBA_NO_EXCEPTION) {
67       fprintf (stderr,
68             ("Activation error: during magnifier activation: %s\n"),
69             CORBA_exception_id(&ev));
70       CORBA_exception_free(&ev);
71       is_error = TRUE;
72     }
73
74     if (CORBA_Object_is_nil (oclient, &ev))
75     {
76       g_error ("Could not locate magnifier");
77       is_error = TRUE;
78     }
79
80     magnifier = (Accessibility_Magnifier) oclient;
81
82     /* bonobo_activate (); ? */
83   }
84
85   return magnifier;
86 }
87
88 void
89 magnifier_set_roi(int zoom_region, int x, int y, int w, int h)
90 {
91   Accessibility_Magnifier magnifier = get_magnifier();
92
93   if (magnifier)
94        Accessibility_Magnifier_setROI (magnifier,
95                                       (const CORBA_short) zoom_region,
96                                       (const CORBA_long) x,
97                                       (const CORBA_long) y,
98                                       (const CORBA_long) x+w,
99                                       (const CORBA_long) y+h,
100                                       &ev);
101 }
102
103 void
104 magnifier_resize_region (int zoom_region, int x1, int y1, int x2, int y2)
105 {
106   Accessibility_Magnifier magnifier = get_magnifier();
107
108   if (magnifier)
109        Accessibility_Magnifier_resizeZoomRegion (magnifier,
110                                                  (const CORBA_short) zoom_region,
111                                                  (const CORBA_long) x1,
112                                                  (const CORBA_long) y1,
113                                                  (const CORBA_long) x2,
114                                                  (const CORBA_long) y2,
115                                                  &ev);
116 }
117
118 void
119 magnifier_clear_all_regions ()
120 {
121   Accessibility_Magnifier magnifier = get_magnifier();
122
123   if (magnifier)
124        Accessibility_Magnifier_clearAllZoomRegions (magnifier,
125                                                     &ev);
126 }
127
128 int
129 magnifier_create_region (float zx, float zy, int x1, int y1, int x2, int y2)
130 {
131   Accessibility_Magnifier magnifier = get_magnifier();
132   int retval = -1;
133   
134   if (magnifier)
135        retval = Accessibility_Magnifier_createZoomRegion (magnifier,
136                                                           (const CORBA_float) zx,
137                                                           (const CORBA_float) zy,
138                                                           (const CORBA_long) x1,
139                                                           (const CORBA_long) y1,
140                                                           (const CORBA_long) x2,
141                                                           (const CORBA_long) y2,
142                                                           &ev);
143   return retval;
144 }
145
146 void
147 magnifier_set_magnification (int zoom_region, float mag_factor_x, float mag_factor_y)
148 {
149   Accessibility_Magnifier magnifier = get_magnifier();
150
151   if (magnifier)
152        Accessibility_Magnifier_setMagFactor (magnifier,
153                                              (const CORBA_short) zoom_region,
154                                              (const CORBA_float) mag_factor_x,
155                                              (const CORBA_float) mag_factor_y,
156                                              &ev);
157 }
158
159 void
160 magnifier_exit (void)
161 {
162   Accessibility_Magnifier magnifier = get_magnifier();
163   if (magnifier)
164     Accessibility_Magnifier_exit (magnifier, &ev);
165 }