[Scummvm-git-logs] scummvm master -> 346989e575ad35761bd89270fd31fbd5c1f320fe

sev- noreply at scummvm.org
Thu Oct 10 10:30:19 UTC 2024


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
2f6273ac36 QDENGINE: Added more text debug output
346989e575 QDENGINE: Fix clearing texts by owner


Commit: 2f6273ac36ed2d799b49ee2885c509af96d595d6
    https://github.com/scummvm/scummvm/commit/2f6273ac36ed2d799b49ee2885c509af96d595d6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-10T12:30:00+02:00

Commit Message:
QDENGINE: Added more text debug output

Changed paths:
    engines/qdengine/qdcore/qd_interface_screen.cpp
    engines/qdengine/qdcore/qd_interface_text_window.cpp
    engines/qdengine/qdcore/qd_screen_text_set.cpp
    engines/qdengine/qdcore/qd_screen_text_set.h


diff --git a/engines/qdengine/qdcore/qd_interface_screen.cpp b/engines/qdengine/qdcore/qd_interface_screen.cpp
index c3c19255bcb..5ab7697e8a3 100644
--- a/engines/qdengine/qdcore/qd_interface_screen.cpp
+++ b/engines/qdengine/qdcore/qd_interface_screen.cpp
@@ -58,7 +58,7 @@ qdInterfaceScreen::~qdInterfaceScreen() {
 }
 
 bool qdInterfaceScreen::redraw(int dx, int dy) const {
-	debugC(5, kDebugText, "qdInterfaceScreen::redraw(): %d elements", _sorted_elements.size());
+	debugC(6, kDebugText, "qdInterfaceScreen::redraw(): %d elements", _sorted_elements.size());
 
 	for (sorted_element_list_t::const_reverse_iterator it = _sorted_elements.rbegin(); it != _sorted_elements.rend(); ++it)
 		(*it)->redraw();
@@ -200,6 +200,8 @@ bool qdInterfaceScreen::load_script(const xml::tag *p) {
 }
 
 bool qdInterfaceScreen::add_element(qdInterfaceElement *p) {
+	debugC(3, kDebugText, "qdInterfaceScreen::add_element('%s')", transCyrillic(p->name()));
+
 	if (_elements.add_object(p)) {
 		_sorted_elements.push_back(p);
 		sort_elements();
@@ -233,6 +235,9 @@ bool qdInterfaceScreen::mouse_handler(int x, int y, mouseDispatcher::mouseEvent
 	if (qdInterfaceDispatcher *dp = dynamic_cast<qdInterfaceDispatcher* >(owner())) {
 		for (auto &it : _sorted_elements) {
 			if (it->hit_test(x, y)) {
+				if (ev != mouseDispatcher::EV_MOUSE_MOVE)
+					debugC(2, kDebugInput, "qdInterfaceScreen::mouse_handler(): [%d, %d], ev: %d", x, y, ev);
+
 				dp->toggle_mouse_hover();
 				if (it->get_element_type() != qdInterfaceElement::EL_TEXT_WINDOW)
 					dp->disable_autohide();
@@ -330,6 +335,8 @@ bool qdInterfaceScreen::show_element(const char *element_name) {
 bool qdInterfaceScreen::show_element(qdInterfaceElement *p) {
 	p->show();
 
+	debugC(2, kDebugText, "qdInterfaceScreen::show_element('%s')", transCyrillic(p->name()));
+
 	sorted_element_list_t::iterator it = Common::find(_sorted_elements.begin(), _sorted_elements.end(), p);
 	if (it == _sorted_elements.end()) {
 		_sorted_elements.push_back(p);
diff --git a/engines/qdengine/qdcore/qd_interface_text_window.cpp b/engines/qdengine/qdcore/qd_interface_text_window.cpp
index 5c9f9d2f011..33d5950c482 100644
--- a/engines/qdengine/qdcore/qd_interface_text_window.cpp
+++ b/engines/qdengine/qdcore/qd_interface_text_window.cpp
@@ -19,6 +19,8 @@
  *
  */
 
+#include "common/debug.h"
+
 #include "qdengine/qd_fwd.h"
 #include "qdengine/parser/qdscr_parser.h"
 #include "qdengine/parser/xml_tag_buffer.h"
@@ -141,6 +143,8 @@ bool qdInterfaceTextWindow::mouse_handler(int x, int y, mouseDispatcher::mouseEv
 				if (qdGameDispatcher * dp = qdGameDispatcher::get_dispatcher()) {
 					dp->set_flag(qdGameDispatcher::DIALOG_CLICK_FLAG);
 					dp->set_mouse_click_state(p->owner());
+
+					debugC(2, kDebugText, "qdInterfaceTextWindow::mouse_handler(): click [%d, %d], ev: %d", x, y, ev);
 				}
 				return true;
 			}
@@ -371,7 +375,9 @@ bool qdInterfaceTextWindow::redraw() const {
 	qdInterfaceElement::redraw();
 
 	if (_windowType == WINDOW_DIALOGS) {
+		debugC(3, kDebugText, "qdInterfaceTextWindow::redraw(): DIALOGS");
 		if (_text_set) {
+			debugC(3, kDebugText, "qdInterfaceTextWindow::redraw(): text_set");
 			int l_clip, t_clip, r_clip, b_clip;
 			grDispatcher::instance()->getClip(l_clip, t_clip, r_clip, b_clip);
 
@@ -396,6 +402,7 @@ bool qdInterfaceTextWindow::redraw() const {
 				grDispatcher::instance()->rectangle(ar.x - _text_size.x / 2, ar.y - _text_size.y / 2, _text_size.x, _text_size.y, 0xFFFFFF, 0, GR_OUTLINED, 3);
 		}
 	} else if (_windowType == WINDOW_EDIT || _windowType == WINDOW_TEXT) {
+			debugC(3, kDebugText, "qdInterfaceTextWindow::redraw(): text_edit (%d)", _windowType);
 		if (_has_background_color) {
 			Vect2i ar = r();
 			if (!_background_alpha)
@@ -429,6 +436,9 @@ bool qdInterfaceTextWindow::need_redraw() const {
 bool qdInterfaceTextWindow::quant(float dt) {
 	qdInterfaceElement::quant(dt);
 
+	debugC(1, kDebugText, "*********** qdInterfaceTextWindow::quant()");
+	debugC(1, kDebugQuant, "*********** qdInterfaceTextWindow::quant()");
+
 	if (_isEditing) {
 		_caretTimer -= dt;
 		if (_caretTimer < 0.f) {
@@ -438,10 +448,14 @@ bool qdInterfaceTextWindow::quant(float dt) {
 	}
 
 	if (_windowType == WINDOW_DIALOGS) {
+		debugC(2, kDebugText, "** qdInterfaceTextWindow::quant(): DIALOGS");
+
 		if (is_visible() && _text_set && _text_set->was_changed())
 			update_text_position();
 
 		if (_text_set) {
+			debugC(2, kDebugText,"** qdInterfaceTextWindow::quant(): text_set, id: %d", _text_set->ID());
+
 			if (fabs(_scrolling_position) > FLT_EPS) {
 				float delta = _scrolling_speed * dt;
 				if (fabs(_scrolling_position) > delta)
@@ -455,6 +469,8 @@ bool qdInterfaceTextWindow::quant(float dt) {
 			}
 
 			if (_text_set->is_empty()) {
+				debugC(2, kDebugText,"** qdInterfaceTextWindow::quant(): text_set->empty, vis: %d", is_visible());
+
 				if (is_visible()) {
 					hide();
 					if (qdInterfaceScreen * sp = dynamic_cast<qdInterfaceScreen * >(owner()))
@@ -463,6 +479,8 @@ bool qdInterfaceTextWindow::quant(float dt) {
 					qdGameDispatcher::get_dispatcher()->toggle_full_redraw();
 				}
 			} else {
+				debugC(2, kDebugText, "** qdInterfaceTextWindow::quant(): text_set->empty NOT, vis: %d", is_visible());
+
 				if (!is_visible()) {
 					show();
 					if (qdInterfaceScreen * sp = dynamic_cast<qdInterfaceScreen * >(owner()))
diff --git a/engines/qdengine/qdcore/qd_screen_text_set.cpp b/engines/qdengine/qdcore/qd_screen_text_set.cpp
index 3c7a667a568..039146cb533 100644
--- a/engines/qdengine/qdcore/qd_screen_text_set.cpp
+++ b/engines/qdengine/qdcore/qd_screen_text_set.cpp
@@ -144,7 +144,7 @@ qdScreenText *qdScreenTextSet::get_text(int x, int y) {
 void qdScreenTextSet::clear_texts(qdNamedObject *owner) {
 	bool ret = false;
 
-	debugC(4, kDebugText, "qdScreenTextSet::clear_texts('%s')", owner->toString().c_str());
+	debugC(5, kDebugText, "qdScreenTextSet::clear_texts('%s') for ID: %d, size was: %d", owner->toString().c_str(), _ID, _texts.size());
 
 	// Equivalent of
 	// texts_container_t::iterator it = std::remove_if(_texts.begin(), _texts.end(), std::bind2nd(std::mem_fun_ref(&qdScreenText::is_owned_by), owner));
@@ -176,6 +176,8 @@ void qdScreenTextSet::clear_texts(qdNamedObject *owner) {
 		arrange_texts();
 		toggle_changed(true);
 	}
+
+	debugC(5, kDebugText, "qdScreenTextSet::clear_texts(): size: %d", _texts.size());
 }
 
 bool qdScreenTextSet::pre_redraw() const {
@@ -243,7 +245,7 @@ bool qdScreenTextSet::save_script(Common::WriteStream &fh, int indent) const {
 qdScreenText *qdScreenTextSet::add_text(const qdScreenText &txt) {
 	int sy = _size.y;
 
-	debugC(2, kDebugText, "qdScreenTextSet::add_text('%s') for '%s'", transCyrillic(txt.data()),
+	debugC(2, kDebugText, "qdScreenTextSet::add_text('%s') for ID: %d, '%s'", transCyrillic(txt.data()), _ID,
 			txt.owner() ? txt.owner()->toString().c_str() : "<none>");
 
 	_texts.push_back(txt);
@@ -256,6 +258,8 @@ qdScreenText *qdScreenTextSet::add_text(const qdScreenText &txt) {
 
 	_new_texts_height += _size.y - sy;
 
+	debugC(3, kDebugText, "qdScreenTextSet::add_text(): size: %d", _texts.size());
+
 	return &_texts.back();
 }
 
diff --git a/engines/qdengine/qdcore/qd_screen_text_set.h b/engines/qdengine/qdcore/qd_screen_text_set.h
index 387474a2ca9..3e93d2ddead 100644
--- a/engines/qdengine/qdcore/qd_screen_text_set.h
+++ b/engines/qdengine/qdcore/qd_screen_text_set.h
@@ -92,6 +92,10 @@ public:
 		return _texts.empty();
 	}
 
+	int size() const {
+		return _texts.size();
+	}
+
 	void set_max_text_width(int width) {
 		_max_text_width = width;
 		format_texts();


Commit: 346989e575ad35761bd89270fd31fbd5c1f320fe
    https://github.com/scummvm/scummvm/commit/346989e575ad35761bd89270fd31fbd5c1f320fe
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-10-10T12:30:00+02:00

Commit Message:
QDENGINE: Fix clearing texts by owner

For whatever reason, the previous implementation was too greedy
and it was resetting the text.

Fixes missing dialog subtitles in many places in shveik

Changed paths:
    engines/qdengine/qdcore/qd_screen_text_set.cpp
    engines/qdengine/qdcore/qd_screen_text_set.h


diff --git a/engines/qdengine/qdcore/qd_screen_text_set.cpp b/engines/qdengine/qdcore/qd_screen_text_set.cpp
index 039146cb533..7c3819cd155 100644
--- a/engines/qdengine/qdcore/qd_screen_text_set.cpp
+++ b/engines/qdengine/qdcore/qd_screen_text_set.cpp
@@ -149,26 +149,14 @@ void qdScreenTextSet::clear_texts(qdNamedObject *owner) {
 	// Equivalent of
 	// texts_container_t::iterator it = std::remove_if(_texts.begin(), _texts.end(), std::bind2nd(std::mem_fun_ref(&qdScreenText::is_owned_by), owner));
 
-	texts_container_t::iterator it = _texts.begin();
+	for (int i = 0; i < _texts.size();) {
+		if (_texts[i].is_owned_by(owner)) {
+			_texts.remove_at(i);
 
-	while (it != _texts.end()) {
-		if (it->is_owned_by(owner))
-			break;
-
-		it++;
-	}
-
-	if (it != _texts.end()) {
-		for (auto i = it; ++i != _texts.end();)
-			if (i->is_owned_by(owner)) {
-				Common::move(i);
-				it++;
-			}
-	}
-
-	if (it != _texts.end()) {
-		_texts.erase(it, _texts.end());
-		ret = true;
+			ret = true;
+		} else {
+			i++;
+		}
 	}
 
 	if (ret) {
diff --git a/engines/qdengine/qdcore/qd_screen_text_set.h b/engines/qdengine/qdcore/qd_screen_text_set.h
index 3e93d2ddead..c545673a7af 100644
--- a/engines/qdengine/qdcore/qd_screen_text_set.h
+++ b/engines/qdengine/qdcore/qd_screen_text_set.h
@@ -134,7 +134,7 @@ private:
 	//! Расстояние между соседними текстами в пикселах.
 	int _space;
 
-	typedef Std::vector<qdScreenText> texts_container_t;
+	typedef Common::Array<qdScreenText> texts_container_t;
 	//! Тексты.
 	texts_container_t _texts;
 




More information about the Scummvm-git-logs mailing list