Wxpython Implemented on Windows CE, Source code

源代码在线查看: style.cxx

软件大小: 35815 K
上传用户: l991090150
关键词: Implemented Wxpython Windows Source
下载地址: 免注册下载 普通下载 VIP

相关代码

				// Scintilla source code edit control
				/** @file Style.cxx
				 ** Defines the font and colour style for a class of text.
				 **/
				// Copyright 1998-2001 by Neil Hodgson 
				// The License.txt file describes the conditions under which this software may be distributed.
				
				#include 
				
				#include "Platform.h"
				
				#include "Scintilla.h"
				#include "Style.h"
				
				Style::Style() {
					aliasOfDefaultFont = true;
					Clear(ColourDesired(0, 0, 0), ColourDesired(0xff, 0xff, 0xff),
					      Platform::DefaultFontSize(), 0, SC_CHARSET_DEFAULT,
					      false, false, false, false, caseMixed, true, true, false);
				}
				
				Style::Style(const Style &source) {
					Clear(ColourDesired(0, 0, 0), ColourDesired(0xff, 0xff, 0xff),
					      0, 0, 0,
					      false, false, false, false, caseMixed, true, true, false);
					fore.desired = source.fore.desired;
					back.desired = source.back.desired;
					characterSet = source.characterSet;
					bold = source.bold;
					italic = source.italic;
					size = source.size;
					eolFilled = source.eolFilled;
					underline = source.underline;
					caseForce = source.caseForce;
					visible = source.visible;
					changeable = source.changeable;
					hotspot = source.hotspot;
				}
				
				Style::~Style() {
					if (aliasOfDefaultFont)
						font.SetID(0);
					else
						font.Release();
					aliasOfDefaultFont = false;
				}
				
				Style &Style::operator=(const Style &source) {
					if (this == &source)
						return * this;
					Clear(ColourDesired(0, 0, 0), ColourDesired(0xff, 0xff, 0xff),
					      0, 0, SC_CHARSET_DEFAULT,
					      false, false, false, false, caseMixed, true, true, false);
					fore.desired = source.fore.desired;
					back.desired = source.back.desired;
					characterSet = source.characterSet;
					bold = source.bold;
					italic = source.italic;
					size = source.size;
					eolFilled = source.eolFilled;
					underline = source.underline;
					caseForce = source.caseForce;
					visible = source.visible;
					changeable = source.changeable;
					return *this;
				}
				
				void Style::Clear(ColourDesired fore_, ColourDesired back_, int size_,
				                  const char *fontName_, int characterSet_,
				                  bool bold_, bool italic_, bool eolFilled_,
				                  bool underline_, ecaseForced caseForce_,
						  bool visible_, bool changeable_, bool hotspot_) {
					fore.desired = fore_;
					back.desired = back_;
					characterSet = characterSet_;
					bold = bold_;
					italic = italic_;
					size = size_;
					fontName = fontName_;
					eolFilled = eolFilled_;
					underline = underline_;
					caseForce = caseForce_;
					visible = visible_;
					changeable = changeable_;
					hotspot = hotspot_;
					if (aliasOfDefaultFont)
						font.SetID(0);
					else
						font.Release();
					aliasOfDefaultFont = false;
				}
				
				void Style::ClearTo(const Style &source) {
					Clear(
						source.fore.desired,
						source.back.desired,
						source.size,
						source.fontName,
						source.characterSet,
						source.bold,
						source.italic,
						source.eolFilled,
						source.underline,
						source.caseForce,
						source.visible,
						source.changeable,
						source.hotspot);
				}
				
				bool Style::EquivalentFontTo(const Style *other) const {
					if (bold != other->bold ||
					        italic != other->italic ||
					        size != other->size ||
					        characterSet != other->characterSet)
						return false;
					if (fontName == other->fontName)
						return true;
					if (!fontName)
						return false;
					if (!other->fontName)
						return false;
					return strcmp(fontName, other->fontName) == 0;
				}
				
				void Style::Realise(Surface &surface, int zoomLevel, Style *defaultStyle, bool extraFontFlag) {
					sizeZoomed = size + zoomLevel;
					if (sizeZoomed 						sizeZoomed = 2;
				
					if (aliasOfDefaultFont)
						font.SetID(0);
					else
						font.Release();
					int deviceHeight = surface.DeviceHeightFont(sizeZoomed);
					aliasOfDefaultFont = defaultStyle &&
					                     (EquivalentFontTo(defaultStyle) || !fontName);
					if (aliasOfDefaultFont) {
						font.SetID(defaultStyle->font.GetID());
					} else if (fontName) {
						font.Create(fontName, characterSet, deviceHeight, bold, italic, extraFontFlag);
					} else {
						font.SetID(0);
					}
				
					ascent = surface.Ascent(font);
					descent = surface.Descent(font);
					// Probably more typographically correct to include leading
					// but that means more complex drawing as leading must be erased
					//lineHeight = surface.ExternalLeading() + surface.Height();
					externalLeading = surface.ExternalLeading(font);
					lineHeight = surface.Height(font);
					aveCharWidth = surface.AverageCharWidth(font);
					spaceWidth = surface.WidthChar(font, ' ');
				}
							

相关资源