Index: chrome/browser/chromeos/ui/accessibility_focus_ring.h |
diff --git a/chrome/browser/chromeos/ui/accessibility_focus_ring.h b/chrome/browser/chromeos/ui/accessibility_focus_ring.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..915472144c0f6cb6290ce00f0ee7d08df4360aa8 |
--- /dev/null |
+++ b/chrome/browser/chromeos/ui/accessibility_focus_ring.h |
@@ -0,0 +1,89 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_CHROMEOS_UI_ACCESSIBILITY_FOCUS_RING_H_ |
+#define CHROME_BROWSER_CHROMEOS_UI_ACCESSIBILITY_FOCUS_RING_H_ |
+ |
+#include "ui/gfx/point.h" |
+#include "ui/gfx/rect.h" |
+ |
+namespace chromeos { |
+ |
+// An AccessibilityFocusRing is a special type of shape designed to |
+// outline the focused object on the screen for users with visual |
+// impairments. It's specifically designed to outline text ranges that |
+// span multiple lines (we'll call this a "paragraph" shape from here on, |
+// but it works for any text range), so it can outline a shape defined by a |
+// few words from the first line, the complete contents of more lines, |
+// followed by a few words from the last line. See the figure below. |
+// When highlighting any other object, it outlines a rectangular shape. |
+// |
+// The outline is outset from the object it's highlighting by a few pixels; |
+// this margin distance also determines its border radius for rounded |
+// corners. |
+// |
+// An AccessibilityFocusRing can be initialized with either a rectangle |
+// defining the bounds of an object, or a paragraph-shape with three |
+// rectangles defining a top line, a body, and a bottom line, which are |
+// assumed to be adjacent to one another. |
+// |
+// Initializing an AccessibilityFocusRing computes the following 36 points |
+// that completely define the shape's outline. This shape can be traced |
+// using Skia or any other drawing utility just by drawing alternating |
+// straight lines and quadratic curves (e.g. a line from 0 to 1, a curve |
+// from 1 to 3 with 2 as a control point, then a line from 3 to 4, and so on. |
+// |
+// The same path should be used even if the focus ring was initialized with |
+// a rectangle and not a paragraph shape - this makes it possible to |
+// smoothly animate between one object and the next simply by interpolating |
+// points. |
+// |
+// Noncontiguous shapes should be handled by drawing multiple focus rings. |
+// |
+// The 36 points are defined as follows: |
+// |
+// 2 3------------------------------4 5 |
+// / \ |
Chirantan Ekbote
2014/09/12 02:39:13
This is a pretty diagram but unfortunately the bac
|
+// 1 6 |
+// | First line of paragraph | |
+// 0 7 |
+// / \ |
+// 32 33-34 35 8 9---------------10 11 |
+// / \ |
+// 31 Middle line of paragraph.......................... 12 |
+// | | |
+// | | |
+// | Middle line of paragraph.......................... | |
+// | | |
+// | | |
+// 30 Middle line of paragraph.......................... 13 |
+// \ / |
+// 29 28---------27 26 17 16---------15 14 |
+// \ / |
+// 25 18 |
+// | Last line of paragraph | |
+// 24 19 |
+// \ / |
+// 23 22-----------------------21 20 |
+ |
+struct AccessibilityFocusRing { |
+ // Construct an AccessibilityFocusRing that outlines a rectangular object. |
+ static AccessibilityFocusRing CreateWithRect( |
+ const gfx::Rect& bounds, int margin); |
+ |
+ // Construct an AccessibilityFocusRing that outlines a paragraph-shaped |
+ // object. |
+ static AccessibilityFocusRing CreateWithParagraphShape( |
+ const gfx::Rect& top_line, |
+ const gfx::Rect& body, |
+ const gfx::Rect& bottom_line, |
+ int margin); |
+ |
+ gfx::Point points[36]; |
+ gfx::Rect GetBounds() const; |
+}; |
+ |
+} // namespace chromeos |
+ |
+#endif // CHROME_BROWSER_CHROMEOS_UI_ACCESSIBILITY_FOCUS_RING_H_ |