mirror of
https://github.com/italicsjenga/rust_minifb.git
synced 2024-12-23 19:31:30 +11:00
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>
This commit is contained in:
parent
f97d90b7a7
commit
29a4c5d9df
|
@ -14,7 +14,7 @@ use crate::{CursorStyle, MenuHandle, UnixMenu};
|
|||
use std::ffi::CString;
|
||||
use std::mem;
|
||||
use std::os::raw;
|
||||
use std::os::raw::{c_char, c_uint};
|
||||
use std::os::raw::{c_char, c_long, c_uchar, c_uint, c_ulong};
|
||||
use std::ptr;
|
||||
|
||||
use crate::buffer_helper;
|
||||
|
@ -73,6 +73,15 @@ extern "C" {
|
|||
);
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
struct MwmHints {
|
||||
flags: c_ulong,
|
||||
functions: c_ulong,
|
||||
decorations: c_ulong,
|
||||
input_mode: c_long,
|
||||
status: c_ulong,
|
||||
}
|
||||
|
||||
struct DisplayInfo {
|
||||
lib: x11_dl::xlib::Xlib,
|
||||
display: *mut xlib::Display,
|
||||
|
@ -384,6 +393,25 @@ impl Window {
|
|||
);
|
||||
}
|
||||
|
||||
if opts.borderless {
|
||||
let hints_property =
|
||||
(d.lib.XInternAtom)(d.display, "_MOTIF_WM_HINTS\0" as *const _ as *const i8, 0);
|
||||
assert!(hints_property != 0);
|
||||
let mut hints: MwmHints = std::mem::zeroed();
|
||||
hints.flags = 2;
|
||||
hints.decorations = 0;
|
||||
(d.lib.XChangeProperty)(
|
||||
d.display,
|
||||
handle,
|
||||
hints_property,
|
||||
hints_property,
|
||||
32,
|
||||
xlib::PropModeReplace,
|
||||
&hints as *const _ as *const c_uchar,
|
||||
5,
|
||||
);
|
||||
}
|
||||
|
||||
(d.lib.XClearWindow)(d.display, handle);
|
||||
(d.lib.XMapRaised)(d.display, handle);
|
||||
(d.lib.XSetWMProtocols)(d.display, handle, &mut d.wm_delete_window, 1);
|
||||
|
|
Loading…
Reference in a new issue