view lcdemu/window.c @ 903:312778104f54

lcdemu started, compiles and runs w/o actual functionality
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 07 Sep 2015 08:34:37 +0000
parents
children e54abee27e8f
line wrap: on
line source

/*
 * LCDemu based on HECterm by the same author
 * X11 window creation functions
 */

#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xresource.h>
#include <X11/Xutil.h>
#include "globals.h"

extern char *xrm_lookup();

create_our_window()
{
	XrmQuark instquarks[3], classquarks[3];
	register char *cp;
	register int i, geomask;
	int pixwidth, pixheight, xpos, ypos;
	XSetWindowAttributes xswa;
	u_long xswamask;
	XColor bdcolor;
	XClassHint xclasshint;
	XWMHints wmhints;

	/* Determine our geometry */
	instquarks[0] = xrmquark_topinstance;
	classquarks[0] = xrmquark_topclass;
	classquarks[1] = instquarks[1] = XrmStringToQuark("geometry");
	instquarks[2] = classquarks[2] = NULLQUARK;
	cp = xrm_lookup(instquarks, classquarks);
	if (cp) {
		geomask = XParseGeometry(cp, &xpos, &ypos, &pixwidth,
					&pixheight);
		free(cp);
	} else
		geomask = 0;
	if (!(geomask & WidthValue))
		pixwidth = 176;
	if (!(geomask & HeightValue))
		pixheight = 220;
	if (!(geomask & XValue))
		xpos = 0;
	else if (geomask & XNegative)
		xpos += DisplayWidth(mydisplay, DefaultScreen(mydisplay)) -
			pixwidth;
	if (!(geomask & YValue))
		ypos = 0;
	else if (geomask & YNegative)
		ypos += DisplayHeight(mydisplay, DefaultScreen(mydisplay)) -
			pixheight;
	/* fill out XSetWindowAttributes */
	xswa.event_mask = 0;	/* not interested in any events */
	xswamask = CWEventMask;
	/* border color */
	classquarks[1] = instquarks[1] = XrmStringToQuark("borderColor");
	cp = xrm_lookup(instquarks, classquarks);
	if (cp) {
		i = XParseColor(mydisplay, DefaultColormap(mydisplay,
			DefaultScreen(mydisplay)), cp, &bdcolor);
		free(cp);
		if (i) {
			i = XAllocColor(mydisplay, DefaultColormap(mydisplay,
				DefaultScreen(mydisplay)), &bdcolor);
			if (i) {
				xswa.border_pixel = bdcolor.pixel;
				xswamask |= CWBorderPixel;
			}
		}
	}
	/* border width */
	classquarks[1] = instquarks[1] = XrmStringToQuark("borderWidth");
	cp = xrm_lookup(instquarks, classquarks);
	if (cp) {
		i = atoi(cp);
		free(cp);
	} else
		i = 2;
	/* go for it! */
	mainwindow = XCreateWindow(mydisplay, DefaultRootWindow(mydisplay),
			xpos, ypos, pixwidth, pixheight, i, CopyFromParent,
			InputOutput, CopyFromParent, xswamask, &xswa);
	/* set window manager properties */
	xclasshint.res_name = proginstancename;
	xclasshint.res_class = "LEDemu";
	XSetClassHint(mydisplay, mainwindow, &xclasshint);
	wmhints.flags = InputHint | StateHint;
	wmhints.input = False;
	classquarks[1] = instquarks[1] = XrmStringToQuark("iconic");
	cp = xrm_lookup(instquarks, classquarks);
	if (cp) {
		i = parse_boolean_resource(cp);
		free(cp);
	} else
		i = 0;
	wmhints.initial_state = i ? IconicState : NormalState;
	XSetWMHints(mydisplay, mainwindow, &wmhints);
#if 0
	if (geomask & (WidthValue|HeightValue))
		wm_normal_hints.flags = USSize;
	else
		wm_normal_hints.flags = PSize;
	if (geomask & (XValue|YValue))
		wm_normal_hints.flags |= USPosition;
	set_wm_normal_hints();
#endif
}

#if 0
set_wm_normal_hints()
{
	wm_normal_hints.min_width = MIN_COLUMNS * charcell_width;
	wm_normal_hints.min_height = MIN_LINES * charcell_height;
	wm_normal_hints.max_width = MAX_COLUMNS * charcell_width;
	wm_normal_hints.max_height = MAX_LINES * charcell_height;
	wm_normal_hints.width_inc = charcell_width;
	wm_normal_hints.height_inc = charcell_height;
	wm_normal_hints.base_width = 0;
	wm_normal_hints.base_height = 0;
	wm_normal_hints.flags |= PMinSize | PMaxSize | PResizeInc | PBaseSize;
	XSetWMNormalHints(mydisplay, mainwindow, &wm_normal_hints);
}
#endif

set_initial_window_title()
{
	XrmQuark instquarks[3], classquarks[3];
	register char *cp;
	char buf[256];

	instquarks[0] = xrmquark_topinstance;
	classquarks[0] = xrmquark_topclass;
	instquarks[1] = XrmStringToQuark("title");
	classquarks[1] = XrmStringToQuark("Title");
	instquarks[2] = classquarks[2] = NULLQUARK;
	cp = xrm_lookup(instquarks, classquarks);
	if (cp) {
		XStoreName(mydisplay, mainwindow, cp);
		free(cp);
		return;
	}
	XStoreName(mydisplay, mainwindow, "Emulated LCD");
}

set_initial_icon_name()
{
	XrmQuark instquarks[3], classquarks[3];
	register char *cp;

	instquarks[0] = xrmquark_topinstance;
	classquarks[0] = xrmquark_topclass;
	instquarks[1] = XrmStringToQuark("iconName");
	classquarks[1] = XrmStringToQuark("IconName");
	instquarks[2] = classquarks[2] = NULLQUARK;
	cp = xrm_lookup(instquarks, classquarks);
	if (cp) {
		XSetIconName(mydisplay, mainwindow, cp);
		free(cp);
		return;
	}
	XSetIconName(mydisplay, mainwindow, proginstancename);
}

create_mainwin_gc()
{
	XGCValues xgcval;

	xgcval.graphics_exposures = False;
	mainwingc = XCreateGC(mydisplay, mainwindow, GCGraphicsExposures,
				&xgcval);
}