Mercurial > freewnn
diff Xwnmo/xwnmo/box.c @ 0:bbc77ca4def5
initial import
author | Yoshiki Yazawa <yaz@cc.rim.or.jp> |
---|---|
date | Thu, 13 Dec 2007 04:30:14 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Xwnmo/xwnmo/box.c Thu Dec 13 04:30:14 2007 +0900 @@ -0,0 +1,243 @@ +/* + * $Id: box.c,v 1.2 2001/06/14 18:16:14 ura Exp $ + */ + +/* + * FreeWnn is a network-extensible Kana-to-Kanji conversion system. + * This file is part of FreeWnn. + * + * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999 + * Copyright 1991, 1992 by Massachusetts Institute of Technology + * + * Author: OMRON SOFTWARE Co., Ltd. <freewnn@rd.kyoto.omronsoft.co.jp> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Emacs; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Commentary: + * + * Change log: + * + * Last modified date: 8,Feb.1999 + * + * Code: + * + */ +/* Version 4.0 + */ +#include <stdio.h> +#include "commonhd.h" +#include "sdefine.h" +#ifdef XJUTIL +#include "xjutil.h" +#include "sxheader.h" +#include "xext.h" +#else /* XJUTIL */ +#include "xim.h" +#include "sheader.h" +#include "ext.h" +#endif /* XJUTIL */ + +BoxRec * +create_box (parent, x, y, width, height, bw, fg, bg, bp, cursor, rev) + Window parent; + int x, y; + int width, height; + int bw; + unsigned long fg, bg, bp; + Cursor cursor; + char rev; +{ + register BoxRec *box; + XGCValues xgcv; + + if ((box = (BoxRec *) Malloc (sizeof (BoxRec))) == NULL) + { + malloc_error ("allocation of box struct"); + return (NULL); + } + box->x = x; + box->y = y; + box->width = width; + box->height = height; + box->border_width = bw; + box->fg = fg; + box->bg = bg; + box->bp = bp; + box->redraw_cb = NULL; + box->redraw_cb_data = NULL; + box->cb = NULL; + box->cb_data = NULL; + box->do_ret = False; + box->sel_ret = -1; + box->reverse = rev; + box->in = box->map = '\0'; + box->freeze = '\0'; + box->next = NULL; + box->window = XCreateSimpleWindow (dpy, parent, (x - bw), (y - bw), width, height, bw, bp, bg); + xgcv.foreground = fg; + xgcv.function = GXinvert; + xgcv.plane_mask = XOR (fg, bg); + box->invertgc = XCreateGC (dpy, box->window, (GCForeground | GCFunction | GCPlaneMask), &xgcv); + if (!box->window || !box->invertgc) + { + print_out ("Could not create X resources for box."); + Free ((char *) box); + return (NULL); + } + + if (cursor) + XDefineCursor (dpy, box->window, cursor); + if (rev) + { + XSelectInput (dpy, box->window, (ButtonPressMask | ButtonReleaseMask | EnterWindowMask | LeaveWindowMask | ExposureMask)); + } + else + { + XSelectInput (dpy, box->window, (ButtonPressMask | ButtonReleaseMask | ExposureMask)); + } + box->next = box_list; + box_list = box; + return (box); +} + +int +remove_box (b) + register BoxRec *b; +{ + register BoxRec *p, **prev; + for (prev = &box_list; p = *prev; prev = &p->next) + { + if (p == b) + { + *prev = p->next; + XFreeGC (dpy, p->invertgc); + Free ((char *) p); + return (0); + } + } + return (-1); +} + +void +map_box (p) + register BoxRec *p; +{ + XMapWindow (dpy, p->window); + p->map = 1; +} + +void +unmap_box (p) + register BoxRec *p; +{ + XUnmapWindow (dpy, p->window); + p->map = '\0'; + p->in = '\0'; +} + +void +freeze_box (p) + register BoxRec *p; +{ + p->freeze = 1; +} + +void +unfreeze_box (p) + register BoxRec *p; +{ + p->freeze = '\0'; +} + +void +moveresize_box (p, x, y, width, height) + register BoxRec *p; + int x, y; + int width, height; +{ + p->x = x; + p->y = y; + p->width = width; + p->height = height; + XMoveResizeWindow (dpy, p->window, (x - p->border_width), (y - p->border_width), width, height); +} + +void +changecolor_box (p, fg, bg, bp, flg) + register BoxRec *p; + unsigned long fg, bg, bp; + unsigned long flg; +{ + XGCValues xgcv; + + if ((flg & BoxBackground) && (bg != p->bg)) + { + p->bg = bg; + XSetWindowBackground (dpy, p->window, p->bg); + xgcv.background = bg; + xgcv.plane_mask = XOR (p->fg, p->bg); + XChangeGC (dpy, p->invertgc, (GCPlaneMask | GCBackground), &xgcv); + XClearWindow (dpy, p->window); + } + if ((flg & BoxForeground) && (fg != p->fg)) + { + p->fg = fg; + xgcv.foreground = fg; + xgcv.plane_mask = XOR (p->fg, p->bg); + XChangeGC (dpy, p->invertgc, (GCPlaneMask | GCForeground), &xgcv); + } + if ((flg & BoxBorderPixel) && (bp != p->bp)) + { + p->bp = bp; + XSetWindowBorder (dpy, p->window, p->bp); + } +} + +void +redraw_box (p) + register BoxRec *p; +{ + XClearWindow (dpy, p->window); +/* + JW3Mputc(p->string, p->window, 0, (int)p->in, IN_BORDER); +*/ + JW3Mputc (p->string, p->window, 0, 0, IN_BORDER); + if (p->in) + reverse_box (p, p->invertgc); +} + +void +reverse_box (p, invertgc) + register BoxRec *p; + GC invertgc; +{ + XFillRectangle (dpy, p->window, invertgc, 0, 0, p->width, p->height); +} + +void +change_reverse_box (p, rev) + register BoxRec *p; + char rev; +{ + if (rev) + { + XSelectInput (dpy, p->window, (ButtonPressMask | ButtonReleaseMask | EnterWindowMask | LeaveWindowMask | ExposureMask)); + } + else + { + XSelectInput (dpy, p->window, (ButtonPressMask | ButtonReleaseMask | ExposureMask)); + } + p->reverse = rev; +}