1/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
2/* vim:set et sts=4: */
3/* IBus - The Input Bus
4 * Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
5 * Copyright (C) 2008-2013 Red Hat, Inc.
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
20 * USA
21 */
22
23#if !defined (__IBUS_H_INSIDE__) && !defined (IBUS_COMPILATION)
24#error "Only <ibus.h> can be included directly"
25#endif
26
27#ifndef __IBUS_ATTRIBUTE_H_
28#define __IBUS_ATTRIBUTE_H_
29
30/**
31 * SECTION: ibusattribute
32 * @short_description: Attributes of IBusText.
33 * @see_also: #IBusText
34 * @stability: Stable
35 *
36 * An IBusAttribute represents an attribute that associate to IBusText.
37 * It decorates preedit buffer and auxiliary text with underline, foreground
38 * and background colors.
39 */
40
41#include "ibusserializable.h"
42
43G_BEGIN_DECLS
44
45/*
46 * Type macros.
47 */
48/* define IBusAttribute macros */
49#define IBUS_TYPE_ATTRIBUTE \
50 (ibus_attribute_get_type ())
51#define IBUS_ATTRIBUTE(obj) \
52 (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_ATTRIBUTE, IBusAttribute))
53#define IBUS_ATTRIBUTE_CLASS(klass) \
54 (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_ATTRIBUTE, IBusAttributeClass))
55#define IBUS_IS_ATTRIBUTE(obj) \
56 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_ATTRIBUTE))
57#define IBUS_IS_ATTRIBUTE_CLASS(klass) \
58 (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_ATTRIBUTE))
59#define IBUS_ATTRIBUTE_GET_CLASS(obj) \
60 (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_ATTRIBUTE, IBusAttributeClass))
61
62/**
63 * IBusAttrType:
64 * @IBUS_ATTR_TYPE_UNDERLINE: Decorate with underline.
65 * @IBUS_ATTR_TYPE_FOREGROUND: Foreground color.
66 * @IBUS_ATTR_TYPE_BACKGROUND: Background color.
67 *
68 * Type enumeration of IBusText attribute.
69 */
70typedef enum {
71 IBUS_ATTR_TYPE_UNDERLINE = 1,
72 IBUS_ATTR_TYPE_FOREGROUND = 2,
73 IBUS_ATTR_TYPE_BACKGROUND = 3,
74} IBusAttrType;
75
76/**
77 * IBusAttrUnderline:
78 * @IBUS_ATTR_UNDERLINE_NONE: No underline.
79 * @IBUS_ATTR_UNDERLINE_SINGLE: Single underline.
80 * @IBUS_ATTR_UNDERLINE_DOUBLE: Double underline.
81 * @IBUS_ATTR_UNDERLINE_LOW: Low underline ? FIXME
82 * @IBUS_ATTR_UNDERLINE_ERROR: Error underline
83 *
84 * Type of IBusText attribute.
85 */
86typedef enum {
87 IBUS_ATTR_UNDERLINE_NONE = 0,
88 IBUS_ATTR_UNDERLINE_SINGLE = 1,
89 IBUS_ATTR_UNDERLINE_DOUBLE = 2,
90 IBUS_ATTR_UNDERLINE_LOW = 3,
91 IBUS_ATTR_UNDERLINE_ERROR = 4,
92} IBusAttrUnderline;
93
94typedef struct _IBusAttribute IBusAttribute;
95typedef struct _IBusAttributeClass IBusAttributeClass;
96
97/**
98 * IBusAttribute:
99 * @type: IBusAttributeType
100 * @value: Value for the type.
101 * @start_index: The starting index, inclusive.
102 * @end_index: The ending index, exclusive.
103 *
104 * Signify the type, value and scope of the attribute.
105 * The scope starts from @start_index till the @end_index-1.
106 */
107struct _IBusAttribute {
108 IBusSerializable parent;
109
110 /*< public >*/
111 guint type;
112 guint value;
113 guint start_index;
114 guint end_index;
115};
116
117struct _IBusAttributeClass {
118 IBusSerializableClass parent;
119};
120
121/**
122 * ibus_attribute_get_type:
123 * @returns: GType of IBusAttribute.
124 *
125 * Returns GType of IBusAttribute.
126 */
127GType ibus_attribute_get_type ();
128
129/**
130 * ibus_attribute_new:
131 * @type: Type of the attribute.
132 * @value: Value of the attribute.
133 * @start_index: Where attribute starts.
134 * @end_index: Where attribute ends.
135 *
136 * Creates a new IBusAttribute.
137 *
138 * Returns: (transfer none): A newly allocated IBusAttribute.
139 */
140IBusAttribute *ibus_attribute_new (guint type,
141 guint value,
142 guint start_index,
143 guint end_index);
144
145/**
146 * ibus_attribute_get_attr_type:
147 * @attr: An #IBusAttribute
148 *
149 * Gets an enum of #IBusAttrType.
150 *
151 * Returns: An enum of #IBusAttrType.
152 */
153guint ibus_attribute_get_attr_type
154 (IBusAttribute *attr);
155
156/**
157 * ibus_attribute_get_value:
158 * @attr: An #IBusAttribute
159 *
160 * Gets an unsigned int value relative with #IBusAttrType.
161 * If the type is %IBUS_ATTR_TYPE_UNDERLINE, the return value is
162 * #IBusAttrUnderline. If the type is %IBUS_ATTR_TYPE_FOREGROUND,
163 * the return value is the color RGB.
164 *
165 * Returns: An unsigned int value relative with #IBusAttrType.
166 */
167guint ibus_attribute_get_value (IBusAttribute *attr);
168
169/**
170 * ibus_attribute_get_start_index:
171 * @attr: An #IBusAttribute
172 *
173 * Gets a start unsigned index
174 *
175 * Returns: A start unsigned index
176 */
177guint ibus_attribute_get_start_index
178 (IBusAttribute *attr);
179
180/**
181 * ibus_attribute_get_end_index:
182 * @attr: An #IBusAttribute
183 *
184 * Gets an end unsigned index
185 *
186 * Returns: A end unsigned index
187 */
188guint ibus_attribute_get_end_index
189 (IBusAttribute *attr);
190
191/**
192 * ibus_attr_underline_new:
193 * @underline_type: Type of underline.
194 * @start_index: Where attribute starts.
195 * @end_index: Where attribute ends.
196 *
197 * Creates a new underline #IBusAttribute.
198 *
199 * Returns: (transfer none): A newly allocated #IBusAttribute.
200 */
201IBusAttribute *ibus_attr_underline_new (guint underline_type,
202 guint start_index,
203 guint end_index);
204/**
205 * ibus_attr_foreground_new:
206 * @color: Color in RGB.
207 * @start_index: Where attribute starts.
208 * @end_index: Where attribute ends.
209 *
210 * Creates a new foreground #IBusAttribute.
211 *
212 * Returns: (transfer none): A newly allocated #IBusAttribute.
213 */
214IBusAttribute *ibus_attr_foreground_new (guint color,
215 guint start_index,
216 guint end_index);
217/**
218 * ibus_attr_background_new:
219 * @color: Color in RGB.
220 * @start_index: Where attribute starts.
221 * @end_index: Where attribute ends.
222 *
223 * Creates a new background #IBusAttribute.
224 *
225 * Returns: (transfer none): A newly allocated #IBusAttribute.
226 */
227IBusAttribute *ibus_attr_background_new (guint color,
228 guint start_index,
229 guint end_index);
230
231G_END_DECLS
232#endif
233
234