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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 AMgRZ+ 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