Mercurial > hg > xemacs-beta
annotate lwlib/xlwcheckbox.c @ 4981:4aebb0131297
Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
-------------------- ChangeLog entries follow: --------------------
modules/ChangeLog addition:
2010-02-05 Ben Wing <ben@xemacs.org>
* postgresql/postgresql.c:
* postgresql/postgresql.c (CHECK_LIVE_CONNECTION):
* postgresql/postgresql.c (Fpq_connectdb):
* postgresql/postgresql.c (Fpq_connect_start):
* postgresql/postgresql.c (Fpq_lo_import):
* postgresql/postgresql.c (Fpq_lo_export):
* ldap/eldap.c (Fldap_open):
* ldap/eldap.c (Fldap_search_basic):
* ldap/eldap.c (Fldap_add):
* ldap/eldap.c (Fldap_modify):
* ldap/eldap.c (Fldap_delete):
* canna/canna_api.c (Fcanna_initialize):
* canna/canna_api.c (Fcanna_store_yomi):
* canna/canna_api.c (Fcanna_parse):
* canna/canna_api.c (Fcanna_henkan_begin):
EXTERNAL_TO_C_STRING returns its argument instead of storing it
in a parameter, and is renamed to EXTERNAL_TO_ITEXT. Similar
things happen to related macros. See entry in src/ChangeLog.
More Mule-izing of postgresql.c. Extract out common code
between `pq-connectdb' and `pq-connect-start'. Fix places
that signal an error string using a formatted string to instead
follow the standard and have a fixed reason followed by the
particular error message stored as one of the frobs.
src/ChangeLog addition:
2010-02-05 Ben Wing <ben@xemacs.org>
* console-msw.c (write_string_to_mswindows_debugging_output):
* console-msw.c (Fmswindows_message_box):
* console-x.c (x_perhaps_init_unseen_key_defaults):
* console.c:
* database.c (dbm_get):
* database.c (dbm_put):
* database.c (dbm_remove):
* database.c (berkdb_get):
* database.c (berkdb_put):
* database.c (berkdb_remove):
* database.c (Fopen_database):
* device-gtk.c (gtk_init_device):
* device-msw.c (msprinter_init_device_internal):
* device-msw.c (msprinter_default_printer):
* device-msw.c (msprinter_init_device):
* device-msw.c (sync_printer_with_devmode):
* device-msw.c (Fmsprinter_select_settings):
* device-x.c (sanity_check_geometry_resource):
* device-x.c (Dynarr_add_validified_lisp_string):
* device-x.c (x_init_device):
* device-x.c (Fx_put_resource):
* device-x.c (Fx_valid_keysym_name_p):
* device-x.c (Fx_set_font_path):
* dialog-msw.c (push_lisp_string_as_unicode):
* dialog-msw.c (handle_directory_dialog_box):
* dialog-msw.c (handle_file_dialog_box):
* dialog-x.c (dbox_descriptor_to_widget_value):
* editfns.c (Fformat_time_string):
* editfns.c (Fencode_time):
* editfns.c (Fset_time_zone_rule):
* emacs.c (make_argc_argv):
* emacs.c (Fdump_emacs):
* emodules.c (emodules_load):
* eval.c:
* eval.c (maybe_signal_error_1):
* event-msw.c (Fdde_alloc_advise_item):
* event-msw.c (mswindows_dde_callback):
* event-msw.c (mswindows_wnd_proc):
* fileio.c (report_error_with_errno):
* fileio.c (Fsysnetunam):
* fileio.c (Fdo_auto_save):
* font-mgr.c (extract_fcapi_string):
* font-mgr.c (Ffc_config_app_font_add_file):
* font-mgr.c (Ffc_config_app_font_add_dir):
* font-mgr.c (Ffc_config_filename):
* frame-gtk.c (gtk_set_frame_text_value):
* frame-gtk.c (gtk_create_widgets):
* frame-msw.c (mswindows_init_frame_1):
* frame-msw.c (mswindows_set_title_from_ibyte):
* frame-msw.c (msprinter_init_frame_3):
* frame-x.c (x_set_frame_text_value):
* frame-x.c (x_set_frame_properties):
* frame-x.c (start_drag_internal_1):
* frame-x.c (x_cde_transfer_callback):
* frame-x.c (x_create_widgets):
* glyphs-eimage.c (my_jpeg_output_message):
* glyphs-eimage.c (jpeg_instantiate):
* glyphs-eimage.c (gif_instantiate):
* glyphs-eimage.c (png_instantiate):
* glyphs-eimage.c (tiff_instantiate):
* glyphs-gtk.c (xbm_instantiate_1):
* glyphs-gtk.c (gtk_xbm_instantiate):
* glyphs-gtk.c (gtk_xpm_instantiate):
* glyphs-gtk.c (gtk_xface_instantiate):
* glyphs-gtk.c (cursor_font_instantiate):
* glyphs-gtk.c (gtk_redisplay_widget):
* glyphs-gtk.c (gtk_widget_instantiate_1):
* glyphs-gtk.c (gtk_add_tab_item):
* glyphs-msw.c (mswindows_xpm_instantiate):
* glyphs-msw.c (bmp_instantiate):
* glyphs-msw.c (mswindows_resource_instantiate):
* glyphs-msw.c (xbm_instantiate_1):
* glyphs-msw.c (mswindows_xbm_instantiate):
* glyphs-msw.c (mswindows_xface_instantiate):
* glyphs-msw.c (mswindows_redisplay_widget):
* glyphs-msw.c (mswindows_widget_instantiate):
* glyphs-msw.c (add_tree_item):
* glyphs-msw.c (add_tab_item):
* glyphs-msw.c (mswindows_combo_box_instantiate):
* glyphs-msw.c (mswindows_widget_query_string_geometry):
* glyphs-x.c (x_locate_pixmap_file):
* glyphs-x.c (xbm_instantiate_1):
* glyphs-x.c (x_xbm_instantiate):
* glyphs-x.c (extract_xpm_color_names):
* glyphs-x.c (x_xpm_instantiate):
* glyphs-x.c (x_xface_instantiate):
* glyphs-x.c (autodetect_instantiate):
* glyphs-x.c (safe_XLoadFont):
* glyphs-x.c (cursor_font_instantiate):
* glyphs-x.c (x_redisplay_widget):
* glyphs-x.c (Fchange_subwindow_property):
* glyphs-x.c (x_widget_instantiate):
* glyphs-x.c (x_tab_control_redisplay):
* glyphs.c (pixmap_to_lisp_data):
* gui-x.c (menu_separator_style_and_to_external):
* gui-x.c (add_accel_and_to_external):
* gui-x.c (button_item_to_widget_value):
* hpplay.c (player_error_internal):
* hpplay.c (play_sound_file):
* hpplay.c (play_sound_data):
* intl.c (Fset_current_locale):
* lisp.h:
* menubar-gtk.c (gtk_xemacs_set_accel_keys):
* menubar-msw.c (populate_menu_add_item):
* menubar-msw.c (populate_or_checksum_helper):
* menubar-x.c (menu_item_descriptor_to_widget_value_1):
* nt.c (init_user_info):
* nt.c (get_long_basename):
* nt.c (nt_get_resource):
* nt.c (init_mswindows_environment):
* nt.c (get_cached_volume_information):
* nt.c (mswindows_readdir):
* nt.c (read_unc_volume):
* nt.c (mswindows_stat):
* nt.c (mswindows_getdcwd):
* nt.c (mswindows_executable_type):
* nt.c (Fmswindows_short_file_name):
* ntplay.c (nt_play_sound_file):
* objects-gtk.c:
* objects-gtk.c (gtk_valid_color_name_p):
* objects-gtk.c (gtk_initialize_font_instance):
* objects-gtk.c (gtk_font_list):
* objects-msw.c (font_enum_callback_2):
* objects-msw.c (parse_font_spec):
* objects-x.c (x_parse_nearest_color):
* objects-x.c (x_valid_color_name_p):
* objects-x.c (x_initialize_font_instance):
* objects-x.c (x_font_instance_truename):
* objects-x.c (x_font_list):
* objects-xlike-inc.c (XFUN):
* objects-xlike-inc.c (xft_find_charset_font):
* process-nt.c (mswindows_report_winsock_error):
* process-nt.c (nt_create_process):
* process-nt.c (get_internet_address):
* process-nt.c (nt_open_network_stream):
* process-unix.c:
* process-unix.c (allocate_pty):
* process-unix.c (get_internet_address):
* process-unix.c (unix_canonicalize_host_name):
* process-unix.c (unix_open_network_stream):
* realpath.c:
* select-common.h (lisp_data_to_selection_data):
* select-gtk.c (symbol_to_gtk_atom):
* select-gtk.c (atom_to_symbol):
* select-msw.c (symbol_to_ms_cf):
* select-msw.c (mswindows_register_selection_data_type):
* select-x.c (symbol_to_x_atom):
* select-x.c (x_atom_to_symbol):
* select-x.c (hack_motif_clipboard_selection):
* select-x.c (Fx_store_cutbuffer_internal):
* sound.c (Fplay_sound_file):
* sound.c (Fplay_sound):
* sound.h (sound_perror):
* sysdep.c:
* sysdep.c (qxe_allocating_getcwd):
* sysdep.c (qxe_execve):
* sysdep.c (copy_in_passwd):
* sysdep.c (qxe_getpwnam):
* sysdep.c (qxe_ctime):
* sysdll.c (dll_open):
* sysdll.c (dll_function):
* sysdll.c (dll_variable):
* sysdll.c (search_linked_libs):
* sysdll.c (dll_error):
* sysfile.h:
* sysfile.h (PATHNAME_CONVERT_OUT_TSTR):
* sysfile.h (PATHNAME_CONVERT_OUT_UTF_8):
* sysfile.h (PATHNAME_CONVERT_OUT):
* sysfile.h (LISP_PATHNAME_CONVERT_OUT):
* syswindows.h (ITEXT_TO_TSTR):
* syswindows.h (LOCAL_FILE_FORMAT_TO_TSTR):
* syswindows.h (TSTR_TO_LOCAL_FILE_FORMAT):
* syswindows.h (LOCAL_FILE_FORMAT_TO_INTERNAL_MSWIN):
* syswindows.h (LISP_LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR):
* text.h:
* text.h (eicpy_ext_len):
* text.h (enum new_dfc_src_type):
* text.h (EXTERNAL_TO_ITEXT):
* text.h (GET_STRERROR):
* tooltalk.c (check_status):
* tooltalk.c (Fadd_tooltalk_message_arg):
* tooltalk.c (Fadd_tooltalk_pattern_attribute):
* tooltalk.c (Fadd_tooltalk_pattern_arg):
* win32.c (tstr_to_local_file_format):
* win32.c (mswindows_lisp_error_1):
* win32.c (mswindows_report_process_error):
* win32.c (Fmswindows_shell_execute):
* win32.c (mswindows_read_link_1):
Changes involving external/internal format conversion,
mostly code cleanup and renaming.
1. Eliminate the previous macros like LISP_STRING_TO_EXTERNAL
that stored its result in a parameter. The new version of
LISP_STRING_TO_EXTERNAL returns its result through the
return value, same as the previous NEW_LISP_STRING_TO_EXTERNAL.
Use the new-style macros throughout the code.
2. Rename C_STRING_TO_EXTERNAL and friends to ITEXT_TO_EXTERNAL,
in keeping with overall naming rationalization involving
Itext and related types.
Macros involved in previous two:
EXTERNAL_TO_C_STRING -> EXTERNAL_TO_ITEXT
EXTERNAL_TO_C_STRING_MALLOC -> EXTERNAL_TO_ITEXT_MALLOC
SIZED_EXTERNAL_TO_C_STRING -> SIZED_EXTERNAL_TO_ITEXT
SIZED_EXTERNAL_TO_C_STRING_MALLOC -> SIZED_EXTERNAL_TO_ITEXT_MALLOC
C_STRING_TO_EXTERNAL -> ITEXT_TO_EXTERNAL
C_STRING_TO_EXTERNAL_MALLOC -> ITEXT_TO_EXTERNAL_MALLOC
LISP_STRING_TO_EXTERNAL
LISP_STRING_TO_EXTERNAL_MALLOC
LISP_STRING_TO_TSTR
C_STRING_TO_TSTR -> ITEXT_TO_TSTR
TSTR_TO_C_STRING -> TSTR_TO_ITEXT
The following four still return their values through parameters,
since they have more than one value to return:
C_STRING_TO_SIZED_EXTERNAL -> ITEXT_TO_SIZED_EXTERNAL
LISP_STRING_TO_SIZED_EXTERNAL
C_STRING_TO_SIZED_EXTERNAL_MALLOC -> ITEXT_TO_SIZED_EXTERNAL_MALLOC
LISP_STRING_TO_SIZED_EXTERNAL_MALLOC
Sometimes additional casts had to be inserted, since the old
macros played strange games and completely defeated the type system
of the store params.
3. Rewrite many places where direct calls to TO_EXTERNAL_FORMAT
occurred with calls to one of the convenience macros listed above,
or to make_extstring().
4. Eliminate SIZED_C_STRING macros (they were hardly used, anyway)
and use a direct call to TO_EXTERNAL_FORMAT or TO_INTERNAL_FORMAT.
4. Use LISP_PATHNAME_CONVERT_OUT in many places instead of something
like LISP_STRING_TO_EXTERNAL(..., Qfile_name).
5. Eliminate some temporary variables that are no longer necessary
now that we return a value rather than storing it into a variable.
6. Some Mule-izing in database.c.
7. Error functions:
-- A bit of code cleanup in maybe_signal_error_1.
-- Eliminate report_file_type_error; it's just an alias for
signal_error_2 with params in a different order.
-- Fix some places in the hostname-handling code that directly
inserted externally-retrieved error strings into the
supposed ASCII "reason" param instead of doing the right thing
and sticking text descriptive of what was going on in "reason"
and putting the external message in a frob.
8. Use Ascbyte instead of CIbyte in process-unix.c and maybe one
or two other places.
9. Some code cleanup in copy_in_passwd() in sysdep.c.
10. Fix a real bug due to accidental variable shadowing in
tstr_to_local_file_format() in win32.c.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Fri, 05 Feb 2010 11:02:24 -0600 |
parents | 5460287a3327 |
children | 308d34e9f07d |
rev | line source |
---|---|
424 | 1 /* Checkbox Widget for XEmacs. |
2 Copyright (C) 1999 Edward A. Falk | |
3 | |
4 This file is part of XEmacs. | |
5 | |
6 XEmacs is free software; you can redistribute it and/or modify it | |
7 under the terms of the GNU General Public License as published by the | |
8 Free Software Foundation; either version 2, or (at your option) any | |
9 later version. | |
10 | |
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with XEmacs; see the file COPYING. If not, write to | |
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
19 Boston, MA 02111-1307, USA. */ | |
20 | |
21 /* Synched up with: Checkbox.c 1.1 */ | |
22 | |
23 /* | |
24 * Checkbox.c - Checkbox button widget | |
25 * | |
26 * Author: Edward A. Falk | |
27 * falk@falconer.vip.best.com | |
442 | 28 * |
424 | 29 * Date: June 30, 1997 |
30 * | |
31 * Overview: This widget is identical to the Radio widget in behavior, | |
32 * except that the button is square and has a check mark. | |
33 */ | |
34 | |
35 | |
36 #include <config.h> | |
37 #include <stdio.h> | |
38 | |
39 #include <X11/IntrinsicP.h> | |
40 #include <X11/StringDefs.h> | |
442 | 41 #include ATHENA_XawInit_h_ |
4528
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
42 #include "xt-wrappers.h" |
424 | 43 #include "xlwcheckboxP.h" |
44 | |
45 | |
46 /* by using the same size for the checkbox as for the diamond box, | |
47 * we can let the Radio widget do the vast majority of the work. | |
48 */ | |
49 | |
50 #define BOX_SIZE 8 | |
51 #define DRAW_CHECK 0 /* don't draw the check mark */ | |
52 | |
53 #define cclass(w) ((CheckboxWidgetClass)((w)->core.widget_class)) | |
54 | |
55 #ifdef _ThreeDP_h | |
56 #define swid(cw) ((cw)->threeD.shadow_width) | |
57 #else | |
58 #define swid(cw) ((cw)->core.border_width) | |
59 #endif | |
60 | |
61 #define bsize(cw) (cclass(cw)->radio_class.dsize) | |
62 #define bs(cw) (bsize(cw) + 2*swid(cw)) | |
63 | |
64 | |
65 #if DRAW_CHECK | |
66 #define check_width 14 | |
67 #define check_height 14 | |
458 | 68 static unsigned char check_bits[] = { |
424 | 69 0x00, 0x00, 0x00, 0x20, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x03, |
70 0x8c, 0x03, 0xde, 0x01, 0xff, 0x01, 0xfe, 0x00, 0xfc, 0x00, 0x78, 0x00, | |
71 0x70, 0x00, 0x20, 0x00}; | |
72 #endif | |
73 | |
74 | |
75 /**************************************************************** | |
76 * | |
77 * Full class record constant | |
78 * | |
79 ****************************************************************/ | |
80 | |
81 | |
82 #if DRAW_CHECK | |
83 static char defaultTranslations[] = | |
84 "<EnterWindow>: highlight()\n\ | |
85 <LeaveWindow>: unpress(draw) unhighlight()\n\ | |
86 <Btn1Down>: press()\n\ | |
87 <Btn1Down>,<Btn1Up>: unpress(nodraw) toggle() notify()"; | |
88 #endif | |
89 | |
90 | |
91 | |
4528
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
92 #define offset(field) XtOffsetOf(CheckboxRec, checkbox.field) |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
93 #define res(name,_class,intrepr,type,member,extrepr,value) \ |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
94 Xt_RESOURCE (name, _class, intrepr, type, offset(member), extrepr, value) |
424 | 95 static XtResource resources[] = { |
4528
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
96 res (XtNtristate, XtCTristate, XtRBoolean, Boolean, tristate, |
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
97 XtRImmediate, FALSE), |
424 | 98 } ; |
99 #undef offset | |
100 | |
101 /* Member functions */ | |
102 | |
103 static void CheckboxClassInit (void); | |
104 static void CheckboxInit (Widget, Widget, ArgList, Cardinal *); | |
105 #if DRAW_CHECK | |
106 static void CheckboxRealize (Widget, Mask *, XSetWindowAttributes *); | |
107 #endif | |
108 static void DrawCheck (Widget); | |
109 | |
110 | |
111 /* Action procs */ | |
112 #if DRAW_CHECK | |
113 static void CheckboxPress (Widget, XEvent *, String *, Cardinal *); | |
114 static void CheckboxUnpress (Widget, XEvent *, String *, Cardinal *); | |
115 #endif | |
116 | |
117 /* internal privates */ | |
118 | |
119 #if DRAW_CHECK | |
120 static XtActionsRec actionsList[] = | |
121 { | |
122 {"press", CheckboxPress}, | |
123 {"unpress", CheckboxUnpress}, | |
124 } ; | |
125 #endif | |
126 | |
127 #define SuperClass ((RadioWidgetClass)&radioClassRec) | |
128 | |
129 CheckboxClassRec checkboxClassRec = { | |
130 { | |
442 | 131 (WidgetClass) SuperClass, /* superclass */ |
4528
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
132 (String) "Checkbox", /* class_name */ |
424 | 133 sizeof(CheckboxRec), /* size */ |
134 CheckboxClassInit, /* class_initialize */ | |
135 NULL, /* class_part_initialize */ | |
136 FALSE, /* class_inited */ | |
137 CheckboxInit, /* initialize */ | |
138 NULL, /* initialize_hook */ | |
139 #if DRAW_CHECK | |
140 CheckboxRealize, /* realize */ | |
141 actionsList, /* actions */ | |
142 XtNumber(actionsList), /* num_actions */ | |
143 #else | |
144 XtInheritRealize, /* realize */ | |
145 NULL, /* actions */ | |
146 0, /* num_actions */ | |
147 #endif | |
148 resources, /* resources */ | |
149 XtNumber(resources), /* resource_count */ | |
150 NULLQUARK, /* xrm_class */ | |
151 TRUE, /* compress_motion */ | |
152 TRUE, /* compress_exposure */ | |
153 TRUE, /* compress_enterleave */ | |
154 FALSE, /* visible_interest */ | |
155 NULL, /* destroy */ | |
156 XtInheritResize, /* resize */ | |
157 XtInheritExpose, /* expose */ | |
158 NULL, /* set_values */ | |
159 NULL, /* set_values_hook */ | |
160 XtInheritSetValuesAlmost, /* set_values_almost */ | |
161 NULL, /* get_values_hook */ | |
162 NULL, /* accept_focus */ | |
163 XtVersion, /* version */ | |
164 NULL, /* callback_private */ | |
165 #if DRAW_CHECK | |
166 defaultTranslations, /* tm_table */ | |
167 #else | |
168 XtInheritTranslations, /* tm_table */ | |
169 #endif | |
170 XtInheritQueryGeometry, /* query_geometry */ | |
171 XtInheritDisplayAccelerator, /* display_accelerator */ | |
172 NULL /* extension */ | |
173 }, /* CoreClass fields initialization */ | |
174 { | |
442 | 175 XtInheritChangeSensitive /* change_sensitive */ |
424 | 176 }, /* SimpleClass fields initialization */ |
177 #ifdef _ThreeDP_h | |
178 { | |
179 XtInheritXaw3dShadowDraw /* field not used */ | |
180 }, /* ThreeDClass fields initialization */ | |
181 #endif | |
182 { | |
183 0 /* field not used */ | |
184 }, /* LabelClass fields initialization */ | |
185 { | |
186 0 /* field not used */ | |
187 }, /* CommandClass fields initialization */ | |
188 { | |
189 RadioSet, /* Set Procedure. */ | |
190 RadioUnset, /* Unset Procedure. */ | |
191 NULL /* extension. */ | |
192 }, /* ToggleClass fields initialization */ | |
193 { | |
194 BOX_SIZE, | |
195 DrawCheck, /* draw procedure */ | |
196 NULL /* extension. */ | |
197 }, /* RadioClass fields initialization */ | |
198 { | |
199 NULL /* extension. */ | |
200 }, /* CheckboxClass fields initialization */ | |
201 }; | |
202 | |
203 /* for public consumption */ | |
204 WidgetClass checkboxWidgetClass = (WidgetClass) &checkboxClassRec; | |
205 | |
206 | |
207 | |
208 | |
209 | |
210 | |
211 /**************************************************************** | |
212 * | |
213 * Class Methods | |
214 * | |
215 ****************************************************************/ | |
216 | |
217 static void | |
218 CheckboxClassInit (void) | |
219 { | |
220 XawInitializeWidgetSet(); | |
221 } | |
222 | |
223 | |
224 /*ARGSUSED*/ | |
225 static void | |
2286 | 226 CheckboxInit (Widget UNUSED (request), |
227 #if DRAW_CHECK | |
424 | 228 Widget new, |
2286 | 229 #else |
3072 | 230 Widget UNUSED (new_), |
2286 | 231 #endif |
232 ArgList UNUSED (args), | |
233 Cardinal *UNUSED (num_args)) | |
424 | 234 { |
235 #if DRAW_CHECK | |
3072 | 236 CheckboxWidget cw = (CheckboxWidget) new_; |
424 | 237 cw->checkbox.checkmark = None ; |
238 cw->checkbox.checkmark_GC = None ; | |
239 #endif | |
240 } | |
241 | |
242 | |
243 #if DRAW_CHECK | |
244 static void | |
245 CheckboxRealize(Widget w, | |
246 Mask *valueMask, | |
247 XSetWindowAttributes *attributes) | |
248 { | |
249 CheckboxWidget cw = (CheckboxWidget) w; | |
250 XtGCMask value_mask, dynamic_mask, dontcare_mask ; | |
251 XGCValues values ; | |
252 | |
253 /* first, call superclass realize */ | |
254 (*checkboxWidgetClass->core_class.superclass->core_class.realize) | |
255 (w, valueMask, attributes); | |
256 | |
257 /* TODO: cache this via xmu */ | |
258 if( cw->checkbox.checkmark == None ) | |
259 cw->checkbox.checkmark = | |
260 XCreateBitmapFromData( XtDisplay(w), XtWindow(w), | |
261 check_bits,check_width,check_height); | |
262 | |
263 values.fill_style = FillStippled ; | |
264 values.stipple = cw->checkbox.checkmark ; | |
265 values.foreground = cw->label.foreground ; | |
266 value_mask = GCFillStyle | GCStipple | GCForeground ; | |
267 dynamic_mask = GCTileStipXOrigin | GCTileStipYOrigin ; | |
268 dontcare_mask = GCLineWidth | GCLineStyle | GCCapStyle | GCJoinStyle | | |
269 GCFont | GCSubwindowMode | GCGraphicsExposures | | |
270 GCDashOffset | GCDashList | GCArcMode ; | |
271 cw->checkbox.checkmark_GC = | |
272 XtAllocateGC(w, 0, value_mask, &values, dynamic_mask, dontcare_mask) ; | |
273 } | |
274 #endif | |
275 | |
276 | |
277 /* Function Name: CheckboxDestroy | |
278 * Description: Destroy Callback for checkbox widget. | |
279 * Arguments: w - the checkbox widget that is being destroyed. | |
442 | 280 * junk, garbage - not used. |
424 | 281 * Returns: none. |
282 */ | |
283 | |
284 /* ARGSUSED */ | |
3072 | 285 #if DRAW_CHECK |
424 | 286 static void |
2286 | 287 CheckboxDestroy ( |
288 Widget w, | |
289 XtPointer UNUSED (junk), | |
290 XtPointer UNUSED (garbage)) | |
424 | 291 { |
292 CheckboxWidget cw = (CheckboxWidget) w; | |
293 | |
294 /* TODO: cache this via xmu */ | |
295 if( cw->checkbox.checkmark != None ) | |
296 XFreePixmap( XtDisplay(w), cw->checkbox.checkmark ) ; | |
297 if( cw->checkbox.checkmark_GC != None ) | |
298 XtReleaseGC(w, cw->checkbox.checkmark_GC) ; | |
299 } | |
3072 | 300 #endif /* DRAW_CHECK */ |
424 | 301 |
302 | |
303 | |
304 #if DRAW_CHECK | |
305 /************************************************************ | |
306 * | |
307 * Actions Procedures | |
308 * | |
309 ************************************************************/ | |
310 | |
311 /* ARGSUSED */ | |
312 static void | |
313 CheckboxPress (Widget w, | |
314 XEvent *event, | |
315 String *params, /* unused */ | |
316 Cardinal *num_params) /* unused */ | |
317 { | |
318 CheckboxWidget cw = (CheckboxWidget) w ; | |
319 if( !cw->checkbox.pressed ) { | |
320 cw->checkbox.pressed = TRUE ; | |
321 ((CheckboxWidgetClass)(w->core.widget_class))->radio_class.drawDiamond(w) ; | |
322 } | |
323 } | |
324 | |
325 static void | |
326 CheckboxUnpress (Widget w, | |
327 XEvent *event, | |
328 String *params, /* unused */ | |
329 Cardinal *num_params) /* unused */ | |
330 { | |
331 CheckboxWidget cw = (CheckboxWidget) w ; | |
332 int i ; | |
333 | |
334 if( cw->checkbox.pressed ) { | |
335 cw->checkbox.pressed = FALSE ; | |
336 if( *num_params > 0 && **params == 'd' ) | |
337 ((CheckboxWidgetClass)(w->core.widget_class))->radio_class.drawDiamond(w); | |
338 } | |
339 } | |
340 #endif | |
341 | |
342 | |
343 | |
344 | |
345 | |
346 /************************************************************ | |
347 * | |
348 * Internal Procedures | |
349 * | |
350 ************************************************************/ | |
351 | |
352 static void | |
353 DrawCheck (Widget w) | |
354 { | |
355 CheckboxWidget cw = (CheckboxWidget) w ; | |
356 Display *dpy = XtDisplay(w) ; | |
357 Window win = XtWindow(w) ; | |
358 GC gc ; | |
359 | |
360 #ifdef _ThreeDP_h | |
361 XPoint pts[6] ; | |
362 #endif | |
363 Dimension s = swid(cw); | |
364 Dimension bsz = bsize(cw); | |
365 Position bx,by ; /* Check upper-left */ | |
2286 | 366 Dimension bh ; |
424 | 367 #ifdef _ThreeDP_h |
2286 | 368 Dimension bw; |
424 | 369 GC top, bot; |
370 #endif | |
371 GC ctr ; | |
372 | |
373 /* foreground GC */ | |
374 gc = XtIsSensitive(w) ? cw->command.normal_GC : cw->label.gray_GC ; | |
375 | |
2286 | 376 bh = bs(cw) ; |
424 | 377 bx = cw->label.internal_width ; |
378 by = cw->core.height/2 - bh/2 ; | |
379 | |
380 #ifdef _ThreeDP_h | |
2286 | 381 bw = bh ; |
382 | |
424 | 383 if( !cw->command.set ) { |
384 top = cw->threeD.top_shadow_GC ; | |
385 bot = cw->threeD.bot_shadow_GC ; | |
386 } else { | |
387 top = cw->threeD.bot_shadow_GC ; | |
388 bot = cw->threeD.top_shadow_GC ; | |
389 } | |
390 ctr = cw->command.inverse_GC ; | |
391 #else | |
392 ctr = cw->command.set ? cw->command.normal_GC : cw->command.inverse_GC ; | |
393 #endif | |
394 | |
395 XFillRectangle(dpy,win,ctr, bx+s,by+s, bsz,bsz) ; | |
396 | |
397 #ifdef _ThreeDP_h | |
398 /* top-left shadow */ | |
399 pts[0].x = bx ; pts[0].y = by ; | |
400 pts[1].x = bw ; pts[1].y = 0 ; | |
401 pts[2].x = -s ; pts[2].y = s ; | |
402 pts[3].x = -bsz ; pts[3].y = 0 ; | |
403 pts[4].x = 0 ; pts[4].y = bsz ; | |
404 pts[5].x = -s ; pts[5].y = s ; | |
405 XFillPolygon(dpy,win,top, pts,6, Nonconvex,CoordModePrevious) ; | |
406 /* bottom-right shadow */ | |
407 pts[0].x = bx+bw ; pts[0].y = by+bh ; | |
408 pts[1].x = -bw ; pts[1].y = 0 ; | |
409 pts[2].x = s ; pts[2].y = -s ; | |
410 pts[3].x = bsz ; pts[3].y = 0 ; | |
411 pts[4].x = 0 ; pts[4].y = -bsz ; | |
412 pts[5].x = s ; pts[5].y = -s ; | |
413 XFillPolygon(dpy,win,bot, pts,6, Nonconvex,CoordModePrevious) ; | |
414 #else | |
415 XDrawRectangle(dpy,win,gc, bx+s,by+s, bsz,bsz) ; | |
416 #endif | |
417 | |
418 #if DRAW_CHECK | |
419 if( cw->command.set && cw->checkbox.checkmark_GC != None ) { | |
420 XSetTSOrigin(dpy,cw->checkbox.checkmark_GC, bx+s, by+s) ; | |
421 XFillRectangle(dpy,win,cw->checkbox.checkmark_GC, | |
422 bx+s, by+s, check_width,check_height) ; | |
423 } | |
424 #endif | |
425 } |