📄 mgcolor.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 + -