accessible/src/atk/nsMaiInterfaceValue.cpp

branch
TOR_BUG_9701
changeset 8
97036ab72558
equal deleted inserted replaced
-1:000000000000 0:9b07ba5a6d84
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7 #include "InterfaceInitFuncs.h"
8
9 #include "AccessibleWrap.h"
10 #include "nsMai.h"
11
12 #include "mozilla/FloatingPoint.h"
13 #include "mozilla/Likely.h"
14
15 using namespace mozilla;
16 using namespace mozilla::a11y;
17
18 extern "C" {
19
20 static void
21 getCurrentValueCB(AtkValue *obj, GValue *value)
22 {
23 AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
24 if (!accWrap)
25 return;
26
27 memset (value, 0, sizeof (GValue));
28 double accValue = accWrap->CurValue();
29 if (IsNaN(accValue))
30 return;
31
32 g_value_init (value, G_TYPE_DOUBLE);
33 g_value_set_double (value, accValue);
34 }
35
36 static void
37 getMaximumValueCB(AtkValue *obj, GValue *value)
38 {
39 AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
40 if (!accWrap)
41 return;
42
43 memset(value, 0, sizeof (GValue));
44 double accValue = accWrap->MaxValue();
45 if (IsNaN(accValue))
46 return;
47
48 g_value_init(value, G_TYPE_DOUBLE);
49 g_value_set_double(value, accValue);
50 }
51
52 static void
53 getMinimumValueCB(AtkValue *obj, GValue *value)
54 {
55 AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
56 if (!accWrap)
57 return;
58
59 memset(value, 0, sizeof (GValue));
60 double accValue = accWrap->MinValue();
61 if (IsNaN(accValue))
62 return;
63
64 g_value_init(value, G_TYPE_DOUBLE);
65 g_value_set_double(value, accValue);
66 }
67
68 static void
69 getMinimumIncrementCB(AtkValue *obj, GValue *minimumIncrement)
70 {
71 AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
72 if (!accWrap)
73 return;
74
75 memset(minimumIncrement, 0, sizeof (GValue));
76 double accValue = accWrap->Step();
77 if (IsNaN(accValue))
78 accValue = 0; // zero if the minimum increment is undefined
79
80 g_value_init(minimumIncrement, G_TYPE_DOUBLE);
81 g_value_set_double(minimumIncrement, accValue);
82 }
83
84 static gboolean
85 setCurrentValueCB(AtkValue *obj, const GValue *value)
86 {
87 AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(obj));
88 if (!accWrap)
89 return FALSE;
90
91 double accValue =g_value_get_double(value);
92 return accWrap->SetCurValue(accValue);
93 }
94 }
95
96 void
97 valueInterfaceInitCB(AtkValueIface* aIface)
98 {
99 NS_ASSERTION(aIface, "Invalid aIface");
100 if (MOZ_UNLIKELY(!aIface))
101 return;
102
103 aIface->get_current_value = getCurrentValueCB;
104 aIface->get_maximum_value = getMaximumValueCB;
105 aIface->get_minimum_value = getMinimumValueCB;
106 aIface->get_minimum_increment = getMinimumIncrementCB;
107 aIface->set_current_value = setCurrentValueCB;
108 }

mercurial