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

Side by Side Diff: ui/aura/window.h

Issue 2632543003: Refactor and push window properties up to class properties. (Closed)
Patch Set: More build fixes Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_AURA_WINDOW_H_ 5 #ifndef UI_AURA_WINDOW_H_
6 #define UI_AURA_WINDOW_H_ 6 #define UI_AURA_WINDOW_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <map> 10 #include <map>
11 #include <memory> 11 #include <memory>
12 #include <set> 12 #include <set>
13 #include <string> 13 #include <string>
14 #include <vector> 14 #include <vector>
15 15
16 #include "base/compiler_specific.h" 16 #include "base/compiler_specific.h"
17 #include "base/macros.h" 17 #include "base/macros.h"
18 #include "base/observer_list.h" 18 #include "base/observer_list.h"
19 #include "base/strings/string16.h" 19 #include "base/strings/string16.h"
20 #include "ui/aura/aura_export.h" 20 #include "ui/aura/aura_export.h"
21 #include "ui/aura/window_observer.h" 21 #include "ui/aura/window_observer.h"
22 #include "ui/base/class_property.h"
22 #include "ui/compositor/layer_animator.h" 23 #include "ui/compositor/layer_animator.h"
23 #include "ui/compositor/layer_delegate.h" 24 #include "ui/compositor/layer_delegate.h"
24 #include "ui/compositor/layer_owner.h" 25 #include "ui/compositor/layer_owner.h"
25 #include "ui/events/event_constants.h" 26 #include "ui/events/event_constants.h"
26 #include "ui/events/event_target.h" 27 #include "ui/events/event_target.h"
27 #include "ui/events/event_targeter.h" 28 #include "ui/events/event_targeter.h"
28 #include "ui/events/gestures/gesture_types.h" 29 #include "ui/events/gestures/gesture_types.h"
29 #include "ui/gfx/geometry/insets.h" 30 #include "ui/gfx/geometry/insets.h"
30 #include "ui/gfx/geometry/rect.h" 31 #include "ui/gfx/geometry/rect.h"
31 #include "ui/gfx/native_widget_types.h" 32 #include "ui/gfx/native_widget_types.h"
(...skipping 12 matching lines...) Expand all
44 } 45 }
45 46
46 namespace aura { 47 namespace aura {
47 48
48 class LayoutManager; 49 class LayoutManager;
49 class WindowDelegate; 50 class WindowDelegate;
50 class WindowPort; 51 class WindowPort;
51 class WindowObserver; 52 class WindowObserver;
52 class WindowTreeHost; 53 class WindowTreeHost;
53 54
54 // Defined in window_property.h (which we do not include) 55 // Defined in class_property.h (which we do not include)
55 template<typename T> 56 template<typename T>
56 struct WindowProperty; 57 using WindowProperty = ui::ClassProperty<T>;
57
58 namespace subtle {
59 class PropertyHelper;
60 }
61 58
62 namespace test { 59 namespace test {
63 class WindowTestApi; 60 class WindowTestApi;
64 } 61 }
65 62
66 // Aura window implementation. Interesting events are sent to the 63 // Aura window implementation. Interesting events are sent to the
67 // WindowDelegate. 64 // WindowDelegate.
68 // TODO(beng): resolve ownership. 65 // TODO(beng): resolve ownership.
69 class AURA_EXPORT Window : public ui::LayerDelegate, 66 class AURA_EXPORT Window : public ui::LayerDelegate,
70 public ui::LayerOwner, 67 public ui::LayerOwner,
71 public ui::EventTarget, 68 public ui::EventTarget,
72 public ui::GestureConsumer { 69 public ui::GestureConsumer,
70 public ui::PropertyHandler {
73 public: 71 public:
74 // Initial value of id() for newly created windows. 72 // Initial value of id() for newly created windows.
75 static constexpr int kInitialId = -1; 73 static constexpr int kInitialId = -1;
76 74
77 // Used when stacking windows. 75 // Used when stacking windows.
78 enum StackDirection { 76 enum StackDirection {
79 STACK_ABOVE, 77 STACK_ABOVE,
80 STACK_BELOW 78 STACK_BELOW
81 }; 79 };
82 80
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 void ReleaseCapture(); 283 void ReleaseCapture();
286 284
287 // Returns true if this window has capture. 285 // Returns true if this window has capture.
288 bool HasCapture(); 286 bool HasCapture();
289 287
290 // Suppresses painting window content by disgarding damaged rect and ignoring 288 // Suppresses painting window content by disgarding damaged rect and ignoring
291 // new paint requests. This is a one way operation and there is no way to 289 // new paint requests. This is a one way operation and there is no way to
292 // reenable painting. 290 // reenable painting.
293 void SuppressPaint(); 291 void SuppressPaint();
294 292
295 // Sets the |value| of the given window |property|. Setting to the default
296 // value (e.g., NULL) removes the property. The caller is responsible for the
297 // lifetime of any object set as a property on the Window.
298 template<typename T>
299 void SetProperty(const WindowProperty<T>* property, T value);
300
301 // Returns the value of the given window |property|. Returns the
302 // property-specific default value if the property was not previously set.
303 template<typename T>
304 T GetProperty(const WindowProperty<T>* property) const;
305
306 // Sets the |property| to its default value. Useful for avoiding a cast when
307 // setting to NULL.
308 template<typename T>
309 void ClearProperty(const WindowProperty<T>* property);
310
311 // Returns the value of all properties with a non-default value.
312 std::set<const void*> GetAllPropertKeys() const;
313
314 // NativeWidget::[GS]etNativeWindowProperty use strings as keys, and this is 293 // NativeWidget::[GS]etNativeWindowProperty use strings as keys, and this is
315 // difficult to change while retaining compatibility with other platforms. 294 // difficult to change while retaining compatibility with other platforms.
316 // TODO(benrg): Find a better solution. 295 // TODO(benrg): Find a better solution.
317 void SetNativeWindowProperty(const char* key, void* value); 296 void SetNativeWindowProperty(const char* key, void* value);
318 void* GetNativeWindowProperty(const char* key) const; 297 void* GetNativeWindowProperty(const char* key) const;
319 298
320 // Type of a function to delete a property that this window owns. 299 // Type of a function to delete a property that this window owns.
321 typedef void (*PropertyDeallocator)(int64_t value); 300 //typedef void (*PropertyDeallocator)(int64_t value);
322 301
323 // Overridden from ui::LayerDelegate: 302 // Overridden from ui::LayerDelegate:
324 void OnDeviceScaleFactorChanged(float device_scale_factor) override; 303 void OnDeviceScaleFactorChanged(float device_scale_factor) override;
325 304
326 #if !defined(NDEBUG) 305 #if !defined(NDEBUG)
327 // These methods are useful when debugging. 306 // These methods are useful when debugging.
328 std::string GetDebugInfo() const; 307 std::string GetDebugInfo() const;
329 void PrintWindowHierarchy(int depth) const; 308 void PrintWindowHierarchy(int depth) const;
330 #endif 309 #endif
331 310
332 // Returns true if there was state needing to be cleaned up. 311 // Returns true if there was state needing to be cleaned up.
333 bool CleanupGestureState(); 312 bool CleanupGestureState();
334 313
335 protected: 314 protected:
336 // Deletes (or removes if not owned by parent) all child windows. Intended for 315 // Deletes (or removes if not owned by parent) all child windows. Intended for
337 // use from the destructor. 316 // use from the destructor.
338 void RemoveOrDestroyChildren(); 317 void RemoveOrDestroyChildren();
339 318
319 // Overrides from ui::PropertyHandler
320 std::unique_ptr<ui::PropertyData> BeforePropertyChange(const void* key)
321 override;
322 void AfterPropertyChange(const void* key,
323 int64_t old_value,
324 std::unique_ptr<ui::PropertyData> data) override;
340 private: 325 private:
341 friend class LayoutManager; 326 friend class LayoutManager;
342 friend class PropertyConverter; 327 friend class PropertyConverter;
343 friend class WindowPort; 328 friend class WindowPort;
344 friend class WindowTargeter; 329 friend class WindowTargeter;
345 friend class subtle::PropertyHelper;
346 friend class test::WindowTestApi; 330 friend class test::WindowTestApi;
347 331
348 // Called by the public {Set,Get,Clear}Property functions.
349 int64_t SetPropertyInternal(const void* key,
350 const char* name,
351 PropertyDeallocator deallocator,
352 int64_t value,
353 int64_t default_value);
354 int64_t GetPropertyInternal(const void* key, int64_t default_value) const;
355
356 // Returns true if the mouse pointer at relative-to-this-Window's-origin 332 // Returns true if the mouse pointer at relative-to-this-Window's-origin
357 // |local_point| can trigger an event for this Window. 333 // |local_point| can trigger an event for this Window.
358 // TODO(beng): A Window can supply a hit-test mask to cause some portions of 334 // TODO(beng): A Window can supply a hit-test mask to cause some portions of
359 // itself to not trigger events, causing the events to fall through to the 335 // itself to not trigger events, causing the events to fall through to the
360 // Window behind. 336 // Window behind.
361 bool HitTest(const gfx::Point& local_point); 337 bool HitTest(const gfx::Point& local_point);
362 338
363 // Changes the bounds of the window without condition. 339 // Changes the bounds of the window without condition.
364 void SetBoundsInternal(const gfx::Rect& new_bounds); 340 void SetBoundsInternal(const gfx::Rect& new_bounds);
365 341
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 std::unique_ptr<ui::EventTargeter> targeter_; 480 std::unique_ptr<ui::EventTargeter> targeter_;
505 481
506 // Makes the window pass all events through to any windows behind it. 482 // Makes the window pass all events through to any windows behind it.
507 bool ignore_events_; 483 bool ignore_events_;
508 484
509 // See set_hit_test_bounds_override_inner(). 485 // See set_hit_test_bounds_override_inner().
510 gfx::Insets hit_test_bounds_override_inner_; 486 gfx::Insets hit_test_bounds_override_inner_;
511 487
512 base::ObserverList<WindowObserver, true> observers_; 488 base::ObserverList<WindowObserver, true> observers_;
513 489
514 // Value struct to keep the name and deallocator for this property.
515 // Key cannot be used for this purpose because it can be char* or
516 // WindowProperty<>.
517 struct Value {
518 const char* name;
519 int64_t value;
520 PropertyDeallocator deallocator;
521 };
522
523 std::map<const void*, Value> prop_map_;
524
525 DISALLOW_COPY_AND_ASSIGN(Window); 490 DISALLOW_COPY_AND_ASSIGN(Window);
526 }; 491 };
527 492
528 } // namespace aura 493 } // namespace aura
529 494
530 #endif // UI_AURA_WINDOW_H_ 495 #endif // UI_AURA_WINDOW_H_
OLDNEW
« no previous file with comments | « ui/aura/mus/window_tree_host_mus.cc ('k') | ui/aura/window.cc » ('j') | ui/base/class_property.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698