Skip to content

Commit

Permalink
struct Extents for wrapping width/height
Browse files Browse the repository at this point in the history
Signed-off-by: Joel Winarske <joel.winarske@gmail.com>
  • Loading branch information
jwinarske committed May 18, 2024
1 parent 55ae663 commit 1d8f2ec
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 61 deletions.
46 changes: 25 additions & 21 deletions src/window/window.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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<size_t>(window_size_.width) *
static_cast<size_t>(window_size_.height) * 4);
static_cast<size_t>(extents_.window.width) *
static_cast<size_t>(extents_.window.height) * 4);
}

return buffer;
Expand Down
61 changes: 23 additions & 38 deletions src/window/window.h
Original file line number Diff line number Diff line change
Expand Up @@ -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; }

Expand All @@ -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_; }

Expand Down Expand Up @@ -181,6 +177,11 @@ class Window {
Window &operator=(const Window &) = delete;

private:
struct Extents {
int width;
int height;
};

WindowManager *wm_;
const std::map<struct wl_output *, std::unique_ptr<Output>> &outputs_;
struct wp_tearing_control_v1 *tearing_control_{};
Expand Down Expand Up @@ -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_;

Expand Down
4 changes: 2 additions & 2 deletions src/window/xdg_toplevel.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down

0 comments on commit 1d8f2ec

Please sign in to comment.