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

📄 rgndemo.c

📁 一个嵌入式操作系统(microwindows)的源代码
💻 C
字号:
/*  * rgndemo - A program to demonstrate the use of various different * types of regions for Nano-X. * * Copyright (c) 2002 Alex Holden. */#include <stdio.h>#include <nano-X.h>#include <nxcolors.h>#include "tuxmask.h"#define WINDOW_WIDTH 190#define WINDOW_HEIGHT 305#define NUMGCS 5void redraw(GR_WINDOW_ID wid, GR_GC_ID *gc){	int i, y;	for(i = 0; i < NUMGCS; i++)		for(y = 40; y < WINDOW_HEIGHT; y += 3)			GrLine(wid, gc[i], 0, y, WINDOW_WIDTH - 1, y - 40);}GR_GC_ID setup_single_rect_region(void){	GR_GC_ID gc;	GR_RECT rect;	GR_REGION_ID rg;	gc = GrNewGC();	GrSetGCForeground(gc, GR_COLOR_BLACK);	GrSetGCBackground(gc, GR_COLOR_WHITE);	rg = GrNewRegion();	rect.x = 0;	rect.y = 0;	rect.width = 60;	rect.height = 40;	GrUnionRectWithRegion(rg, &rect);	GrSetGCRegion(gc, rg);	GrSetGCClipOrigin(gc, 25, 35);	return gc;}GR_GC_ID setup_multi_rect_region(void){	GR_GC_ID gc;	GR_RECT rect;	GR_REGION_ID rg;	gc = GrNewGC();	GrSetGCForeground(gc, GR_COLOR_BLUE);	GrSetGCBackground(gc, GR_COLOR_WHITE);	rg = GrNewRegion();	rect.x = 10;	rect.y = 0;	rect.width = 10;	rect.height = 60;	GrUnionRectWithRegion(rg, &rect);	rect.x = 40;	rect.y = 0;	rect.width = 10;	rect.height = 60;	GrUnionRectWithRegion(rg, &rect);	rect.x = 0;	rect.y = 10;	rect.width = 60;	rect.height = 10;	GrUnionRectWithRegion(rg, &rect);	rect.x = 0;	rect.y = 40;	rect.width = 60;	rect.height = 10;	GrUnionRectWithRegion(rg, &rect);	GrSetGCRegion(gc, rg);	GrSetGCClipOrigin(gc, 105, 15);	return gc;}GR_GC_ID setup_simple_poly_region(void){	GR_GC_ID gc;	GR_REGION_ID rg;	GR_POINT points[] = { {15, 0}, {45, 0}, {60, 15}, {60, 45}, {45, 60},		{15, 60}, {0, 45}, {0, 15} };	gc = GrNewGC();	GrSetGCForeground(gc, GR_COLOR_PURPLE);	GrSetGCBackground(gc, GR_COLOR_WHITE);	rg = GrNewPolygonRegion(GR_POLY_WINDING, 8, points);	GrSetGCRegion(gc, rg);	GrSetGCClipOrigin(gc, 25, 95);	return gc;}GR_GC_ID setup_bitmap_region(void){	GR_GC_ID gc;	GR_REGION_ID rg;	gc = GrNewGC();	GrSetGCForeground(gc, GR_COLOR_FORESTGREEN);	GrSetGCBackground(gc, GR_COLOR_WHITE);	rg = GrNewBitmapRegion(tuxmask_bits, TUXMASK_WIDTH, TUXMASK_HEIGHT);	GrSetGCRegion(gc, rg);	GrSetGCClipOrigin(gc, 100, 80);	return gc;}GR_GC_ID setup_complex_poly_region(void){	GR_GC_ID gc;	GR_REGION_ID rg;	GR_POINT points[] = { {0, 0}, {99, 0}, {99, 99}, {0, 99}, {0, 19},		{79, 19}, {79, 79}, {19, 79}, {19, 39}, {59, 39}, {59, 49},		{29, 49}, {29, 69}, {69, 69}, {69, 29}, {9, 29}, {9, 89},		{89, 89}, {89, 9}, {0, 9} };	gc = GrNewGC();	GrSetGCForeground(gc, GR_COLOR_ORANGE);	GrSetGCBackground(gc, GR_COLOR_WHITE);	rg = GrNewPolygonRegion(GR_POLY_EVENODD, 20, points);	GrSetGCRegion(gc, rg);	GrSetGCClipOrigin(gc, 25, 180);	return gc;}int main(void){	GR_WINDOW_ID wid;	GR_GC_ID gc[NUMGCS];	GR_EVENT event;	if(GrOpen() < 0) {		fprintf(stderr, "Couldn't connect to the Nano-X server\n");		return 1;	}	wid = GrNewWindowEx(GR_WM_PROPS_APPWINDOW, "rgndemo",		GR_ROOT_WINDOW_ID, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT,		GR_COLOR_GRAY80);	GrSelectEvents(wid, GR_EVENT_MASK_CLOSE_REQ | GR_EVENT_MASK_EXPOSURE);	gc[0] = setup_single_rect_region();	gc[1] = setup_multi_rect_region();	gc[2] = setup_simple_poly_region();	gc[3] = setup_bitmap_region();	gc[4] = setup_complex_poly_region();	GrMapWindow(wid);	while(1) {		GrGetNextEvent(&event);		switch(event.type) {			case GR_EVENT_TYPE_EXPOSURE:				redraw(wid, gc);				break;			case GR_EVENT_TYPE_CLOSE_REQ:				GrClose();				return 0;			default:				break;		}	}}

⌨️ 快捷键说明

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