ttx 0.1.0
Loading...
Searching...
No Matches
size.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/types/prelude.h"
4#include "dius/tty.h"
5
6namespace ttx {
7struct Size {
8 u32 rows { 0 };
9 u32 cols { 0 };
10 u32 xpixels { 0 };
11 u32 ypixels { 0 };
12
13 static auto from_window_size(dius::tty::WindowSize const& window_size) -> Size {
14 return { window_size.rows, window_size.cols, window_size.pixel_width, window_size.pixel_height };
15 }
16 auto as_window_size() const -> dius::tty::WindowSize { return { rows, cols, xpixels, ypixels }; }
17
18 auto rows_shrinked(u32 r) const -> Size {
19 if (r >= rows) {
20 return { 0, cols, xpixels, 0 };
21 }
22 return { rows - r, cols, xpixels, ypixels - (r * ypixels / rows) };
23 }
24
25 auto cols_shrinked(u32 c) const -> Size {
26 if (c >= cols) {
27 return { rows, 0, 0, ypixels };
28 }
29 return { rows, cols - c, xpixels - (c * xpixels / cols), ypixels };
30 }
31
32 auto operator==(Size const&) const -> bool = default;
33 auto operator<=>(Size const&) const = default;
34
35 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<Size>) {
36 return di::make_fields<"Size">(di::field<"rows", &Size::rows>, di::field<"cols", &Size::cols>,
37 di::field<"xpixels", &Size::xpixels>, di::field<"ypixels", &Size::ypixels>);
38 }
39};
40}
Definition clipboard.h:10
Definition size.h:7
auto rows_shrinked(u32 r) const -> Size
Definition size.h:18
u32 xpixels
Definition size.h:10
auto as_window_size() const -> dius::tty::WindowSize
Definition size.h:16
auto cols_shrinked(u32 c) const -> Size
Definition size.h:25
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< Size >)
Definition size.h:35
u32 cols
Definition size.h:9
static auto from_window_size(dius::tty::WindowSize const &window_size) -> Size
Definition size.h:13
u32 rows
Definition size.h:8
u32 ypixels
Definition size.h:11
auto operator==(Size const &) const -> bool=default
auto operator<=>(Size const &) const =default