2001-12-10 Michael Meeks <michael@ximian.com>
[platform/core/uifw/at-spi2-atk.git] / util / mag_client.c
1
2 #include <stdlib.h>
3 #include <libbonobo.h>
4 #include "Magnifier.h"
5 #include "mag_client.h"
6
7 static CORBA_Environment ev;
8
9 Accessibility_Magnifier 
10 get_magnifier()
11 {
12   static Accessibility_Magnifier magnifier = NULL;
13   static gboolean is_error = FALSE;
14   CORBA_Object oclient;
15   char *obj_id;
16   
17   if (!magnifier && !is_error)
18   {
19     CORBA_exception_init (&ev);
20     obj_id = "OAFIID:Accessibility_Util_Magnifier:proto0.1";
21
22     oclient = bonobo_activation_activate_from_id (obj_id, 0, NULL, &ev);
23     if (ev._major != CORBA_NO_EXCEPTION) {
24       fprintf (stderr,
25             ("Activation error: during magnifier activation: %s\n"),
26             CORBA_exception_id(&ev));
27       CORBA_exception_free(&ev);
28       is_error = TRUE;
29     }
30
31     if (CORBA_Object_is_nil (oclient, &ev))
32     {
33       g_error ("Could not locate magnifier");
34       is_error = TRUE;
35     }
36
37     magnifier = (Accessibility_Magnifier) oclient;
38
39   }
40
41   return magnifier;
42 }
43
44 void
45 magnifier_set_roi(int zoom_region, int x, int y, int w, int h)
46 {
47   Accessibility_Magnifier magnifier = get_magnifier();
48
49   if (magnifier)
50        Accessibility_Magnifier_setROI (magnifier,
51                                        (const CORBA_short) zoom_region,
52                                        (const CORBA_long) x,
53                                        (const CORBA_long) y,
54                                        (const CORBA_long) x+w,
55                                        (const CORBA_long) y+h,
56                                        &ev);
57 }
58
59 void
60 magnifier_set_magnification (int zoom_region, float mag_factor_x, float mag_factor_y)
61 {
62   Accessibility_Magnifier magnifier = get_magnifier();
63
64   if (magnifier)
65        Accessibility_Magnifier_setMagFactor (magnifier,
66                                              (const CORBA_short) zoom_region,
67                                              ((CORBA_float) mag_factor_x),
68                                              ((CORBA_float) mag_factor_y),
69                                              &ev);
70 }
71