Hi,

ping, anyone gaming?
patches reattached for convenience.

cheers,
Sebastian

Am Montag, März 09, 2020 23:42 CET, schrieb "Sebastian Reitenbach" 
<sebas...@l00-bugdead-prods.de>:

> Hi,
>
> attached patch adds gamecontroller support for multimedia/sfml.
>
> My first attempt was to just enable the FreeBSD driver, with that, it detected
> my gamepads, however, no buttons, axis, hat, etc. worked.
>
> Then I looked at how the SDLs do it, adapted their logic, and finally, all 
> the buttons,
> axis, hats now seem to do what they're supposed to.
>
> Tested with witchblast (buttons and hat), and extremetuxracer (analog 
> joystick).
> Both games tested with Logitec F310 game controllers. Other ports depending on
> sfml don't seem to make use of its joystick/gamecontroller support.
>
> However, witchblast needs a patch (find it attached), otherwise in joystick 
> configuration
> menu, it would take a button release as a valid input. No idea how it's 
> supposed to work
> with other OSs joystick implementations from sfml without that patch.
>
> test reports, OKs, critics, anything welcome ;)
>
> cheers,
> Sebastian
? diff
? out
? sfml
? sfml-joystick-support.diff
Index: Makefile
===================================================================
RCS file: /cvs/ports/multimedia/sfml/Makefile,v
retrieving revision 1.10
diff -u -r1.10 Makefile
--- Makefile	12 Jul 2019 20:47:58 -0000	1.10
+++ Makefile	9 Mar 2020 22:09:10 -0000
@@ -6,7 +6,7 @@
 DISTNAME =		SFML-${V}-sources
 PKGNAME =		sfml-${V}
 EXTRACT_SUFX =		.zip
-REVISION =		1
+REVISION =		2
 
 SHARED_LIBS +=  sfml-audio                1.0 # 2.1
 SHARED_LIBS +=  sfml-graphics             1.0 # 2.1
@@ -24,7 +24,7 @@
 PERMIT_PACKAGE =	Yes
 
 WANTLIB += FLAC GL X11-xcb freetype jpeg m ogg openal vorbis vorbisenc
-WANTLIB += vorbisfile xcb xcb-image xcb-randr ${COMPILER_LIBCXX}
+WANTLIB += vorbisfile xcb xcb-image xcb-randr usbhid ${COMPILER_LIBCXX}
 
 MASTER_SITES =		https://www.sfml-dev.org/files/
 
@@ -51,6 +51,8 @@
 
 post-extract:
 	find ${WRKSRC} -type f -exec perl -pi -e 's/\015//g' {} \;
+	mkdir ${WRKSRC}/src/SFML/Window/OpenBSD
+	cp ${FILESDIR}/JoystickImpl.* ${WRKSRC}/src/SFML/Window/OpenBSD
 
 post-install:
 	find ${PREFIX}/include -name '*.orig' -exec rm {} \;
Index: files/JoystickImpl.cpp
===================================================================
RCS file: files/JoystickImpl.cpp
diff -N files/JoystickImpl.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/JoystickImpl.cpp	9 Mar 2020 22:09:10 -0000
@@ -0,0 +1,443 @@
+////////////////////////////////////////////////////////////
+//
+// SFML - Simple and Fast Multimedia Library
+// Copyright (C) 2007-2016 Laurent Gomila (laur...@sfml-dev.org)
+//               2013-2013 David Demelier (demelier.da...@gmail.com)
+//
+// This software is provided 'as-is', without any express or implied warranty.
+// In no event will the authors be held liable for any damages arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it freely,
+// subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented;
+//    you must not claim that you wrote the original software.
+//    If you use this software in a product, an acknowledgment
+//    in the product documentation would be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such,
+//    and must not be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source distribution.
+//
+////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+#include <SFML/Window/JoystickImpl.hpp>
+#include <SFML/System/Err.hpp>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <cstring>
+#include <map>
+#include <string>
+#include <utility>
+
+////////////////////////////////////////////////////////////
+/// \brief This file implements OpenBSD driver joystick
+///
+/// It has been tested on a Logitech F310 in gamepad and
+/// joystick mode.
+///
+////////////////////////////////////////////////////////////
+
+#define HUG_DPAD_UP         0x90
+#define HUG_DPAD_DOWN       0x91
+#define HUG_DPAD_RIGHT      0x92
+#define HUG_DPAD_LEFT       0x93
+
+#define HAT_CENTERED        0x00
+#define HAT_UP              0x01
+#define HAT_RIGHT           0x02
+#define HAT_DOWN            0x04
+#define HAT_LEFT            0x08
+#define HAT_RIGHTUP         (HAT_RIGHT|HAT_UP)
+#define HAT_RIGHTDOWN       (HAT_RIGHT|HAT_DOWN)
+#define HAT_LEFTUP          (HAT_LEFT|HAT_UP)
+#define HAT_LEFTDOWN        (HAT_LEFT|HAT_DOWN)
+
+/* calculate the value from the state of the dpad */
+int
+dpad_to_sfml(int32_t *dpad)
+{
+    if (dpad[2]) {
+        if (dpad[0])
+            return HAT_RIGHTUP;
+        else if (dpad[1])
+            return HAT_RIGHTDOWN;
+        else
+            return  HAT_RIGHT;
+    } else if (dpad[3]) {
+        if (dpad[0])
+            return HAT_LEFTUP;
+        else if (dpad[1])
+            return HAT_LEFTDOWN;
+        else
+            return HAT_LEFT;
+    } else if (dpad[0]) {
+        return HAT_UP;
+    } else if (dpad[1]) {
+        return HAT_DOWN;
+    }
+    return HAT_CENTERED;
+}
+
+
+namespace
+{
+    std::map<unsigned int, std::string> plugged;
+    std::map<int, std::pair<int, int> > hatValueMap;
+
+    bool isJoystick(const char *name)
+    {
+        int file = ::open(name, O_RDONLY | O_NONBLOCK);
+        int id;
+
+        if (file < 0)
+            return false;
+
+        report_desc_t desc = hid_get_report_desc(file);
+
+        if (!desc)
+        {
+            ::close(file);
+            return false;
+        }
+
+        ioctl(file, USB_GET_REPORT_ID, &id);
+        hid_data_t data = hid_start_parse(desc, 1 << hid_input, id);
+
+        if (!data)
+        {
+            hid_dispose_report_desc(desc);
+            ::close(file);
+            return false;
+        }
+
+        hid_item_t item;
+
+        // Assume it isn't
+        bool result = false;
+
+        while (hid_get_item(data, &item) > 0)
+        {
+            if ((item.kind == hid_collection) && (HID_PAGE(item.usage) == HUP_GENERIC_DESKTOP))
+            {
+		
+                if ((HID_USAGE(item.usage) == HUG_JOYSTICK) || (HID_USAGE(item.usage) == HUG_GAME_PAD))
+                {
+
+                    result = true;
+                }
+            }
+        }
+
+        hid_end_parse(data);
+        hid_dispose_report_desc(desc);
+        ::close(file);
+
+        return result;
+    }
+
+    void updatePluggedList()
+    {
+        /*
+         * Devices /dev/uhid<x> are shared between joystick and any other
+         * human interface device. We need to iterate over all found devices
+         * and check if they are joysticks. The index of JoystickImpl::open
+         * does not match the /dev/uhid<index> device!
+         */
+        DIR* directory = opendir("/dev");
+
+        if (directory)
+        {
+            int joystickCount = 0;
+            struct dirent* directoryEntry = readdir(directory);
+
+            while (directoryEntry && joystickCount < sf::Joystick::Count)
+            {
+                if (!std::strncmp(directoryEntry->d_name, "uhid", 4))
+                {
+                    std::string name("/dev/");
+                    name += directoryEntry->d_name;
+
+                    if (isJoystick(name.c_str()))
+                        plugged[joystickCount++] = name;
+                }
+
+                directoryEntry = readdir(directory);
+            }
+
+            closedir(directory);
+        }
+    }
+
+    int usageToAxis(int usage)
+    {
+        switch (usage)
+        {
+            case HUG_X:  return sf::Joystick::X;
+            case HUG_Y:  return sf::Joystick::Y;
+            case HUG_Z:  return sf::Joystick::Z;
+            case HUG_RZ: return sf::Joystick::R;
+            case HUG_RX: return sf::Joystick::U;
+            case HUG_RY: return sf::Joystick::V;
+            default:     return -1;
+        }
+    }
+
+    void hatValueToSfml(int value, sf::priv::JoystickState& state)
+    {
+	int val = 0;
+	switch (value) {
+	case HAT_CENTERED:
+	    val = 0;
+	    break;
+	case HAT_UP:
+	    val = 1;
+	    break;
+	case HAT_RIGHT:
+	    val = 3;
+	    break;
+	case HAT_DOWN:
+	    val = 5;
+	    break;
+	case HAT_LEFT:
+	    val = 7;
+	    break;
+	case HAT_RIGHTUP:
+	    val = 2;
+	    break;
+	case HAT_RIGHTDOWN:
+	    val = 4;
+	    break;
+	case HAT_LEFTUP:
+	    val = 8;
+	    break;
+	case HAT_LEFTDOWN:
+	    val = 6;
+	    break;
+
+	}
+        state.axes[sf::Joystick::PovX] = hatValueMap[val].first;
+        state.axes[sf::Joystick::PovY] = hatValueMap[val].second;
+    }
+}
+
+
+namespace sf
+{
+namespace priv
+{
+////////////////////////////////////////////////////////////
+void JoystickImpl::initialize()
+{
+    hid_init(NULL);
+
+    // Do an initial scan
+    updatePluggedList();
+
+    // Map of hat values
+    hatValueMap[0] = std::make_pair(   0,    0); // center
+
+    hatValueMap[1] = std::make_pair(   0, -100); // top
+    hatValueMap[3] = std::make_pair( 100,    0); // right
+    hatValueMap[5] = std::make_pair(   0,  100); // bottom
+    hatValueMap[7] = std::make_pair(-100,    0); // left
+
+    hatValueMap[2] = std::make_pair( 100, -100); // top-right
+    hatValueMap[4] = std::make_pair( 100,  100); // bottom-right
+    hatValueMap[6] = std::make_pair(-100,  100); // bottom-left
+    hatValueMap[8] = std::make_pair(-100, -100); // top-left
+}
+
+
+////////////////////////////////////////////////////////////
+void JoystickImpl::cleanup()
+{
+}
+
+
+////////////////////////////////////////////////////////////
+bool JoystickImpl::isConnected(unsigned int index)
+{
+    return plugged.find(index) != plugged.end();
+}
+
+
+////////////////////////////////////////////////////////////
+bool JoystickImpl::open(unsigned int index)
+{
+    if (isConnected(index))
+    {
+        // Open the joystick's file descriptor (read-only and non-blocking)
+        m_file = ::open(plugged[index].c_str(), O_RDONLY | O_NONBLOCK);
+        if (m_file >= 0)
+        {
+            // Reset the joystick state
+            m_state = JoystickState();
+
+            // Get the report descriptor
+            m_desc = hid_get_report_desc(m_file);
+            if (!m_desc)
+            {
+                ::close(m_file);
+                return false;
+            }
+
+            // And the id
+            ioctl(m_file, USB_GET_REPORT_ID, &m_id);
+
+            // Then allocate a buffer for data retrieval
+            m_length = hid_report_size(m_desc, hid_input, m_id);
+            m_buffer.resize(m_length);
+            char buff[100];
+	    snprintf(buff, sizeof(buff), "Game Controller (%i)", index);
+	    m_identification.name = std::string(buff);
+
+            m_state.connected = true;
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
+////////////////////////////////////////////////////////////
+void JoystickImpl::close()
+{
+    ::close(m_file);
+    hid_dispose_report_desc(m_desc);
+}
+
+
+////////////////////////////////////////////////////////////
+JoystickCaps JoystickImpl::getCapabilities() const
+{
+    JoystickCaps caps;
+    hid_item_t item;
+
+    hid_data_t data = hid_start_parse(m_desc, 1 << hid_input, m_id);
+    while (hid_get_item(data, &item) > 0)
+    {
+        if (item.kind == hid_input)
+        {
+	    switch (HID_PAGE(item.usage)) {
+	    case HUP_GENERIC_DESKTOP:
+		{
+		   int usage = HID_USAGE(item.usage);
+                   int axis = usageToAxis(usage);
+		
+                   if (usage == HUG_HAT_SWITCH || usage == HUG_DPAD_UP)
+                     {
+
+                         caps.axes[Joystick::PovX] = true;
+                         caps.axes[Joystick::PovY] = true;
+                     }
+                     else if (axis != -1)
+                     {
+                         caps.axes[axis] = true;
+	             }	
+		     break;
+		}
+	    case HUP_BUTTON:
+                caps.buttonCount++;
+                break;
+	    default:
+		break;
+	    }
+
+        }
+    }
+
+    hid_end_parse(data);
+
+    return caps;
+}
+
+
+////////////////////////////////////////////////////////////
+Joystick::Identification JoystickImpl::getIdentification() const
+{
+    return m_identification;
+}
+
+
+////////////////////////////////////////////////////////////
+JoystickState JoystickImpl::JoystickImpl::update()
+{
+
+    int32_t dpad[4] = {0, 0, 0, 0};
+    while (read(m_file, &m_buffer[0], m_length) == m_length)
+    {
+        hid_data_t data = hid_start_parse(m_desc, 1 << hid_input, m_id);
+
+        // No memory?
+        if (!data)
+            continue;
+
+        int buttonIndex = 0;
+        hid_item_t item;
+
+        while (hid_get_item(data, &item) > 0)
+        {
+            if (item.kind == hid_input)
+            {
+		int page = HID_PAGE(item.usage);
+		int bvalue = 0;
+		switch (page) {
+		case HUP_GENERIC_DESKTOP:
+		    {
+		    	int usage = HID_USAGE(item.usage);
+			int axis = usageToAxis(usage);
+			if (axis >= 0) {
+			    int value = hid_get_data(&m_buffer[0], &item);
+			    int minimum = item.logical_minimum;
+			    int maximum = item.logical_maximum;
+
+			    value = (value - minimum) * 200 / (maximum - minimum) - 100;
+			    m_state.axes[axis] = value;
+			} else if (usage == HUG_HAT_SWITCH) {
+			    hatValueToSfml(usage, m_state);
+			} else if (usage == HUG_DPAD_UP) {
+                            dpad[0] = (int32_t) hid_get_data(&m_buffer[0], &item);
+                            hatValueToSfml(dpad_to_sfml(dpad), m_state);
+                        }
+                        else if (usage == HUG_DPAD_DOWN) {
+                            dpad[1] = (int32_t) hid_get_data(&m_buffer[0], &item);
+                            hatValueToSfml(dpad_to_sfml(dpad), m_state);
+                        }
+                        else if (usage == HUG_DPAD_RIGHT) {
+                            dpad[2] = (int32_t) hid_get_data(&m_buffer[0], &item);
+                            hatValueToSfml(dpad_to_sfml(dpad), m_state);
+                        }
+                        else if (usage == HUG_DPAD_LEFT) {
+                            dpad[3] = (int32_t) hid_get_data(&m_buffer[0], &item);
+                            hatValueToSfml(dpad_to_sfml(dpad), m_state);
+			}
+			break;
+		    }
+		case HUP_BUTTON:
+	            bvalue = hid_get_data(&m_buffer[0], &item);	
+		    m_state.buttons[buttonIndex] = bvalue;
+		    buttonIndex++;
+		    break;
+		default:
+		    continue;
+		}
+	    }
+	}
+
+        hid_end_parse(data);
+    }
+    return m_state;
+}
+
+} // namespace priv
+
+} // namespace sf
Index: files/JoystickImpl.hpp
===================================================================
RCS file: files/JoystickImpl.hpp
diff -N files/JoystickImpl.hpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/JoystickImpl.hpp	9 Mar 2020 22:09:10 -0000
@@ -0,0 +1,131 @@
+////////////////////////////////////////////////////////////
+//
+// SFML - Simple and Fast Multimedia Library
+// Copyright (C) 2007-2016 Laurent Gomila (laur...@sfml-dev.org)
+//
+// This software is provided 'as-is', without any express or implied warranty.
+// In no event will the authors be held liable for any damages arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it freely,
+// subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented;
+//    you must not claim that you wrote the original software.
+//    If you use this software in a product, an acknowledgment
+//    in the product documentation would be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such,
+//    and must not be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source distribution.
+//
+////////////////////////////////////////////////////////////
+
+#ifndef SFML_JOYSTICKIMPLOPENBSD_HPP
+#define SFML_JOYSTICKIMPLOPENBSD_HPP
+
+////////////////////////////////////////////////////////////
+// Headers
+////////////////////////////////////////////////////////////
+extern "C" {
+#include <dev/usb/usb.h>
+#include <dev/usb/usbhid.h>
+#include <usbhid.h>
+}
+#include <vector>
+
+namespace sf
+{
+namespace priv
+{
+////////////////////////////////////////////////////////////
+/// \brief OpenBSD implementation of joysticks
+///
+////////////////////////////////////////////////////////////
+class JoystickImpl
+{
+public:
+
+    ////////////////////////////////////////////////////////////
+    /// \brief Perform the global initialization of the joystick module
+    ///
+    ////////////////////////////////////////////////////////////
+    static void initialize();
+
+    ////////////////////////////////////////////////////////////
+    /// \brief Perform the global cleanup of the joystick module
+    ///
+    ////////////////////////////////////////////////////////////
+    static void cleanup();
+
+    ////////////////////////////////////////////////////////////
+    /// \brief Check if a joystick is currently connected
+    ///
+    /// \param index Index of the joystick to check
+    ///
+    /// \return True if the joystick is connected, false otherwise
+    ///
+    ////////////////////////////////////////////////////////////
+    static bool isConnected(unsigned int index);
+
+    ////////////////////////////////////////////////////////////
+    /// \brief Open the joystick
+    ///
+    /// \param index Index assigned to the joystick
+    ///
+    /// \return True on success, false on failure
+    ///
+    ////////////////////////////////////////////////////////////
+    bool open(unsigned int index);
+
+    ////////////////////////////////////////////////////////////
+    /// \brief Close the joystick
+    ///
+    ////////////////////////////////////////////////////////////
+    void close();
+
+    ////////////////////////////////////////////////////////////
+    /// \brief Get the joystick capabilities
+    ///
+    /// \return Joystick capabilities
+    ///
+    ////////////////////////////////////////////////////////////
+    JoystickCaps getCapabilities() const;
+
+    ////////////////////////////////////////////////////////////
+    /// \brief Get the joystick identification
+    ///
+    /// \return Joystick identification
+    ///
+    ////////////////////////////////////////////////////////////
+    Joystick::Identification getIdentification() const;
+
+    ////////////////////////////////////////////////////////////
+    /// \brief Update the joystick and get its new state
+    ///
+    /// \return Joystick state
+    ///
+    ////////////////////////////////////////////////////////////
+    JoystickState update();
+
+private:
+
+    ////////////////////////////////////////////////////////////
+    // Member data
+    ////////////////////////////////////////////////////////////
+    int                      m_file;           ///< File descriptor of the joystick
+    report_desc_t            m_desc;           ///< USB report descriptor
+    int                      m_id;             ///< USB id
+    std::vector<char>        m_buffer;         ///< USB HID buffer
+    int                      m_length;         ///< Buffer length
+    Joystick::Identification m_identification; ///< Joystick identification
+    JoystickState            m_state;          ///< Current state of the joystick
+};
+
+} // namespace priv
+
+} // namespace sf
+
+
+#endif // SFML_JOYSTICKIMPLOPENBSD_HPP
Index: patches/patch-cmake_Modules_FindSFML_cmake
===================================================================
RCS file: patches/patch-cmake_Modules_FindSFML_cmake
diff -N patches/patch-cmake_Modules_FindSFML_cmake
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-cmake_Modules_FindSFML_cmake	9 Mar 2020 22:09:10 -0000
@@ -0,0 +1,41 @@
+$OpenBSD$
+
+Index: cmake/Modules/FindSFML.cmake
+--- cmake/Modules/FindSFML.cmake.orig
++++ cmake/Modules/FindSFML.cmake
+@@ -232,6 +232,8 @@ if(SFML_STATIC_LIBRARIES)
+         set(FIND_SFML_OS_LINUX 1)
+     elseif(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
+         set(FIND_SFML_OS_FREEBSD 1)
++    elseif(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
++        set(FIND_SFML_OS_OPENBSD 1)
+     elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
+         set(FIND_SFML_OS_MACOSX 1)
+     endif()
+@@ -255,7 +257,7 @@ if(SFML_STATIC_LIBRARIES)
+     if(NOT ${FIND_SFML_SYSTEM_COMPONENT} EQUAL -1)
+ 
+         # update the list -- these are only system libraries, no need to find them
+-        if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD OR FIND_SFML_OS_MACOSX)
++        if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD OR FIND_SFML_OS_MACOSX OR FIND_SFML_OS_OPENBSD)
+             set(SFML_SYSTEM_DEPENDENCIES "pthread")
+         endif()
+         if(FIND_SFML_OS_LINUX)
+@@ -283,7 +285,7 @@ if(SFML_STATIC_LIBRARIES)
+     if(NOT ${FIND_SFML_WINDOW_COMPONENT} EQUAL -1)
+ 
+         # find libraries
+-        if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD)
++        if(FIND_SFML_OS_LINUX OR FIND_SFML_OS_FREEBSD OR FIND_SFML_OS_OPENBSD)
+             find_sfml_dependency(X11_LIBRARY "X11" X11)
+             find_sfml_dependency(LIBXCB_LIBRARIES "XCB" xcb libxcb)
+             find_sfml_dependency(X11_XCB_LIBRARY "X11-xcb" X11-xcb libX11-xcb)
+@@ -301,6 +303,8 @@ if(SFML_STATIC_LIBRARIES)
+         elseif(FIND_SFML_OS_LINUX)
+             set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${LIBXCB_LIBRARIES} ${X11_XCB_LIBRARY} ${XCB_RANDR_LIBRARY} ${XCB_IMAGE_LIBRARY} ${UDEV_LIBRARIES})
+         elseif(FIND_SFML_OS_FREEBSD)
++            set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${LIBXCB_LIBRARIES} ${X11_XCB_LIBRARY} ${XCB_RANDR_LIBRARY} ${XCB_IMAGE_LIBRARY} "usbhid")
++        elseif(FIND_SFML_OS_OPENBSD)
+             set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "GL" ${X11_LIBRARY} ${LIBXCB_LIBRARIES} ${X11_XCB_LIBRARY} ${XCB_RANDR_LIBRARY} ${XCB_IMAGE_LIBRARY} "usbhid")
+         elseif(FIND_SFML_OS_MACOSX)
+             set(SFML_WINDOW_DEPENDENCIES ${SFML_WINDOW_DEPENDENCIES} "-framework OpenGL -framework Foundation -framework AppKit -framework IOKit -framework Carbon")
Index: patches/patch-src_SFML_Window_CMakeLists_txt
===================================================================
RCS file: /cvs/ports/multimedia/sfml/patches/patch-src_SFML_Window_CMakeLists_txt,v
retrieving revision 1.2
diff -u -r1.2 patch-src_SFML_Window_CMakeLists_txt
--- patches/patch-src_SFML_Window_CMakeLists_txt	1 Sep 2016 16:50:14 -0000	1.2
+++ patches/patch-src_SFML_Window_CMakeLists_txt	9 Mar 2020 22:09:10 -0000
@@ -1,6 +1,10 @@
 $OpenBSD: patch-src_SFML_Window_CMakeLists_txt,v 1.2 2016/09/01 16:50:14 pascal Exp $
---- src/SFML/Window/CMakeLists.txt.orig	Wed Aug 31 17:33:33 2016
-+++ src/SFML/Window/CMakeLists.txt	Wed Aug 31 17:33:36 2016
+
+Add Joystick implementation for OpenBSD
+
+Index: src/SFML/Window/CMakeLists.txt
+--- src/SFML/Window/CMakeLists.txt.orig
++++ src/SFML/Window/CMakeLists.txt
 @@ -69,7 +69,7 @@ if(SFML_OS_WINDOWS)
  
      # make sure that we use the Unicode version of the Win API functions
@@ -17,8 +21,8 @@
 +    elseif(SFML_OS_OPENBSD)
 +        set(PLATFORM_SRC
 +            ${PLATFORM_SRC}
-+            ${SRCROOT}/Android/JoystickImpl.cpp
-+            ${SRCROOT}/Android/JoystickImpl.hpp
++            ${SRCROOT}/OpenBSD/JoystickImpl.cpp
++            ${SRCROOT}/OpenBSD/JoystickImpl.hpp
 +        )
      endif()
      source_group("unix" FILES ${PLATFORM_SRC})
@@ -32,12 +36,14 @@
          find_package(XCB COMPONENTS xlib_xcb image randr REQUIRED)
          if(NOT LIBXCB_FOUND)
              message(FATAL_ERROR "Xcb library not found")
-@@ -234,6 +240,8 @@ elseif(SFML_OS_LINUX)
+@@ -232,7 +238,9 @@ if(SFML_OS_WINDOWS)
+     list(APPEND WINDOW_EXT_LIBS winmm gdi32)
+ elseif(SFML_OS_LINUX)
      list(APPEND WINDOW_EXT_LIBS ${X11_X11_LIB} ${LIBXCB_LIBRARIES} ${UDEV_LIBRARIES})
- elseif(SFML_OS_FREEBSD)
-     list(APPEND WINDOW_EXT_LIBS ${X11_X11_LIB} ${LIBXCB_LIBRARIES} usbhid)
+-elseif(SFML_OS_FREEBSD)
++elseif(SFML_OS_FREEBSD) 
++    list(APPEND WINDOW_EXT_LIBS ${X11_X11_LIB} ${LIBXCB_LIBRARIES} usbhid)
 +elseif(SFML_OS_OPENBSD)
-+    list(APPEND WINDOW_EXT_LIBS ${X11_X11_LIB} ${LIBXCB_LIBRARIES})
+     list(APPEND WINDOW_EXT_LIBS ${X11_X11_LIB} ${LIBXCB_LIBRARIES} usbhid)
  elseif(SFML_OS_MACOSX)
      list(APPEND WINDOW_EXT_LIBS "-framework Foundation -framework AppKit -framework IOKit -framework Carbon")
- elseif(SFML_OS_IOS)
Index: patches/patch-src_SFML_Window_JoystickImpl_hpp
===================================================================
RCS file: /cvs/ports/multimedia/sfml/patches/patch-src_SFML_Window_JoystickImpl_hpp,v
retrieving revision 1.2
diff -u -r1.2 patch-src_SFML_Window_JoystickImpl_hpp
--- patches/patch-src_SFML_Window_JoystickImpl_hpp	1 Sep 2016 16:50:14 -0000	1.2
+++ patches/patch-src_SFML_Window_JoystickImpl_hpp	9 Mar 2020 22:09:10 -0000
@@ -1,12 +1,18 @@
 $OpenBSD: patch-src_SFML_Window_JoystickImpl_hpp,v 1.2 2016/09/01 16:50:14 pascal Exp $
---- src/SFML/Window/JoystickImpl.hpp.orig	Sat Jan 30 21:26:30 2016
-+++ src/SFML/Window/JoystickImpl.hpp	Mon Feb 29 17:55:13 2016
-@@ -98,7 +98,7 @@ struct JoystickState
+
+Joystick implementation
+
+Index: src/SFML/Window/JoystickImpl.hpp
+--- src/SFML/Window/JoystickImpl.hpp.orig
++++ src/SFML/Window/JoystickImpl.hpp
+@@ -90,6 +90,10 @@ struct JoystickState
  
-     #include <SFML/Window/iOS/JoystickImpl.hpp>
+     #include <SFML/Window/FreeBSD/JoystickImpl.hpp>
  
--#elif defined(SFML_SYSTEM_ANDROID)
-+#elif defined(SFML_SYSTEM_ANDROID) || defined(SFML_SYSTEM_OPENBSD)
- 
-     #include <SFML/Window/Android/JoystickImpl.hpp>
++#elif defined(SFML_SYSTEM_OPENBSD)
++
++    #include <SFML/Window/OpenBSD/JoystickImpl.hpp>
++
+ #elif defined(SFML_SYSTEM_MACOS)
  
+     #include <SFML/Window/OSX/JoystickImpl.hpp>
? XXX
? output
? witchblast-joystick.diff
Index: Makefile
===================================================================
RCS file: /cvs/ports/games/witchblast/Makefile,v
retrieving revision 1.4
diff -u -r1.4 Makefile
--- Makefile	14 Jul 2019 00:39:37 -0000	1.4
+++ Makefile	9 Mar 2020 22:37:35 -0000
@@ -5,7 +5,7 @@
 GH_ACCOUNT =	Cirrus-Minor
 GH_PROJECT =	witchblast
 GH_TAGNAME =	v0.7.5
-REVISION =	1
+REVISION =	2
 
 CATEGORIES =	games x11
 
Index: patches/patch-src_WitchBlastGame_cpp
===================================================================
RCS file: /cvs/ports/games/witchblast/patches/patch-src_WitchBlastGame_cpp,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 patch-src_WitchBlastGame_cpp
--- patches/patch-src_WitchBlastGame_cpp	26 Dec 2017 20:14:34 -0000	1.1.1.1
+++ patches/patch-src_WitchBlastGame_cpp	9 Mar 2020 22:37:35 -0000
@@ -14,3 +14,15 @@
    time_t t = time(0);   // get time now
    struct tm * now = localtime( & t );
  
+@@ -3107,6 +3107,11 @@ void WitchBlastGame::updateMenu()
+         menuState = MenuStateConfig;
+         saveConfigurationToFile();
+         return;
++      }
++
++      // Ignore buttons that get released
++      if (event.type == sf::Event::JoystickButtonReleased) {
++	return;
+       }
+ 
+       // button pressed ?

Reply via email to