Commit graph

118 commits

Author SHA1 Message Date
Matt Thompson
7019ba41ea
Use coercion on types failing compilation on 64 bit raspbian bullseye (#292)
Awesome! Thanks

Closes #291
2022-04-16 18:27:35 +02:00
Mara Huldra
a4f7958fab
wayland: Fix key character callback (#290)
- Make the character callback use the key converted through the keymap,
  instead of trying to perform a direct conversion.

- Store a persistent keymap_state, instead of creating a new one every
  time. This makes sure that modifiers such as shift/capslock/ctrl are
  taken into account.

Closes #288.
2022-04-16 06:47:25 +02:00
Emilio Moretti
f42f516339
Wasm websys wip (#239)
* WIP on wasm support

Fix canvas not showing by actually placing it in the document
Also set the initial title
Use the js! macro to draw pixels
Draw to the canvas using ImageData
It doesn't work because an animation frame needs to be requested somehow

* Complete WASM work into a usable state.

This works on the previous commits and makes it usable.
There is a multi platform example about how to use it here:
https://github.com/dc740/minifb-async-examples

Co-authored-by: Thomas Versteeg <thomasversteeg@gmx.com>
2022-04-02 17:00:48 +02:00
Daniel Collin
abbe3db980 Use XkbSetDetectableAutoRepeat on x11
Fixes #284
2022-03-26 20:45:00 +01:00
Daniel Collin
9dcbac0285 Rustfmt 2022-03-14 16:05:25 +01:00
Daniel Collin
ad9648769d Fixed button hold on window exit
On Windows when moving the cursor out of the window while holding a
mouse button down it would still be set to
true when entering the window
even if the button had been released
outside of the window.

Closes #280
2022-03-14 15:28:55 +01:00
Greg Depoire--Ferrer
344a1997c7
Memory-map the keymap FD on Wayland to fix EOF error (#278)
wlroots based compositors reuse the same FD for keymap, so after a first
read is done, the file is seeked to the end and the next read fails,
causing the following error:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err`
value: Error { kind: UnexpectedEof, message: "failed to fill whole buffer" }'

The Wayland documentation says the FD "can be memory-mapped to provide
a keyboard mapping description" and then "From version 7 onwards, the
fd must be mapped with MAP_PRIVATE by the recipient, as MAP_SHARED may
fail."

Although it is not very clear, it probably means that the FD must be
memory-mapped.
2022-02-18 14:35:00 +01:00
Rémi Lauzier
4962afd3f5
small fixes and update (#277) 2022-02-18 09:32:00 +01:00
Andreas Neukoetter
032d616bbe
Add getter for window position. (#276)
* + Add getter for window position (macos, windows).

+ Add getter STUB for window position (posix x11/wayland).

* Implement getter for window position (posix x11).

* Remove todo from getter for window position and return 0,0 (posix wayland).
2022-02-03 10:01:00 +01:00
Kevin K
c25b5d114a
Fix clippy lints under windows (#275) 2022-02-01 22:44:32 +01:00
Kevin K
9a435460b0
Add set_icon() method to set a window icon at runtime (#274)
* Add set_icon() for Windows

* Start x11 icon method

* Add set_icon() for X11

* Add unimplemented message

* Add Icon class for abstraction

* Adjust example in docs

* Remove CStrings from X11 because of heap allocations

* Fix rustfmt

* Revert accidental changes to image.rs

* Fix doc error
2022-01-30 18:29:12 +01:00
vemoo
49aad5c586
Revert bump of xkbcommon-sys (#268)
`xkb` still depends on the previous version
and there are some issues in the new version
https://github.com/meh/rust-xkbcommon-sys/issues/7
2021-12-07 07:24:30 +01:00
vemoo
0f7d175621
address clippy lints (#267) 2021-12-06 16:34:01 +01:00
vemoo
a4ba00b209
Bump versions (#266)
* bump wayland deps

* bump xkbcommon-sys

* bump raw-window-handle

* bump png
2021-12-06 14:17:01 +01:00
vemoo
e0992261c9
fix: EventQueue::dispatch blocks until some events are available (#265)
use non blocking alternative as documented in EventQueue
2021-12-06 12:11:50 +01:00
john01dav
2b2540067c
Support typed keys on x11
* Added not-yet-working draft implementation of proper X11 support for reading correct typed characters

* Made shift work for capital letters with X11, but compose key is still broken

* Compose key and numpad now work correctly in X11

* XIM and XIC are now freed when a window destructor runs

* Ran cargo fmt on x11.rs

* Removed commented-out empty-string

Closes #200
2021-11-15 08:45:44 +01:00
Elijah Hartvigsen
deb235507f
Changing return types of get_keys from Option<Vec<Key>> to Vec<Key> (#260)
* KeyHandler: Updated return type to Vec on get_keys

* Window: Updated Window structs get_keys return type across all currently supported OS's

* Updated return type of get_keys of Window, and updated the docs for all related functions

* Docs: Corrected incorrect variable ident in docs post update

* Resolved error resulting from get_keys return type change

* Formatting: Ran cargo fmt

Co-authored-by: Zij-IT <elijah.reed@hartvigsen.xyz>
2021-10-23 11:39:18 +02:00
swismer
75a25ce898
Fix size calculation of non-decorated windows (#245) (#246) 2021-04-03 08:08:51 +02:00
Emilio Moretti
241c01219f
Fix wayland missing cursor. (#238)
This fixes the problem with the window automatically closing itself when
the mouse goes over it.
2021-02-21 07:57:29 +01:00
Sean Cross
e5b5cc50d5
windows: use c_void from winapi (#235)
The `SelectObject()` call accepts a `HGDIOBJ` which is typecast to a
`std::os::raw::c_void` when building using libstd, and is its own thing
when building with std disabled:

winapi/0.3.9/src/winapi/lib.rs.html:
    #[cfg(feature = "std")]
    pub use std::os::raw::c_void;
    #[cfg(not(feature = "std"))]
    pub enum c_void {}

This patch uses `HGDIOBJ` as the typecast as necessary.

Signed-off-by: Sean Cross <sean@xobs.io>
2021-02-10 09:04:47 +01:00
Daniel Jordan
ae5172b8a1
Update xkb_keymap reference (#233)
The xkbcommon_sys crate seems to have been updated today, and now the minifb project won't compile. 

We can fix this by updating XKB_KEYMAP_FORMAT_TEXT_v1 to XKB_KEYMAP_FORMAT_TEXT_V1.
2021-01-09 21:12:23 +01:00
sinclairzx81
ffa4a55487
Fix: winuser | DestroyWindow (#230)
* winuser | DestroyWindow

* rustfmt pass
2020-12-09 13:18:04 +01:00
Max von Forell
c1ff776260
change default pointer visibility to true on wayland (#225) 2020-11-12 11:52:24 +01:00
Santeri Salmijärvi
5e29a18ff4
Windows: Fix mouse positions not honoring MouseMode (#223) 2020-11-05 18:44:41 +01:00
Ondřej Hruška
a3852bab8a
Fix Key::RightBracket not working on POSIX (#222)
There was a typo in the mappings, right bracket didn't work.
2020-10-24 06:58:37 +02:00
Rupansh
efbe6a1c71
WindowOptions: Support none flag (#219)
* WindowOptions: add none flag

* windows: support none flag

Signed-off-by: rupansh <rupanshsekar@hotmail.com>

* os: implement none flags for other operating systems

redox, posix
not applicable on OSX

* WindowOptions: document none option

Signed-off-by: rupansh-arch <rupanshsekar@hotmail.com>
2020-10-01 13:06:48 +02:00
Daniel Collin
ee3b185098 Removed dummy logging 2020-09-22 20:59:07 +02:00
derpeter
65e5be1dcf
change pointer type to plattform specific type as the cast is otherwi… (#212)
* change pointer type to plattform specific type as the cast is otherwise broken on ARM (and maybe other) platform.

* shrink the line changed in previous commit to make linter happy

Co-authored-by: Peter Hasse <peter.hasse@fokus.fraunhofer.de>
2020-09-03 18:16:07 +02:00
phillvancejr
15bce84a4e
Added Topmost (always on top) functionality to Windows (#159)
* Added always on top functionality for Windows

* Added always on top functionality for Windows

* Made topmost method in Window public so that the topmost attribute can be defined either at or after creation time as opposed to just at creation time. This allows the topmost functionality to be toggled during the programs runtime as opposed to only at window creation
2020-08-28 21:14:49 +02:00
Evgeniy Reizner
8efa8064c7
Remove the 'cast' dependency. (#208) 2020-08-23 14:22:49 +02:00
Daniel Collin
f99ee45552 Test fix for get_keys_released on Wayland 2020-08-13 20:15:16 +02:00
Nelson Chen
291d8a0441
Support topmost functionality in Windows (#201)
Most of this was taken from #159. This does not include the API addition of adding a topmost call on Window.

That should probably be in another PR. And the doc fixes as well.

Used implementation from https://github.com/emoon/rust_minifb/pull/159#discussion_r401374050

Co-authored-by: phillvancejr <phillipvancejr@gmail.com>
Co-authored-by: Daniel Collin <daniel@collin.com>

Co-authored-by: phillvancejr <phillipvancejr@gmail.com>
Co-authored-by: Daniel Collin <daniel@collin.com>
2020-07-27 09:27:13 +02:00
Antonino Siena
49004f4380
Update wayland deps (#199)
Co-authored-by: Antonino Siena <a.siena@gmx.de>
2020-07-09 21:21:16 +02:00
Daniel Collin
f94eef1c7b
Cargo fmt pass (#198) 2020-07-09 11:53:46 +02:00
Daniel Collin
cb0ceee910 Use null for PeekMessageW on Windows 2020-07-09 11:48:22 +02:00
LoganDark
d0d3ffcf7b
Rename unixes to posix (#197)
* Rename `unix`es to `posix`

* Whoops

* deprecate get_unix_menus in favor of get_posix_menus

* doc fixes
2020-07-09 10:21:18 +02:00
Antonino Siena
31d872353c
Use xkbcommon's function to convert a keysym to a unicode point (#184)
* Use xkbcommon's function to convert a keysym to a unicode point

* Simplified code_point check

Co-authored-by: Antonino Siena <a.siena@gmx.de>
2020-05-21 09:46:05 +02:00
Antonino Siena
b4adefd9d9
[WIP] Cursor visibility (#170)
* Cursor visibility

* Implement cursor visiblity for X11 and Wayland

* Implement cursor visibility for Windows

* Implement cursor visibility on Redox

* Implement cursor visiblity for OSX

* Semicolons

* Wrong method

* Missing argument

Co-authored-by: Antonino Siena <a.siena@gmx.de>
2020-04-21 15:13:12 +02:00
Antonino Siena
d2fe8c0469
Transparency (#164)
* Add transparency field to WindowOptions

* Add transparency example

* Implement transparency on Wayland

* Improvements

* [WIP] X11 transparency

* Restructure

* Redox implement transparency

* Update src/lib.rs

Co-Authored-By: Cole Helbling <cole.e.helbling@outlook.com>

* Rust-2018 changes

* Fixed issue

* cargo fmt

* [WIP] Implement alpha transparency for windows

* Staging Windows code

* Transparency is currently unimplemented on Windows

* Add note

* Dont use assertions

* Correction

Co-authored-by: Antonino Siena <a.siena@gmx.de>
Co-authored-by: Cole Helbling <cole.e.helbling@outlook.com>
2020-04-15 15:11:23 +02:00
Antonino Siena
29a4c5d9df
Implement borderless on X11 (#165)
* Wayland implementation restructuration

* Moved previous X11 code into own module

* Moved some data into a common struct between wayland and x11

* Added glue

* Moved common unix functions into module

* Revert commits

* Update x11.rs

* Update x11.rs

* Cargo fmt

* Cargo fmt

* Initial Wayland struct and constructors

* Create Wayland window first

* Window::new constructor and removed error type

* Complete window creation

* More docs

* Fixed window creation

* Proper window creation

* Added byteorder

* Disallow resize and set_title

* Implement is_open() and get_window_handle()

* Fixed get_size() and implemented set_position()

* Wayland set_position was missing

* Added WIP update methods

* Improved update methods

* Added more prototype functions

* Get Keyboard and Mouse device

* outsource input device creation

* get proper mouse positions

* Properly get scroll wheel

* Implement HasRawWindowHandle for Wayland Window

* Implemented updaterate methods

* is active method

* More key handler methods

* Retrieve all events from keyboard and mouse

* Added more DisplayInfo methods

* Improvements for event handling

* Partial support for scaling

* Properly update buffer

* More imports

* Styling, etc.

* Merge

* More code to update the framebuffer

* Added scaling again

* Readded better event handling

* Properly render all colors as non-transparent ones

* Clear all events after being read

* update_with_buffer_stride is not WIP anymore

* Assume a connected keyboard and pointer device

* Moved keyboard and pointer from DisplayInfo into Window

* Support resizing and checking if the window is still open

* Rendering performance improvement

* Less warnings and some comments

* Byteorder now required anymore

* Not anymore resizing the ShmPool below its previous size and remove WlBuffers when told to

* Removed more magic numbers and added comments

* Proper size check of the buffer size

* Less conversions

* save the previous framebuffer size in DisplayInfo instead of seeking the fd

* Set the pixelformat statically depending on whether alpha channel is allowed or not

* Set the fd length only again when the size really changes

* Save resizability so that the size of the window doesnt get changed.

* Fix rerendering issue

* Fix rerendering issue

* Using unstable protocol to support server-side decorations

* Outsource buffer creation code

* Small improvements and comments

* Replaced usage of atomic types

* Cleanup

* Outsource Input handling into own struct

* Use mspc channels instead of Vec for input handling

* Implemented set_cursor_style()

* Proper cursorstyle into string decoding

* Implemented mouse buttons

* Scroll wheel fix

* Handle scroll events

* Updated code for new version of the wayland crate

* Reset scroll after each update

* Starting on keymap support with xkb

* Revert 19a590a

* Add missing bracket

* added missing minimum version for surface.damage_buffer()

* Fix for corrupted pointer images

* Implement scaling

* Remove comments

* Acknowledge only the last configure event when redrawing

* Assign the closure to the toplevel only once

* Own function for buffer filtering

* Dont truncate the fd anymore

* Proper damage surface

* Preventg display from getting dropped first

* custom BufferPool implementation

* Unneccessary printlns

* ack configure before committing

* set active field when keyboard focus enters/leaves the surface

* save modifiers each time they are changed

* Requires xkbcommon-sys to retrieve the keymap - will later be removed

* Prototype function to convert a key

* simplify keymap creation

* handle key event

* simplify button state evaluation

* Create wl_seat earlier so events are not getting missed

* Added key conversions and key offset

* Cargo fmt

* Update keyhandler

* Renaming

* Update xkb keys

* Input callback

* Numpad corrections

* Remove publicity from functions

* Retrieve input devices as early as possible

* TODO

* Small cleanup

* Proper key modifiers update

* Scale::FitScreen cant be implemented for now

* finish menu functions(copied from x11)

* Clean up some stuff

* unused variables

* Less warnings

* Comments and Variable naming improvements

* retrieve toplevel info now with an own method

* Constants

* Remove unused function

* Unused field

* Unused let binding

* Improve code readability

* Change note

* Comments

* Opinionated cleanup

* Comment out unused variables

Might be used later on

* Mouse buttons with boolean state

* Prototype UnixMenu functions

* Renaming

* unimplemented functions

* actually unimplemented

* Minor formatting change

* Remove unused fields

Even if they will be used later on, this would be a breaking change.
It's unnecessary to keep these around no matter what the future may
hold.

* Less unwraping now

* Feature gate x11 and wayland, both enabled by default

* Feature gate dependencies

* Menu is now is a new file for both x11 and wayland

* Feature gate everything

* Cargo fmt

* Simplify conditions

Co-Authored-By: Cole Helbling <cole.e.helbling@outlook.com>

* Missing paranthesis

Co-Authored-By: Cole Helbling <cole.e.helbling@outlook.com>

* Cargo fmt

* Proper debug message

* wayland deps

* xkb dev lib

* Update Cargo.toml

Co-Authored-By: Cole Helbling <cole.e.helbling@outlook.com>

* Update .github/workflows/ci.yml

Co-Authored-By: Cole Helbling <cole.e.helbling@outlook.com>

* Implement borderless on X11

Co-authored-by: Antonino Siena <a.siena@gmx.de>
Co-authored-by: Cole Helbling <cole.e.helbling@outlook.com>
2020-04-14 16:36:54 +02:00
Antonino Siena
f97d90b7a7
[Testing] Implement is_active() on windows and x11 (#163)
* X11 implement is_active()

* winapi implement is_active()

Co-authored-by: Antonino Siena <a.siena@gmx.de>
2020-04-06 08:21:03 +02:00
Antonino Siena
d77e559b0f
Wayland support (#141)
* Wayland implementation restructuration

* Moved previous X11 code into own module

* Moved some data into a common struct between wayland and x11

* Added glue

* Moved common unix functions into module

* Revert commits

* Update x11.rs

* Update x11.rs

* Cargo fmt

* Cargo fmt

* Initial Wayland struct and constructors

* Create Wayland window first

* Window::new constructor and removed error type

* Complete window creation

* More docs

* Fixed window creation

* Proper window creation

* Added byteorder

* Disallow resize and set_title

* Implement is_open() and get_window_handle()

* Fixed get_size() and implemented set_position()

* Wayland set_position was missing

* Added WIP update methods

* Improved update methods

* Added more prototype functions

* Get Keyboard and Mouse device

* outsource input device creation

* get proper mouse positions

* Properly get scroll wheel

* Implement HasRawWindowHandle for Wayland Window

* Implemented updaterate methods

* is active method

* More key handler methods

* Retrieve all events from keyboard and mouse

* Added more DisplayInfo methods

* Improvements for event handling

* Partial support for scaling

* Properly update buffer

* More imports

* Styling, etc.

* Merge

* More code to update the framebuffer

* Added scaling again

* Readded better event handling

* Properly render all colors as non-transparent ones

* Clear all events after being read

* update_with_buffer_stride is not WIP anymore

* Assume a connected keyboard and pointer device

* Moved keyboard and pointer from DisplayInfo into Window

* Support resizing and checking if the window is still open

* Rendering performance improvement

* Less warnings and some comments

* Byteorder now required anymore

* Not anymore resizing the ShmPool below its previous size and remove WlBuffers when told to

* Removed more magic numbers and added comments

* Proper size check of the buffer size

* Less conversions

* save the previous framebuffer size in DisplayInfo instead of seeking the fd

* Set the pixelformat statically depending on whether alpha channel is allowed or not

* Set the fd length only again when the size really changes

* Save resizability so that the size of the window doesnt get changed.

* Fix rerendering issue

* Fix rerendering issue

* Using unstable protocol to support server-side decorations

* Outsource buffer creation code

* Small improvements and comments

* Replaced usage of atomic types

* Cleanup

* Outsource Input handling into own struct

* Use mspc channels instead of Vec for input handling

* Implemented set_cursor_style()

* Proper cursorstyle into string decoding

* Implemented mouse buttons

* Scroll wheel fix

* Handle scroll events

* Updated code for new version of the wayland crate

* Reset scroll after each update

* Starting on keymap support with xkb

* Revert 19a590a

* Add missing bracket

* added missing minimum version for surface.damage_buffer()

* Fix for corrupted pointer images

* Implement scaling

* Remove comments

* Acknowledge only the last configure event when redrawing

* Assign the closure to the toplevel only once

* Own function for buffer filtering

* Dont truncate the fd anymore

* Proper damage surface

* Preventg display from getting dropped first

* custom BufferPool implementation

* Unneccessary printlns

* ack configure before committing

* set active field when keyboard focus enters/leaves the surface

* save modifiers each time they are changed

* Requires xkbcommon-sys to retrieve the keymap - will later be removed

* Prototype function to convert a key

* simplify keymap creation

* handle key event

* simplify button state evaluation

* Create wl_seat earlier so events are not getting missed

* Added key conversions and key offset

* Cargo fmt

* Update keyhandler

* Renaming

* Update xkb keys

* Input callback

* Numpad corrections

* Remove publicity from functions

* Retrieve input devices as early as possible

* TODO

* Small cleanup

* Proper key modifiers update

* Scale::FitScreen cant be implemented for now

* finish menu functions(copied from x11)

* Clean up some stuff

* unused variables

* Less warnings

* Comments and Variable naming improvements

* retrieve toplevel info now with an own method

* Constants

* Remove unused function

* Unused field

* Unused let binding

* Improve code readability

* Change note

* Comments

* Opinionated cleanup

* Comment out unused variables

Might be used later on

* Mouse buttons with boolean state

* Prototype UnixMenu functions

* Renaming

* unimplemented functions

* actually unimplemented

* Minor formatting change

* Remove unused fields

Even if they will be used later on, this would be a breaking change.
It's unnecessary to keep these around no matter what the future may
hold.

* Less unwraping now

* Feature gate x11 and wayland, both enabled by default

* Feature gate dependencies

* Menu is now is a new file for both x11 and wayland

* Feature gate everything

* Cargo fmt

* Simplify conditions

Co-Authored-By: Cole Helbling <cole.e.helbling@outlook.com>

* Missing paranthesis

Co-Authored-By: Cole Helbling <cole.e.helbling@outlook.com>

* Cargo fmt

* Proper debug message

* wayland deps

* xkb dev lib

* Update Cargo.toml

Co-Authored-By: Cole Helbling <cole.e.helbling@outlook.com>

* Update .github/workflows/ci.yml

Co-Authored-By: Cole Helbling <cole.e.helbling@outlook.com>

Co-authored-by: Antonino Siena <a.siena@gmx.de>
Co-authored-by: Cole Helbling <cole.e.helbling@outlook.com>
2020-04-05 06:49:25 +02:00
Daniel Collin
1f21794c8c
Lint fix again 2020-03-31 07:40:11 +02:00
Daniel Collin
434ba591f2
Fixed lint error 2020-03-31 07:35:59 +02:00
phillvancejr
fbf1d54db6
Added Topmost/Always on Top functionality to MacOS (#154)
* Added a topmost property to WindowOptons and initialized it to false in WindowOption's default method

* Added an mfb_topmost function that sets the window's floating level to NSFloatingWindowLevel so it will be topmost

* Added an extern definition of mfb_topmost and conditionally call it if WindowOptions.topmost is true

* changing mfb_topmost first arg name from win to window to staty consistent with rust extern declaration
2020-03-31 07:28:52 +02:00
Alex Melville
8ee5269fa2
add get_keys_released method to Window (#151) 2020-03-17 18:17:04 +01:00
Daniel Collin
acc25a0176 Added NSView for raw_window_handle on macOS 2020-01-21 22:11:46 +01:00
Antonino Siena
0a72653310 Restructure Unix implementation in preparation for Wayland support
* Wayland implementation restructuration

* Moved previous X11 code into own module

* Moved some data into a common struct between wayland and x11

* Added glue

* Moved common unix functions into module

* Revert commits

* Update x11.rs

* Update x11.rs

* Cargo fmt

* Cargo fmt
2020-01-18 09:15:15 +01:00
Daniel Collin
6d616640dc Rustfmt pass 2020-01-01 09:53:28 +01:00
Antonino Siena
51bdfcc5ca Moved codebase to edition 2018 (#127)
* Moved to Rust edition 2018

* Changed redox code as well

* Undo typo

* Another correction
2019-12-30 19:34:27 +01:00