summaryrefslogtreecommitdiff
path: root/tvision/include/tv/wingr/screen.h
diff options
context:
space:
mode:
Diffstat (limited to 'tvision/include/tv/wingr/screen.h')
-rw-r--r--tvision/include/tv/wingr/screen.h275
1 files changed, 275 insertions, 0 deletions
diff --git a/tvision/include/tv/wingr/screen.h b/tvision/include/tv/wingr/screen.h
new file mode 100644
index 0000000..524eef5
--- /dev/null
+++ b/tvision/include/tv/wingr/screen.h
@@ -0,0 +1,275 @@
+/*
+ * Windows GUI screen routines header.
+ *
+ * Copyright (c) 2002 by José Angel Sánchez Caso (JASC)
+ * Copyright (c) 2002 by Salvador E. Tropea (SET)
+ *
+ * From SET code fragment win 32 driver.
+ *
+ * Covered by the GPL license.
+ */
+
+#if defined(TVOS_Win32) && !defined(TV_Disable_WinGr_Driver) \
+ && !defined(WINGRSCR_HEADER_INCLUDED)
+#define WINGRSCR_HEADER_INCLUDED
+
+
+#ifdef TV_BIG_ENDIAN /* Intel machines */
+ #define attrChar(a) ((a) >> 0x08)
+ #define attrColor(a) ((a) & 0xFF)
+#else
+ #define attrChar(a) ((a) & 0xFF)
+ #define attrColor(a) ((a) >> 0x08)
+#endif
+
+#ifdef DEBUG
+ #define PRINTDEBUG( w ) \
+ { std::cout \
+ << #w << " --> " << w \
+ << " ( " << __FILE__ << " : " << __LINE__ << " )\n";\
+ std::cout.flush(); }
+#else
+ #define PRINTDEBUG( w )
+#endif
+
+typedef struct
+{ HBITMAP bitmapRaster;
+ HGDIOBJ bitmapObject;
+ HDC bitmapMemo;
+ unsigned w, h;
+} bitmapFontRec;
+
+typedef struct
+{ TDisplay::videoModes mode;
+ ushort wScreen
+ , hScreen
+ , wFont
+ , hFont;
+} VideoModeData;
+
+
+struct TDisplayWinGr : public virtual TDisplay // virtual to avoid problems with multiple inheritance
+{ static unsigned xPos; /* Cursor pos */
+ static unsigned yPos; /* Cursor pos */
+ static unsigned zPos; /* Cursor size */
+ static HDC hdc; /* Context used for drawing */
+ static RECT wGeo; /* Window position and size */
+ static char * className; /* Make the classname into a global variable */
+ static HINSTANCE TvWinInstance;
+
+/*
+ * To store display limits
+ */
+
+ static unsigned dmPelsWidth ;
+ static unsigned dmPelsHeight;
+
+/*
+ * To store font limits
+ */
+
+ static int foWmin;
+ static int foHmin;
+ static int foWmax;
+ static int foHmax;
+
+ static void Init(); /* Sets pointers of TDisplay to point to this class */
+
+ static void lowSetCursor( int x
+ , int y
+ , bool dir );
+
+ static int testEvents( UINT message
+ , WPARAM wParam
+ , LPARAM lParam );
+
+
+protected:
+
+ static bool processEvent( );
+
+ static void testCreate( HWND hw
+ , LPARAM lParam );
+
+
+ TDisplayWinGr() {};
+ virtual ~TDisplayWinGr(); // We will use casts to base classes, destructors must be pointers
+
+
+ // Behaviors to replace TDisplay
+
+ static void SetCursorPos ( unsigned x , unsigned y );
+ static void GetCursorPos ( unsigned &x , unsigned &y );
+ static void GetCursorShape( unsigned &start, unsigned &end);
+ static void SetCursorShape( unsigned start , unsigned end );
+ static ushort GetRows();
+ static ushort GetCols();
+
+ static ushort GetCrtMode();
+ static void SetCrtMode(ushort);
+ static int SetCrtModeRes( unsigned w, unsigned h );
+ static const char *GetWindowTitle(void);
+ static int SetWindowTitle(const char *name);
+ static int CheckForWindowSize( );
+ static void Beep();
+
+
+// Support functions
+
+ static void TestAllFonts( unsigned fW
+ , unsigned fH );
+
+ static int SetFontCrt( bitmapFontRec & fontResource
+ , ushort w, ushort h );
+
+ static int SetFontMode( bitmapFontRec & fr, ushort newMode );
+
+ static int selectFont( bitmapFontRec & fontResource
+ , TScreenFont256 * fontData );
+
+ static int CheckWindowSize( RECT & windowArea );
+ static void winRecalc();
+ static void SetCrtMode( const char * );
+
+// Support variables
+
+ static int sizeChanged; /* Resizing counter */
+ static int forceRedraw; /* Used to force setCharacters to unconditionally draw */
+
+ static TEvent storedEvent; /* Correctly processes message queue */
+
+public:
+ static HWND hwnd;
+
+ static COLORREF colorMap[ 16 ];
+
+ static HCURSOR normCursor;
+ static HCURSOR sizeCursor;
+ static HCURSOR handCursor;
+
+/* static RECT mSize; ( now local ) Windows resizing calculations */
+
+ static char cShapeFr;
+ static char cShapeTo;
+
+/*
+ * 28/1/2006, new bitmap fonts
+ */
+ static bitmapFontRec primary;
+ static bitmapFontRec secondary;
+
+ static uchar shapeFont8x16[];
+ static uchar shapeFont10x20[];
+
+ static TScreenFont256 font8x16;
+ static TScreenFont256 font10x20;
+ static TScreenFont256 * defaultFont;
+
+/*
+ * 28/1/2006, new bitmap fonts
+ */
+
+ static VideoModeData videoModes[];
+
+/*
+ * 10/3/2006, draw 'n' drop support
+ */
+ static char dragDropName[ PATH_MAX ];
+ static int dragDropIdx;
+ static void * dragDropHnd;
+
+
+};
+
+
+
+
+// With this order the destructor will be called first for TScreenWin32,
+// TScreen, TDisplayWin32 and finally TDisplay.
+
+struct TScreenWinGr: public virtual TDisplayWinGr
+ , public TScreen
+{ static int amountOfCells; /* Allocated screen cells */
+ static DWORD style; /* Window style */
+ static DWORD exStyle; /* Window new styles */
+ static long HalfColor;
+ static long FullColor;
+ static long cursorDelay;
+
+
+ TScreenWinGr(); /* We will use casts to base classes, destructors must be pointers */
+
+ static void Init();
+
+ virtual ~TScreenWinGr();
+
+protected:
+
+
+ // Default: ushort fixCrtMode( ushort mode )
+ // Default: static void setCrtData();
+ // Default: static void setVideoModeExt(char *mode);
+ // Default: static void getCharacters(unsigned offset,ushort *buf,unsigned count);
+ // Default: static ushort getCharacter(unsigned dst);
+
+ static int SetDisPaletteColors( int f, int n, TScreenColor * );
+ static int SetVideoModeRes( unsigned w, unsigned h, int fW, int fH );
+ static void setVideoMode(ushort mode);
+ static void Resume();
+ static void Suspend();
+ static void setCharacter( unsigned offset
+ , ushort value ); // JASC, change from uint32. New interace ?
+
+ static void setCharacters( unsigned dst
+ , ushort *src
+ , unsigned len );
+
+ static int System( const char *command
+ , pid_t *pidChild
+ , int in
+ , int out
+ , int err);
+
+ static int SetFont( int changeP, TScreenFont256 *fontP
+ , int changeS, TScreenFont256 *fontS
+ , int fontCP, int appCP );
+
+ static void RestoreFonts();
+
+ static int GetFontGeometry(unsigned &w, unsigned &h);
+ static int GetFontGeometryRange( unsigned &wmin, unsigned &hmin
+ , unsigned &wmax, unsigned &hmax );
+
+ // Support functions
+
+ static void SaveScreen();
+ static void RestoreScreen();
+ static void resizeMemoryBuffer();
+
+public:
+
+ static void writeLine( unsigned x
+ , unsigned y
+ , int w
+ , char * str
+ , uchar color );
+
+
+// Support variables
+
+protected:
+
+};
+
+/*
+ * This function is called by the Windowsfunction DispatchMessage( )
+ */
+
+LRESULT CALLBACK WindowProcedure( HWND hwnd
+ , UINT message
+ , WPARAM wParam
+ , LPARAM lParam );
+
+
+#endif // WINDOWSSCR_HEADER_INCLUDED
+