diff --git a/src/window/window.cc b/src/window/window.cc index 513e4ba..d94acde 100644 --- a/src/window/window.cc +++ b/src/window/window.cc @@ -42,9 +42,13 @@ Window::Window(WindowManager *wm, runtime_mode_(WINDOW_RUNTIME_MODE_FEEDBACK), outputs_(wm->get_outputs()), valid_(true), - logical_size_{.width = width, .height = height}, - buffer_size_{.width = width, .height = height}, - window_size_{.width = buffer_size_.width, .height = buffer_size_.height}, + extents_({ + .init = {.width = width, .height = height}, + .max = {.width = INT32_MAX, .height = INT32_MAX}, + .buffer = {.width = width, .height = height}, + .window = {.width = width, .height = height}, + .logical = {.width = width, .height = height}, + }), needs_buffer_geometry_update_(false), buffer_count_(buffer_count), buffer_format_(buffer_format) { @@ -164,15 +168,15 @@ void Window::update_buffer_geometry() { case WL_OUTPUT_TRANSFORM_180: case WL_OUTPUT_TRANSFORM_FLIPPED: case WL_OUTPUT_TRANSFORM_FLIPPED_180: - new_buffer_size.width = logical_size_.width; - new_buffer_size.height = logical_size_.height; + new_buffer_size.width = extents_.logical.width; + new_buffer_size.height = extents_.logical.height; break; case WL_OUTPUT_TRANSFORM_90: case WL_OUTPUT_TRANSFORM_270: case WL_OUTPUT_TRANSFORM_FLIPPED_90: case WL_OUTPUT_TRANSFORM_FLIPPED_270: - new_buffer_size.width = logical_size_.height; - new_buffer_size.height = logical_size_.width; + new_buffer_size.width = extents_.logical.height; + new_buffer_size.height = extents_.logical.width; break; } @@ -211,21 +215,21 @@ void Window::update_buffer_geometry() { new_buffer_size.height = new_buffer_size_min; new_viewport_dest_size_min = - std::min(logical_size_.width, logical_size_.height); + std::min(extents_.logical.width, extents_.logical.height); new_viewport_dest_size.width = new_viewport_dest_size_min; new_viewport_dest_size.height = new_viewport_dest_size_min; } else { - new_viewport_dest_size.width = logical_size_.width; - new_viewport_dest_size.height = logical_size_.height; + new_viewport_dest_size.width = extents_.logical.width; + new_viewport_dest_size.height = extents_.logical.height; } - if (buffer_size_.width != new_buffer_size.width || - buffer_size_.height != new_buffer_size.height) { - buffer_size_.width = new_buffer_size.width; - buffer_size_.height = new_buffer_size.height; + if (extents_.buffer.width != new_buffer_size.width || + extents_.buffer.height != new_buffer_size.height) { + extents_.buffer.width = new_buffer_size.width; + extents_.buffer.height = new_buffer_size.height; #if ENABLE_EGL if (egl_) { - egl_->resize(buffer_size_.width, buffer_size_.height, 0, 0); + egl_->resize(extents_.buffer.width, extents_.buffer.height, 0, 0); } #endif } @@ -383,8 +387,8 @@ void Window::handle_preferred_buffer_transform(void *data, void Window::resize(int width, int height) { #if ENABLE_EGL if (egl_) { - logical_size_.width = width; - logical_size_.height = height; + extents_.logical.width = width; + extents_.logical.height = height; egl_->resize(width, height, 0, 0); } #endif @@ -457,16 +461,16 @@ Buffer *Window::next_buffer() { return nullptr; if (!buffer->get_wl_buffer()) { - auto ret = buffer->create_shm_buffer(window_size_.width, - window_size_.height, buffer_format_); + auto ret = buffer->create_shm_buffer(extents_.window.width, + extents_.window.height, buffer_format_); if (ret < 0) return nullptr; /* paint the padding */ memset(buffer->get_shm_data(), 0xff, - static_cast(window_size_.width) * - static_cast(window_size_.height) * 4); + static_cast(extents_.window.width) * + static_cast(extents_.window.height) * 4); } return buffer; diff --git a/src/window/window.h b/src/window/window.h index fc9b6b9..1ed7050 100644 --- a/src/window/window.h +++ b/src/window/window.h @@ -88,29 +88,25 @@ class Window { [[nodiscard]] struct wl_surface *get_surface() const { return wl_surface_; } - [[nodiscard]] int get_width() const { return logical_size_.width; } + [[nodiscard]] int get_width() const { return extents_.logical.width; } - [[nodiscard]] int get_height() const { return logical_size_.height; } + [[nodiscard]] int get_height() const { return extents_.logical.height; } - void set_max_width(int width) { max_width_ = width; } + void set_max_width(int width) { extents_.max.width = width; } - void set_max_height(int height) { max_height_ = height; } + void set_max_height(int height) { extents_.max.height = height; } - void set_window_width(int width) { window_size_.width = width; } + void set_width(int width) { extents_.window.width = width; } - void set_window_height(int height) { window_size_.height = height; } + void set_height(int height) { extents_.window.height = height; } - void set_init_width(int width) { init_width_ = width; } + void set_init_width(int width) { extents_.init.width = width; } - void set_init_height(int height) { init_height_ = height; } + void set_init_height(int height) { extents_.init.height = height; } - void set_width(int width) { width_ = width; } + [[nodiscard]] int get_init_width() const { return extents_.init.width; } - void set_height(int height) { height_ = height; } - - [[nodiscard]] int get_init_width() const { return init_width_; } - - [[nodiscard]] int get_init_height() const { return init_height_; } + [[nodiscard]] int get_init_height() const { return extents_.init.height; } void set_fullscreen(bool fullscreen) { fullscreen_ = fullscreen; } @@ -126,9 +122,9 @@ class Window { needs_buffer_geometry_update_ = value; } - [[nodiscard]] int32_t get_max_width() const { return max_width_; } + [[nodiscard]] int32_t get_max_width() const { return extents_.max.width; } - [[nodiscard]] int32_t get_max_height() const { return max_height_; } + [[nodiscard]] int32_t get_max_height() const { return extents_.max.height; } [[nodiscard]] bool get_fullscreen() const { return fullscreen_; } @@ -181,6 +177,11 @@ class Window { Window &operator=(const Window &) = delete; private: + struct Extents { + int width; + int height; + }; + WindowManager *wm_; const std::map> &outputs_; struct wp_tearing_control_v1 *tearing_control_{}; @@ -225,29 +226,13 @@ class Window { int buffer_count_; uint32_t buffer_format_; - int init_width_{}; - int init_height_{}; - - int width_{}; - int height_{}; - - int max_width_ = INT32_MAX; - int max_height_ = INT32_MAX; - struct { - int width; - int height; - } buffer_size_; - - struct { - int width; - int height; - } window_size_; - - struct { - int width; - int height; - } logical_size_; + struct Extents init; + struct Extents max; + struct Extents buffer; + struct Extents window; + struct Extents logical; + } extents_{}; bool needs_buffer_geometry_update_; diff --git a/src/window/xdg_toplevel.cc b/src/window/xdg_toplevel.cc index 052416a..923a38d 100644 --- a/src/window/xdg_toplevel.cc +++ b/src/window/xdg_toplevel.cc @@ -60,8 +60,8 @@ XdgTopLevel::XdgTopLevel( exit(EXIT_FAILURE); } - set_window_width(width); - set_window_height(height); + set_width(width); + set_height(height); auto surface = get_surface();