Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Unified Diff: content/browser/devtools/renderer_overrides_handler.cc

Issue 474243003: DevTools: make eye dropper live (refresh on frame update). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/devtools/renderer_overrides_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/devtools/renderer_overrides_handler.cc
diff --git a/content/browser/devtools/renderer_overrides_handler.cc b/content/browser/devtools/renderer_overrides_handler.cc
index 1d0cf5a2b16ace73fc5f8261d50c84d592f15b9f..cbec8c396012fae62cccae442029604673398fce 100644
--- a/content/browser/devtools/renderer_overrides_handler.cc
+++ b/content/browser/devtools/renderer_overrides_handler.cc
@@ -75,6 +75,8 @@ RendererOverridesHandler::RendererOverridesHandler()
: has_last_compositor_frame_metadata_(false),
capture_retry_count_(0),
color_picker_enabled_(false),
+ last_cursor_x_(-1),
+ last_cursor_y_(-1),
weak_factory_(this) {
RegisterCommandHandler(
devtools::DOM::setFileInputFiles::kName,
@@ -189,7 +191,9 @@ void RendererOverridesHandler::OnVisibilityChanged(bool visible) {
void RendererOverridesHandler::SetRenderViewHost(
RenderViewHostImpl* host) {
host_ = host;
- if (screencast_command_ && host)
+ if (!host)
+ return;
+ if (screencast_command_)
host->SetTouchEventEmulationEnabled(true, true);
if (color_picker_enabled_)
host->AddMouseEventCallback(mouse_event_callback_);
@@ -904,6 +908,8 @@ void RendererOverridesHandler::SetColorPickerEnabled(bool enabled) {
cursor_info.type = blink::WebCursorInfo::TypePointer;
pointer_cursor.InitFromCursorInfo(cursor_info);
host_->SetCursor(pointer_cursor);
+ last_cursor_x_ = -1;
+ last_cursor_y_ = -1;
}
}
@@ -926,19 +932,30 @@ void RendererOverridesHandler::UpdateColorPickerFrame() {
void RendererOverridesHandler::ColorPickerFrameUpdated(
bool succeeded,
const SkBitmap& bitmap) {
- if (succeeded)
+ if (!color_picker_enabled_)
+ return;
+
+ if (succeeded) {
color_picker_frame_ = bitmap;
+ UpdateColorPickerCursor();
+ }
}
bool RendererOverridesHandler::HandleMouseEvent(
const blink::WebMouseEvent& event) {
+ last_cursor_x_ = event.x;
+ last_cursor_y_ = event.y;
if (color_picker_frame_.drawsNothing())
return true;
if (event.button == blink::WebMouseEvent::ButtonLeft) {
- color_picker_frame_.lockPixels();
+ if (last_cursor_x_ < 0 || last_cursor_x_ >= color_picker_frame_.width() ||
+ last_cursor_y_ < 0 || last_cursor_y_ >= color_picker_frame_.height()) {
+ return true;
+ }
+
+ SkAutoLockPixels lock_image(color_picker_frame_);
SkColor color = color_picker_frame_.getColor(event.x, event.y);
dgozman 2014/08/18 13:50:52 last_cursor_x_, last_cursor_y_
pfeldman 2014/08/18 14:20:38 Done.
- color_picker_frame_.unlockPixels();
base::DictionaryValue* color_dict = new base::DictionaryValue();
color_dict->SetInteger("r", SkColorGetR(color));
color_dict->SetInteger("g", SkColorGetG(color));
@@ -948,13 +965,23 @@ bool RendererOverridesHandler::HandleMouseEvent(
response->Set(devtools::Page::colorPicked::kParamColor, color_dict);
SendNotification(devtools::Page::colorPicked::kName, response);
}
+ UpdateColorPickerCursor();
+ return true;
+}
+
+void RendererOverridesHandler::UpdateColorPickerCursor() {
+ if (!host_ || color_picker_frame_.drawsNothing())
+ return;
+
+ if (last_cursor_x_ < 0 || last_cursor_x_ >= color_picker_frame_.width() ||
+ last_cursor_y_ < 0 || last_cursor_y_ >= color_picker_frame_.height()) {
+ return;
+ }
- if (!host_)
- return true;
RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
host_->GetView());
if (!view)
- return true;
+ return;
// Due to platform limitations, we are using two different cursors
// depending on the platform. Mac and Win have large cursors with two circles
@@ -1011,8 +1038,8 @@ bool RendererOverridesHandler::HandleMouseEvent(
// Project pixels.
int pixel_count = kDiameter / kPixelSize;
- SkRect src_rect = SkRect::MakeXYWH(event.x - pixel_count / 2,
- event.y - pixel_count / 2,
+ SkRect src_rect = SkRect::MakeXYWH(last_cursor_x_ - pixel_count / 2,
+ last_cursor_y_ - pixel_count / 2,
pixel_count, pixel_count);
SkRect dst_rect = SkRect::MakeXYWH(padding, padding, kDiameter, kDiameter);
canvas->drawBitmapRectToRect(color_picker_frame_, &src_rect, dst_rect);
@@ -1033,13 +1060,13 @@ bool RendererOverridesHandler::HandleMouseEvent(
(kCursorSize - kPixelSize) / 2,
kPixelSize, kPixelSize);
paint.setColor(SK_ColorRED);
+ paint.setStyle(SkPaint::kStroke_Style);
canvas->drawRect(pixel, paint);
// Paint outline.
paint.setStrokeWidth(2);
paint.setColor(SK_ColorDKGRAY);
paint.setAntiAlias(true);
- paint.setStyle(SkPaint::kStroke_Style);
canvas->drawCircle(kCursorSize / 2, kCursorSize / 2, kDiameter / 2, paint);
SkBitmap result;
@@ -1062,7 +1089,6 @@ bool RendererOverridesHandler::HandleMouseEvent(
cursor.InitFromCursorInfo(cursor_info);
DCHECK(host_);
host_->SetCursor(cursor);
- return true;
}
// Input agent handlers ------------------------------------------------------
« no previous file with comments | « content/browser/devtools/renderer_overrides_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698