Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions plugins/animate/fire/fire.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class fire_render_instance_t : public wf::scene::render_instance_t
wf::output_t *output)
{
this->self = std::dynamic_pointer_cast<fire_node_t>(self->shared_from_this());
auto child_damage = [=] (const wf::region_t& damage)
auto child_damage = [=] (const wf::regionf_t& damage)
{
push_damage(damage | self->get_bounding_box());
};
Expand All @@ -155,7 +155,7 @@ class fire_render_instance_t : public wf::scene::render_instance_t

void schedule_instructions(
std::vector<wf::scene::render_instruction_t>& instructions,
const wf::render_target_t& target, wf::region_t& damage) override
const wf::render_target_t& target, wf::regionf_t& damage) override
{
if (children.empty())
{
Expand Down Expand Up @@ -191,7 +191,7 @@ class fire_render_instance_t : public wf::scene::render_instance_t
{
for (auto box : data.damage)
{
wf::gles::render_target_logic_scissor(data.target, wlr_box_from_pixman_box(box));
wf::gles::render_target_logic_scissor(data.target, box);
self->ps->render(wf::gles::render_target_orthographic_projection(data.target) * translate);
}
});
Expand All @@ -205,7 +205,7 @@ class fire_render_instance_t : public wf::scene::render_instance_t
}
}

void compute_visibility(wf::output_t *output, wf::region_t& visible) override
void compute_visibility(wf::output_t *output, wf::regionf_t& visible) override
{
for (auto& ch : this->children)
{
Expand Down
30 changes: 18 additions & 12 deletions plugins/animate/squeezimize.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ class squeezimize_transformer : public wf::scene::view_2d_transformer_t

void schedule_instructions(
std::vector<render_instruction_t>& instructions,
const wf::render_target_t& target, wf::region_t& damage) override
const wf::render_target_t& target, wf::regionf_t& damage) override
{
instructions.push_back(render_instruction_t{
.instance = this,
Expand All @@ -218,9 +218,9 @@ class squeezimize_transformer : public wf::scene::view_2d_transformer_t
});
}

void transform_damage_region(wf::region_t& damage) override
void transform_damage_region(wf::regionf_t& damage) override
{
damage |= wf::region_t{self->animation_geometry};
damage |= self->animation_geometry;
}

void render(const render_instruction_t& data) override
Expand All @@ -247,14 +247,19 @@ class squeezimize_transformer : public wf::scene::view_2d_transformer_t
(self->minimize_target.y + self->minimize_target.height) - src_box.y),
(src_box.y + src_box.height) - self->minimize_target.y);

const float geometry_x = (float)self->animation_geometry.x;
const float geometry_y = (float)self->animation_geometry.y;
const float geometry_width = (float)self->animation_geometry.width;
const float geometry_height = (float)self->animation_geometry.height;

const float vertex_data_pos[] = {
1.0f * self->animation_geometry.x,
1.0f * self->animation_geometry.y + self->animation_geometry.height,
1.0f * self->animation_geometry.x + self->animation_geometry.width,
1.0f * self->animation_geometry.y + self->animation_geometry.height,
1.0f * self->animation_geometry.x + self->animation_geometry.width,
1.0f * self->animation_geometry.y,
1.0f * self->animation_geometry.x, 1.0f * self->animation_geometry.y,
geometry_x,
geometry_y + geometry_height,
geometry_x + geometry_width,
geometry_y + geometry_height,
geometry_x + geometry_width,
geometry_y,
geometry_x, geometry_y,
};

const glm::vec4 src_box_pos{
Expand Down Expand Up @@ -290,7 +295,7 @@ class squeezimize_transformer : public wf::scene::view_2d_transformer_t
self->program.set_active_texture(src_tex);
for (auto box : data.damage)
{
gles::render_target_logic_scissor(data.target, wlr_box_from_pixman_box(box));
gles::render_target_logic_scissor(data.target, box);
GL_CALL(glDrawArrays(GL_TRIANGLE_FAN, 0, 4));
}
});
Expand Down Expand Up @@ -418,7 +423,8 @@ class squeezimize_animation : public animate::animation_base_t
wf::dassert(toplevel != nullptr, "We cannot minimize non-toplevel views!");
auto hint = toplevel->get_minimize_hint();
auto tmgr = view->get_transformed_node();
auto node = std::make_shared<wf::squeezimize::squeezimize_transformer>(view, dur, hint, bbox);
auto node = std::make_shared<wf::squeezimize::squeezimize_transformer>(view, dur,
wf::from_framebuffer_box(hint), bbox);
tmgr->add_transformer(node, wf::TRANSFORMER_HIGHLEVEL + 1, squeezimize_transformer_name);
node->init_animation(type & WF_ANIMATE_HIDING_ANIMATION);
}
Expand Down
15 changes: 8 additions & 7 deletions plugins/blur/blur-base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,10 +128,9 @@ static int round_up(int x, int mod)
* Calculate the smallest box which contains @box and whose x, y, width, height
* are divisible by @degrade, and clamp that box to @bounds.
*/
static wf::geometry_t sanitize(wf::geometry_t box, int degrade,
wf::geometry_t bounds)
static wlr_box sanitize(wlr_box box, int degrade, wlr_box bounds)
{
wf::geometry_t out_box;
wlr_box out_box;
out_box.x = degrade * int(box.x / degrade);
out_box.y = degrade * int(box.y / degrade);
out_box.width = round_up(box.width, degrade);
Expand All @@ -147,7 +146,8 @@ static wf::geometry_t sanitize(wf::geometry_t box, int degrade,
out_box.height += degrade;
}

return wf::clamp(out_box, bounds);
return wlr_box(wf::to_framebuffer_box(wf::clamp(wf::from_framebuffer_box(out_box),
wf::from_framebuffer_box(bounds))));
}

wlr_box wf_blur_base::copy_region(wf::auxilliary_buffer_t& result,
Expand Down Expand Up @@ -212,7 +212,7 @@ void wf_blur_base::prepare_blur(const wf::render_target_t& target_fb, const wf::
std::swap(fb[0], fb[1]);
}

prepared_geometry = damage_box;
prepared_geometry = wf::from_framebuffer_box(damage_box);
}

static wf::pointf_t get_center(wf::geometry_t g)
Expand Down Expand Up @@ -264,7 +264,7 @@ void wf_blur_base::render(wf::gles_texture_t src_tex, wlr_box src_box, const wf:
const auto scale_y = 1.0 * view_box.height / blurred_box.height;
glm::mat4 scale = glm::scale(glm::mat4(1.0), glm::vec3{scale_x, scale_y, 1.0});

const wf::pointf_t center_view = get_center(view_box);
const wf::pointf_t center_view = get_center(wf::from_framebuffer_box(view_box));
const wf::pointf_t center_prepared = get_center(blurred_box);
const auto translate_x = 1.0 * (center_view.x - center_prepared.x) / view_box.width;
const auto translate_y = 1.0 * (center_view.y - center_prepared.y) / view_box.height;
Expand All @@ -287,7 +287,8 @@ void wf_blur_base::render(wf::gles_texture_t src_tex, wlr_box src_box, const wf:

for (const auto& box : damage)
{
wf::gles::render_target_logic_scissor(target_fb, wlr_box_from_pixman_box(box));
wf::gles::render_target_logic_scissor(target_fb,
wf::from_framebuffer_box(wlr_box_from_pixman_box(box)));
GL_CALL(glDrawArrays(GL_TRIANGLE_FAN, 0, 4));
}

Expand Down
21 changes: 12 additions & 9 deletions plugins/blur/blur.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>

public:
using transformer_render_instance_t::transformer_render_instance_t;
bool is_fully_opaque(wf::region_t damage)
bool is_fully_opaque(wf::regionf_t damage)
{
if (self->get_children().size() == 1)
{
Expand All @@ -109,7 +109,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>
return false;
}

wf::region_t calculate_translucent_damage(const wf::render_target_t& target, wf::region_t damage)
wf::regionf_t calculate_translucent_damage(const wf::render_target_t& target, wf::regionf_t damage)
{
if (self->get_children().size() == 1)
{
Expand All @@ -120,7 +120,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>
auto opaque_region = opaque->get_opaque_region();
opaque_region.expand_edges(-padding);

wf::region_t translucent_region = damage ^ opaque_region;
wf::regionf_t translucent_region = damage ^ opaque_region;
return translucent_region;
}
}
Expand All @@ -129,7 +129,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>
}

void schedule_instructions(std::vector<render_instruction_t>& instructions,
const wf::render_target_t& target, wf::region_t& damage) override
const wf::render_target_t& target, wf::regionf_t& damage) override
{
const int padding = calculate_damage_padding(target, self->provider()->calculate_blur_radius());
auto bbox = self->get_bounding_box();
Expand Down Expand Up @@ -164,7 +164,7 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>
padded_region &= target.geometry;

// Actual region which will be repainted by this render instance.
wf::region_t we_repaint = padded_region;
wf::regionf_t we_repaint = padded_region;

this->saved_pixels = self->acquire_saved_pixel_buffer();
saved_pixels->region =
Expand Down Expand Up @@ -204,15 +204,18 @@ class blur_render_instance_t : public transformer_render_instance_t<blur_node_t>

void render(const wf::scene::render_instruction_t& data) override
{
auto bounding_box = self->get_bounding_box();
auto bounding_box = wf::to_framebuffer_box(self->get_bounding_box());
data.pass->custom_gles_subpass([&]
{
auto tex = wf::gles_texture_t{get_texture(data.target.scale)};
if (!data.damage.empty())
{
auto translucent_damage = calculate_translucent_damage(data.target, data.damage);
self->provider()->prepare_blur(data.target, translucent_damage);
self->provider()->render(tex, bounding_box, data.damage, data.target, data.target);
auto translucent_damage = calculate_translucent_damage(data.target, data.damage);
auto translucent_damage_fb =
data.target.framebuffer_region_from_geometry_region(translucent_damage);
auto render_damage_fb = data.target.framebuffer_region_from_geometry_region(data.damage);
self->provider()->prepare_blur(data.target, translucent_damage_fb);
self->provider()->render(tex, bounding_box, render_damage_fb, data.target, data.target);
}

GL_CALL(glDisable(GL_SCISSOR_TEST));
Expand Down
62 changes: 34 additions & 28 deletions plugins/common/move-drag-interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ namespace wf
{
namespace move_drag
{
static wf::geometry_t find_geometry_around(wf::dimensions_t size, wf::point_t grab, wf::pointf_t relative)
static wf::geometry_t find_geometry_around(wf::dimensions_t size, wf::pointf_t grab, wf::pointf_t relative)
{
return wf::geometry_t{
grab.x - (int)std::floor(relative.x * size.width),
grab.y - (int)std::floor(relative.y * size.height),
size.width,
size.height,
grab.x - std::floor(relative.x * size.width),
grab.y - std::floor(relative.y * size.height),
(double)size.width,
(double)size.height,
};
}

Expand Down Expand Up @@ -65,7 +65,7 @@ class scale_around_grab_t : public wf::scene::transformer_base_node_t
* The position where the grab appears on the outputs, in output-layout
* coordinates.
*/
wf::point_t grab_position;
wf::pointf_t grab_position;

scale_around_grab_t() : transformer_base_node_t(false)
{}
Expand Down Expand Up @@ -111,7 +111,7 @@ class scale_around_grab_t : public wf::scene::transformer_base_node_t
public:
using transformer_render_instance_t::transformer_render_instance_t;

void transform_damage_region(wf::region_t& region) override
void transform_damage_region(wf::regionf_t& region) override
{
region |= self->get_bounding_box();
}
Expand Down Expand Up @@ -178,7 +178,7 @@ class dragged_view_node_t : public wf::scene::node_t

wf::geometry_t get_bounding_box() override
{
wf::region_t bounding;
wf::regionf_t bounding;
for (auto& view : views)
{
// Note: bbox will be in output layout coordinates now, since this is
Expand All @@ -187,7 +187,13 @@ class dragged_view_node_t : public wf::scene::node_t
bounding |= bbox;
}

return wlr_box_from_pixman_box(bounding.get_extents());
auto extents = bounding.get_extents();
return {
extents.x1,
extents.y1,
extents.x2 - extents.x1,
extents.y2 - extents.y1,
};
}

class dragged_view_render_instance_t : public wf::scene::render_instance_t
Expand Down Expand Up @@ -217,7 +223,7 @@ class dragged_view_node_t : public wf::scene::node_t
all_rendered.push_back(view.view->get_transformed_node());
}

auto push_damage_child = [=] (wf::region_t child_damage)
auto push_damage_child = [=] (wf::regionf_t child_damage)
{
push_damage(last_bbox);
last_bbox = this->self.lock()->get_bounding_box();
Expand All @@ -229,14 +235,15 @@ class dragged_view_node_t : public wf::scene::node_t
push_damage_child,
shown_on);

const int BIG_NUMBER = 1e5;
wf::region_t big_region =
wf::geometry_t{-BIG_NUMBER, -BIG_NUMBER, 2 * BIG_NUMBER, 2 * BIG_NUMBER};
const int BIG_NUMBER = 1e5;
wf::regionf_t big_region{wf::geometry_t{(double)-BIG_NUMBER, (double)-BIG_NUMBER,
2.0 * BIG_NUMBER,
2.0 * BIG_NUMBER}};
children_manager->set_visibility_region(big_region);
}

void schedule_instructions(std::vector<scene::render_instruction_t>& instructions,
const wf::render_target_t& target, wf::region_t& damage) override
const wf::render_target_t& target, wf::regionf_t& damage) override
{
for (auto& inst : children_manager->get_instances())
{
Expand Down Expand Up @@ -304,13 +311,13 @@ core_drag_t::core_drag_t()

core_drag_t::~core_drag_t() = default;

void core_drag_t::rebuild_wobbly(wayfire_toplevel_view view, wf::point_t grab, wf::pointf_t relative)
void core_drag_t::rebuild_wobbly(wayfire_toplevel_view view, wf::pointf_t grab, wf::pointf_t relative)
{
auto dim = wf::dimensions(wf::view_bounding_box_up_to(view, "wobbly"));
modify_wobbly(view, find_geometry_around(dim, grab, relative));
}

bool core_drag_t::should_start_pending_drag(wf::point_t current_position)
bool core_drag_t::should_start_pending_drag(wf::pointf_t current_position)
{
if (!tentative_grab_position.has_value())
{
Expand All @@ -329,9 +336,9 @@ void core_drag_t::start_drag(wayfire_toplevel_view grab_view, wf::pointf_t relat
wf::dassert(!this->view, "Drag operation already in progress!");

auto bbox = wf::view_bounding_box_up_to(grab_view, "wobbly");
wf::point_t rel_grab_pos = {
int(bbox.x + relative.x * bbox.width),
int(bbox.y + relative.y * bbox.height),
wf::pointf_t rel_grab_pos = {
bbox.x + relative.x * bbox.width,
bbox.y + relative.y * bbox.height,
};

if (options.join_views)
Expand Down Expand Up @@ -408,7 +415,7 @@ void core_drag_t::start_drag(wayfire_toplevel_view view, const drag_options_t& o
start_drag(view, find_relative_grab(bbox, *tentative_grab_position), options);
}

void core_drag_t::handle_motion(wf::point_t to)
void core_drag_t::handle_motion(wf::pointf_t to)
{
if (priv->view_held_in_place)
{
Expand Down Expand Up @@ -448,7 +455,7 @@ void core_drag_t::handle_motion(wf::point_t to)
emit(&data);
}

double core_drag_t::distance_to_grab_origin(wf::point_t to) const
double core_drag_t::distance_to_grab_origin(wf::pointf_t to) const
{
return abs(to - *tentative_grab_position);
}
Expand Down Expand Up @@ -537,10 +544,9 @@ bool core_drag_t::is_view_held_in_place()
return priv->view_held_in_place;
}

void core_drag_t::update_current_output(wf::point_t grab)
void core_drag_t::update_current_output(wf::pointf_t grab)
{
wf::pointf_t origin = {1.0 * grab.x, 1.0 * grab.y};
auto output = wf::get_core().output_layout->find_closest_output(origin);
auto output = wf::get_core().output_layout->find_closest_output(grab);
update_current_output(output);
}

Expand Down Expand Up @@ -597,8 +603,8 @@ void adjust_view_on_output(drag_done_signal *ev)
auto output_geometry = ev->focused_output->get_relative_geometry();
auto current_ws = ev->focused_output->wset()->get_current_workspace();
wf::point_t target_ws{
(int)std::floor(1.0 * grab.x / output_geometry.width),
(int)std::floor(1.0 * grab.y / output_geometry.height),
(int)std::floor(grab.x / output_geometry.width),
(int)std::floor(grab.y / output_geometry.height),
};
target_ws = target_ws + current_ws;

Expand All @@ -620,11 +626,11 @@ void adjust_view_on_output(drag_done_signal *ev)
auto bbox = wf::view_bounding_box_up_to(v.view, "wobbly");
auto wm = v.view->get_geometry();

wf::point_t wm_offset = wf::origin(wm) + -wf::origin(bbox);
wf::pointf_t wm_offset = wf::origin(wm) + -wf::origin(bbox);
bbox = wf::move_drag::find_geometry_around(
wf::dimensions(bbox), grab, v.relative_grab);

wf::point_t target = wf::origin(bbox) + wm_offset;
wf::pointf_t target = wf::origin(bbox) + wm_offset;
v.view->move(target.x, target.y);
if (v.view->pending_fullscreen())
{
Expand Down
Loading
Loading