/******************************Module*Header*******************************\ * Module Name: sstext3d.h * * Global header for text3D screen saver. * * Created: 12-24-94 -by- Marc Fortier [marcfo] * * Copyright (c) 1994 Microsoft Corporation * \**************************************************************************/ #ifndef __sstext3d_h__ #define __sstext3d_h__ #include #include "dlgs.h" #include "sscommon.h" #define PI_OVER_2 (PI/2.0f) #define PI_OVER_4 (PI/4.0f) #define TEXT_BUF_SIZE 100 // max length of display text buffer // (including NULL termination) #define TEXT_LIMIT 16 // max length of user-inputted display text #define MAX_IROT 100 // max integer rotation level (from slider) #define MIN_SLIDER 0 #define MAX_SLIDER 100 // demo types enum { DEMO_STRING = 0, // static string DEMO_CLOCK, // digital clock DEMO_VSTRING, // variable string (actually a subset of DEMO_STRING) }; #define MAX_DEMO 1 // max demo index #define NUM_DEMOS (MAX_DEMO+1) // surface styles enum { SURFSTYLE_SOLID = 0, SURFSTYLE_TEX, SURFSTYLE_WIREFRAME }; // rotation styles enum { ROTSTYLE_NONE = 0, ROTSTYLE_SEESAW, ROTSTYLE_WOBBLE, ROTSTYLE_RANDOM, NUM_ROTSTYLES }; enum { X_AXIS = 0, Y_AXIS, Z_AXIS, NUM_AXIS }; #if defined(max) #undef max #endif #define max( a, b ) ( a >= b ? a : b ) #if defined(clamp) #undef clamp #endif #define clamp( a, lo, hi ) ( (a < lo) ? lo : ((a > hi) ? hi : a) ) #define deg_to_rad( a ) ( (a*PI) / 180.0f ) #define rad_to_deg( a ) ( (a*180.0f) / PI ) typedef struct { USHORT listNum; // display list number TCHAR glyph; // glyph value (for extended LUT entries) LPGLYPHMETRICSFLOAT lpgmf; // ptr to glyphmetrics } LISTENTRY; #define SIZE_LIST_LUT 512 #define MAX_DIRECT_LUT 256 typedef struct { HDC hdc; int nGlyphs; // number of glyphs int firstGlyph; FLOAT chordalDeviation; FLOAT extrusion; int type; // WGL_FONT_LINES or WGL_FONT_POLYGONS LISTENTRY *listLUT; // LUT for cmd list # from glyph int LUTIndex; // current index for new indirect look-ups } WglFontContext; typedef struct { // registry or registry-derived attributes int demoType; BOOL bMaterialCycle; int matType; // material type from registry MATERIAL *pMat; // ptr to current material int surfStyle; int rotStyle; // rotation style int texQual; float fTesselFact; float fDepth; // extrusion int iSpeed; // rotation speed UINT uSize; // window size TEXFILE texFile; // texture file TEXTURE texture; TCHAR szFontName[LF_FACESIZE]; // font face name BOOL bBold; BOOL bItalic; BYTE charSet; TCHAR szText[TEXT_BUF_SIZE+1]; // display string USHORT usText[TEXT_BUF_SIZE+1]; // display string converted to cmd lists // internal attributes BOOL bTexture; BOOL bRandomMat; WglFontContext *pWglFontC; int textLen; POINTFLOAT pfTextExtent; POINTFLOAT pfTextOrigin; // upper left corner of extents POINT3D p3dBoundingBox; // bounding box, from spin angles FLOAT fFovy; // field of view in y-dir FLOAT fAspect; // aspect ratio of GL window FLOAT fViewDist; // dist to front of bounding box FLOAT fZtrans; // translation in z int iRotStep; // rotation step from slider int iRotMinStep; // min rotation step int iRotMaxStep; // max rotation step IPOINT3D ip3dRotStep; // xyz rot step, for random rotation IPOINT3D ip3dRoti; // current xyz rot step iteration POINT3D p3dRotMin; // min rotation amplitude POINT3D p3dRotMax; // max rotation amplitude POINT3D p3dRotLimit; // current rotation amplitude POINT3D p3dRot; // current rotation POINTFLOAT *pTrig; // current trig table SYSTEMTIME stTime; BOOL bXMajor; // string either x-major or y-major SSContext ssc; // screen saver configuration } AttrContext; // Global attribute context extern AttrContext gac; extern WglFontContext* CreateWglFontContext ( HDC hdc, int type, float fExtrusion, float fChordalDeviation ); extern void DeleteWglFontContext( WglFontContext *pwfc ); extern void DrawString ( USHORT *string, int strLen, WglFontContext *pwfc ); extern int GetStringExtent( LPTSTR pszString, POINTFLOAT *extent, POINTFLOAT *origin, WglFontContext *pwfc ); extern void ConvertStringToList( LPTSTR pszSrc, USHORT *usDst, WglFontContext *pwfc ); extern void getIniSettings(void); // Resource constants #define IDS_SCREENSAVERTITLE 1020 #define IDS_SAVERNAME 1002 // registry attribute strings: #define IDS_DEMOTYPE 1100 #define IDS_SURFSTYLE 1104 #define IDS_FONT 1109 #define IDS_FONT_ATTRIBUTES 1110 #define IDS_CHARSET 1111 #define IDS_TEXT 1115 #define IDS_SPEED 1120 #define IDS_ROTSTYLE 1124 // demo type strings #define IDS_DEMO_STRING 1200 #define IDS_DEMO_CLOCK 1201 // rotation resource strings #define IDS_ROTSTYLE_NONE 1400 #define IDS_ROTSTYLE_SEESAW 1401 #define IDS_ROTSTYLE_WOBBLE 1402 #define IDS_ROTSTYLE_RANDOM 1403 #define DLG_SETUP_HELP 2001 #define DLG_SETUP_TYPES 2002 // object type menu #define DLG_SETUP_BITMAP 2003 #define DLG_SETUP_ABOUT 2010 #define DLG_SETUP_TESSEL 2012 // tesselation slider #define DLG_SETUP_SIZE 2014 // size slider #define DLG_SETUP_TEX 2016 // texture button #define DLG_SETUP_FONT 2022 // select font button #define DLG_SETUP_SPEED 2023 // speed slider // surface styles #define IDC_RADIO_SOLID 2030 #define IDC_RADIO_TEX 2031 #define IDC_RADIO_WIREFRAME 2032 // not presently used #define IDC_TO_SURFSTYLE(n) ( (n) - IDC_RADIO_SOLID ) // In order for the IDC_TO_SURFSTYLE conversion macro to work, the radio buttons // for surface styles must be kept contiguous. // rotation styles #define DLG_SETUP_ROTSTYLE 4100 // demo type #define IDC_DEMO_STRING 5000 #define IDC_DEMO_CLOCK 5001 #define IDC_TO_DEMOTYPE(n) ( (n) - IDC_DEMO_STRING ) // sliders #define IDC_STATIC_TESS 2051 // box around slider #define IDC_STATIC_TESS_MIN 2052 // min label #define IDC_STATIC_TESS_MAX 2053 // max label #define IDC_STATIC_SIZE 2054 #define IDC_STATIC_SIZE_MIN 2055 #define IDC_STATIC_SIZE_MAX 2056 // rotation sliders #define IDC_STATIC_ROTATION_GRP 5000 // configure text dialog box stuff #define IDS_TEXT_TITLE 3001 #define DLG_TEXT_ENTER 3020 #define DLG_TEXT_SHOW 3021 // Choose font template #define DLG_CF_TEMPLATE 6000 #define IDD_FONT 6001 // Default texture resource #define IDB_DEFTEX 7000 #define SHELP_CONTENTS 01 #define SHELP_SHAPES 02 #define SHELP_PASSWORD 03 #define SHELP_COLOR 04 #define SHELP_MISC 05 #define SHELP_OVERVIEW 06 #endif // __sstext3d_h__