Index: native_client_sdk/src/examples/mouselock/mouselock.cc |
diff --git a/native_client_sdk/src/examples/mouselock/mouselock.cc b/native_client_sdk/src/examples/mouselock/mouselock.cc |
index b0e18fd50467185587f1f762da88d4c8a7efaede..af40043a1b02922385e06787d1a8d156b32e04ba 100644 |
--- a/native_client_sdk/src/examples/mouselock/mouselock.cc |
+++ b/native_client_sdk/src/examples/mouselock/mouselock.cc |
@@ -10,6 +10,8 @@ |
#include <stdio.h> |
#include <string.h> |
+#include <algorithm> |
+ |
// Indicate the direction of the mouse location relative to the center of the |
// view. These values are used to determine which 2D quadrant the needle lies |
// in. |
@@ -217,12 +219,14 @@ void MouseLockInstance::DrawCenterSpot(pp::ImageData* image, |
int center_y = image->size().height() / 2; |
int region_of_interest_radius = kCentralSpotRadius + 1; |
- for (int y = center_y - region_of_interest_radius; |
- y < center_y + region_of_interest_radius; |
- ++y) { |
- for (int x = center_x - region_of_interest_radius; |
- x < center_x + region_of_interest_radius; |
- ++x) { |
+ pp::Point left_top(std::max(0, center_x - region_of_interest_radius), |
+ std::max(0, center_y - region_of_interest_radius)); |
+ pp::Point right_bottom(std::min(image->size().width(), |
+ center_x + region_of_interest_radius), |
+ std::min(image->size().height(), |
+ center_y + region_of_interest_radius)); |
+ for (int y = left_top.y(); y < right_bottom.y(); ++y) { |
+ for (int x = left_top.x(); x < right_bottom.x(); ++x) { |
if (GetDistance(x, y, center_x, center_y) < kCentralSpotRadius) { |
*image->GetAddr32(pp::Point(x, y)) = spot_color; |
} |
@@ -269,8 +273,14 @@ void MouseLockInstance::DrawNeedle(pp::ImageData* image, |
anchor_1.swap(anchor_2); |
} |
- for (int y = center_y - abs_mouse_y; y < center_y + abs_mouse_y; ++y) { |
- for (int x = center_x - abs_mouse_x; x < center_x + abs_mouse_x; ++x) { |
+ pp::Point left_top(std::max(0, center_x - abs_mouse_x), |
+ std::max(0, center_y - abs_mouse_y)); |
+ pp::Point right_bottom(std::min(image->size().width(), |
+ center_x + abs_mouse_x), |
+ std::min(image->size().height(), |
+ center_y + abs_mouse_y)); |
+ for (int y = left_top.y(); y < right_bottom.y(); ++y) { |
+ for (int x = left_top.x(); x < right_bottom.x(); ++x) { |
bool within_bound_1 = |
((y - anchor_1.y()) * (vertex.x() - anchor_1.x())) > |
((vertex.y() - anchor_1.y()) * (x - anchor_1.x())); |