From ad790f6cc1cf3c04ffb9964ab980d5bc1b86e74c Mon Sep 17 00:00:00 2001 From: Edgaru089 Date: Fri, 1 Mar 2024 14:38:18 +0800 Subject: [PATCH] Try building on Linux/mingw --- Main.cpp | 10 ++ Makefile | 28 +++ Makefile.flags | 49 ++++++ easyx/include/easyx.h | 368 +++++++++++++++++++++++++++++++++++++++ easyx/include/graphics.h | 153 ++++++++++++++++ easyx/lib64/libeasyx.a | Bin 0 -> 182120 bytes easyx/readme.txt | 24 +++ 7 files changed, 632 insertions(+) create mode 100644 Main.cpp create mode 100644 Makefile create mode 100644 Makefile.flags create mode 100644 easyx/include/easyx.h create mode 100644 easyx/include/graphics.h create mode 100644 easyx/lib64/libeasyx.a create mode 100644 easyx/readme.txt diff --git a/Main.cpp b/Main.cpp new file mode 100644 index 0000000..aed442d --- /dev/null +++ b/Main.cpp @@ -0,0 +1,10 @@ +#include + + +int main() { + initgraph(640, 480); + circle(200, 200, 100); + Sleep(5000); + closegraph(); + return 0; +} diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..66fe1e7 --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ + +.SILENT: +include Makefile.flags + +output := JacksEscape + +objects = $(patsubst %.c,%.o,$(shell find . -name "*.c")) $(patsubst %.cpp,%.o,$(shell find . -name "*.cpp")) +objects_fasm = $(patsubst %.S,%.o,$(shell find . -name "*.S")) + +objects_test = $(patsubst %.c,%.o,$(shell find . -name "test_*.c")) $(patsubst %.cpp,%.o,$(shell find . -name "test_*.cpp")) +objects := $(filter-out $(objects_test),$(objects)) + + +all: $(output) + + +$(output): $(objects) $(objects_fasm) + $(LD) -o $@ $(LDFLAGS) $(objects) $(objects_fasm) $(LDLIBS) + + +clean: + echo " -RM $(output) $(objects)" + -$(RM) -f $(output) $(objects) $(objects_fasm) + + +.PHONY: all clean install upload + + diff --git a/Makefile.flags b/Makefile.flags new file mode 100644 index 0000000..8d85462 --- /dev/null +++ b/Makefile.flags @@ -0,0 +1,49 @@ + +.SILENT: + + +FLAGS_DIR := $(dir $(lastword $(MAKEFILE_LIST))) +SELF_DIR = $(dir $@) + +export RM = rm +export CP = cp + +export AR1 := x86_64-w64-mingw32-ar +export AS1 := x86_64-w64-mingw32-as +export CC1 := x86_64-w64-mingw32-cc +export CXX1 := x86_64-w64-mingw32-c++ +export LD1 := x86_64-w64-mingw32-cc + +export AR = echo " AR $<" && $(AR1) +export AS = echo " AS $^" && $(AS1) +export CC = echo " CC $^" && $(CC1) +export CXX = echo " CXX $^" && $(CXX1) +export LD = echo " LD $@" && $(LD1) +export FASM = echo " FASM $^" && fasm >/dev/null + + +# halt&cache fire if windows +ifneq (, $(findstring mingw,$(shell $(CC1) -dumpmachine))) +export Platform_CXXFLAGS := +export Platform_LDFLAGS := -L$(FLAGS_DIR)/easyx/lib64 +export Platform_LDLIBS := -leasyx -lgdi32 -limm32 -lwinmm -lopengl32 +export Platform_INCLUDEFLAGS := -I$(FLAGS_DIR)/easyx/include +else +export Platform_CXXFLAGS := +export Platform_LDFLAGS := +export Platform_LDLIBS := +export Platform_INCLUDEFLAGS := +endif + +export INCLUDEFLAGS := $(Platform_INCLUDEFLAGS) + +export CPPFLAGS = +export CFLAGS = $(INCLUDEFLAGS) $(BUILD_OPTIONS) -O2 -Wno-attributes -flto +export CXXFLAGS = $(INCLUDEFLAGS) -DHELOS $(BUILD_OPTIONS) $(Platform_CXXFLAGS) -O2 -Wno-unused-result -flto -std=c++17 +export LDFLAGS = $(Platform_LDFLAGS) -s -O2 -flto +export LDLIBS = $(Platform_LDLIBS) -lm -lstdc++ + +# Pattern rule for FASM assembly +%.o: %.S + $(FASM) $^ $@ + diff --git a/easyx/include/easyx.h b/easyx/include/easyx.h new file mode 100644 index 0000000..831732a --- /dev/null +++ b/easyx/include/easyx.h @@ -0,0 +1,368 @@ +/****************************************************** + * EasyX Library for C++ (Ver:20240225) + * https://easyx.cn + * + * EasyX.h + * Provides the latest API. + ******************************************************/ + +#pragma once + +#ifndef WINVER +#define WINVER 0x0400 // Specifies that the minimum required platform is Windows 95 and Windows NT 4.0. +#endif + +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0500 // Specifies that the minimum required platform is Windows 2000 +#endif + +#ifndef _WIN32_WINDOWS +#define _WIN32_WINDOWS 0x0410 // Specifies that the minimum required platform is Windows 98 +#endif + +#ifdef UNICODE + #pragma comment(lib,"EasyXw.lib") +#else + #pragma comment(lib,"EasyXa.lib") +#endif + + +#ifndef __cplusplus +#error EasyX is only for C++ +#endif + +#include +#include + +// EasyX Window Properties +#define EX_SHOWCONSOLE 1 // Maintain the console window when creating a graphics window +#define EX_NOCLOSE 2 // Disable the close button +#define EX_NOMINIMIZE 4 // Disable the minimize button +#define EX_DBLCLKS 8 // Support double-click events + + +// Color constant +#define BLACK 0 +#define BLUE 0xAA0000 +#define GREEN 0x00AA00 +#define CYAN 0xAAAA00 +#define RED 0x0000AA +#define MAGENTA 0xAA00AA +#define BROWN 0x0055AA +#define LIGHTGRAY 0xAAAAAA +#define DARKGRAY 0x555555 +#define LIGHTBLUE 0xFF5555 +#define LIGHTGREEN 0x55FF55 +#define LIGHTCYAN 0xFFFF55 +#define LIGHTRED 0x5555FF +#define LIGHTMAGENTA 0xFF55FF +#define YELLOW 0x55FFFF +#define WHITE 0xFFFFFF + +// Color conversion macro +#define BGR(color) ( (((color) & 0xFF) << 16) | ((color) & 0xFF00FF00) | (((color) & 0xFF0000) >> 16) ) + + +class IMAGE; + +// Line style class +class LINESTYLE +{ +public: + LINESTYLE(); + LINESTYLE(const LINESTYLE &style); + LINESTYLE& operator = (const LINESTYLE &style); + virtual ~LINESTYLE(); + + DWORD style; + DWORD thickness; + DWORD *puserstyle; + DWORD userstylecount; +}; + +// Fill style class +class FILLSTYLE +{ +public: + FILLSTYLE(); + FILLSTYLE(const FILLSTYLE &style); + FILLSTYLE& operator = (const FILLSTYLE &style); + virtual ~FILLSTYLE(); + + int style; // Fill style + long hatch; // Hatch pattern + IMAGE* ppattern; // Fill image +}; + +// Image class +class IMAGE +{ +public: + int getwidth() const; // Get the width of the image + int getheight() const; // Get the height of the image + +private: + int width, height; // Width and height of the image + HBITMAP m_hBmp; + HDC m_hMemDC; + float m_data[6]; + COLORREF m_LineColor; // Current line color + COLORREF m_FillColor; // Current fill color + COLORREF m_TextColor; // Current text color + COLORREF m_BkColor; // Current background color + DWORD* m_pBuffer; // Memory buffer of the image + + LINESTYLE m_LineStyle; // Current line style + FILLSTYLE m_FillStyle; // Current fill style + + virtual void SetDefault(); // Set the graphics environment as default + +public: + IMAGE(int _width = 0, int _height = 0); + IMAGE(const IMAGE &img); + IMAGE& operator = (const IMAGE &img); + virtual ~IMAGE(); + virtual void Resize(int _width, int _height); // Resize image +}; + + + +// Graphics window related functions + +HWND initgraph(int width, int height, int flag = 0); // Create graphics window +void closegraph(); // Close graphics window + + +// Graphics environment related functions + +void cleardevice(); // Clear device +void setcliprgn(HRGN hrgn); // Set clip region +void clearcliprgn(); // Clear clip region + +void getlinestyle(LINESTYLE* pstyle); // Get line style +void setlinestyle(const LINESTYLE* pstyle); // Set line style +void setlinestyle(int style, int thickness = 1, const DWORD *puserstyle = NULL, DWORD userstylecount = 0); // Set line style +void getfillstyle(FILLSTYLE* pstyle); // Get fill style +void setfillstyle(const FILLSTYLE* pstyle); // Set fill style +void setfillstyle(int style, long hatch = NULL, IMAGE* ppattern = NULL); // Set fill style +void setfillstyle(BYTE* ppattern8x8); // Set fill style + +void setorigin(int x, int y); // Set coordinate origin +void getaspectratio(float *pxasp, float *pyasp); // Get aspect ratio +void setaspectratio(float xasp, float yasp); // Set aspect ratio + +int getrop2(); // Get binary raster operation mode +void setrop2(int mode); // Set binary raster operation mode +int getpolyfillmode(); // Get polygon fill mode +void setpolyfillmode(int mode); // Set polygon fill mode + +void graphdefaults(); // Reset the graphics environment as default + +COLORREF getlinecolor(); // Get line color +void setlinecolor(COLORREF color); // Set line color +COLORREF gettextcolor(); // Get text color +void settextcolor(COLORREF color); // Set text color +COLORREF getfillcolor(); // Get fill color +void setfillcolor(COLORREF color); // Set fill color +COLORREF getbkcolor(); // Get background color +void setbkcolor(COLORREF color); // Set background color +int getbkmode(); // Get background mode +void setbkmode(int mode); // Set background mode + +// Color model transformation related functions +COLORREF RGBtoGRAY(COLORREF rgb); +void RGBtoHSL(COLORREF rgb, float *H, float *S, float *L); +void RGBtoHSV(COLORREF rgb, float *H, float *S, float *V); +COLORREF HSLtoRGB(float H, float S, float L); +COLORREF HSVtoRGB(float H, float S, float V); + + +// Drawing related functions + +COLORREF getpixel(int x, int y); // Get pixel color +void putpixel(int x, int y, COLORREF color); // Set pixel color + +void line(int x1, int y1, int x2, int y2); // Draw a line + +void rectangle (int left, int top, int right, int bottom); // Draw a rectangle without filling +void fillrectangle (int left, int top, int right, int bottom); // Draw a filled rectangle with a border +void solidrectangle(int left, int top, int right, int bottom); // Draw a filled rectangle without a border +void clearrectangle(int left, int top, int right, int bottom); // Clear a rectangular region + +void circle (int x, int y, int radius); // Draw a circle without filling +void fillcircle (int x, int y, int radius); // Draw a filled circle with a border +void solidcircle(int x, int y, int radius); // Draw a filled circle without a border +void clearcircle(int x, int y, int radius); // Clear a circular region + +void ellipse (int left, int top, int right, int bottom); // Draw an ellipse without filling +void fillellipse (int left, int top, int right, int bottom); // Draw a filled ellipse with a border +void solidellipse(int left, int top, int right, int bottom); // Draw a filled ellipse without a border +void clearellipse(int left, int top, int right, int bottom); // Clear an elliptical region + +void roundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Draw a rounded rectangle without filling +void fillroundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Draw a filled rounded rectangle with a border +void solidroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Draw a filled rounded rectangle without a border +void clearroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Clear a rounded rectangular region + +void arc (int left, int top, int right, int bottom, double stangle, double endangle); // Draw an arc +void pie (int left, int top, int right, int bottom, double stangle, double endangle); // Draw a sector without filling +void fillpie (int left, int top, int right, int bottom, double stangle, double endangle); // Draw a filled sector with a border +void solidpie(int left, int top, int right, int bottom, double stangle, double endangle); // Draw a filled sector without a border +void clearpie(int left, int top, int right, int bottom, double stangle, double endangle); // Clear a rounded rectangular region + +void polyline (const POINT *points, int num); // Draw multiple consecutive lines +void polygon (const POINT *points, int num); // Draw a polygon without filling +void fillpolygon (const POINT *points, int num); // Draw a filled polygon with a border +void solidpolygon(const POINT *points, int num); // Draw a filled polygon without a border +void clearpolygon(const POINT *points, int num); // Clear a polygon region + +void polybezier(const POINT *points, int num); // Draw three square Bezier curves +void floodfill(int x, int y, COLORREF color, int filltype = FLOODFILLBORDER); // Fill the area + + + +// Text related functions +void outtextxy(int x, int y, LPCTSTR str); // Output a string at the specified location +void outtextxy(int x, int y, TCHAR c); // Output a char at the specified location +int textwidth(LPCTSTR str); // Get the width of a string +int textwidth(TCHAR c); // Get the width of a char +int textheight(LPCTSTR str); // Get the height of a string +int textheight(TCHAR c); // Get the height of a char +int drawtext(LPCTSTR str, RECT* pRect, UINT uFormat); // Output a string in the specified format within the specified area. +int drawtext(TCHAR c, RECT* pRect, UINT uFormat); // Output a char in the specified format within the specified area. + +// Set current text style. +// nHeight: The height of the text +// nWidth: The average width of the character. If 0, the scale is adaptive. +// lpszFace: The font name +// nEscapement: The writing angle of the string, 0.1 degrees, defaults to 0. +// nOrientation: The writing angle of each character, 0.1 degrees, defaults to 0. +// nWeight: The stroke weight of the character +// bItalic: Specify whether the font is italic +// bUnderline: Specify whether the font is underlined +// bStrikeOut: Specify whether the font has a strikeout +// fbCharSet: Specifies the character set +// fbOutPrecision: Specifies the output accuracy of the text +// fbClipPrecision: Specifies the clip accuracy of the text +// fbQuality: Specifies the output quality of the text +// fbPitchAndFamily: Specifies a font family that describes a font in a general way +void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace); +void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut); +void settextstyle(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut, BYTE fbCharSet, BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily); +void settextstyle(const LOGFONT *font); // Set current text style +void gettextstyle(LOGFONT *font); // Get current text style + + + +// Image related functions +void loadimage(IMAGE *pDstImg, LPCTSTR pImgFile, int nWidth = 0, int nHeight = 0, bool bResize = false); // Load image from a file (bmp/gif/jpg/png/tif/emf/wmf/ico) +void loadimage(IMAGE *pDstImg, LPCTSTR pResType, LPCTSTR pResName, int nWidth = 0, int nHeight = 0, bool bResize = false); // Load image from resources (bmp/gif/jpg/png/tif/emf/wmf/ico) +void saveimage(LPCTSTR pImgFile, IMAGE* pImg = NULL); // Save image to a file (bmp/gif/jpg/png/tif) +void getimage(IMAGE *pDstImg, int srcX, int srcY, int srcWidth, int srcHeight); // Get image from device +void putimage(int dstX, int dstY, const IMAGE *pSrcImg, DWORD dwRop = SRCCOPY); // Put image to device +void putimage(int dstX, int dstY, int dstWidth, int dstHeight, const IMAGE *pSrcImg, int srcX, int srcY, DWORD dwRop = SRCCOPY); // Put image to device +void rotateimage(IMAGE *dstimg, IMAGE *srcimg, double radian, COLORREF bkcolor = BLACK, bool autosize = false, bool highquality = true);// Rotate image +void Resize(IMAGE* pImg, int width, int height); // Resize the device +DWORD* GetImageBuffer(IMAGE* pImg = NULL); // Get the display buffer of the graphics device +IMAGE* GetWorkingImage(); // Get current graphics device +void SetWorkingImage(IMAGE* pImg = NULL); // Set current graphics device +HDC GetImageHDC(IMAGE* pImg = NULL); // Get the graphics device handle + + +// Other functions + +int getwidth(); // Get the width of current graphics device +int getheight(); // Get the height of current graphics device + +void BeginBatchDraw(); // Begin batch drawing mode +void FlushBatchDraw(); // Refreshes the undisplayed drawing +void FlushBatchDraw(int left, int top, int right, int bottom); // Refreshes the undisplayed drawing +void EndBatchDraw(); // End batch drawing mode and refreshes the undisplayed drawing +void EndBatchDraw(int left, int top, int right, int bottom); // End batch drawing mode and refreshes the undisplayed drawing + +HWND GetHWnd(); // Get the handle of the graphics window +const TCHAR* GetEasyXVer(); // Get version of EasyX library + +// Get user input as a dialog box +bool InputBox(LPTSTR pString, int nMaxCount, LPCTSTR pPrompt = NULL, LPCTSTR pTitle = NULL, LPCTSTR pDefault = NULL, int width = 0, int height = 0, bool bOnlyOK = true); + + + +// Message +// +// Category Type Description +// +// EX_MOUSE WM_MOUSEMOVE Mouse moves +// WM_MOUSEWHEEL Mouse wheel is rotated +// WM_LBUTTONDOWN Left mouse button is pressed +// WM_LBUTTONUP Left mouse button is released +// WM_LBUTTONDBLCLK Left mouse button is double-clicked +// WM_MBUTTONDOWN Middle mouse button is pressed +// WM_MBUTTONUP Middle mouse button is released +// WM_MBUTTONDBLCLK Middle mouse button is double-clicked +// WM_RBUTTONDOWN Right mouse button is pressed +// WM_RBUTTONUP Right mouse button is released +// WM_RBUTTONDBLCLK Right mouse button is double-clicked +// +// EX_KEY WM_KEYDOWN A key is pressed +// WM_KEYUP A key is released +// +// EX_CHAR WM_CHAR +// +// EX_WINDOW WM_ACTIVATE The window is activated or deactivated +// WM_MOVE The window has been moved +// WM_SIZE The size of window has changed + +// Message Category +#define EX_MOUSE 1 +#define EX_KEY 2 +#define EX_CHAR 4 +#define EX_WINDOW 8 + +// Message Structure +struct ExMessage +{ + USHORT message; // The message identifier + union + { + // Data of the mouse message + struct + { + bool ctrl :1; // Indicates whether the CTRL key is pressed + bool shift :1; // Indicates whether the SHIFT key is pressed + bool lbutton :1; // Indicates whether the left mouse button is pressed + bool mbutton :1; // Indicates whether the middle mouse button is pressed + bool rbutton :1; // Indicates whether the right mouse button is pressed + short x; // The x-coordinate of the cursor + short y; // The y-coordinate of the cursor + short wheel; // The distance the wheel is rotated, expressed in multiples or divisions of 120 + }; + + // Data of the key message + struct + { + BYTE vkcode; // The virtual-key code of the key + BYTE scancode; // The scan code of the key. The value depends on the OEM + bool extended :1; // Indicates whether the key is an extended key, such as a function key or a key on the numeric keypad. The value is true if the key is an extended key; otherwise, it is false. + bool prevdown :1; // Indicates whether the key is previously up or down + }; + + // Data of the char message + TCHAR ch; + + // Data of the window message + struct + { + WPARAM wParam; + LPARAM lParam; + }; + }; +}; + +// Message Function +ExMessage getmessage(BYTE filter = -1); // Get a message until a message is available for retrieval +void getmessage(ExMessage *msg, BYTE filter = -1); // Get a message until a message is available for retrieval +bool peekmessage(ExMessage *msg, BYTE filter = -1, bool removemsg = true); // Get a message if any exist, otherwise return false +void flushmessage(BYTE filter = -1); // Flush the message buffer +void setcapture(); // Enable the ability to capture mouse messages outside of the graphics window +void releasecapture(); // Disable the ability to capture mouse messages outside of the graphics window \ No newline at end of file diff --git a/easyx/include/graphics.h b/easyx/include/graphics.h new file mode 100644 index 0000000..9a76fca --- /dev/null +++ b/easyx/include/graphics.h @@ -0,0 +1,153 @@ +/****************************************************** + * EasyX Library for C++ (Ver:20240225) + * https://easyx.cn + * + * graphics.h + * Based on easyx.h and retaining several old APIs. + * The functions and constants declared in this file are only for compatibility and are not recommended. + ******************************************************/ + +#pragma once + +#include + + + +// Old Window Properties +#define SHOWCONSOLE 1 // Maintain the console window when creating a graphics window +#define NOCLOSE 2 // Disable the close button +#define NOMINIMIZE 4 // Disable the minimize button +#define EW_SHOWCONSOLE 1 // Maintain the console window when creating a graphics window +#define EW_NOCLOSE 2 // Disable the close button +#define EW_NOMINIMIZE 4 // Disable the minimize button +#define EW_DBLCLKS 8 // Support double-click events + + + +// Old fill styles +#define NULL_FILL BS_NULL +#define EMPTY_FILL BS_NULL +#define SOLID_FILL BS_SOLID +// Old normal fill style +#define BDIAGONAL_FILL BS_HATCHED, HS_BDIAGONAL // Fill with ///. +#define CROSS_FILL BS_HATCHED, HS_CROSS // Fill with +++. +#define DIAGCROSS_FILL BS_HATCHED, HS_DIAGCROSS // Fill with xxx (heavy cross hatch fill). +#define DOT_FILL (BYTE*)"\x80\x00\x08\x00\x80\x00\x08\x00" // Fill with xxx. +#define FDIAGONAL_FILL BS_HATCHED, HS_FDIAGONAL // Fill with \\\. +#define HORIZONTAL_FILL BS_HATCHED, HS_HORIZONTAL // Fill with ===. +#define VERTICAL_FILL BS_HATCHED, HS_VERTICAL // Fill with |||. +// Old dense fill style +#define BDIAGONAL2_FILL (BYTE*)"\x44\x88\x11\x22\x44\x88\x11\x22" +#define CROSS2_FILL (BYTE*)"\xff\x11\x11\x11\xff\x11\x11\x11" +#define DIAGCROSS2_FILL (BYTE*)"\x55\x88\x55\x22\x55\x88\x55\x22" +#define DOT2_FILL (BYTE*)"\x88\x00\x22\x00\x88\x00\x22\x00" +#define FDIAGONAL2_FILL (BYTE*)"\x22\x11\x88\x44\x22\x11\x88\x44" +#define HORIZONTAL2_FILL (BYTE*)"\x00\x00\xff\x00\x00\x00\xff\x00" +#define VERTICAL2_FILL (BYTE*)"\x11\x11\x11\x11\x11\x11\x11\x11" +// Old heavy line fill style +#define BDIAGONAL3_FILL (BYTE*)"\xe0\xc1\x83\x07\x0e\x1c\x38\x70" +#define CROSS3_FILL (BYTE*)"\x30\x30\x30\x30\x30\x30\xff\xff" +#define DIAGCROSS3_FILL (BYTE*)"\xc7\x83\xc7\xee\x7c\x38\x7c\xee" +#define DOT3_FILL (BYTE*)"\xc0\xc0\x0c\x0c\xc0\xc0\x0c\x0c" +#define FDIAGONAL3_FILL (BYTE*)"\x07\x83\xc1\xe0\x70\x38\x1c\x0e" +#define HORIZONTAL3_FILL (BYTE*)"\xff\xff\x00\x00\xff\xff\x00\x00" +#define VERTICAL3_FILL (BYTE*)"\x33\x33\x33\x33\x33\x33\x33\x33" +// Old other fill style +#define INTERLEAVE_FILL (BYTE*)"\xcc\x33\xcc\x33\xcc\x33\xcc\x33" + + + +// +#if _MSC_VER > 1200 && _MSC_VER < 1900 + #define _EASYX_DEPRECATE __declspec(deprecated("This function is deprecated.")) + #define _EASYX_DEPRECATE_WITHNEW(_NewFunc) __declspec(deprecated("This function is deprecated. Instead, use this new function: " #_NewFunc ". See https://docs.easyx.cn/" #_NewFunc " for details.")) + #define _EASYX_DEPRECATE_OVERLOAD(_Func) __declspec(deprecated("This overload is deprecated. See https://docs.easyx.cn/" #_Func " for details.")) +#else + #define _EASYX_DEPRECATE + #define _EASYX_DEPRECATE_WITHNEW(_NewFunc) + #define _EASYX_DEPRECATE_OVERLOAD(_Func) +#endif + +// Old text related functions +// nHeight: The height of the text +// nWidth: The average width of the character. If 0, the scale is adaptive. +// lpszFace: The font name +// nEscapement: The writing angle of the string, 0.1 degrees, defaults to 0. +// nOrientation: The writing angle of each character, 0.1 degrees, defaults to 0. +// nWeight: The stroke weight of the character +// bItalic: Specify whether the font is italic +// bUnderline: Specify whether the font is underlined +// bStrikeOut: Specify whether the font has a strikeout +// fbCharSet: Specifies the character set +// fbOutPrecision: Specifies the output accuracy of the text +// fbClipPrecision: Specifies the clip accuracy of the text +// fbQuality: Specifies the output quality of the text +// fbPitchAndFamily: Specifies a font family that describes a font in a general way +_EASYX_DEPRECATE_WITHNEW(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace); +_EASYX_DEPRECATE_WITHNEW(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut); +_EASYX_DEPRECATE_WITHNEW(settextstyle) void setfont(int nHeight, int nWidth, LPCTSTR lpszFace, int nEscapement, int nOrientation, int nWeight, bool bItalic, bool bUnderline, bool bStrikeOut, BYTE fbCharSet, BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily); +_EASYX_DEPRECATE_WITHNEW(settextstyle) void setfont(const LOGFONT *font); // Set current text style +_EASYX_DEPRECATE_WITHNEW(gettextstyle) void getfont(LOGFONT *font); // Get current text style + +// Old drawing related functions +void bar(int left, int top, int right, int bottom); // Draw a filled rectangle without a border +void bar3d(int left, int top, int right, int bottom, int depth, bool topflag); // Draw a filled 3D rectangle with a border + +void drawpoly(int numpoints, const int *polypoints); // Draw a polygon without filling +void fillpoly(int numpoints, const int *polypoints); // Draw a filled polygon with a border + +int getmaxx(); // Get the maximum x-coordinate in the physical coordinates of the graphics window +int getmaxy(); // Get the maximum y-coordinate in the physical coordinates of the graphics window + +COLORREF getcolor(); // Get current foreground color +void setcolor(COLORREF color); // Set current foreground color + +void setwritemode(int mode); // Set binary raster operation mode + +// Old current location related functions +_EASYX_DEPRECATE int getx(); // Get current x coordinates +_EASYX_DEPRECATE int gety(); // Get current y coordinates +_EASYX_DEPRECATE void moveto(int x, int y); // Move current location +_EASYX_DEPRECATE void moverel(int dx, int dy); // Move current location +_EASYX_DEPRECATE void lineto(int x, int y); // Draw a line +_EASYX_DEPRECATE void linerel(int dx, int dy); // Draw a line +_EASYX_DEPRECATE void outtext(LPCTSTR str); // Output a string at current location +_EASYX_DEPRECATE void outtext(TCHAR c); // Output a char at current location + +// Old mouse related functions +// Mouse message +// WM_MOUSEMOVE Mouse moves +// WM_MOUSEWHEEL Mouse wheel is rotated +// WM_LBUTTONDOWN Left mouse button is pressed +// WM_LBUTTONUP Left mouse button is released +// WM_LBUTTONDBLCLK Left mouse button is double-clicked +// WM_MBUTTONDOWN Middle mouse button is pressed +// WM_MBUTTONUP Middle mouse button is released +// WM_MBUTTONDBLCLK Middle mouse button is double-clicked +// WM_RBUTTONDOWN Right mouse button is pressed +// WM_RBUTTONUP Right mouse button is released +// WM_RBUTTONDBLCLK Right mouse button is double-clicked +struct MOUSEMSG +{ + UINT uMsg; // Mouse message + bool mkCtrl :1; // Indicates whether the CTRL key is pressed + bool mkShift :1; // Indicates whether the SHIFT key is pressed + bool mkLButton :1; // Indicates whether the left mouse button is pressed + bool mkMButton :1; // Indicates whether the middle mouse button is pressed + bool mkRButton :1; // Indicates whether the right mouse button is pressed + short x; // The x-coordinate of the cursor + short y; // The y-coordinate of the cursor + short wheel; // The distance the wheel is rotated, expressed in multiples or divisions of 120 +}; +_EASYX_DEPRECATE bool MouseHit(); // Indicates whether there are mouse messages +_EASYX_DEPRECATE_WITHNEW(getmessage) MOUSEMSG GetMouseMsg(); // Get a mouse message. if mouse message queue is empty, wait. +_EASYX_DEPRECATE_WITHNEW(peekmessage) bool PeekMouseMsg(MOUSEMSG *pMsg, bool bRemoveMsg = true); // Get a mouse message and return immediately +_EASYX_DEPRECATE_WITHNEW(flushmessage) void FlushMouseMsgBuffer(); // Empty the mouse message buffer + +typedef ExMessage EASYXMSG; // Old message structure + +// Old message category +#define EM_MOUSE 1 +#define EM_KEY 2 +#define EM_CHAR 4 +#define EM_WINDOW 8 \ No newline at end of file diff --git a/easyx/lib64/libeasyx.a b/easyx/lib64/libeasyx.a new file mode 100644 index 0000000000000000000000000000000000000000..4174349b5a6c92dccdcd5d794c8f2ef75b0b1740 GIT binary patch literal 182120 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 literal 0 HcmV?d00001 diff --git a/easyx/readme.txt b/easyx/readme.txt new file mode 100644 index 0000000..4bfb5f1 --- /dev/null +++ b/easyx/readme.txt @@ -0,0 +1,24 @@ +EasyX for MinGW +https://go.easyx.cn/easyx-for-mingw +------------------------------------ + +[支持 MinGW 的版本] +TDM-GCC 4.8.1 及以上版本,支持 32 位和 64 位。 +MinGW-w64 的支持有限,支持 x86_64-posix-seh、x86_64-win32-seh、i686-posix-sjlj、i686-win32-sjlj,但不支持 x86_64-posix-sjlj、x86_64-win32-sjlj、i686-posix-dwarf、i686-win32-dwarf。 + +[支持编译器的版本] +使用 TDM-GCC 4.8.1 及以上版本的集成开发环境都可以支持。例如: +● Code::Blocks 13.12 及以上版本 +● DevCpp 5.8.0 及以上版本 +同时额外支持: +● DevCpp 5.4.0 GCC MinGW 4.7.2 +● C-Free 5.0(内置 GCC MinGW 3.4.5) + +[文件列表] +include 头文件 +lib32 32 位库文件 +lib64 64 位库文件 +lib-for-devcpp_5.4.0 仅适用于 DevCpp 5.4.0 MinGW 4.7.2 和 C-Free 5.0 + +[安装方法] +将 include 文件夹下的头文件和 lib32/lib64 文件夹下的库文件,分别拷贝到 MinGW 的头文件和库文件文件夹中,链接选项增加:-leasyx,然后编译即可。 \ No newline at end of file