diff options
| author | nyamatongwe <unknown> | 2007-06-24 12:02:23 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2007-06-24 12:02:23 +0000 | 
| commit | 903e4bd44bab47455f533915caaa95bd2fd2e99e (patch) | |
| tree | fd041ad1e922734432d617c50c2c80575a71ec84 /src/ViewStyle.cxx | |
| parent | b443cc0a72149358aab36d9a8b26e5021d72fbfc (diff) | |
| download | scintilla-mirror-903e4bd44bab47455f533915caaa95bd2fd2e99e.tar.gz | |
Make the styles array variable length so it can be increased to 256 entries
without always taking 24K.
Diffstat (limited to 'src/ViewStyle.cxx')
| -rw-r--r-- | src/ViewStyle.cxx | 79 | 
1 files changed, 56 insertions, 23 deletions
| diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx index 8f51fd5b9..f73c15ed1 100644 --- a/src/ViewStyle.cxx +++ b/src/ViewStyle.cxx @@ -29,15 +29,15 @@ MarginStyle::MarginStyle() :  // A list of the fontnames - avoids wasting space in each style  FontNames::FontNames() { -    size = 8; -    names = new char *[size]; +	size = 8; +	names = new char *[size];  	max = 0;  }  FontNames::~FontNames() {  	Clear(); -    delete []names; -    names = 0; +	delete []names; +	names = 0;  }  void FontNames::Clear() { @@ -55,17 +55,17 @@ const char *FontNames::Save(const char *name) {  			return names[i];  		}  	} -    if (max >= size) { -        // Grow array -        int sizeNew = size * 2; -        char **namesNew = new char *[sizeNew]; -    	for (int j=0;j<max;j++) { -            namesNew[j] = names[j]; -        } -        delete []names; -        names = namesNew; -        size = sizeNew; -    } +	if (max >= size) { +		// Grow array +		int sizeNew = size * 2; +		char **namesNew = new char *[sizeNew]; +		for (int j=0;j<max;j++) { +			namesNew[j] = names[j]; +		} +		delete []names; +		names = namesNew; +		size = sizeNew; +	}  	names[max] = new char[strlen(name) + 1];  	strcpy(names[max], name);  	max++; @@ -77,8 +77,8 @@ ViewStyle::ViewStyle() {  }  ViewStyle::ViewStyle(const ViewStyle &source) { -	Init(); -	for (unsigned int sty=0;sty<(sizeof(styles)/sizeof(styles[0]));sty++) { +	Init(source.stylesSize); +	for (unsigned int sty=0;sty<source.stylesSize;sty++) {  		styles[sty] = source.styles[sty];  		// Can't just copy fontname as its lifetime is relative to its owning ViewStyle  		styles[sty].fontName = fontNames.Save(source.styles[sty].fontName); @@ -142,9 +142,14 @@ ViewStyle::ViewStyle(const ViewStyle &source) {  }  ViewStyle::~ViewStyle() { +	delete []styles; +	styles = NULL;  } -void ViewStyle::Init() { +void ViewStyle::Init(size_t stylesSize_) { +	stylesSize = 0; +	styles = NULL; +	AllocStyles(stylesSize_);  	fontNames.Clear();  	ResetDefaultStyle(); @@ -232,7 +237,7 @@ void ViewStyle::Init() {  void ViewStyle::RefreshColourPalette(Palette &pal, bool want) {  	unsigned int i; -	for (i=0;i<(sizeof(styles)/sizeof(styles[0]));i++) { +	for (i=0;i<stylesSize;i++) {  		pal.WantFind(styles[i].fore, want);  		pal.WantFind(styles[i].back, want);  	} @@ -267,7 +272,7 @@ void ViewStyle::Refresh(Surface &surface) {  	maxAscent = styles[STYLE_DEFAULT].ascent;  	maxDescent = styles[STYLE_DEFAULT].descent;  	someStylesProtected = false; -	for (unsigned int i=0;i<(sizeof(styles)/sizeof(styles[0]));i++) { +	for (unsigned int i=0; i<stylesSize; i++) {  		if (i != STYLE_DEFAULT) {  			styles[i].Realise(surface, zoomLevel, &styles[STYLE_DEFAULT], extraFontFlag);  			if (maxAscent < styles[i].ascent) @@ -295,17 +300,45 @@ void ViewStyle::Refresh(Surface &surface) {  	}  } +void ViewStyle::AllocStyles(size_t sizeNew) { +	Style *stylesNew = new Style[sizeNew]; +	size_t i=0; +	for (; i<stylesSize; i++) { +		stylesNew[i] = styles[i]; +		stylesNew[i].fontName = styles[i].fontName; +	} +	if (stylesSize > STYLE_DEFAULT) { +		for (; i<sizeNew; i++) { +			if (i != STYLE_DEFAULT) { +				stylesNew[i].ClearTo(styles[STYLE_DEFAULT]); +			} +		} +	} +	delete []styles; +	styles = stylesNew; +	stylesSize = sizeNew; +} + +void ViewStyle::EnsureStyle(size_t index) { +	if (index >= stylesSize) { +		size_t sizeNew = stylesSize * 2; +		while (sizeNew < index) +			sizeNew *= 2; +		AllocStyles(sizeNew); +	} +} +  void ViewStyle::ResetDefaultStyle() {  	styles[STYLE_DEFAULT].Clear(ColourDesired(0,0,0),  		ColourDesired(0xff,0xff,0xff), -	        Platform::DefaultFontSize(), fontNames.Save(Platform::DefaultFont()), +		Platform::DefaultFontSize(), fontNames.Save(Platform::DefaultFont()),  		SC_CHARSET_DEFAULT,  		false, false, false, false, Style::caseMixed, true, true, false);  }  void ViewStyle::ClearStyles() {  	// Reset all styles to be like the default style -	for (unsigned int i=0;i<(sizeof(styles)/sizeof(styles[0]));i++) { +	for (unsigned int i=0; i<stylesSize; i++) {  		if (i != STYLE_DEFAULT) {  			styles[i].ClearTo(styles[STYLE_DEFAULT]);  		} @@ -322,5 +355,5 @@ void ViewStyle::SetStyleFontName(int styleIndex, const char *name) {  }  bool ViewStyle::ProtectionActive() const { -    return someStylesProtected; +	return someStylesProtected;  } | 
