Magnification utility enhancements.
[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 'c':
41           printf ("creating 3x region at 100,100; 300x200\n");
42           magnifier_create_region (3.0, 3.0, 100, 100, 400, 300);
43         }
44     }
45   return 0;
46 }
47
48 Accessibility_Magnifier 
49 get_magnifier()
50 {
51   static Accessibility_Magnifier magnifier = NULL;
52   static gboolean is_error = FALSE;
53   CORBA_Object oclient;
54   char *obj_id;
55   
56   if (!magnifier && !is_error)
57   {
58     CORBA_exception_init (&ev);
59     obj_id = "OAFIID:Accessibility_Util_Magnifier:proto0.1";
60
61     oclient = bonobo_activation_activate_from_id (obj_id, 0, NULL, &ev);
62     if (ev._major != CORBA_NO_EXCEPTION) {
63       fprintf (stderr,
64             ("Activation error: during magnifier activation: %s\n"),
65             CORBA_exception_id(&ev));
66       CORBA_exception_free(&ev);
67       is_error = TRUE;
68     }
69
70     if (CORBA_Object_is_nil (oclient, &ev))
71     {
72       g_error ("Could not locate magnifier");
73       is_error = TRUE;
74     }
75
76     magnifier = (Accessibility_Magnifier) oclient;
77
78     /* bonobo_activate (); ? */
79   }
80
81   return magnifier;
82 }
83
84 void
85 magnifier_set_roi(int zoom_region, int x, int y, int w, int h)
86 {
87   Accessibility_Magnifier magnifier = get_magnifier();
88
89   if (magnifier)
90        Accessibility_Magnifier_setROI (magnifier,
91                                       (const CORBA_short) zoom_region,
92                                       (const CORBA_long) x,
93                                       (const CORBA_long) y,
94                                       (const CORBA_long) x+w,
95                                       (const CORBA_long) y+h,
96                                       &ev);
97 }
98
99 void
100 magnifier_resize_region (int zoom_region, int x1, int y1, int x2, int y2)
101 {
102   Accessibility_Magnifier magnifier = get_magnifier();
103
104   if (magnifier)
105        Accessibility_Magnifier_resizeZoomRegion (magnifier,
106                                                  (const CORBA_short) zoom_region,
107                                                  (const CORBA_long) x1,
108                                                  (const CORBA_long) y1,
109                                                  (const CORBA_long) x2,
110                                                  (const CORBA_long) y2,
111                                                  &ev);
112 }
113
114 void
115 magnifier_clear_all_regions ()
116 {
117   Accessibility_Magnifier magnifier = get_magnifier();
118
119   if (magnifier)
120        Accessibility_Magnifier_clearAllZoomRegions (magnifier,
121                                                     &ev);
122 }
123
124 int
125 magnifier_create_region (float zx, float zy, int x1, int y1, int x2, int y2)
126 {
127   Accessibility_Magnifier magnifier = get_magnifier();
128   int retval = -1;
129   
130   if (magnifier)
131        retval = Accessibility_Magnifier_createZoomRegion (magnifier,
132                                                           (const CORBA_float) zx,
133                                                           (const CORBA_float) zy,
134                                                           (const CORBA_long) x1,
135                                                           (const CORBA_long) y1,
136                                                           (const CORBA_long) x2,
137                                                           (const CORBA_long) y2,
138                                                           &ev);
139   return retval;
140 }
141
142 void
143 magnifier_set_magnification (int zoom_region, float mag_factor_x, float mag_factor_y)
144 {
145   Accessibility_Magnifier magnifier = get_magnifier();
146
147   if (magnifier)
148        Accessibility_Magnifier_setMagFactor (magnifier,
149                                              (const CORBA_short) zoom_region,
150                                              (const CORBA_float) mag_factor_x,
151                                              (const CORBA_float) mag_factor_y,
152                                              &ev);
153 }
154