diff options
Diffstat (limited to 'src/Style.cxx')
-rw-r--r-- | src/Style.cxx | 202 |
1 files changed, 101 insertions, 101 deletions
diff --git a/src/Style.cxx b/src/Style.cxx index 42f9dea78..483023321 100644 --- a/src/Style.cxx +++ b/src/Style.cxx @@ -1,101 +1,101 @@ -// Scintilla source code edit control
-// Style.cxx - defines the font and colour style for a class of text
-// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#include <string.h>
-
-#include "Platform.h"
-
-#include "Style.h"
-
-Style::Style() {
- aliasOfDefaultFont = true;
- Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
- Platform::DefaultFontSize(), 0,
- false, false, false);
-}
-
-Style::~Style() {
- if (aliasOfDefaultFont)
- font.SetID(0);
- else
- font.Release();
- aliasOfDefaultFont = false;
-}
-
-Style &Style::operator=(const Style &source) {
- if (this == &source)
- return *this;
- Clear(Colour(0,0,0), Colour(0xff,0xff,0xff),
- 0, 0,
- false, false, false);
- fore.desired = source.fore.desired;
- back.desired = source.back.desired;
- bold = source.bold;
- italic = source.italic;
- size = source.size;
- eolFilled = source.eolFilled;
- return *this;
-}
-
-void Style::Clear(Colour fore_, Colour back_, int size_, const char *fontName_,
- bool bold_, bool italic_, bool eolFilled_) {
- fore.desired = fore_;
- back.desired = back_;
- bold = bold_;
- italic = italic_;
- size = size_;
- fontName = fontName_;
- eolFilled = eolFilled_;
- if (aliasOfDefaultFont)
- font.SetID(0);
- else
- font.Release();
- aliasOfDefaultFont = false;
-}
-
-bool Style::EquivalentFontTo(const Style *other) const {
- if (bold != other->bold ||
- italic != other->italic ||
- size != other->size)
- 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 sizeZoomed = size + zoomLevel;
- if (sizeZoomed <= 2) // Hangs if sizeZoomed <= 1
- sizeZoomed = 2;
-
- if (aliasOfDefaultFont)
- font.SetID(0);
- else
- font.Release();
- int deviceHeight = (sizeZoomed * surface.LogPixelsY()) / 72;
- aliasOfDefaultFont = defaultStyle &&
- (EquivalentFontTo(defaultStyle) || !fontName);
- if (aliasOfDefaultFont) {
- font.SetID(defaultStyle->font.GetID());
- } else if (fontName) {
- font.Create(fontName, deviceHeight, bold, italic);
- } 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, ' ');
-}
+// Scintilla source code edit control +// Style.cxx - defines the font and colour style for a class of text +// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#include <string.h> + +#include "Platform.h" + +#include "Style.h" + +Style::Style() { + aliasOfDefaultFont = true; + Clear(Colour(0,0,0), Colour(0xff,0xff,0xff), + Platform::DefaultFontSize(), 0, + false, false, false); +} + +Style::~Style() { + if (aliasOfDefaultFont) + font.SetID(0); + else + font.Release(); + aliasOfDefaultFont = false; +} + +Style &Style::operator=(const Style &source) { + if (this == &source) + return *this; + Clear(Colour(0,0,0), Colour(0xff,0xff,0xff), + 0, 0, + false, false, false); + fore.desired = source.fore.desired; + back.desired = source.back.desired; + bold = source.bold; + italic = source.italic; + size = source.size; + eolFilled = source.eolFilled; + return *this; +} + +void Style::Clear(Colour fore_, Colour back_, int size_, const char *fontName_, + bool bold_, bool italic_, bool eolFilled_) { + fore.desired = fore_; + back.desired = back_; + bold = bold_; + italic = italic_; + size = size_; + fontName = fontName_; + eolFilled = eolFilled_; + if (aliasOfDefaultFont) + font.SetID(0); + else + font.Release(); + aliasOfDefaultFont = false; +} + +bool Style::EquivalentFontTo(const Style *other) const { + if (bold != other->bold || + italic != other->italic || + size != other->size) + 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 sizeZoomed = size + zoomLevel; + if (sizeZoomed <= 2) // Hangs if sizeZoomed <= 1 + sizeZoomed = 2; + + if (aliasOfDefaultFont) + font.SetID(0); + else + font.Release(); + int deviceHeight = (sizeZoomed * surface.LogPixelsY()) / 72; + aliasOfDefaultFont = defaultStyle && + (EquivalentFontTo(defaultStyle) || !fontName); + if (aliasOfDefaultFont) { + font.SetID(defaultStyle->font.GetID()); + } else if (fontName) { + font.Create(fontName, deviceHeight, bold, italic); + } 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, ' '); +} |