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

📄 ugldemo.c

📁 cpc-1631的BSP包for VxWorks操作系统
💻 C
📖 第 1 页 / 共 3 页
字号:
/* ugldemo.c - Graphics primitives demonstration program */

/* Copyright 1999-2000 Wind River Systems, Inc. All Rights Reserved */
/* Copyright 1998 Zinc Software Incorporated. */

/*
modification history
--------------------
01n,01aug02,rfm  Removed static declartion of windMLDemo
01m,26apr02,gav  Change banner to display actual version.
01l,25feb02,wdf  Fixed compiler warnings.
01k,22feb02,msr  Backward compatability for input API.
01j,29jan02,rbp  Addition of support for Native Unix.
01i,28aug01,rbp  Fix for __unix__ macro.
01h,23jul01,c_s  Change NATIVE to WINDML_NATIVE (less chance of collision)
01g,16jun01,c_s  Allow argv [1] to set mode.
01f,15jun01,c_s  Add native support
01i,05nov01,gav  Fixed misnamed devIds
01h,05nov01,gav  Change to new registry
01g,05nov01,gav  Change to new registry
01f,09oct01,msr  Ported to new UGL_Q_EVENT architecture.
01e,30nov00,gav  Fixed message length to fit on small screens.
01d,21nov00,gav  Clearscreen corrected (SPR 36009).
01c,16nov00,msr  Fixed SPR #62051
01b,27oct00,rfm  Added func ptr cast to taskSpawn
01a,25oct00,rfm  Added taskSpawn
*/

/**************************************************************
*  WindML Example - Demo of primitives
*
* This example program demonstrates basic drawing primitives.
*
* To start the example:
*
* -> ld < ugldemo_ugl.o
* -> ugldemo <mode>
*
* If the <mode> parameter is positive, no input devices are 
* assumed to be present and the demo will wait <mode> number
* of seconds before moving to the next test. A value of zero
* assumes that a mouse or keyboard is present and the user 
* must press a key or mouse button to continue to the next
* test. A negative value assumes no input devices are present
* and no delay between tests.
*
* To shut down the double buffering test program, either press
* 'q' on the keyboard or wait for the test to complete.
*
**************************************************************/

#if !defined(WINDML_NATIVE)
#include <vxWorks.h>
#elif defined(__unix__)
#include <unistd.h>
#endif

#include <ugl/ugl.h>
#include <ugl/uglos.h>
#include <ugl/uglMsg.h>
#include <ugl/uglfont.h>
#include <ugl/uglinput.h>
#include <ugl/ugldib.h>
#include <stdio.h>
#include <stdlib.h>

extern const unsigned int uglVersionMinor;
extern const unsigned int uglVersionMajor;

extern int colorBit;

UGL_DEVICE_ID devId;
UGL_GC_ID gc;
static UGL_INPUT_SERVICE_ID inputServiceId;
static UGL_REGION_ID regionId;
static UGL_FONT_ID fontDialog;
static UGL_FONT_ID fontSystem;
static UGL_FONT_ID fontFixed;
static UGL_FONT_DRIVER_ID fontDrvId;
static UGL_DDB_ID stdDdb;
static UGL_MDDB_ID patternDdb;
static UGL_CDDB_ID cursorDdb;
static UGL_TDDB_ID transDdb;
static int *randomData;
static UGL_COLOR * colorData;
static int displayHeight, displayWidth;

void windMLDemo (int mode);

struct _colorStruct
    {
    UGL_RGB rgbColor;
    UGL_COLOR uglColor;
    }
colorTable[] =
    {
    { UGL_MAKE_RGB(0, 0, 0), 0},
    { UGL_MAKE_RGB(0, 0, 168), 0},
    { UGL_MAKE_RGB(0, 168, 0), 0},
    { UGL_MAKE_RGB(0, 168, 168), 0},
    { UGL_MAKE_RGB(168, 0, 0), 0},
    { UGL_MAKE_RGB(168, 0, 168), 0},
    { UGL_MAKE_RGB(168, 84, 0), 0},
    { UGL_MAKE_RGB(168, 168, 168), 0},
    { UGL_MAKE_RGB(84, 84, 84), 0},
    { UGL_MAKE_RGB(84, 84, 255), 0},
    { UGL_MAKE_RGB(84, 255, 84), 0},
    { UGL_MAKE_RGB(84, 255, 255), 0},
    { UGL_MAKE_RGB(255, 84, 84), 0},
    { UGL_MAKE_RGB(255, 84, 255), 0},
    { UGL_MAKE_RGB(255, 255, 84), 0},
    { UGL_MAKE_RGB(255, 255, 255), 0}
    };

struct
    {
    int width;
    int height;
    unsigned char data[32];
    } patternData =
    {
    16, 16,
        { 
        0xFF, 0xFF, 
        0x00, 0x01,
        0x00, 0x01,
        0x00, 0x01,
        0x00, 0x01,
        0x00, 0x01,
        0x00, 0x01,
        0x00, 0x01,
        0xFF, 0xFF, 
        0x01, 0x00,
        0x01, 0x00,
        0x01, 0x00,
        0x01, 0x00,
        0x01, 0x00,
        0x01, 0x00,
        0x01, 0x00
        }
    };

#define BLACK			(0)
#define BLUE			(1)
#define GREEN			(2)
#define CYAN			(3)
#define RED			(4)
#define MAGENTA			(5)
#define BROWN			(6)
#define LIGHTGRAY		(7)
#define DARKGRAY		(8)
#define LIGHTBLUE		(9)
#define LIGHTGREEN		(10)
#define LIGHTCYAN		(11)
#define LIGHTRED		(12)
#define LIGHTMAGENTA		(13)
#define YELLOW			(14)
#define WHITE			(15)
#define TRANS			(255)
#define INVERT			(254)


UGL_ARGB cursorClut[] =
    {
    UGL_MAKE_RGB(0, 0, 0),
    UGL_MAKE_RGB(255, 255, 84),
    };

UGL_UINT8 cursorData[] =
    {
#define B 0,
#define Y 1,
#define T 255,
#define I 254,
    T T T T T T T T T T T T Y Y Y Y Y Y Y Y T T T T T T T T T T T T
    T T T T T T T T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T T T T T T T T
    T T T T T T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T T T T T T
    T T T T T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T T T T T
    T T T T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T T T T
    T T T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T T T
    T T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T T
    T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T
    T T Y Y Y Y Y Y Y T T T Y Y Y Y Y Y Y Y I I I Y Y Y Y Y Y Y T T
    T Y Y Y Y Y Y Y T T T T T Y Y Y Y Y Y I I I I I Y Y Y Y Y Y Y T
    T Y Y Y Y Y Y Y T T T T T Y Y Y Y Y Y I I I I I Y Y Y Y Y Y Y T
    T Y Y Y Y Y Y Y T T T T T Y Y Y Y Y Y I I I I I Y Y Y Y Y Y Y T
    Y Y Y Y Y Y Y Y Y T T T Y Y Y Y Y Y Y Y I I I Y Y Y Y Y Y Y Y Y
    Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
    Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
    Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
    Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
    Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
    Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
    Y Y Y Y Y B B Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y B B Y Y Y Y Y
    T Y Y Y Y B B Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y B B Y Y Y Y T
    T Y Y Y Y B B B Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y B B B Y Y Y Y T
    T Y Y Y Y Y B B Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y B B Y Y Y Y Y T
    T T Y Y Y Y B B B Y Y Y Y Y Y Y Y Y Y Y Y Y Y B B B Y Y Y Y T T
    T T Y Y Y Y Y B B B B Y Y Y Y Y Y Y Y Y Y B B B B Y Y Y Y Y T T
    T T T Y Y Y Y Y B B B B B B Y Y Y Y Y B B B B B Y Y Y Y Y T T T
    T T T T Y Y Y Y Y Y B B B B B B B B B B B B Y Y Y Y Y Y T T T T
    T T T T T Y Y Y Y Y Y Y Y B B B B B B Y Y Y Y Y Y Y Y T T T T T
    T T T T T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T T T T T
    T T T T T T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T T T T T T
    T T T T T T T T T Y Y Y Y Y Y Y Y Y Y Y Y Y Y T T T T T T T T T
    T T T T T T T T T T T T Y Y Y Y Y Y Y Y T T T T T T T T T T T T
#undef B
#undef Y
#undef T
#undef I
    };

UGL_UINT8 transparentData[] =
    {
#define O BLACK,
#define _ BLACK,
#define I YELLOW,
    O O O O O O O O O O O O I I I I I I I I O O O O O O O O O O O O
    O O O O O O O O O I I I I I I I I I I I I I I O O O O O O O O O
    O O O O O O O I I I I I I I I I I I I I I I I I I O O O O O O O
    O O O O O O I I I I I I I I I I I I I I I I I I I I O O O O O O
    O O O O O I I I I I I I I I I I I I I I I I I I I I I O O O O O
    O O O O I I I I I I I I I I I I I I I I I I I I I I I I O O O O
    O O O I I I I I I I I I I I I I I I I I I I I I I I I I I O O O
    O O I I I I I I I I I I I I I I I I I I I I I I I I I I I I O O
    O O I I I I I I I _ _ _ I I I I I I I I _ _ _ I I I I I I I O O
    O I I I I I I I _ _ _ _ _ I I I I I I _ _ _ _ _ I I I I I I I O
    O I I I I I I I _ _ _ _ _ I I I I I I _ _ _ _ _ I I I I I I I O
    O I I I I I I I _ _ _ _ _ I I I I I I _ _ _ _ _ I I I I I I I O
    I I I I I I I I I _ _ _ I I I I I I I I _ _ _ I I I I I I I I I
    I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I
    I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I
    I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I
    I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I
    I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I
    I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I
    I I I I I _ _ I I I I I I I I I I I I I I I I I I _ _ I I I I I
    O I I I I _ _ I I I I I I I I I I I I I I I I I I _ _ I I I I O
    O I I I I _ _ _ I I I I I I I I I I I I I I I I _ _ _ I I I I O
    O I I I I I _ _ I I I I I I I I I I I I I I I I _ _ I I I I I O
    O O I I I I _ _ _ I I I I I I I I I I I I I I _ _ _ I I I I O O
    O O I I I I I _ _ _ _ I I I I I I I I I I _ _ _ _ I I I I I O O
    O O O I I I I I _ _ _ _ _ _ I I I I I _ _ _ _ _ I I I I I O O O
    O O O O I I I I I I _ _ _ _ _ _ _ _ _ _ _ _ I I I I I I O O O O
    O O O O O I I I I I I I I _ _ _ _ _ _ I I I I I I I I O O O O O
    O O O O O O I I I I I I I I I I I I I I I I I I I I O O O O O O
    O O O O O O O I I I I I I I I I I I I I I I I I I O O O O O O O
    O O O O O O O O O I I I I I I I I I I I I I I O O O O O O O O O
    O O O O O O O O O O O O I I I I I I I I O O O O O O O O O O O O
#undef _
#undef O
#undef I
    };

UGL_UINT8 transparentMask[] =
    {
    0x00, 0x0F, 0xF0, 0x00,
    0x00, 0x7F, 0xFE, 0x00,
    0x01, 0xFF, 0xFF, 0x80,
    0x03, 0xFF, 0xFF, 0xC0,
    0x07, 0xFF, 0xFF, 0xE0,
    0x0F, 0xFF, 0xFF, 0xF0,
    0x1F, 0xFF, 0xFF, 0xF8,
    0x3F, 0xFF, 0xFF, 0xFC,
    0x3F, 0xFF, 0xFF, 0xFC,
    0x7F, 0xFF, 0xFF, 0xFE,
    0x7F, 0xFF, 0xFF, 0xFE,
    0x7F, 0xFF, 0xFF, 0xFE,
    0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF,
    0xFF, 0xFF, 0xFF, 0xFF,
    0x7F, 0xFF, 0xFF, 0xFE,
    0x7F, 0xFF, 0xFF, 0xFE,
    0x7F, 0xFF, 0xFF, 0xFE,
    0x3F, 0xFF, 0xFF, 0xFC,
    0x3F, 0xFF, 0xFF, 0xFC,
    0x1F, 0xFF, 0xFF, 0xF8,
    0x0F, 0xFF, 0xFF, 0xF0,
    0x07, 0xFF, 0xFF, 0xE0,
    0x03, 0xFF, 0xFF, 0xC0,
    0x01, 0xFF, 0xFF, 0x80,
    0x00, 0x7F, 0xFE, 0x00,
    0x00, 0x0F, 0xF0, 0x00
    };

/**************************************************************************
*
* flushQ
*
* RETURNS: void
*
* NOMANUAL
*
*/

static void flushQ(void)
    {
    UGL_MSG msg;
    UGL_STATUS status;

    do
        {
        status = uglInputMsgGet (inputServiceId, &msg, UGL_NO_WAIT);

	if (msg.type == MSG_POINTER)
	    {
	    uglCursorMove(devId,
			  msg.data.pointer.position.x,
			  msg.data.pointer.position.y);
	    }
        } while (status != UGL_STATUS_Q_EMPTY);
    }

/**************************************************************************
*
* pauseDemo
*
* RETURNS: 0 if 'q' wasn't pressed, -1 if 'q' was pressed.
*
* NOMANUAL
*
*/

static int pauseDemo(int mode)
    {
    static UGL_CHAR * message = "Press 'q' to quit or any other";
    static UGL_CHAR * message2= "key (or mouse button) to continue.";
    int textWidth, textHeight;
    UGL_MSG msg;
    UGL_STATUS status;
    int retVal = 0;

    if (mode == 0 && inputServiceId != UGL_NULL)
	{
	uglBackgroundColorSet(gc, colorTable[BLACK].uglColor);
	uglForegroundColorSet(gc, colorTable[LIGHTRED].uglColor);
	uglFontSet(gc, fontSystem);

	uglTextSizeGet(fontSystem, &textWidth, &textHeight, 
		       -1, message);

	uglTextDraw(gc, (displayWidth - textWidth) / 2, 
			(displayHeight - textHeight) / 2  - textHeight, -1, message);

	uglTextSizeGet(fontSystem, &textWidth, &textHeight, 
		       -1, message2);

	uglTextDraw(gc, (displayWidth - textWidth) / 2, 
			(displayHeight - textHeight) / 2, -1, message2);

	flushQ();

	UGL_FOREVER
	    {
	    status = uglInputMsgGet (inputServiceId, &msg, UGL_WAIT_FOREVER);

            if (msg.type == MSG_KEYBOARD)
                {
                if (msg.data.keyboard.modifiers & UGL_KBD_KEYDOWN) 
                    {
                    if (msg.data.keyboard.key == 'q' ||
                        msg.data.keyboard.key == 'Q')
                        retVal = -1;
                    break;
                    }
                }
            else if (msg.type == MSG_POINTER)
                {
                uglCursorMove (devId, msg.data.pointer.position.x,
                               msg.data.pointer.position.y);
                if ((msg.data.pointer.buttonChange & 
                     msg.data.pointer.buttonState) != 0)
                    break;
                }
	    }
	}
    else if (mode > 0)
	{
	uglOSTaskDelay (mode * 1000);
	}

    return(retVal);
    }

/**************************************************************************
*
* ClearScreen
*
* RETURNS: void
*
* NOMANUAL
*
*/

static void ClearScreen(UGL_GC_ID gc)
    {
    uglBackgroundColorSet(gc, colorTable [BLACK].uglColor);
    uglForegroundColorSet(gc, colorTable [BLACK].uglColor);
    uglLineStyleSet(gc, UGL_LINE_STYLE_SOLID);
    uglLineWidthSet(gc, 1);
    uglRectangle(gc, 0, 0, displayWidth - 1, displayHeight - 1);
    }

/**************************************************************************
*
* cleanUp
*
* RETURNS: void
*
* NOMANUAL
*
*/

void cleanUp(int mode)
    {
    if (mode >= 0 && inputServiceId != UGL_NULL)
	{
	uglCursorBitmapDestroy (devId, cursorDdb);

⌨️ 快捷键说明

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