summaryrefslogtreecommitdiff
path: root/src/user/raleigh/w
diff options
context:
space:
mode:
authorBenji Dial <benji6283@gmail.com>2021-03-09 11:24:11 -0500
committerBenji Dial <benji6283@gmail.com>2021-03-09 11:24:11 -0500
commit0f2398d1f622cce37925f52d978d92e6cce1c7a9 (patch)
tree68435086d6375a6a5dab2106b1ecfdabb6340fa8 /src/user/raleigh/w
parentfd4557c4adddf710979a42e9f9d470bc8b3f77bd (diff)
downloadportland-os-0f2398d1f622cce37925f52d978d92e6cce1c7a9.tar.gz
making mouse movements only reported to widgets in raleigh if they request it, and making it continue while the mouse is outside the widget (but inside the window)
Diffstat (limited to 'src/user/raleigh/w')
-rw-r--r--src/user/raleigh/w/button.cpp8
-rw-r--r--src/user/raleigh/w/colorpicker.cpp27
-rw-r--r--src/user/raleigh/w/multicontainer.cpp11
-rw-r--r--src/user/raleigh/w/padding.cpp8
4 files changed, 17 insertions, 37 deletions
diff --git a/src/user/raleigh/w/button.cpp b/src/user/raleigh/w/button.cpp
index da88f6a..5b5f756 100644
--- a/src/user/raleigh/w/button.cpp
+++ b/src/user/raleigh/w/button.cpp
@@ -59,12 +59,4 @@ namespace raleigh {
}
void button::notify_has_opaque_parent(widget *parent) {}
-
- void button::on_mouse_move(coord window_coords) {
- if ((window_coords.x >= inner.window_offset.x) &&
- (window_coords.y >= inner.window_offset.y) &&
- (window_coords.x < inner.window_offset.x + inner.size.x) &&
- (window_coords.y < inner.window_offset.y + inner.size.y))
- inner.on_mouse_move(window_coords);
- }
} \ No newline at end of file
diff --git a/src/user/raleigh/w/colorpicker.cpp b/src/user/raleigh/w/colorpicker.cpp
index 4ccd0ce..5a9aa82 100644
--- a/src/user/raleigh/w/colorpicker.cpp
+++ b/src/user/raleigh/w/colorpicker.cpp
@@ -3,7 +3,7 @@
namespace raleigh {
colorpicker::colorpicker(_pixel_t default_color, uint8_t resolution)
: picked_color(default_color), resolution(resolution),
- inv_res(256 / resolution), selected(NO) {
+ inv_res(256 / resolution) {
size = coord(inv_res * 2, inv_res * 2);
closest_opaque = this;
}
@@ -33,12 +33,8 @@ namespace raleigh {
}
void colorpicker::handle_click(coord window_coords, enum mouse_packet::mouse_button click_type, bool up) {
- if (click_type != mouse_packet::LEFT)
+ if (up || (click_type != mouse_packet::LEFT))
return;
- if (up) {
- selected = NO;
- return;
- }
window_coords.x -= window_offset.x;
window_coords.y -= window_offset.y;
if ((window_coords.x < inv_res) && (window_coords.y < inv_res)) {
@@ -57,37 +53,48 @@ namespace raleigh {
picked_color.g = (window_coords.y - inv_res) * resolution;
}
w->notify_needs_paint(*this);
+ w->notify_wants_movements(*this, mouse_packet::LEFT);
}
void colorpicker::notify_has_opaque_parent(widget *parent) {}
void colorpicker::on_mouse_move(coord window_coords) {
- uint32_t x = window_coords.x - window_offset.x;
- uint32_t y = window_coords.y - window_offset.y;
+ int32_t x = window_coords.x - window_offset.x;
+ int32_t y = window_coords.y - window_offset.y;
switch (selected) {
- case NO:
- return;
case R:
if (x >= inv_res)
x = inv_res - 1;
+ if (x < 0)
+ x = 0;
if (y >= inv_res)
y = inv_res - 1;
+ if (y < 0)
+ y = 0;
picked_color.g = x * resolution;
picked_color.b = y * resolution;
break;
case G:
if (x < inv_res)
x = inv_res;
+ if (x >= inv_res * 2)
+ x = inv_res * 2 - 1;
if (y >= inv_res)
y = inv_res - 1;
+ if (y < 0)
+ y = 0;
picked_color.b = x * resolution;
picked_color.r = y * resolution;
break;
case B:
if (x >= inv_res)
x = inv_res - 1;
+ if (x < 0)
+ x = 0;
if (y < inv_res)
y = inv_res;
+ if (y >= inv_res * 2)
+ y = inv_res * 2 - 1;
picked_color.r = x * resolution;
picked_color.g = y * resolution;
break;
diff --git a/src/user/raleigh/w/multicontainer.cpp b/src/user/raleigh/w/multicontainer.cpp
index 3021deb..edc60aa 100644
--- a/src/user/raleigh/w/multicontainer.cpp
+++ b/src/user/raleigh/w/multicontainer.cpp
@@ -39,15 +39,4 @@ namespace raleigh {
set_size(determine_size());
set_child_offsets();
}
-
- void multicontainer::on_mouse_move(coord window_coords) {
- for (dllist<widget &>::node *n = widgets.first; n; n = n->next)
- if ((window_coords.x >= n->d.window_offset.x) &&
- (window_coords.y >= n->d.window_offset.y) &&
- (window_coords.x < n->d.window_offset.x + n->d.size.x) &&
- (window_coords.y < n->d.window_offset.y + n->d.size.y)) {
- n->d.on_mouse_move(window_coords);
- return;
- }
- }
} \ No newline at end of file
diff --git a/src/user/raleigh/w/padding.cpp b/src/user/raleigh/w/padding.cpp
index 21289d4..57ac011 100644
--- a/src/user/raleigh/w/padding.cpp
+++ b/src/user/raleigh/w/padding.cpp
@@ -38,12 +38,4 @@ namespace raleigh {
void padding::notify_child_size_change(widget &child, coord old_size) {
set_size(coord(inner.size.x + pad_by * 2, inner.size.y + pad_by * 2));
}
-
- void padding::on_mouse_move(coord window_coords) {
- if ((window_coords.x >= inner.window_offset.x) &&
- (window_coords.y >= inner.window_offset.y) &&
- (window_coords.x < inner.window_offset.x + inner.size.x) &&
- (window_coords.y < inner.window_offset.y + inner.size.y))
- inner.on_mouse_move(window_coords);
- }
} \ No newline at end of file