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

📄 mgcolor.cpp

📁 monqueror一个很具有参考价值的源玛
💻 CPP
字号:
#include <ctype.h>#include <stdlib.h>#include <assert.h>#include <string.h>#include "render_interface.h"#include "mgcolor.h"const MGColor MG::black( PIXEL_black, "black" );const MGColor MG::white( PIXEL_lightwhite, "white" );const MGColor MG::darkGray( PIXEL_darkgray, "darkgray" );const MGColor MG::gray( PIXEL_darkgray, "gray" );const MGColor MG::lightGray( PIXEL_lightgray, "lightgray" );const MGColor MG::red( PIXEL_red, "red" );const MGColor MG::green( PIXEL_green, "green" );const MGColor MG::blue( PIXEL_blue, "blue" );const MGColor MG::cyan( PIXEL_cyan, "cyan" );const MGColor MG::magenta( PIXEL_magenta, "magenta" );const MGColor MG::yellow( PIXEL_yellow, "yellow" );const MGColor MG::darkRed( PIXEL_darkred, "darkred" );const MGColor MG::darkGreen( PIXEL_darkgreen, "darkgreen" );const MGColor MG::darkBlue( PIXEL_darkblue, "darkblue" );const MGColor MG::darkCyan( PIXEL_darkcyan, "darkcyan" );const MGColor MG::darkMagenta( PIXEL_darkmagenta, "darkmagenta" );const MGColor MG::darkYellow( PIXEL_darkyellow, "darkyellow" );	static int hex2int( char hexchar ){    int v;    if ( isdigit( hexchar ) )		v = hexchar - '0';     else if ( hexchar >= 'A' && hexchar <= 'F' )		v = hexchar - 'A' + 10;    else if ( hexchar >= 'a' && hexchar <= 'f' )		v = hexchar - 'a' + 10;    else		v = 0;    return v;}MGColor::MGColor(){	setRgb (0, 0, 0 );	pixVal = (gal_pixel)PIXEL_invalid;	m_name [0] = '\0';}MGColor::MGColor( gal_pixel pix, const char* name ){    /* FIXME: to set correct RGB triples */	setRgb( 0, 0, 0 );	pixVal = pix;	strncpy( m_name, name, COLOR_NAME_LEN );    m_name [COLOR_NAME_LEN - 1] = '\0';}MGColor::MGColor( const char *name ){	m_name [0] = '\0';    setRgb (0, 0, 0);	pixVal = (gal_pixel)PIXEL_invalid;    if ( (name == NULL) || (strlen( name ) == 0) ) {		setRgb( 0, 0, 0 );    } else if ( name[0] == '#' ) {	    strncpy ( m_name, name, COLOR_NAME_LEN );        m_name [COLOR_NAME_LEN - 1] = '\0';		const char *p = name+1;		int len = strlen( name )-1;		int r, g, b;		if ( len == 12 ) {	    	r = (hex2int(p[0]) << 4) + hex2int(p[1]);	    	g = (hex2int(p[4]) << 4) + hex2int(p[5]);		    b = (hex2int(p[8]) << 4) + hex2int(p[9]);		} else if ( len == 9 ) {	    	r = (hex2int(p[0]) << 4) + hex2int(p[1]);		    g = (hex2int(p[3]) << 4) + hex2int(p[4]);		    b = (hex2int(p[6]) << 4) + hex2int(p[7]);		} else if ( len == 6 ) {		    r = (hex2int(p[0]) << 4) + hex2int(p[1]);		    g = (hex2int(p[2]) << 4) + hex2int(p[3]);		    b = (hex2int(p[4]) << 4) + hex2int(p[5]);		} else if ( len == 3 ) {		    r = hex2int(p[0]) << 4;		    g = hex2int(p[1]) << 4;		    b = hex2int(p[2]) << 4;		} else {		    r = g = b = 0;            m_name [0] = '\0';		}		setRgb( r, g, b );	} else {		strncpy( m_name, name, COLOR_NAME_LEN );        m_name [COLOR_NAME_LEN - 1] = '\0';		if( strcasecmp( name, "white" ) == 0 ) {//			pixVal = PIXEL_lightwhite;		    rgbVal = SysPixelColor [15];        }		else if( strcasecmp( name, "black" ) == 0 ) {//			pixVal = PIXEL_black;		    rgbVal = SysPixelColor [16];        }		else if( strcasecmp( name, "red" ) == 0 ) {//			pixVal = PIXEL_red;		    rgbVal = SysPixelColor [9];        }		else if( strcasecmp( name, "green" ) == 0 ) {//			pixVal = PIXEL_green;		    rgbVal = SysPixelColor [10];        }		else if( strcasecmp( name, "blue" ) == 0 ) {//			pixVal = PIXEL_blue;		    rgbVal = SysPixelColor [12];        }		else if( strcasecmp( name, "yellow" ) == 0 ) {//			pixVal = PIXEL_yellow;		    rgbVal = SysPixelColor [11];        }		else if( strcasecmp( name, "darkgray" ) == 0 ) {//			pixVal = PIXEL_darkgray;		    rgbVal = SysPixelColor [8];        }		else if( strcasecmp( name, "lightgray" ) == 0 ) {//			pixVal = PIXEL_lightgray;		    rgbVal = SysPixelColor [7];        }		else if( strcasecmp( name, "cyan" ) == 0 ) {//			pixVal = PIXEL_cyan;		    rgbVal = SysPixelColor [14];        }		else if( strcasecmp( name, "magenta" ) == 0 ) {//			pixVal = PIXEL_magenta;		    rgbVal = SysPixelColor [13];        }		else if( strcasecmp( name, "darkred" ) == 0 ) {//			pixVal = PIXEL_darkred;		    rgbVal = SysPixelColor [1];        }		else if( strcasecmp( name, "darkgreen" ) == 0 ) {//			pixVal = PIXEL_darkgreen;		    rgbVal = SysPixelColor [2];        }		else if( strcasecmp( name, "darkblue" ) == 0 ) {//			pixVal = PIXEL_darkblue;		    rgbVal = SysPixelColor [4];        }		else if( strcasecmp( name, "darkcyan" ) == 0 ) {//			pixVal = PIXEL_darkcyan;		    rgbVal = SysPixelColor [6];        }		else if( strcasecmp( name, "darkmagenta" ) == 0 ) {//			pixVal = PIXEL_darkmagenta;		    rgbVal = SysPixelColor [5];        }		else if( strcasecmp( name, "darkyellow" ) == 0 ) {//			pixVal = PIXEL_darkyellow;		    rgbVal = SysPixelColor [3];        }		else		{            /* TODO: add other standard colors.  */		}	}#ifdef COLOR_DEBUG    printf ("Color: %s (%d, %d, %d) = %d.\n", m_name, rgbVal.r, rgbVal.g, rgbVal.b, pixVal);#endif}MGColor::MGColor( int r, int g, int b ){	pixVal = (gal_pixel)PIXEL_invalid;	if (r >= 0 && r < 256 && g >= 0 && g < 256 && b >= 0 && b < 256) {	    setRgb( r, g, b );	    snprintf( m_name, COLOR_NAME_LEN, "#%02x%02x%02x", rgbVal.r, rgbVal.g, rgbVal.b );        m_name [COLOR_NAME_LEN - 1] = '\0';    }    else {	    setRgb (0, 0, 0);        m_name [0] = '\0';    }}MGColor::~MGColor(){}MGString MGColor::name() const{	if (m_name[0] == '\0')        return MGString ("invalid");    	return MGString( m_name );}gal_pixel MGColor::Rgb2Pixel ( const HDC& hdc, const MGColor& c, bool force ){#if 0    return RGB2Pixel (hdc, c.red(), c.green(), c.blue());#else    if (force || (c.getPixel () == (gal_pixel)PIXEL_invalid)) {        return RGB2Pixel (hdc, c.red(), c.green(), c.blue());    }    else        return c.getPixel ();#endif}

⌨️ 快捷键说明

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