annotate lwlib/xlwcheckbox.c @ 853:2b6fa2618f76

[xemacs-hg @ 2002-05-28 08:44:22 by ben] merge my stderr-proc ws make-docfile.c: Fix places where we forget to check for EOF. code-init.el: Don't use CRLF conversion by default on process output. CMD.EXE and friends work both ways but Cygwin programs don't like the CRs. code-process.el, multicast.el, process.el: Removed. Improvements to call-process-internal: -- allows a buffer to be specified for input and stderr output -- use it on all systems -- implement C-g as documented -- clean up and comment call-process-region uses new call-process facilities; no temp file. remove duplicate funs in process.el. comment exactly how coding systems work and fix various problems. open-multicast-group now does similar coding-system frobbing to open-network-stream. dumped-lisp.el, faces.el, msw-faces.el: Fix some hidden errors due to code not being defined at the right time. xemacs.mak: Add -DSTRICT. ================================================================ ALLOW SEPARATION OF STDOUT AND STDERR IN PROCESSES ================================================================ Standard output and standard error can be processed separately in a process. Each can have its own buffer, its own mark in that buffer, and its filter function. You can specify a separate buffer for stderr in `start-process' to get things started, or use the new primitives: set-process-stderr-buffer process-stderr-buffer process-stderr-mark set-process-stderr-filter process-stderr-filter Also, process-send-region takes a 4th optional arg, a buffer. Currently always uses a pipe() under Unix to read the error output. (#### Would a PTY be better?) sysdep.h, sysproc.h, unexfreebsd.c, unexsunos4.c, nt.c, emacs.c, callproc.c, symsinit.h, sysdep.c, Makefile.in.in, process-unix.c: Delete callproc.c. Move child_setup() to process-unix.c. wait_for_termination() now only needed on a few really old systems. console-msw.h, event-Xt.c, event-msw.c, event-stream.c, event-tty.c, event-unixoid.c, events.h, process-nt.c, process-unix.c, process.c, process.h, procimpl.h: Rewrite the process methods to handle a separate channel for error input. Create Lstreams for reading in the error channel. Many process methods need change. In general the changes are fairly clear as they involve duplicating what's used for reading the normal stdout and changing for stderr -- although tedious, as such changes are required throughout the entire process code. Rewrote the code that reads process output to do two loops, one for stdout and one for stderr. gpmevent.c, tooltalk.c: set_process_filter takes an argument for stderr. ================================================================ NEW ERROR-TRAPPING MECHANISM ================================================================ Totally rewrite error trapping code to be unified and support more features. Basic function is call_trapping_problems(), which lets you specify, by means of flags, what sorts of problems you want trapped. these can include -- quit -- errors -- throws past the function -- creation of "display objects" (e.g. buffers) -- deletion of already-existing "display objects" (e.g. buffers) -- modification of already-existing buffers -- entering the debugger -- gc -- errors->warnings (ala suspended errors) etc. All other error funs rewritten in terms of this one. Various older mechanisms removed or rewritten. window.c, insdel.c, console.c, buffer.c, device.c, frame.c: When creating a display object, added call to note_object_created(), for use with trapping_problems mechanism. When deleting, call check_allowed_operation() and note_object deleted(). The trapping-problems code records the objects created since the call-trapping-problems began. Those objects can be deleted, but none others (i.e. previously existing ones). bytecode.c, cmdloop.c: internal_catch takes another arg. eval.c: Add long comments describing the "five lists" used to maintain state (backtrace, gcpro, specbind, etc.) in the Lisp engine. backtrace.h, eval.c: Implement trapping-problems mechanism, eliminate old mechanisms or redo in terms of new one. frame.c, gutter.c: Flush out the concept of "critical display section", defined by the in_display() var. Use an internal_bind() to get it reset, rather than just doing it at end, because there may be a non-local exit. event-msw.c, event-stream.c, console-msw.h, device.c, dialog-msw.c, frame.c, frame.h, intl.c, toolbar.c, menubar-msw.c, redisplay.c, alloc.c, menubar-x.c: Make use of new trapping-errors stuff and rewrite code based on old mechanisms. glyphs-widget.c, redisplay.h: Protect calling Lisp in redisplay. insdel.c: Protect hooks against deleting existing buffers. frame-msw.c: Use EQ, not EQUAL in hash tables whose keys are just numbers. Otherwise we run into stickiness in redisplay because internal_equal() can QUIT. ================================================================ SIGNAL, C-G CHANGES ================================================================ Here we change the way that C-g interacts with event reading. The idea is that a C-g occurring while we're reading a user event should be read as C-g, but elsewhere should be a QUIT. The former code did all sorts of bizarreness -- requiring that no QUIT occurs anywhere in event-reading code (impossible to enforce given the stuff called or Lisp code invoked), and having some weird system involving enqueue/dequeue of a C-g and interaction with Vquit_flag -- and it didn't work. Now, we simply enclose all code where we want C-g read as an event with {begin/end}_dont_check_for_quit(). This completely turns off the mechanism that checks (and may remove or alter) C-g in the read-ahead queues, so we just get the C-g normal. Signal.c documents this very carefully. cmdloop.c: Correct use of dont_check_for_quit to new scheme, remove old out-of-date comments. event-stream.c: Fix C-g handling to actually work. device-x.c: Disable quit checking when err out. signal.c: Cleanup. Add large descriptive comment. process-unix.c, process-nt.c, sysdep.c: Use QUIT instead of REALLY_QUIT. It's not necessary to use REALLY_QUIT and just confuses the issue. lisp.h: Comment quit handlers. ================================================================ CONS CHANGES ================================================================ free_cons() now takes a Lisp_Object not the result of XCONS(). car and cdr have been renamed so that they don't get used directly; go through XCAR(), XCDR() instead. alloc.c, dired.c, editfns.c, emodules.c, fns.c, glyphs-msw.c, glyphs-x.c, glyphs.c, keymap.c, minibuf.c, search.c, eval.c, lread.c, lisp.h: Correct free_cons calling convention: now takes Lisp_Object, not Lisp_Cons chartab.c: Eliminate direct use of ->car, ->cdr, should be black box. callint.c: Rewrote using EXTERNAL_LIST_LOOP to avoid use of Lisp_Cons. ================================================================ USE INTERNAL-BIND-* ================================================================ eval.c: Cleanups of these funs. alloc.c, fileio.c, undo.c, specifier.c, text.c, profile.c, lread.c, redisplay.c, menubar-x.c, macros.c: Rewrote to use internal_bind_int() and internal_bind_lisp_object() in place of whatever varied and cumbersome mechanisms were formerly there. ================================================================ SPECBIND SANITY ================================================================ backtrace.h: - Improved comments backtrace.h, bytecode.c, eval.c: Add new mechanism check_specbind_stack_sanity() for sanity checking code each time the catchlist or specbind stack change. Removed older prototype of same mechanism. ================================================================ MISC ================================================================ lisp.h, insdel.c, window.c, device.c, console.c, buffer.c: Fleshed out authorship. device-msw.c: Correct bad Unicode-ization. print.c: Be more careful when not initialized or in fatal error handling. search.c: Eliminate running_asynch_code, an FSF holdover. alloc.c: Added comments about gc-cons-threshold. dialog-x.c: Use begin_gc_forbidden() around code to build up a widget value tree, like in menubar-x.c. gui.c: Use Qunbound not Qnil as the default for gethash. lisp-disunion.h, lisp-union.h: Added warnings on use of VOID_TO_LISP(). lisp.h: Use ERROR_CHECK_STRUCTURES to turn on ERROR_CHECK_TRAPPING_PROBLEMS and ERROR_CHECK_TYPECHECK lisp.h: Add assert_with_message. lisp.h: Add macros for gcproing entire arrays. (You could do this before but it required manual twiddling the gcpro structure.) lisp.h: Add prototypes for new functions defined elsewhere.
author ben
date Tue, 28 May 2002 08:45:36 +0000
parents c33ae14dd6d0
children 04bc9d2f42c7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
1 /* Checkbox Widget for XEmacs.
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
2 Copyright (C) 1999 Edward A. Falk
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
3
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
4 This file is part of XEmacs.
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
5
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
9 later version.
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
10
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
14 for more details.
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
15
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
20
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
21 /* Synched up with: Checkbox.c 1.1 */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
22
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
23 /*
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
24 * Checkbox.c - Checkbox button widget
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
25 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
26 * Author: Edward A. Falk
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
27 * falk@falconer.vip.best.com
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
28 *
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
29 * Date: June 30, 1997
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
30 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
31 * Overview: This widget is identical to the Radio widget in behavior,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
32 * except that the button is square and has a check mark.
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
33 */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
34
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
35
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
36 #include <config.h>
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
37 #include <stdio.h>
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
38
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
39 #include <X11/IntrinsicP.h>
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
40 #include <X11/StringDefs.h>
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
41 #include ATHENA_XawInit_h_
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
42 #include "../src/xmu.h"
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
43 #include "xlwcheckboxP.h"
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
44
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
45
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
46 /* by using the same size for the checkbox as for the diamond box,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
47 * we can let the Radio widget do the vast majority of the work.
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
48 */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
49
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
50 #define BOX_SIZE 8
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
51 #define DRAW_CHECK 0 /* don't draw the check mark */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
52
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
53 #define cclass(w) ((CheckboxWidgetClass)((w)->core.widget_class))
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
54
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
55 #ifdef _ThreeDP_h
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
56 #define swid(cw) ((cw)->threeD.shadow_width)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
57 #else
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
58 #define swid(cw) ((cw)->core.border_width)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
59 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
60
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
61 #define bsize(cw) (cclass(cw)->radio_class.dsize)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
62 #define bs(cw) (bsize(cw) + 2*swid(cw))
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
63
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
64
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
65 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
66 #define check_width 14
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
67 #define check_height 14
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 442
diff changeset
68 static unsigned char check_bits[] = {
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
69 0x00, 0x00, 0x00, 0x20, 0x00, 0x18, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x03,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
70 0x8c, 0x03, 0xde, 0x01, 0xff, 0x01, 0xfe, 0x00, 0xfc, 0x00, 0x78, 0x00,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
71 0x70, 0x00, 0x20, 0x00};
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
72 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
73
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
74
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
75 /****************************************************************
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
76 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
77 * Full class record constant
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
78 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
79 ****************************************************************/
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
80
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
81
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
82 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
83 static char defaultTranslations[] =
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
84 "<EnterWindow>: highlight()\n\
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
85 <LeaveWindow>: unpress(draw) unhighlight()\n\
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
86 <Btn1Down>: press()\n\
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
87 <Btn1Down>,<Btn1Up>: unpress(nodraw) toggle() notify()";
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
88 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
89
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
90
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
91
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
92 #define offset(field) XtOffsetOf(CheckboxRec, field)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
93 static XtResource resources[] = {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
94 {XtNtristate, XtCTristate, XtRBoolean, sizeof(Boolean),
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
95 offset(checkbox.tristate), XtRImmediate, (XtPointer)FALSE},
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
96 } ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
97 #undef offset
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
98
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
99 /* Member functions */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
100
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
101 static void CheckboxClassInit (void);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
102 static void CheckboxInit (Widget, Widget, ArgList, Cardinal *);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
103 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
104 static void CheckboxRealize (Widget, Mask *, XSetWindowAttributes *);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
105 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
106 static void DrawCheck (Widget);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
107
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
108
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
109 /* Action procs */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
110 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
111 static void CheckboxPress (Widget, XEvent *, String *, Cardinal *);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
112 static void CheckboxUnpress (Widget, XEvent *, String *, Cardinal *);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
113 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
114
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
115 /* internal privates */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
116
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
117 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
118 static XtActionsRec actionsList[] =
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
119 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
120 {"press", CheckboxPress},
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
121 {"unpress", CheckboxUnpress},
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
122 } ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
123 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
124
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
125 #define SuperClass ((RadioWidgetClass)&radioClassRec)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
126
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
127 CheckboxClassRec checkboxClassRec = {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
128 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
129 (WidgetClass) SuperClass, /* superclass */
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
130 "Checkbox", /* class_name */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
131 sizeof(CheckboxRec), /* size */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
132 CheckboxClassInit, /* class_initialize */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
133 NULL, /* class_part_initialize */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
134 FALSE, /* class_inited */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
135 CheckboxInit, /* initialize */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
136 NULL, /* initialize_hook */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
137 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
138 CheckboxRealize, /* realize */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
139 actionsList, /* actions */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
140 XtNumber(actionsList), /* num_actions */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
141 #else
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
142 XtInheritRealize, /* realize */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
143 NULL, /* actions */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
144 0, /* num_actions */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
145 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
146 resources, /* resources */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
147 XtNumber(resources), /* resource_count */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
148 NULLQUARK, /* xrm_class */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
149 TRUE, /* compress_motion */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
150 TRUE, /* compress_exposure */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
151 TRUE, /* compress_enterleave */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
152 FALSE, /* visible_interest */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
153 NULL, /* destroy */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
154 XtInheritResize, /* resize */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
155 XtInheritExpose, /* expose */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
156 NULL, /* set_values */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
157 NULL, /* set_values_hook */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
158 XtInheritSetValuesAlmost, /* set_values_almost */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
159 NULL, /* get_values_hook */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
160 NULL, /* accept_focus */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
161 XtVersion, /* version */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
162 NULL, /* callback_private */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
163 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
164 defaultTranslations, /* tm_table */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
165 #else
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
166 XtInheritTranslations, /* tm_table */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
167 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
168 XtInheritQueryGeometry, /* query_geometry */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
169 XtInheritDisplayAccelerator, /* display_accelerator */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
170 NULL /* extension */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
171 }, /* CoreClass fields initialization */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
172 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
173 XtInheritChangeSensitive /* change_sensitive */
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
174 }, /* SimpleClass fields initialization */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
175 #ifdef _ThreeDP_h
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
176 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
177 XtInheritXaw3dShadowDraw /* field not used */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
178 }, /* ThreeDClass fields initialization */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
179 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
180 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
181 0 /* field not used */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
182 }, /* LabelClass fields initialization */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
183 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
184 0 /* field not used */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
185 }, /* CommandClass fields initialization */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
186 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
187 RadioSet, /* Set Procedure. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
188 RadioUnset, /* Unset Procedure. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
189 NULL /* extension. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
190 }, /* ToggleClass fields initialization */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
191 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
192 BOX_SIZE,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
193 DrawCheck, /* draw procedure */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
194 NULL /* extension. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
195 }, /* RadioClass fields initialization */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
196 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
197 NULL /* extension. */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
198 }, /* CheckboxClass fields initialization */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
199 };
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
200
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
201 /* for public consumption */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
202 WidgetClass checkboxWidgetClass = (WidgetClass) &checkboxClassRec;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
203
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
204
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
205
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
206
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
207
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
208
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
209 /****************************************************************
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
210 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
211 * Class Methods
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
212 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
213 ****************************************************************/
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
214
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
215 static void
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
216 CheckboxClassInit (void)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
217 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
218 XawInitializeWidgetSet();
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
219 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
220
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
221
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
222 /*ARGSUSED*/
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
223 static void
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
224 CheckboxInit (Widget request,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
225 Widget new,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
226 ArgList args,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
227 Cardinal *num_args)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
228 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
229 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
230 CheckboxWidget cw = (CheckboxWidget) new;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
231 cw->checkbox.checkmark = None ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
232 cw->checkbox.checkmark_GC = None ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
233 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
234 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
235
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
236
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
237 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
238 static void
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
239 CheckboxRealize(Widget w,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
240 Mask *valueMask,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
241 XSetWindowAttributes *attributes)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
242 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
243 CheckboxWidget cw = (CheckboxWidget) w;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
244 XtGCMask value_mask, dynamic_mask, dontcare_mask ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
245 XGCValues values ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
246
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
247 /* first, call superclass realize */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
248 (*checkboxWidgetClass->core_class.superclass->core_class.realize)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
249 (w, valueMask, attributes);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
250
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
251 /* TODO: cache this via xmu */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
252 if( cw->checkbox.checkmark == None )
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
253 cw->checkbox.checkmark =
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
254 XCreateBitmapFromData( XtDisplay(w), XtWindow(w),
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
255 check_bits,check_width,check_height);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
256
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
257 values.fill_style = FillStippled ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
258 values.stipple = cw->checkbox.checkmark ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
259 values.foreground = cw->label.foreground ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
260 value_mask = GCFillStyle | GCStipple | GCForeground ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
261 dynamic_mask = GCTileStipXOrigin | GCTileStipYOrigin ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
262 dontcare_mask = GCLineWidth | GCLineStyle | GCCapStyle | GCJoinStyle |
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
263 GCFont | GCSubwindowMode | GCGraphicsExposures |
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
264 GCDashOffset | GCDashList | GCArcMode ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
265 cw->checkbox.checkmark_GC =
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
266 XtAllocateGC(w, 0, value_mask, &values, dynamic_mask, dontcare_mask) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
267 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
268 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
269
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
270
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
271 /* Function Name: CheckboxDestroy
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
272 * Description: Destroy Callback for checkbox widget.
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
273 * Arguments: w - the checkbox widget that is being destroyed.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
274 * junk, garbage - not used.
424
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
275 * Returns: none.
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
276 */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
277
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
278 /* ARGSUSED */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
279 static void
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
280 CheckboxDestroy (Widget w,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
281 XtPointer junk,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
282 XtPointer garbage)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
283 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
284 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
285 CheckboxWidget cw = (CheckboxWidget) w;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
286
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
287 /* TODO: cache this via xmu */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
288 if( cw->checkbox.checkmark != None )
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
289 XFreePixmap( XtDisplay(w), cw->checkbox.checkmark ) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
290 if( cw->checkbox.checkmark_GC != None )
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
291 XtReleaseGC(w, cw->checkbox.checkmark_GC) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
292 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
293 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
294
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
295
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
296
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
297 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
298 /************************************************************
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
299 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
300 * Actions Procedures
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
301 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
302 ************************************************************/
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
303
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
304 /* ARGSUSED */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
305 static void
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
306 CheckboxPress (Widget w,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
307 XEvent *event,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
308 String *params, /* unused */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
309 Cardinal *num_params) /* unused */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
310 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
311 CheckboxWidget cw = (CheckboxWidget) w ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
312 if( !cw->checkbox.pressed ) {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
313 cw->checkbox.pressed = TRUE ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
314 ((CheckboxWidgetClass)(w->core.widget_class))->radio_class.drawDiamond(w) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
315 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
316 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
317
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
318 static void
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
319 CheckboxUnpress (Widget w,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
320 XEvent *event,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
321 String *params, /* unused */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
322 Cardinal *num_params) /* unused */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
323 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
324 CheckboxWidget cw = (CheckboxWidget) w ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
325 int i ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
326
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
327 if( cw->checkbox.pressed ) {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
328 cw->checkbox.pressed = FALSE ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
329 if( *num_params > 0 && **params == 'd' )
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
330 ((CheckboxWidgetClass)(w->core.widget_class))->radio_class.drawDiamond(w);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
331 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
332 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
333 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
334
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
335
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
336
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
337
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
338
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
339 /************************************************************
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
340 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
341 * Internal Procedures
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
342 *
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
343 ************************************************************/
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
344
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
345 static void
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
346 DrawCheck (Widget w)
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
347 {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
348 CheckboxWidget cw = (CheckboxWidget) w ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
349 Display *dpy = XtDisplay(w) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
350 Window win = XtWindow(w) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
351 GC gc ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
352
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
353 #ifdef _ThreeDP_h
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
354 XPoint pts[6] ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
355 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
356 Dimension s = swid(cw);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
357 Dimension bsz = bsize(cw);
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
358 Position bx,by ; /* Check upper-left */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
359 Dimension bw,bh ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
360 #ifdef _ThreeDP_h
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
361 GC top, bot;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
362 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
363 GC ctr ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
364
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
365 /* foreground GC */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
366 gc = XtIsSensitive(w) ? cw->command.normal_GC : cw->label.gray_GC ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
367
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
368 bw = bh = bs(cw) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
369 bx = cw->label.internal_width ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
370 by = cw->core.height/2 - bh/2 ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
371
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
372 #ifdef _ThreeDP_h
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
373 if( !cw->command.set ) {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
374 top = cw->threeD.top_shadow_GC ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
375 bot = cw->threeD.bot_shadow_GC ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
376 } else {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
377 top = cw->threeD.bot_shadow_GC ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
378 bot = cw->threeD.top_shadow_GC ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
379 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
380 ctr = cw->command.inverse_GC ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
381 #else
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
382 ctr = cw->command.set ? cw->command.normal_GC : cw->command.inverse_GC ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
383 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
384
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
385 XFillRectangle(dpy,win,ctr, bx+s,by+s, bsz,bsz) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
386
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
387 #ifdef _ThreeDP_h
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
388 /* top-left shadow */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
389 pts[0].x = bx ; pts[0].y = by ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
390 pts[1].x = bw ; pts[1].y = 0 ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
391 pts[2].x = -s ; pts[2].y = s ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
392 pts[3].x = -bsz ; pts[3].y = 0 ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
393 pts[4].x = 0 ; pts[4].y = bsz ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
394 pts[5].x = -s ; pts[5].y = s ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
395 XFillPolygon(dpy,win,top, pts,6, Nonconvex,CoordModePrevious) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
396 /* bottom-right shadow */
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
397 pts[0].x = bx+bw ; pts[0].y = by+bh ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
398 pts[1].x = -bw ; pts[1].y = 0 ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
399 pts[2].x = s ; pts[2].y = -s ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
400 pts[3].x = bsz ; pts[3].y = 0 ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
401 pts[4].x = 0 ; pts[4].y = -bsz ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
402 pts[5].x = s ; pts[5].y = -s ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
403 XFillPolygon(dpy,win,bot, pts,6, Nonconvex,CoordModePrevious) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
404 #else
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
405 XDrawRectangle(dpy,win,gc, bx+s,by+s, bsz,bsz) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
406 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
407
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
408 #if DRAW_CHECK
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
409 if( cw->command.set && cw->checkbox.checkmark_GC != None ) {
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
410 XSetTSOrigin(dpy,cw->checkbox.checkmark_GC, bx+s, by+s) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
411 XFillRectangle(dpy,win,cw->checkbox.checkmark_GC,
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
412 bx+s, by+s, check_width,check_height) ;
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
413 }
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
414 #endif
11054d720c21 Import from CVS: tag r21-2-20
cvs
parents:
diff changeset
415 }