diff options
Diffstat (limited to 'src/Style.cxx')
| -rw-r--r-- | src/Style.cxx | 136 | 
1 files changed, 58 insertions, 78 deletions
| diff --git a/src/Style.cxx b/src/Style.cxx index 392fd1c9a..b86884aa5 100644 --- a/src/Style.cxx +++ b/src/Style.cxx @@ -16,8 +16,41 @@  using namespace Scintilla;  #endif +FontAlias::FontAlias() { +} + +FontAlias::~FontAlias() { +	SetID(0); +	// ~Font will not release the actual font resource sine it is now 0 +} + +void FontAlias::ClearFont() { +	SetID(0); +} + +bool FontSpecification::EqualTo(const FontSpecification &other) const { +	return bold == other.bold && +	       italic == other.italic && +	       size == other.size && +	       characterSet == other.characterSet && +	       fontName == other.fontName; +} + +FontMeasurements::FontMeasurements() { +	Clear(); +} + +void FontMeasurements::Clear() { +	lineHeight = 2; +	ascent = 1; +	descent = 1; +	externalLeading = 0; +	aveCharWidth = 1; +	spaceWidth = 1; +	sizeZoomed = 2; +} +  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); @@ -42,11 +75,6 @@ Style::Style(const Style &source) {  }  Style::~Style() { -	if (aliasOfDefaultFont) -		font.SetID(0); -	else -		font.Release(); -	aliasOfDefaultFont = false;  }  Style &Style::operator=(const Style &source) { @@ -70,10 +98,10 @@ Style &Style::operator=(const Style &source) {  }  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_) { +        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_; @@ -87,79 +115,31 @@ void Style::Clear(ColourDesired fore_, ColourDesired back_, int size_,  	visible = visible_;  	changeable = changeable_;  	hotspot = hotspot_; -	if (aliasOfDefaultFont) -		font.SetID(0); -	else -		font.Release(); -	aliasOfDefaultFont = false; -	sizeZoomed = 2; -	lineHeight = 2; -	ascent = 1; -	descent = 1; -	externalLeading = 0; -	aveCharWidth = 1; -	spaceWidth = 1; +	font.ClearFont(); +	FontMeasurements::Clear();  }  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); +	    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, int extraFontFlag) { -	sizeZoomed = size + zoomLevel; -	if (sizeZoomed <= 2)	// Hangs if sizeZoomed <= 1 -		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); -	} - +void Style::Copy(Font &font_, const FontMeasurements &fm_) { +	font.SetID(font_.GetID()); +	(FontMeasurements &)(*this) = fm_; +#if PLAT_WX  	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, ' '); +#endif  } | 
