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

📄 controlpaint.cpp

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 CPP
字号:
// This file is in the public domain.// There are no restrictions on any sort of usage of this file.#include <gui/System/Mona/Forms/ControlPaint.h>#include <gui/System/Drawing/Graphics.h>#include <gui/System/Math.h>using namespace System;using namespace System::Drawing;#ifdef MONAextern _P<MonAPI::Screen> GetDefaultScreen();#elseextern unsigned char* screen_buffer;extern int screen_width, screen_height;#ifdef WIN32extern void MonaGUI_Invalidate();#endif#endifnamespace System { namespace Mona { namespace Forms{	void ControlPaint::DrawRaised(_P<Graphics> g, int x, int y, int width, int height)	{		Color ll = ControlPaint::get_LightLight();		Color d = ControlPaint::get_Dark();		Color dd = ControlPaint::get_DarkDark();		int xw = x + width, yh = y + height;				g->DrawLine(ll, x, y, x, yh - 2);		g->DrawLine(ll, x, y, xw - 2, y);		g->DrawLine(dd, x, yh - 1, xw - 1, yh - 1);		g->DrawLine(dd, xw - 1, y, xw - 1, yh - 1);		g->DrawLine(d, x + 1, yh - 2, xw - 2, yh - 2);		g->DrawLine(d, xw - 2, y + 1, xw - 2, yh - 2);	}		void ControlPaint::DrawSunken(_P<Graphics> g, int x, int y, int width, int height)	{		Color ll = ControlPaint::get_LightLight();		Color l = ControlPaint::get_Light();		Color d = ControlPaint::get_Dark();		Color dd = ControlPaint::get_DarkDark();		int xw = x + width, yh = y + height;				g->DrawLine(dd, x, y, x, yh - 2);		g->DrawLine(dd, x, y, xw - 2, y);		g->DrawLine(d, x + 1, y + 1, x + 1, yh - 3);		g->DrawLine(d, x + 1, y + 1, xw - 3, y + 1);		g->DrawLine(ll, x, yh - 1, xw - 1, yh - 1);		g->DrawLine(ll, xw - 1, y, xw - 1, yh - 1);		g->DrawLine(l, x + 1, yh - 2, xw - 2, yh - 2);		g->DrawLine(l, xw - 2, y + 1, xw - 2, yh - 2);	}		void ControlPaint::DrawEngraved(_P<Graphics> g, int x, int y, int width, int height)	{		Color ll = ControlPaint::get_LightLight();		Color dd = ControlPaint::get_DarkDark();		int xw = x + width, yh = y + height;				g->DrawLine(dd, x, y, xw - 1, y);		g->DrawLine(dd, x, y, x, yh - 1);		g->DrawLine(ll, x + 1, y + 1, xw - 1, y + 1);		g->DrawLine(ll, x + 1, y + 1, x + 1, yh - 1);		g->DrawLine(ll, xw - 1, yh - 1, xw - 1, y + 2);		g->DrawLine(ll, xw - 1, yh - 1, x + 2, yh - 1);		g->DrawLine(dd, xw - 2, yh - 2, xw - 2, y + 2);		g->DrawLine(dd, xw - 2, yh - 2, x + 2, yh - 2);	}		void ControlPaint::DrawReversibleRectangle(Rectangle r)	{#ifdef MONA		_P<MonAPI::Screen> scr = ::GetDefaultScreen();		int w = scr->getWidth(), h = scr->getHeight(), bpp = scr->getBpp();		unsigned char* vram = scr->getVRAM();#else		int w = screen_width, h = screen_height, bpp = 32;		unsigned char* vram = screen_buffer;#endif		int bypp = bpp >> 3;		int rr = r.get_Right() - 1, rb = r.get_Bottom() - 1;		int x1 = Math::Max(0, r.X), x2 = Math::Min(w - 1, rr);		if (0 <= r.Y && r.Y < h)		{			unsigned char* pVram = &vram[(x1 + r.Y * w) * bypp];			int len = (x2 - x1 + 1) * bypp;			for (int i = 0; i < len; i++, pVram++) *pVram ^= 0xff;		}		if (0 <= rb && rb < h)		{			unsigned char* pVram = &vram[(x1 + rb * w) * bypp];			int len = (x2 - x1 + 1) * bypp;			for (int i = 0; i < len; i++, pVram++) *pVram ^= 0xff;		}		int y1 = Math::Max(0, r.Y + 1), y2 = Math::Min(h - 1, rb - 1);		if (0 <= r.X && r.X < w)		{			unsigned char* pVram = &vram[(r.X + y1 * w) * bypp];			for (int y = y1; y <= y2; y++, pVram += w * bypp)			{				for (int i = 0; i < bypp; i++) pVram[i] ^= 0xff;			}		}		if (0 <= rr && rr < w)		{			unsigned char* pVram = &vram[(rr + y1 * w) * bypp];			for (int y = y1; y <= y2; y++, pVram += w * bypp)			{				for (int i = 0; i < bypp; i++) pVram[i] ^= 0xff;			}		}#if !defined(MONA) && defined(WIN32)		MonaGUI_Invalidate();#endif	}}}}

⌨️ 快捷键说明

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