[Scummvm-git-logs] scummvm master -> 19b7b2aa20aa31f3c81245d5fc87f47744399c34

sev- noreply at scummvm.org
Sat Apr 29 11:44:44 UTC 2023


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

Summary:
19b7b2aa20 GUI: Don't enforce full redraw upon closing tool tip


Commit: 19b7b2aa20aa31f3c81245d5fc87f47744399c34
    https://github.com/scummvm/scummvm/commit/19b7b2aa20aa31f3c81245d5fc87f47744399c34
Author: Miro Kropacek (miro.kropacek at gmail.com)
Date: 2023-04-29T13:44:40+02:00

Commit Message:
GUI: Don't enforce full redraw upon closing tool tip

Changed paths:
    gui/Tooltip.cpp
    gui/Tooltip.h
    gui/gui-manager.cpp
    gui/gui-manager.h


diff --git a/gui/Tooltip.cpp b/gui/Tooltip.cpp
index 23e5b5f7437..d96f04ed4c8 100644
--- a/gui/Tooltip.cpp
+++ b/gui/Tooltip.cpp
@@ -97,4 +97,19 @@ void Tooltip::drawDialog(DrawLayer layerToDraw) {
 	}
 }
 
+void Tooltip::close() {
+	// copy&paste from Dialog::close()
+	_visible = false;
+
+	if (_mouseWidget) {
+		_mouseWidget->handleMouseLeft(0);
+		_mouseWidget = nullptr;
+	}
+	releaseFocus();
+	g_gui.closeTopDialog(false);
+
+	// instead of kRedrawCloseDialog schedule kRedrawTopDialog of the parent
+	g_gui.scheduleTopDialogRedraw();
+}
+
 }
diff --git a/gui/Tooltip.h b/gui/Tooltip.h
index 2f188764ff3..3d79ef5e504 100644
--- a/gui/Tooltip.h
+++ b/gui/Tooltip.h
@@ -43,6 +43,8 @@ public:
 
 	void receivedFocus(int x = -1, int y = -1) override {}
 protected:
+	void close() override;
+
 	void handleMouseDown(int x, int y, int button, int clickCount) override {
 		close();
 		_parent->handleMouseDown(x + (getAbsX() - _parent->getAbsX()), y + (getAbsY() - _parent->getAbsY()), button, clickCount);
diff --git a/gui/gui-manager.cpp b/gui/gui-manager.cpp
index f9477b2c4ca..2c1b571ce1a 100644
--- a/gui/gui-manager.cpp
+++ b/gui/gui-manager.cpp
@@ -614,7 +614,7 @@ void GuiManager::openDialog(Dialog *dialog) {
 		dialog->reflowLayout();
 }
 
-void GuiManager::closeTopDialog() {
+void GuiManager::closeTopDialog(bool redraw) {
 	// Don't do anything if no dialog is open
 	if (_dialogStack.empty())
 		return;
@@ -627,10 +627,12 @@ void GuiManager::closeTopDialog() {
 		giveFocusToDialog(dialog);
 	}
 
-	if (_redrawStatus != kRedrawFull)
-		_redrawStatus = kRedrawCloseDialog;
+	if (redraw) {
+		if (_redrawStatus != kRedrawFull)
+			_redrawStatus = kRedrawCloseDialog;
 
-	redraw();
+		this->redraw();
+	}
 }
 
 void GuiManager::setupCursor() {
diff --git a/gui/gui-manager.h b/gui/gui-manager.h
index 8dfb46210ba..7881c6d17a0 100644
--- a/gui/gui-manager.h
+++ b/gui/gui-manager.h
@@ -71,6 +71,7 @@ typedef Common::FixedStack<Dialog *> DialogStack;
  */
 class GuiManager : public Common::Singleton<GuiManager>, public CommandSender {
 	friend class Dialog;
+	friend class Tooltip;
 	friend class Common::Singleton<SingletonBaseType>;
 	GuiManager();
 	~GuiManager() override;
@@ -211,7 +212,7 @@ protected:
 	void restoreState();
 
 	void openDialog(Dialog *dialog);
-	void closeTopDialog();
+	void closeTopDialog(bool redraw = true);
 
 	void redraw();
 




More information about the Scummvm-git-logs mailing list