[Scummvm-git-logs] scummvm master -> cd4a24a53f6e6cff38ef63a183365dd76b03ed75

OMGPizzaGuy noreply at scummvm.org
Sat Jan 27 14:23:59 UTC 2024


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

Summary:
33d24390ef ULTIMA8: Handle double click on most gump buttons.
65150e3668 ULTIMA8: Close menu gump on double click.
cd4a24a53f UTLIMA8: Allow double click on entries in save gump


Commit: 33d24390ef2b58bc8f221c1fd133533eb0275bf4
    https://github.com/scummvm/scummvm/commit/33d24390ef2b58bc8f221c1fd133533eb0275bf4
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-01-27T08:23:24-06:00

Commit Message:
ULTIMA8: Handle double click on most gump buttons.
It is preferrable to handle both click and double events rather than only the up event to avoid unintended clicks after performing intended action.

Changed paths:
    engines/ultima/ultima8/gumps/gump.h
    engines/ultima/ultima8/gumps/menu_gump.cpp
    engines/ultima/ultima8/gumps/message_box_gump.cpp
    engines/ultima/ultima8/gumps/paged_gump.cpp
    engines/ultima/ultima8/gumps/paperdoll_gump.cpp
    engines/ultima/ultima8/gumps/quit_gump.cpp
    engines/ultima/ultima8/gumps/slider_gump.cpp


diff --git a/engines/ultima/ultima8/gumps/gump.h b/engines/ultima/ultima8/gumps/gump.h
index 0a31d329679..ce05c405c6f 100644
--- a/engines/ultima/ultima8/gumps/gump.h
+++ b/engines/ultima/ultima8/gumps/gump.h
@@ -309,6 +309,9 @@ public:
 	//
 	// A mouse click on a gump will make it focus, IF it wants it.
 	//
+	// It is often preferrable to handle both click and double events
+	// rather than only the up event to avoid unintended clicks after
+	// performing intended action.
 
 	// Return Gump that handled event
 	virtual Gump       *onMouseDown(int button, int32 mx, int32 my);
diff --git a/engines/ultima/ultima8/gumps/menu_gump.cpp b/engines/ultima/ultima8/gumps/menu_gump.cpp
index 4125734fab7..76d3f5a475d 100644
--- a/engines/ultima/ultima8/gumps/menu_gump.cpp
+++ b/engines/ultima/ultima8/gumps/menu_gump.cpp
@@ -209,8 +209,10 @@ void MenuGump::ChildNotify(Gump *child, uint32 message) {
 	}
 
 	ButtonWidget *buttonWidget = dynamic_cast<ButtonWidget *>(child);
-	if (buttonWidget && message == ButtonWidget::BUTTON_CLICK) {
-		selectEntry(child->GetIndex());
+	if (buttonWidget) {
+		if (message == ButtonWidget::BUTTON_CLICK || message == ButtonWidget::BUTTON_DOUBLE) {
+			selectEntry(buttonWidget->GetIndex());
+		}
 	}
 }
 
diff --git a/engines/ultima/ultima8/gumps/message_box_gump.cpp b/engines/ultima/ultima8/gumps/message_box_gump.cpp
index e00ba5e2e72..9144113546e 100644
--- a/engines/ultima/ultima8/gumps/message_box_gump.cpp
+++ b/engines/ultima/ultima8/gumps/message_box_gump.cpp
@@ -140,7 +140,7 @@ void MessageBoxGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool /*sc
 
 void MessageBoxGump::ChildNotify(Gump *child, uint32 msg) {
 	ButtonWidget *buttonWidget = dynamic_cast<ButtonWidget *>(child);
-	if (buttonWidget && msg == ButtonWidget::BUTTON_CLICK) {
+	if (buttonWidget && (msg == ButtonWidget::BUTTON_CLICK || msg == ButtonWidget::BUTTON_DOUBLE)) {
 		_processResult = child->GetIndex();
 		Close();
 	}
diff --git a/engines/ultima/ultima8/gumps/paged_gump.cpp b/engines/ultima/ultima8/gumps/paged_gump.cpp
index 06f3594982a..2c42cdb69ed 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paged_gump.cpp
@@ -106,7 +106,7 @@ void PagedGump::ChildNotify(Gump *child, uint32 message) {
 
 	ObjId cid = child->getObjId();
 
-	if (message == ButtonWidget::BUTTON_CLICK) {
+	if (message == ButtonWidget::BUTTON_UP) {
 		if (cid == _nextButton->getObjId()) {
 			if (_current + 1 != _gumps.end()) {
 				(*_current)->HideGump();
diff --git a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
index df771c069f4..3861a3c531a 100644
--- a/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paperdoll_gump.cpp
@@ -388,7 +388,7 @@ void PaperdollGump::DropItem(Item *item, int mx, int my) {
 
 void PaperdollGump::ChildNotify(Gump *child, uint32 message) {
 	if (child->getObjId() == _statButtonId &&
-	        message == ButtonWidget::BUTTON_CLICK) {
+		(message == ButtonWidget::BUTTON_CLICK || message == ButtonWidget::BUTTON_DOUBLE)) {
 		// check if there already is an open MiniStatsGump
 		Gump *desktop = Ultima8Engine::get_instance()->getDesktopGump();
 		Gump *statsgump = desktop->FindGump<MiniStatsGump>();
diff --git a/engines/ultima/ultima8/gumps/quit_gump.cpp b/engines/ultima/ultima8/gumps/quit_gump.cpp
index 12c19aade6a..4923dbcd131 100644
--- a/engines/ultima/ultima8/gumps/quit_gump.cpp
+++ b/engines/ultima/ultima8/gumps/quit_gump.cpp
@@ -165,7 +165,7 @@ bool QuitGump::OnKeyDown(int key, int mod) {
 
 void QuitGump::ChildNotify(Gump *child, uint32 message) {
 	ObjId cid = child->getObjId();
-	if (message == ButtonWidget::BUTTON_CLICK) {
+	if (message == ButtonWidget::BUTTON_CLICK || message == ButtonWidget::BUTTON_DOUBLE) {
 		if (cid == _yesWidget) {
 			Ultima8Engine::get_instance()->quitGame();
 		} else if (cid == _noWidget) {
diff --git a/engines/ultima/ultima8/gumps/slider_gump.cpp b/engines/ultima/ultima8/gumps/slider_gump.cpp
index fbda0050611..b5964502cab 100644
--- a/engines/ultima/ultima8/gumps/slider_gump.cpp
+++ b/engines/ultima/ultima8/gumps/slider_gump.cpp
@@ -145,7 +145,7 @@ void SliderGump::InitGump(Gump *newparent, bool take_focus) {
 void SliderGump::ChildNotify(Gump *child, uint32 message) {
 	switch (child->GetIndex()) {
 	case OK_INDEX:
-		if (message == ButtonWidget::BUTTON_CLICK)
+		if (message == ButtonWidget::BUTTON_CLICK || message == ButtonWidget::BUTTON_DOUBLE)
 			Close();
 		break;
 	case LEFT_INDEX:


Commit: 65150e36687a96ecf203edd287985b2a41c18326
    https://github.com/scummvm/scummvm/commit/65150e36687a96ecf203edd287985b2a41c18326
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-01-27T08:23:25-06:00

Commit Message:
ULTIMA8: Close menu gump on double click.
This differs from original game, but is more consistent with other gumps and provides another close option when using a controller.

Changed paths:
    engines/ultima/ultima8/gumps/menu_gump.cpp
    engines/ultima/ultima8/gumps/menu_gump.h
    engines/ultima/ultima8/gumps/paged_gump.cpp
    engines/ultima/ultima8/gumps/paged_gump.h


diff --git a/engines/ultima/ultima8/gumps/menu_gump.cpp b/engines/ultima/ultima8/gumps/menu_gump.cpp
index 76d3f5a475d..68c52785681 100644
--- a/engines/ultima/ultima8/gumps/menu_gump.cpp
+++ b/engines/ultima/ultima8/gumps/menu_gump.cpp
@@ -178,6 +178,13 @@ void MenuGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled) {
 	Gump::PaintThis(surf, lerp_factor, scaled);
 }
 
+void MenuGump::onMouseDouble(int button, int32 mx, int32 my) {
+	// FIXME: this check should probably be in Game or GUIApp
+	MainActor *av = getMainActor();
+	if (av && !av->hasActorFlags(Actor::ACT_DEAD))
+		Close(); // don't allow closing if dead/game over
+}
+
 bool MenuGump::OnKeyDown(int key, int mod) {
 	if (Gump::OnKeyDown(key, mod)) return true;
 
diff --git a/engines/ultima/ultima8/gumps/menu_gump.h b/engines/ultima/ultima8/gumps/menu_gump.h
index c12cc4ee45b..accdf4769ee 100644
--- a/engines/ultima/ultima8/gumps/menu_gump.h
+++ b/engines/ultima/ultima8/gumps/menu_gump.h
@@ -47,6 +47,7 @@ public:
 	// Paint the Gump
 	void PaintThis(RenderSurface *, int32 lerp_factor, bool scaled) override;
 
+	void onMouseDouble(int button, int32 mx, int32 my) override;
 	bool OnKeyDown(int key, int mod) override;
 	bool OnTextInput(int unicode) override;
 	void ChildNotify(Gump *child, uint32 message) override;
diff --git a/engines/ultima/ultima8/gumps/paged_gump.cpp b/engines/ultima/ultima8/gumps/paged_gump.cpp
index 2c42cdb69ed..cb8957b331b 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.cpp
+++ b/engines/ultima/ultima8/gumps/paged_gump.cpp
@@ -83,7 +83,9 @@ void PagedGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled) {
 	Gump::PaintThis(surf, lerp_factor, scaled);
 }
 
-
+void PagedGump::onMouseDouble(int button, int32 mx, int32 my) {
+	Close();
+}
 
 bool PagedGump::OnKeyDown(int key, int mod) {
 	if (_current != _gumps.end())
diff --git a/engines/ultima/ultima8/gumps/paged_gump.h b/engines/ultima/ultima8/gumps/paged_gump.h
index 66024c940b5..73cb2df1d6f 100644
--- a/engines/ultima/ultima8/gumps/paged_gump.h
+++ b/engines/ultima/ultima8/gumps/paged_gump.h
@@ -45,6 +45,7 @@ public:
 	// Paint the Gump
 	void PaintThis(RenderSurface *, int32 lerp_factor, bool scaled) override;
 
+	void onMouseDouble(int button, int32 mx, int32 my) override;
 	bool OnKeyDown(int key, int mod) override;
 	void ChildNotify(Gump *child, uint32 message) override;
 


Commit: cd4a24a53f6e6cff38ef63a183365dd76b03ed75
    https://github.com/scummvm/scummvm/commit/cd4a24a53f6e6cff38ef63a183365dd76b03ed75
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-01-27T08:23:26-06:00

Commit Message:
UTLIMA8: Allow double click on entries in save gump

Changed paths:
    engines/ultima/ultima8/gumps/u8_save_gump.cpp
    engines/ultima/ultima8/gumps/u8_save_gump.h


diff --git a/engines/ultima/ultima8/gumps/u8_save_gump.cpp b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
index 44a67190d95..9235a1d4fb8 100644
--- a/engines/ultima/ultima8/gumps/u8_save_gump.cpp
+++ b/engines/ultima/ultima8/gumps/u8_save_gump.cpp
@@ -218,6 +218,10 @@ void U8SaveGump::onMouseClick(int button, int32 mx, int32 my) {
 	}
 }
 
+void U8SaveGump::onMouseDouble(int button, int32 mx, int32 my) {
+	onMouseClick(button, mx, my);
+}
+
 void U8SaveGump::ChildNotify(Gump *child, uint32 message) {
 	EditWidget *widget = dynamic_cast<EditWidget *>(child);
 	if (widget && message == EditWidget::EDIT_ENTER) {
diff --git a/engines/ultima/ultima8/gumps/u8_save_gump.h b/engines/ultima/ultima8/gumps/u8_save_gump.h
index 16090162499..32d4ecbffb7 100644
--- a/engines/ultima/ultima8/gumps/u8_save_gump.h
+++ b/engines/ultima/ultima8/gumps/u8_save_gump.h
@@ -46,6 +46,7 @@ public:
 
 	Gump *onMouseDown(int button, int32 mx, int32 my) override;
 	void onMouseClick(int button, int32 mx, int32 my) override;
+	void onMouseDouble(int button, int32 mx, int32 my) override;
 	bool OnKeyDown(int key, int mod) override;
 	void ChildNotify(Gump *child, uint32 message) override;
 	void OnFocus(bool gain) override;




More information about the Scummvm-git-logs mailing list