Skip to content
Merged
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
2 changes: 1 addition & 1 deletion metadata/crosshair.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<_short>Crosshair</_short>
<_long>Render fullscreen mouse crosshair</_long>
<category>Utility</category>
<option name="line_width" type="int">
<option name="line_width" type="double">
<_short>Line Width</_short>
<_long>Line width of crosshair</_long>
<default>2</default>
Expand Down
97 changes: 47 additions & 50 deletions src/annotate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,26 +80,23 @@ class simple_node_render_instance_t : public render_instance_t
node_t *self;
damage_callback push_to_parent;
std::shared_ptr<anno_ws_overlay> overlay, shape_overlay;
int *x, *y, *w, *h;
wf::geometry_t *geometry;

public:
simple_node_render_instance_t(node_t *self, damage_callback push_dmg,
int *x, int *y, int *w, int *h, std::shared_ptr<anno_ws_overlay> overlay,
wf::geometry_t *geometry, std::shared_ptr<anno_ws_overlay> overlay,
std::shared_ptr<anno_ws_overlay> shape_overlay)
{
this->x = x;
this->y = y;
this->w = w;
this->h = h;
this->self = self;
this->overlay = overlay;
this->geometry = geometry;
this->self = self;
this->overlay = overlay;
this->shape_overlay = shape_overlay;
this->push_to_parent = push_dmg;
self->connect(&on_node_damaged);
}

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
{
// We want to render ourselves only, the node does not have children
instructions.push_back(render_instruction_t{
Expand All @@ -111,15 +108,15 @@ class simple_node_render_instance_t : public render_instance_t

void render(const wf::scene::render_instruction_t& data) override
{
auto ol = this->overlay;
wlr_box og = {*x, *y, *w, *h};
auto ol = this->overlay;
wf::geometry_t og = *geometry;

data.pass->custom_gles_subpass([&]
{
wf::gles::bind_render_buffer(data.target);
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);
if (ol->cr)
{
OpenGL::render_texture(wf::gles_texture_t{ol->texture->tex}, data.target, og,
Expand All @@ -139,16 +136,16 @@ class simple_node_render_instance_t : public render_instance_t

class simple_node_t : public node_t
{
int x, y, w, h;
wf::geometry_t geometry;

public:
std::shared_ptr<anno_ws_overlay> overlay, shape_overlay;
simple_node_t(int x, int y, int w, int h) : node_t(false)
{
this->x = x;
this->y = y;
this->w = w;
this->h = h;
this->geometry.x = x;
this->geometry.y = y;
this->geometry.width = w;
this->geometry.height = h;
overlay = std::make_shared<anno_ws_overlay>();
shape_overlay = std::make_shared<anno_ws_overlay>();
}
Expand All @@ -161,10 +158,10 @@ class simple_node_t : public node_t
// this simple nodes does not need any transformations, so the push_damage
// callback is just passed along.
instances.push_back(std::make_unique<simple_node_render_instance_t>(
this, push_damage, &x, &y, &w, &h, overlay, shape_overlay));
this, push_damage, &geometry, overlay, shape_overlay));
}

void do_push_damage(wf::region_t updated_region)
void do_push_damage(wf::regionf_t updated_region)
{
node_damage_signal ev;
ev.region = updated_region;
Expand All @@ -174,19 +171,19 @@ class simple_node_t : public node_t
wf::geometry_t get_bounding_box() override
{
// Specify whatever geometry your node has
return {x, y, w, h};
return geometry;
}

void set_position(int x, int y)
{
this->x = x;
this->y = y;
this->geometry.x = x;
this->geometry.y = y;
}

void set_size(int w, int h)
{
this->w = w;
this->h = h;
this->geometry.width = w;
this->geometry.height = h;
}
};

Expand All @@ -201,7 +198,7 @@ std::shared_ptr<simple_node_t> add_simple_node(wf::output_t *output, int x, int
class wayfire_annotate_screen : public wf::per_output_plugin_instance_t, public wf::pointer_interaction_t
{
uint32_t button;
wlr_box last_bbox;
wf::geometry_t last_bbox;
annotate_draw_method draw_method;
wf::pointf_t grab_point, last_cursor;
std::vector<std::vector<std::shared_ptr<simple_node_t>>> overlays;
Expand Down Expand Up @@ -519,15 +516,15 @@ class wayfire_annotate_screen : public wf::per_output_plugin_instance_t, public
cairo_line_to(cr, to.x, to.y);
cairo_stroke(cr);

wlr_box bbox;
wf::geometry_t bbox;
int padding = line_width + 1;
bbox.x = std::min(from.x, to.x) - padding;
bbox.y = std::min(from.y, to.y) - padding;
bbox.width = abs(from.x - to.x) + padding * 2;
bbox.height = abs(from.y - to.y) + padding * 2;
get_node_overlay()->do_push_damage(wf::region_t(bbox));
bbox.width = std::abs(from.x - to.x) + padding * 2;
bbox.height = std::abs(from.y - to.y) + padding * 2;
get_node_overlay()->do_push_damage(wf::regionf_t(bbox));
cairo_surface_upload_to_texture_with_damage(ol->cairo_surface, *ol->texture,
bbox);
wf::to_integer_box(bbox));
}

bool should_damage_last()
Expand Down Expand Up @@ -563,14 +560,14 @@ class wayfire_annotate_screen : public wf::per_output_plugin_instance_t, public
cairo_line_to(cr, to.x, to.y);
cairo_stroke(cr);

wlr_box bbox;
wf::geometry_t bbox;
int padding = line_width + 1;
bbox.x = std::min(from.x, to.x) - padding;
bbox.y = std::min(from.y, to.y) - padding;
bbox.width = abs(from.x - to.x) + padding * 2;
bbox.height = abs(from.y - to.y) + padding * 2;
bbox.width = std::abs(from.x - to.x) + padding * 2;
bbox.height = std::abs(from.y - to.y) + padding * 2;
output->render->damage(bbox);
wf::region_t damage_region{bbox};
wf::regionf_t damage_region{bbox};
if (damage_last_bbox)
{
output->render->damage(last_bbox);
Expand All @@ -579,14 +576,14 @@ class wayfire_annotate_screen : public wf::per_output_plugin_instance_t, public

damage_region &= output->get_relative_geometry();
auto damage_extents = damage_region.get_extents();
wlr_box damage_box =
auto damage_box = wf::to_integer_box(wf::geometry_t
{damage_extents.x1, damage_extents.y1, damage_extents.x2 - damage_extents.x1,
damage_extents.y2 - damage_extents.y1};
damage_extents.y2 - damage_extents.y1});
cairo_surface_upload_to_texture_with_damage(ol->cairo_surface, *ol->texture,
damage_box);

get_node_overlay()->do_push_damage(wf::region_t(last_bbox));
get_node_overlay()->do_push_damage(wf::region_t(bbox));
get_node_overlay()->do_push_damage(wf::regionf_t(last_bbox));
get_node_overlay()->do_push_damage(wf::regionf_t(bbox));
last_bbox = bbox;
}

Expand Down Expand Up @@ -632,14 +629,14 @@ class wayfire_annotate_screen : public wf::per_output_plugin_instance_t, public
cairo_rectangle(cr, x, y, w, h);
cairo_stroke(cr);

wlr_box bbox;
wf::geometry_t bbox;
int padding = line_width + 1;
bbox.x = x - padding;
bbox.y = y - padding;
bbox.width = w + padding * 2;
bbox.height = h + padding * 2;
output->render->damage(bbox);
wf::region_t damage_region{bbox};
wf::regionf_t damage_region{bbox};
if (damage_last_bbox)
{
output->render->damage(last_bbox);
Expand All @@ -648,14 +645,14 @@ class wayfire_annotate_screen : public wf::per_output_plugin_instance_t, public

damage_region &= output->get_relative_geometry();
auto damage_extents = damage_region.get_extents();
wlr_box damage_box =
auto damage_box = wf::to_integer_box(wf::geometry_t
{damage_extents.x1, damage_extents.y1, damage_extents.x2 - damage_extents.x1,
damage_extents.y2 - damage_extents.y1};
damage_extents.y2 - damage_extents.y1});
cairo_surface_upload_to_texture_with_damage(ol->cairo_surface, *ol->texture,
damage_box);

get_node_overlay()->do_push_damage(wf::region_t(last_bbox));
get_node_overlay()->do_push_damage(wf::region_t(bbox));
get_node_overlay()->do_push_damage(wf::regionf_t(last_bbox));
get_node_overlay()->do_push_damage(wf::regionf_t(bbox));
last_bbox = bbox;
}

Expand Down Expand Up @@ -695,14 +692,14 @@ class wayfire_annotate_screen : public wf::per_output_plugin_instance_t, public
cairo_arc(cr, from.x, from.y, radius, 0, 2 * M_PI);
cairo_stroke(cr);

wlr_box bbox;
wf::geometry_t bbox;
int padding = line_width + 1;
bbox.x = (from.x - radius) - padding;
bbox.y = (from.y - radius) - padding;
bbox.width = (radius * 2) + padding * 2;
bbox.height = (radius * 2) + padding * 2;
output->render->damage(bbox);
wf::region_t damage_region{bbox};
wf::regionf_t damage_region{bbox};
if (damage_last_bbox)
{
output->render->damage(last_bbox);
Expand All @@ -711,14 +708,14 @@ class wayfire_annotate_screen : public wf::per_output_plugin_instance_t, public

damage_region &= output->get_relative_geometry();
auto damage_extents = damage_region.get_extents();
wlr_box damage_box =
auto damage_box = wf::to_integer_box(wf::geometry_t
{damage_extents.x1, damage_extents.y1, damage_extents.x2 - damage_extents.x1,
damage_extents.y2 - damage_extents.y1};
damage_extents.y2 - damage_extents.y1});
cairo_surface_upload_to_texture_with_damage(ol->cairo_surface, *ol->texture,
damage_box);

get_node_overlay()->do_push_damage(wf::region_t(last_bbox));
get_node_overlay()->do_push_damage(wf::region_t(bbox));
get_node_overlay()->do_push_damage(wf::regionf_t(last_bbox));
get_node_overlay()->do_push_damage(wf::regionf_t(bbox));
last_bbox = bbox;
}

Expand Down
12 changes: 6 additions & 6 deletions src/crosshair.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

class wayfire_crosshair : public wf::per_output_plugin_instance_t
{
wf::option_wrapper_t<int> line_width{"crosshair/line_width"};
wf::option_wrapper_t<double> line_width{"crosshair/line_width"};
wf::option_wrapper_t<wf::color_t> line_color{"crosshair/line_color"};
wf::geometry_t geometry[2];

Expand All @@ -56,9 +56,9 @@ class wayfire_crosshair : public wf::per_output_plugin_instance_t
output->render->damage(geometry[1]);

geometry[0] =
wf::geometry_t{int(oc.x - half_width), 0, line_width, og.height};
wf::geometry_t{oc.x - half_width, 0, line_width, og.height};
geometry[1] =
wf::geometry_t{0, int(oc.y - half_width), og.width, line_width};
wf::geometry_t{0, oc.y - half_width, og.width, line_width};

output->render->damage(geometry[0]);
output->render->damage(geometry[1]);
Expand All @@ -68,17 +68,17 @@ class wayfire_crosshair : public wf::per_output_plugin_instance_t
{
auto target_fb = output->render->get_target_framebuffer();
auto gc = wf::get_core().get_cursor_position();
wf::point_t coords{(int)gc.x, (int)gc.y};
wf::pointf_t coords{gc.x, gc.y};

if (!(output->get_layout_geometry() & coords))
{
return;
}

wf::region_t region;
wf::regionf_t region;
region |= geometry[0];
region |= geometry[1];
region &= output->render->get_swap_damage();
region &= target_fb.geometry_region_from_framebuffer_region(output->render->get_swap_damage());

auto alpha = wf::color_t(line_color).a;
wf::color_t color = wf::color_t{
Expand Down
Loading
Loading