Переглянути джерело

Two potential glitches in font oversampling

Bernhard Liebl 7 роки тому
батько
коміт
a64dc5af74
1 змінених файлів з 14 додано та 1 видалено
  1. 14 1
      scene/resources/dynamic_font.cpp

+ 14 - 1
scene/resources/dynamic_font.cpp

@@ -631,6 +631,7 @@ bool DynamicFontAtSize::update_oversampling() {
 	textures.clear();
 	char_map.clear();
 	oversampling = font_oversampling;
+	valid = false;
 	_load();
 
 	return true;
@@ -973,14 +974,26 @@ void DynamicFont::finish_dynamic_fonts() {
 
 void DynamicFont::update_oversampling() {
 
+	Vector<Ref<DynamicFont> > changed;
+
+	if (dynamic_font_mutex)
+		dynamic_font_mutex->lock();
+
 	SelfList<DynamicFont> *E = dynamic_fonts.first();
 	while (E) {
 
 		if (E->self()->data_at_size.is_valid() && E->self()->data_at_size->update_oversampling()) {
-			E->self()->emit_changed();
+			changed.push_back(E->self());
 		}
 		E = E->next();
 	}
+
+	if (dynamic_font_mutex)
+		dynamic_font_mutex->unlock();
+
+	for (int i = 0; i < changed.size(); i++) {
+		changed[i]->emit_changed();
+	}
 }
 
 /////////////////////////