win: Save draggable region.
authorCheng Zhao <zcbenz@gmail.com>
Mon, 9 Sep 2013 04:12:17 +0000 (12:12 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 9 Sep 2013 04:12:17 +0000 (12:12 +0800)
browser/native_window_win.cc
browser/native_window_win.h
vendor/apm

index a358915..63c27d5 100644 (file)
@@ -223,6 +223,26 @@ gfx::NativeWindow NativeWindowWin::GetNativeWindow() {
 
 void NativeWindowWin::UpdateDraggableRegions(
     const std::vector<DraggableRegion>& regions) {
+  if (has_frame_)
+    return;
+
+  SkRegion* draggable_region = new SkRegion;
+
+  // By default, the whole window is non-draggable. We need to explicitly
+  // include those draggable regions.
+  for (std::vector<extensions::DraggableRegion>::const_iterator iter =
+           regions.begin();
+       iter != regions.end(); ++iter) {
+    const extensions::DraggableRegion& region = *iter;
+    draggable_region->op(
+        region.bounds.x(),
+        region.bounds.y(),
+        region.bounds.right(),
+        region.bounds.bottom(),
+        region.draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op);
+  }
+
+  draggable_region_.reset(draggable_region);
 }
 
 void NativeWindowWin::HandleKeyboardEvent(
index 19d9a55..87f5223 100644 (file)
@@ -60,6 +60,8 @@ class NativeWindowWin : public NativeWindow,
   virtual bool IsKiosk() OVERRIDE;
   virtual gfx::NativeWindow GetNativeWindow() OVERRIDE;
 
+  SkRegion* draggable_region() { return draggable_region_.get(); }
+
  protected:
   virtual void UpdateDraggableRegions(
       const std::vector<DraggableRegion>& regions) OVERRIDE;
@@ -85,6 +87,8 @@ class NativeWindowWin : public NativeWindow,
   scoped_ptr<views::Widget> window_;
   views::WebView* web_view_;  // managed by window_.
 
+  scoped_ptr<SkRegion> draggable_region_;
+
   bool resizable_;
   string16 title_;
   gfx::Size minimum_size_;
index 613d152..2c9da12 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 613d15242ac2286eafbfe19e3857580b8adeec8c
+Subproject commit 2c9da12d10e0f8bbcf53bbfbd553ea2cdcb9b02a