Mercurial > kinput2.yaz
diff lib/xtwstr.c @ 0:92745d501b9a
initial import from kinput2-v3.1
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 08 Mar 2010 04:44:30 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/xtwstr.c Mon Mar 08 04:44:30 2010 +0900 @@ -0,0 +1,110 @@ +/* + * xtwstr.c + */ + +/* + * Copyright (c) 1989 Software Research Associates, Inc. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Software Research Associates not be + * used in advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. Software Research + * Associates makes no representations about the suitability of this software + * for any purpose. It is provided "as is" without express or implied + * warranty. + * + * Author: Makoto Ishisone, Software Research Associates, Inc., Japan + * ishisone@sra.co.jp + */ + +#ifndef lint +static char *rcsid = "$Id: xtwstr.c,v 2.3 1991/10/02 04:27:04 ishisone Rel $"; +#endif + +#include <X11/Intrinsic.h> +#include "WStr.h" +#include "XWStr.h" + +#define IS2B(f) (((f)->max_byte1 > 0) || ((f)->max_char_or_byte2 > 255)) + +XWSGC +XtWSGetGCSet(w, mask, values, fontG0, fontG1, fontG2, fontG3) +Widget w; +unsigned long mask; +XGCValues *values; +XFontStruct *fontG0; +XFontStruct *fontG1; +XFontStruct *fontG2; +XFontStruct *fontG3; +{ + XGCValues gcval; + XWSGC gcset; + int i; + + gcset = (XWSGC)XtMalloc(sizeof(XWSGCSet)); + gcset->fe[0].font = fontG0; + gcset->fe[1].font = fontG1; + gcset->fe[2].font = fontG2; + gcset->fe[3].font = fontG3; + + gcval = *values; + mask |= GCFont; + for (i = 0; i < 4; i++) { + if (gcset->fe[i].font != NULL) { + gcval.font = (gcset->fe[i].font)->fid; + gcset->fe[i].gc = XtGetGC(w, mask, &gcval); + gcset->fe[i].flag = GCCREAT; + if (IS2B(gcset->fe[i].font)) + gcset->fe[i].flag |= TWOB; + } else { + gcset->fe[i].gc = NULL; + } + } + + return gcset; +} + +void +XtWSDestroyGCSet(gcset) +XWSGC gcset; +{ + int i; + int flag; + + for (i = 0; i < 4; i++) { + if (gcset->fe[i].gc == NULL) + continue; + flag = gcset->fe[i].flag; + if (flag & GCCREAT) + XtDestroyGC(gcset->fe[i].gc); + /* can't free XFontStruct data allocated by XWSSetGCSet() + * because I can't figure out which display is used. + * if (flag & FONTQUERY) + * XFreeFont(???, gcset->fe[i].font); + */ + } + XtFree((char *)gcset); +} + +void +XtWSReleaseGCSet(w, gcset) +Widget w; +XWSGC gcset; +{ + int i; + int flag; + + for (i = 0; i < 4; i++) { + if (gcset->fe[i].gc == NULL) + continue; + flag = gcset->fe[i].flag; + if (flag & GCCREAT) + XtReleaseGC(w, gcset->fe[i].gc); + if (flag & FONTQUERY) + XFreeFont(XtDisplay(w), gcset->fe[i].font); + } + XtFree((char *)gcset); +}