Estoy tratando de jugar un juego en mi MacBook (The Settlers bajo DOSBox) que hace uso de algo que el manual llama "clic especial": mantener presionado el botón derecho del mouse y hacer clic en el botón izquierdo del mouse.
Parece ser imposible hacer eso usando el trackpad. Además de conectar un mouse externo, ¿hay alguna forma de simular dicha entrada?
Puede configurar el panel táctil para que haga clic con el botón derecho presionando su esquina inferior derecha (o izquierda). Si su clic normal se realiza tocando el panel táctil (sin hacer clic en él), entonces puede realizar este truco mágico: presione la esquina inferior para hacer clic con el botón derecho y toque el panel táctil para hacer un clic normal = dos clics simultáneamente.
Resultó bastante fácil parchear DOSBox para permitir el uso de una tecla del teclado como botón del ratón. Envié un parche para agregar esa funcionalidad al mapeador de claves.
Si desea probar esto, guarde lo siguiente en un archivo de texto llamado map-mouse-buttons.diff
:
Index: src/gui/sdl_mapper.cpp
===================================================================
--- src/gui/sdl_mapper.cpp (revision 3914)
+++ src/gui/sdl_mapper.cpp (working copy)
@@ -32,6 +32,7 @@
#include "dosbox.h"
#include "video.h"
#include "keyboard.h"
+#include "mouse.h"
#include "joystick.h"
#include "support.h"
#include "mapper.h"
@@ -1497,6 +1498,20 @@
KBD_KEYS key;
};
+class CMouseButtonEvent : public CTriggeredEvent {
+public:
+ CMouseButtonEvent(char const * const _entry,Bit8u _button) : CTriggeredEvent(_entry) {
+ button=_button;
+ }
+ void Active(bool yesno) {
+ if (yesno)
+ Mouse_ButtonPressed(button);
+ else
+ Mouse_ButtonReleased(button);
+ }
+ Bit8u button;
+};
+
class CJAxisEvent : public CContinuousEvent {
public:
CJAxisEvent(char const * const _entry,Bitu _stick,Bitu _axis,bool _positive,CJAxisEvent * _opposite_axis) : CContinuousEvent(_entry) {
@@ -1708,6 +1723,15 @@
return event;
}
+static CMouseButtonEvent * AddMouseButtonEvent(Bitu x,Bitu y,Bitu dx,Bitu dy,char const * const title,char const * const entry,Bit8u button) {
+ char buf[64];
+ strcpy(buf,"mouse_");
+ strcat(buf,entry);
+ CMouseButtonEvent * event=new CMouseButtonEvent(buf,button);
+ new CEventButton(x,y,dx,dy,title,event);
+ return event;
+}
+
static CJAxisEvent * AddJAxisButton(Bitu x,Bitu y,Bitu dx,Bitu dy,char const * const title,Bitu stick,Bitu axis,bool positive,CJAxisEvent * opposite_axis) {
char buf[64];
sprintf(buf,"jaxis_%d_%d%s",stick,axis,positive ? "+" : "-");
@@ -1866,6 +1890,15 @@
AddKeyButtonEvent(PX(XO+2),PY(YO+4),BW,BH,".","kp_period",KBD_kpperiod);
#undef XO
#undef YO
+#define XO 5
+#define YO 8
+ /* Mouse Buttons */
+ new CTextButton(PX(XO+0),PY(YO-1),3*BW,20,"Mouse");
+ AddMouseButtonEvent(PX(XO+0),PY(YO),BW,BH,"L","left",0);
+ AddMouseButtonEvent(PX(XO+1),PY(YO),BW,BH,"M","middle",2);
+ AddMouseButtonEvent(PX(XO+2),PY(YO),BW,BH,"R","right",1);
+#undef XO
+#undef YO
#define XO 10
#define YO 8
/* Joystick Buttons/Texts */
Luego, en la terminal, consulte el código DOSBox más reciente de Subversion:
svn co svn://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk dosbox-svn
Ingrese al directorio y aplique el parche con el patch
comando:
cd dosbox-svn
patch -p0 < ../map-mouse-buttons.diff
(Esto supone que el archivo de parche se guarda en el directorio principal de dosbox-svn
. Si está en otro lugar, ajuste el comando según sea necesario).
Luego, siga las instrucciones en el INSTALL
archivo para construir su nueva versión de DOSBox. Básicamente, son estos tres comandos:
./autogen.sh
./configure
make
Aunque es posible que deba instalar varias dependencias, lo que se puede hacer a través de Macports y herramientas similares.
patch -p0 < map-mouse-buttons.diff
y siga las instrucciones del INSTALL
archivo.
usuario24601
Legoscia