Supports gfx::FontList in gfx::Canvas and ui::ElideText family.

This is a part of the plan to support gfx::FontList in views::Label.
https://docs.google.com/a/chromium.org/document/d/1D_25fp9B8b9aZJORfAjDIFq61NWvUquZ5xmKH-VcC4k/edit

BUG=265485

Review URL: https://chromiumcodereview.appspot.com/22835002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218926 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/ui/gfx/canvas.h b/ui/gfx/canvas.h
index 8baa45c..c8996a2 100644
--- a/ui/gfx/canvas.h
+++ b/ui/gfx/canvas.h
@@ -20,6 +20,7 @@
 
 class Rect;
 class Font;
+class FontList;
 class Point;
 class Size;
 class Transform;
@@ -95,17 +96,15 @@
   // Creates canvas with provided DIP |size| and |scale_factor|.
   // If this canvas is not opaque, it's explicitly cleared to transparent before
   // being returned.
-  Canvas(const gfx::Size& size,
-         ui::ScaleFactor scale_factor,
-         bool is_opaque);
+  Canvas(const Size& size, ui::ScaleFactor scale_factor, bool is_opaque);
 
   // Constructs a canvas with the size and the scale factor of the
   // provided |image_rep|, and draws the |image_rep| into it.
-  Canvas(const gfx::ImageSkiaRep& image_rep, bool is_opaque);
+  Canvas(const ImageSkiaRep& image_rep, bool is_opaque);
 
   virtual ~Canvas();
 
-  // Creates a gfx::Canvas backed by an |sk_canvas| with |scale_factor|.
+  // Creates a Canvas backed by an |sk_canvas| with |scale_factor|.
   // |sk_canvas| is assumed to be already scaled based on |scale_factor|
   // so no additional scaling is applied.
   static Canvas* CreateCanvasWithoutScaling(SkCanvas* sk_canvas,
@@ -117,36 +116,47 @@
   // canvas after having initialized the canvas.
   // TODO(pkotwicz): Push the scale factor into skia::PlatformCanvas such that
   // this method can be private.
-  void RecreateBackingCanvas(const gfx::Size& size,
+  void RecreateBackingCanvas(const Size& size,
                              ui::ScaleFactor scale_factor,
                              bool is_opaque);
 
-  // Compute the size required to draw some text with the provided font.
+  // Compute the size required to draw some text with the provided fonts.
   // Attempts to fit the text with the provided width and height. Increases
   // height and then width as needed to make the text fit. This method
   // supports multiple lines. On Skia only a line_height can be specified and
   // specifying a 0 value for it will cause the default height to be used.
   static void SizeStringInt(const base::string16& text,
-                            const gfx::Font& font,
-                            int* width, int* height,
+                            const FontList& font_list,
+                            int* width,
+                            int* height,
+                            int line_height,
+                            int flags);
+  // Obsolete version.  Use the above version which takes FontList.
+  static void SizeStringInt(const base::string16& text,
+                            const Font& font,
+                            int* width,
+                            int* height,
                             int line_height,
                             int flags);
 
   // Returns the number of horizontal pixels needed to display the specified
-  // |text| with |font|.
-  static int GetStringWidth(const base::string16& text, const gfx::Font& font);
+  // |text| with |font_list|.
+  static int GetStringWidth(const base::string16& text,
+                            const FontList& font_list);
+  // Obsolete version.  Use the above version which takes FontList.
+  static int GetStringWidth(const base::string16& text, const Font& font);
 
   // Returns the default text alignment to be used when drawing text on a
-  // gfx::Canvas based on the directionality of the system locale language.
-  // This function is used by gfx::Canvas::DrawStringInt when the text alignment
+  // Canvas based on the directionality of the system locale language.
+  // This function is used by Canvas::DrawStringInt when the text alignment
   // is not specified.
   //
-  // This function returns either gfx::Canvas::TEXT_ALIGN_LEFT or
-  // gfx::Canvas::TEXT_ALIGN_RIGHT.
+  // This function returns either Canvas::TEXT_ALIGN_LEFT or
+  // Canvas::TEXT_ALIGN_RIGHT.
   static int DefaultCanvasTextAlignment();
 
   // Draws text with a 1-pixel halo around it of the given color.
-  // On Windows, it allows ClearType to be drawn to an otherwise transparenct
+  // On Windows, it allows ClearType to be drawn to an otherwise transparent
   //   bitmap for drag images. Drag images have only 1-bit of transparency, so
   //   we don't do any fancy blurring.
   // On Linux, text with halo is created by stroking it with 2px |halo_color|
@@ -154,18 +164,28 @@
   // On Mac, NOTIMPLEMENTED.
   //   TODO(dhollowa): Skia-native implementation is underway.  Cut over to
   //   that when ready.  http::/crbug.com/109946
+  void DrawStringRectWithHalo(const base::string16& text,
+                              const FontList& font_list,
+                              SkColor text_color,
+                              SkColor halo_color,
+                              const Rect& display_rect,
+                              int flags);
+  // Obsolete version.  Use the above version which takes FontList.
   void DrawStringWithHalo(const base::string16& text,
-                          const gfx::Font& font,
+                          const Font& font,
                           SkColor text_color,
                           SkColor halo_color,
-                          int x, int y, int w, int h,
+                          int x,
+                          int y,
+                          int w,
+                          int h,
                           int flags);
 
   // Extracts an ImageSkiaRep from the contents of this canvas.
-  gfx::ImageSkiaRep ExtractImageRep() const;
+  ImageSkiaRep ExtractImageRep() const;
 
   // Draws a dashed rectangle of the specified color.
-  void DrawDashedRect(const gfx::Rect& rect, SkColor color);
+  void DrawDashedRect(const Rect& rect, SkColor color);
 
   // Saves a copy of the drawing state onto a stack, operating on this copy
   // until a balanced call to Restore() is made.
@@ -176,7 +196,7 @@
   // |layer_bounds| are the bounds of the layer relative to the current
   // transform.
   void SaveLayerAlpha(uint8 alpha);
-  void SaveLayerAlpha(uint8 alpha, const gfx::Rect& layer_bounds);
+  void SaveLayerAlpha(uint8 alpha, const Rect& layer_bounds);
 
   // Restores the drawing state after a call to Save*(). It is an error to
   // call Restore() more times than Save*().
@@ -184,7 +204,7 @@
 
   // Adds |rect| to the current clip. Returns true if the resulting clip is
   // non-empty.
-  bool ClipRect(const gfx::Rect& rect);
+  bool ClipRect(const Rect& rect);
 
   // Adds |path| to the current clip. Returns true if the resulting clip is
   // non-empty.
@@ -192,9 +212,9 @@
 
   // Returns the bounds of the current clip (in local coordinates) in the
   // |bounds| parameter, and returns true if it is non empty.
-  bool GetClipBounds(gfx::Rect* bounds);
+  bool GetClipBounds(Rect* bounds);
 
-  void Translate(const gfx::Vector2d& offset);
+  void Translate(const Vector2d& offset);
 
   void Scale(int x_scale, int y_scale);
 
@@ -208,45 +228,43 @@
 
   // Fills |rect| with |color| using a transfer mode of
   // SkXfermode::kSrcOver_Mode.
-  void FillRect(const gfx::Rect& rect, SkColor color);
+  void FillRect(const Rect& rect, SkColor color);
 
   // Fills |rect| with the specified |color| and |mode|.
-  void FillRect(const gfx::Rect& rect, SkColor color, SkXfermode::Mode mode);
+  void FillRect(const Rect& rect, SkColor color, SkXfermode::Mode mode);
 
   // Draws a single pixel rect in the specified region with the specified
   // color, using a transfer mode of SkXfermode::kSrcOver_Mode.
   //
   // NOTE: if you need a single pixel line, use DrawLine.
-  void DrawRect(const gfx::Rect& rect, SkColor color);
+  void DrawRect(const Rect& rect, SkColor color);
 
   // Draws a single pixel rect in the specified region with the specified
   // color and transfer mode.
   //
   // NOTE: if you need a single pixel line, use DrawLine.
-  void DrawRect(const gfx::Rect& rect, SkColor color, SkXfermode::Mode mode);
+  void DrawRect(const Rect& rect, SkColor color, SkXfermode::Mode mode);
 
   // Draws the given rectangle with the given |paint| parameters.
-  void DrawRect(const gfx::Rect& rect, const SkPaint& paint);
+  void DrawRect(const Rect& rect, const SkPaint& paint);
 
   // Draw the given point with the given |paint| parameters.
-  void DrawPoint(const gfx::Point& p, const SkPaint& paint);
+  void DrawPoint(const Point& p, const SkPaint& paint);
 
   // Draws a single pixel line with the specified color.
-  void DrawLine(const gfx::Point& p1, const gfx::Point& p2, SkColor color);
+  void DrawLine(const Point& p1, const Point& p2, SkColor color);
 
   // Draws a line with the given |paint| parameters.
-  void DrawLine(const gfx::Point& p1,
-                const gfx::Point& p2,
-                const SkPaint& paint);
+  void DrawLine(const Point& p1, const Point& p2, const SkPaint& paint);
 
   // Draws a circle with the given |paint| parameters.
-  void DrawCircle(const gfx::Point& center_point,
+  void DrawCircle(const Point& center_point,
                   int radius,
                   const SkPaint& paint);
 
   // Draws the given rectangle with rounded corners of |radius| using the
   // given |paint| parameters.
-  void DrawRoundRect(const gfx::Rect& rect, int radius, const SkPaint& paint);
+  void DrawRoundRect(const Rect& rect, int radius, const SkPaint& paint);
 
   // Draws the given path using the given |paint| parameters.
   void DrawPath(const SkPath& path, const SkPaint& paint);
@@ -255,19 +273,20 @@
   // corner of the bitmap is rendered at the specified location.
   // Parameters are specified relative to current canvas scale not in pixels.
   // Thus, x is 2 pixels if canvas scale = 2 & |x| = 1.
-  void DrawImageInt(const gfx::ImageSkia&, int x, int y);
+  void DrawImageInt(const ImageSkia&, int x, int y);
 
   // Helper for DrawImageInt(..., paint) that constructs a temporary paint and
   // calls paint.setAlpha(alpha).
-  void DrawImageInt(const gfx::ImageSkia&, int x, int y, uint8 alpha);
+  void DrawImageInt(const ImageSkia&, int x, int y, uint8 alpha);
 
   // Draws an image with the origin at the specified location, using the
   // specified paint. The upper left corner of the bitmap is rendered at the
   // specified location.
   // Parameters are specified relative to current canvas scale not in pixels.
   // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1.
-  void DrawImageInt(const gfx::ImageSkia& image,
-                    int x, int y,
+  void DrawImageInt(const ImageSkia& image,
+                    int x,
+                    int y,
                     const SkPaint& paint);
 
   // Draws a portion of an image in the specified location. The src parameters
@@ -282,13 +301,25 @@
   // An optional custom SkPaint can be provided.
   // Parameters are specified relative to current canvas scale not in pixels.
   // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1.
-  void DrawImageInt(const gfx::ImageSkia& image,
-                    int src_x, int src_y, int src_w, int src_h,
-                    int dest_x, int dest_y, int dest_w, int dest_h,
+  void DrawImageInt(const ImageSkia& image,
+                    int src_x,
+                    int src_y,
+                    int src_w,
+                    int src_h,
+                    int dest_x,
+                    int dest_y,
+                    int dest_w,
+                    int dest_h,
                     bool filter);
-  void DrawImageInt(const gfx::ImageSkia& image,
-                    int src_x, int src_y, int src_w, int src_h,
-                    int dest_x, int dest_y, int dest_w, int dest_h,
+  void DrawImageInt(const ImageSkia& image,
+                    int src_x,
+                    int src_y,
+                    int src_w,
+                    int src_h,
+                    int dest_x,
+                    int dest_y,
+                    int dest_w,
+                    int dest_h,
                     bool filter,
                     const SkPaint& paint);
 
@@ -296,59 +327,96 @@
   // |path|.
   // Parameters are specified relative to current canvas scale not in pixels.
   // Thus, x is 2 pixels if canvas scale = 2 & |x| = 1.
-  void DrawImageInPath(const gfx::ImageSkia& image,
+  void DrawImageInPath(const ImageSkia& image,
                        int x,
                        int y,
                        const SkPath& path,
                        const SkPaint& paint);
 
-  // Draws text with the specified color, font and location. The text is
+  // Draws text with the specified color, fonts and location. The text is
   // aligned to the left, vertically centered, clipped to the region. If the
   // text is too big, it is truncated and '...' is added to the end.
+  void DrawStringRect(const base::string16& text,
+                      const FontList& font_list,
+                      SkColor color,
+                      const Rect& display_rect);
+  // Obsolete versions.  Use the above versions which take FontList.
   void DrawStringInt(const base::string16& text,
-                     const gfx::Font& font,
+                     const Font& font,
                      SkColor color,
-                     int x, int y, int w, int h);
+                     int x,
+                     int y,
+                     int w,
+                     int h);
   void DrawStringInt(const base::string16& text,
-                     const gfx::Font& font,
+                     const Font& font,
                      SkColor color,
-                     const gfx::Rect& display_rect);
+                     const Rect& display_rect);
 
-  // Draws text with the specified color, font and location. The last argument
+  // Draws text with the specified color, fonts and location. The last argument
   // specifies flags for how the text should be rendered. It can be one of
   // TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT or TEXT_ALIGN_LEFT.
+  void DrawStringRectWithFlags(const base::string16& text,
+                               const FontList& font_list,
+                               SkColor color,
+                               const Rect& display_rect,
+                               int flags);
+  // Obsolete version.  Use the above version which takes FontList.
   void DrawStringInt(const base::string16& text,
-                     const gfx::Font& font,
+                     const Font& font,
                      SkColor color,
-                     int x, int y, int w, int h,
+                     int x,
+                     int y,
+                     int w,
+                     int h,
                      int flags);
 
   // Similar to above DrawStringInt method but with text shadows support.
   // Currently it's only implemented for canvas skia. Specifying a 0 line_height
   // will cause the default height to be used.
+  void DrawStringRectWithShadows(const base::string16& text,
+                                 const FontList& font_list,
+                                 SkColor color,
+                                 const Rect& text_bounds,
+                                 int line_height,
+                                 int flags,
+                                 const ShadowValues& shadows);
+  // Obsolete version.  Use the above version which takes FontList.
   void DrawStringWithShadows(const base::string16& text,
-                             const gfx::Font& font,
+                             const Font& font,
                              SkColor color,
-                             const gfx::Rect& text_bounds,
+                             const Rect& text_bounds,
                              int line_height,
                              int flags,
                              const ShadowValues& shadows);
 
   // Draws a dotted gray rectangle used for focus purposes.
-  void DrawFocusRect(const gfx::Rect& rect);
+  void DrawFocusRect(const Rect& rect);
 
   // Tiles the image in the specified region.
   // Parameters are specified relative to current canvas scale not in pixels.
   // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1.
-  void TileImageInt(const gfx::ImageSkia& image,
-                    int x, int y, int w, int h);
-  void TileImageInt(const gfx::ImageSkia& image,
-                    int src_x, int src_y,
-                    int dest_x, int dest_y, int w, int h);
-  void TileImageInt(const gfx::ImageSkia& image,
-                    int src_x, int src_y,
-                    float tile_scale_x, float tile_scale_y,
-                    int dest_x, int dest_y, int w, int h);
+  void TileImageInt(const ImageSkia& image,
+                    int x,
+                    int y,
+                    int w,
+                    int h);
+  void TileImageInt(const ImageSkia& image,
+                    int src_x,
+                    int src_y,
+                    int dest_x,
+                    int dest_y,
+                    int w,
+                    int h);
+  void TileImageInt(const ImageSkia& image,
+                    int src_x,
+                    int src_y,
+                    float tile_scale_x,
+                    float tile_scale_y,
+                    int dest_x,
+                    int dest_y,
+                    int w,
+                    int h);
 
   // Returns a native drawing context for platform specific drawing routines to
   // use. Must be balanced by a call to EndPlatformPaint().
@@ -359,19 +427,27 @@
   void EndPlatformPaint();
 
   // Apply transformation on the canvas.
-  void Transform(const gfx::Transform& transform);
+  void Transform(const Transform& transform);
 
   // Draws the given string with the beginning and/or the end using a fade
   // gradient. When truncating the head
   // |desired_characters_to_truncate_from_head| specifies the maximum number of
   // characters that can be truncated.
+  void DrawFadeTruncatingStringRect(
+      const base::string16& text,
+      TruncateFadeMode truncate_mode,
+      size_t desired_characters_to_truncate_from_head,
+      const FontList& font_list,
+      SkColor color,
+      const Rect& display_rect);
+  // Obsolete version.  Use the above version which takes FontList.
   void DrawFadeTruncatingString(
       const base::string16& text,
       TruncateFadeMode truncate_mode,
       size_t desired_characters_to_truncate_from_head,
-      const gfx::Font& font,
+      const Font& font,
       SkColor color,
-      const gfx::Rect& display_rect);
+      const Rect& display_rect);
 
   skia::PlatformCanvas* platform_canvas() const { return owned_canvas_.get(); }
   SkCanvas* sk_canvas() const { return canvas_; }
@@ -382,19 +458,18 @@
 
   // Test whether the provided rectangle intersects the current clip rect.
   bool IntersectsClipRectInt(int x, int y, int w, int h);
-  bool IntersectsClipRect(const gfx::Rect& rect);
+  bool IntersectsClipRect(const Rect& rect);
 
   // Returns the image rep which best matches the canvas |scale_factor_|.
   // Returns a null image rep if |image| contains no image reps.
   // Builds mip map for returned image rep if necessary.
   //
   // An optional additional user defined scale can be provided.
-  const gfx::ImageSkiaRep& GetImageRepToPaint(
-      const gfx::ImageSkia& image) const;
-  const gfx::ImageSkiaRep& GetImageRepToPaint(
-      const gfx::ImageSkia& image,
+  const ImageSkiaRep& GetImageRepToPaint(const ImageSkia& image) const;
+  const ImageSkiaRep& GetImageRepToPaint(
+      const ImageSkia& image,
       float user_defined_scale_factor_x,
-      float user_defined_scale_factor_y)  const;
+      float user_defined_scale_factor_y) const;
 
   // The device scale factor at which drawing on this canvas occurs.
   // An additional scale can be applied via Canvas::Scale(). However,