⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tux.c

📁 Microwindows genesis was with the NanoGUI project, and is now the primary distribution for both th
💻 C
字号:
/* * tux - demonstrate shaped window frames for Nano-X *//*  * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ *  * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. *  * The Original Code is Nano-X Tux. *  * The Initial Developer of the Original Code is Alex Holden. * Portions created by Alex Holden are Copyright (C) 2002 * Alex Holden <alex@alexholden.net>. All Rights Reserved. *  * Contributor(s): *  * Alternatively, the contents of this file may be used under the terms * of the GNU General Public license (the  "[GNU] License"), in which case the * provisions of [GNU] License are applicable instead of those * above.  If you wish to allow use of your version of this file only * under the terms of the [GNU] License and not to allow others to use * your version of this file under the MPL, indicate your decision by * deleting  the provisions above and replace  them with the notice and * other provisions required by the [GNU] License.  If you do not delete * the provisions above, a recipient may use your version of this file * under either the MPL or the [GNU] License. */#include <stdio.h>#include <stdlib.h>#include <nano-X.h>#include <nxcolors.h>#include "tuxmask.h"#define DEFAULT_TUX_FILE "bin/tux.gif"static int button_down = 0, x = 0, y = 0;GR_WINDOW_ID init(char *tuxfile){	GR_GC_ID gc;	GR_IMAGE_ID iid;	GR_WINDOW_ID wid;	GR_REGION_ID rid;	GR_WINDOW_ID pid;	GR_IMAGE_INFO iif;	GR_WM_PROPERTIES props;	GR_SCREEN_INFO sinfo;	int x, y;	if(GrOpen() < 0) {		fprintf(stderr, "Couldn't connect to Nano-X server\n");		return 0;	}	GrGetScreenInfo(&sinfo);	if(!(iid = GrLoadImageFromFile(tuxfile, 0))) {		fprintf(stderr, "Failed to load image file \"%s\"\n", tuxfile);		return 0;	}	GrGetImageInfo(iid, &iif);	pid = GrNewPixmap(iif.width, iif.height, NULL);	gc = GrNewGC();	GrDrawImageToFit(pid, gc, 0, 0, iif.width, iif.height, iid);	GrDestroyGC(gc);	GrFreeImage(iid);	x = sinfo.cols - iif.width;	y = sinfo.rows - iif.height;	wid = GrNewWindowEx(GR_WM_PROPS_APPWINDOW|GR_WM_PROPS_NOAUTOMOVE, NULL,		GR_ROOT_WINDOW_ID, x, y, iif.width, iif.height, GR_COLOR_GREEN);	GrSetBackgroundPixmap(wid, pid, GR_BACKGROUND_TOPLEFT);	rid = GrNewBitmapRegion(tuxmask_bits, TUXMASK_WIDTH, TUXMASK_HEIGHT);	GrSetWindowRegion(wid, rid, GR_WINDOW_BOUNDING_MASK);	GrDestroyRegion(rid);	props.flags = GR_WM_FLAGS_PROPS;	props.props = GR_WM_PROPS_NODECORATE;	GrSetWMProperties(wid, &props);	GrSelectEvents(wid, GR_EVENT_MASK_CLOSE_REQ |			GR_EVENT_MASK_MOUSE_POSITION |			GR_EVENT_MASK_BUTTON_UP |			GR_EVENT_MASK_BUTTON_DOWN);	GrMapWindow(wid);	return wid;}void button_event(GR_EVENT_BUTTON *ev){	if(ev->type == GR_EVENT_TYPE_BUTTON_DOWN) {		if(ev->buttons & GR_BUTTON_R) {			GrClose();			exit(0);		}		button_down = 1;		x = ev->x;		y = ev->y;		GrRaiseWindow(ev->wid);	} else button_down = 0;}void position_event(GR_EVENT_MOUSE *ev){	static int newx = 0, newy = 0, oldx = 0, oldy = 0;	if(!button_down) return;	newx = ev->rootx - x;	newy = ev->rooty - y;	if(newx != oldx || newy != oldy) {		GrMoveWindow(ev->wid, newx, newy);		oldx = newx;		oldy = newy;	}}int main(int argc, char *argv[]){	char *tuxfile;	GR_EVENT event;	GR_WINDOW_ID wid;	if(argc >= 2) tuxfile = argv[1];	else tuxfile = DEFAULT_TUX_FILE;	if(!(wid = init(tuxfile))) return 1;	while(1) {		GrGetNextEvent(&event);		switch(event.type) {			case GR_EVENT_TYPE_CLOSE_REQ:				return 0;				break;			case GR_EVENT_TYPE_MOUSE_POSITION:				position_event(&event.mouse);				break;			case GR_EVENT_TYPE_BUTTON_UP:			case GR_EVENT_TYPE_BUTTON_DOWN:				button_event(&event.button);				break;			default:				break;		}	}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -