2001-12-10 Michael Meeks <michael@ximian.com>
[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           printf ("setting mag factor to %f\n", (float) atof (argv[1]));
25           magnifier_set_magnification (0, (float) atof (argv[1]),
26                                        (float) atof (argv[1]));
27   }
28   sleep (4);
29   return 0;
30 }
31
32 Accessibility_Magnifier 
33 get_magnifier()
34 {
35   static Accessibility_Magnifier magnifier = NULL;
36   static gboolean is_error = FALSE;
37   CORBA_Object oclient;
38   char *obj_id;
39   
40   if (!magnifier && !is_error)
41   {
42     CORBA_exception_init (&ev);
43     obj_id = "OAFIID:Accessibility_Util_Magnifier:proto0.1";
44
45     oclient = bonobo_activation_activate_from_id (obj_id, 0, NULL, &ev);
46     if (ev._major != CORBA_NO_EXCEPTION) {
47       fprintf (stderr,
48             ("Activation error: during magnifier activation: %s\n"),
49             CORBA_exception_id(&ev));
50       CORBA_exception_free(&ev);
51       is_error = TRUE;
52     }
53
54     if (CORBA_Object_is_nil (oclient, &ev))
55     {
56       g_error ("Could not locate magnifier");
57       is_error = TRUE;
58     }
59
60     magnifier = (Accessibility_Magnifier) oclient;
61
62     /* bonobo_activate (); ? */
63   }
64
65   return magnifier;
66 }
67
68 void
69 magnifier_set_roi(int zoom_region, int x, int y, int w, int h)
70 {
71   Accessibility_Magnifier magnifier = get_magnifier();
72
73   if (magnifier)
74        Accessibility_Magnifier_setROI (magnifier,
75                                       (const CORBA_short) zoom_region,
76                                       (const CORBA_long) x,
77                                       (const CORBA_long) y,
78                                       (const CORBA_long) x+w,
79                                       (const CORBA_long) y+h,
80                                       &ev);
81 }
82
83 void
84 magnifier_set_magnification (int zoom_region, float mag_factor_x, float mag_factor_y)
85 {
86   Accessibility_Magnifier magnifier = get_magnifier();
87
88   if (magnifier)
89        Accessibility_Magnifier_setMagFactor (magnifier,
90                                              (const CORBA_short) zoom_region,
91                                              (const CORBA_float) mag_factor_x,
92                                              (const CORBA_float) mag_factor_y,
93                                              &ev);
94 }
95