| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "ui/gfx/paint_vector_icon.h" | 5 #include "ui/gfx/paint_vector_icon.h" |
| 6 | 6 |
| 7 #include "ui/gfx/canvas.h" | 7 #include "ui/gfx/canvas.h" |
| 8 #include "ui/gfx/image/canvas_image_source.h" | 8 #include "ui/gfx/image/canvas_image_source.h" |
| 9 #include "ui/gfx/vector_icon_types.h" | 9 #include "ui/gfx/vector_icon_types.h" |
| 10 #include "ui/gfx/vector_icons2.h" | 10 #include "ui/gfx/vector_icons2.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 SkColor color) { | 44 SkColor color) { |
| 45 DCHECK(VectorIconId::VECTOR_ICON_NONE != id); | 45 DCHECK(VectorIconId::VECTOR_ICON_NONE != id); |
| 46 const PathElement* path_elements = GetPathForVectorIcon(id); | 46 const PathElement* path_elements = GetPathForVectorIcon(id); |
| 47 SkPath path; | 47 SkPath path; |
| 48 path.setFillType(SkPath::kEvenOdd_FillType); | 48 path.setFillType(SkPath::kEvenOdd_FillType); |
| 49 if (dip_size != kReferenceSizeDip) { | 49 if (dip_size != kReferenceSizeDip) { |
| 50 SkScalar scale = SkIntToScalar(dip_size) / SkIntToScalar(kReferenceSizeDip); | 50 SkScalar scale = SkIntToScalar(dip_size) / SkIntToScalar(kReferenceSizeDip); |
| 51 canvas->sk_canvas()->scale(scale, scale); | 51 canvas->sk_canvas()->scale(scale, scale); |
| 52 } | 52 } |
| 53 | 53 |
| 54 for (size_t i = 0; path_elements[i].type != END;) { | 54 for (size_t i = 0; path_elements[i].type != END; i++) { |
| 55 switch (path_elements[i++].type) { | 55 switch (path_elements[i].type) { |
| 56 case MOVE_TO: { | 56 case MOVE_TO: { |
| 57 SkScalar x = path_elements[i++].arg; | 57 SkScalar x = path_elements[++i].arg; |
| 58 SkScalar y = path_elements[i++].arg; | 58 SkScalar y = path_elements[++i].arg; |
| 59 path.moveTo(x, y); | 59 path.moveTo(x, y); |
| 60 break; | 60 break; |
| 61 } | 61 } |
| 62 | 62 |
| 63 case R_MOVE_TO: { | 63 case R_MOVE_TO: { |
| 64 SkScalar x = path_elements[i++].arg; | 64 SkScalar x = path_elements[++i].arg; |
| 65 SkScalar y = path_elements[i++].arg; | 65 SkScalar y = path_elements[++i].arg; |
| 66 path.rMoveTo(x, y); | 66 path.rMoveTo(x, y); |
| 67 break; | 67 break; |
| 68 } | 68 } |
| 69 | 69 |
| 70 case LINE_TO: { | 70 case LINE_TO: { |
| 71 SkScalar x = path_elements[i++].arg; | 71 SkScalar x = path_elements[++i].arg; |
| 72 SkScalar y = path_elements[i++].arg; | 72 SkScalar y = path_elements[++i].arg; |
| 73 path.lineTo(x, y); | 73 path.lineTo(x, y); |
| 74 break; | 74 break; |
| 75 } | 75 } |
| 76 | 76 |
| 77 case R_LINE_TO: { | 77 case R_LINE_TO: { |
| 78 SkScalar x = path_elements[i++].arg; | 78 SkScalar x = path_elements[++i].arg; |
| 79 SkScalar y = path_elements[i++].arg; | 79 SkScalar y = path_elements[++i].arg; |
| 80 path.rLineTo(x, y); | 80 path.rLineTo(x, y); |
| 81 break; | 81 break; |
| 82 } | 82 } |
| 83 | 83 |
| 84 case H_LINE_TO: { | 84 case H_LINE_TO: { |
| 85 SkPoint last_point; | 85 SkPoint last_point; |
| 86 path.getLastPt(&last_point); | 86 path.getLastPt(&last_point); |
| 87 SkScalar x = path_elements[i++].arg; | 87 SkScalar x = path_elements[++i].arg; |
| 88 path.lineTo(x, last_point.fY); | 88 path.lineTo(x, last_point.fY); |
| 89 break; | 89 break; |
| 90 } | 90 } |
| 91 | 91 |
| 92 case R_H_LINE_TO: { | 92 case R_H_LINE_TO: { |
| 93 SkScalar x = path_elements[i++].arg; | 93 SkScalar x = path_elements[++i].arg; |
| 94 path.rLineTo(x, 0); | 94 path.rLineTo(x, 0); |
| 95 break; | 95 break; |
| 96 } | 96 } |
| 97 | 97 |
| 98 case V_LINE_TO: { | 98 case V_LINE_TO: { |
| 99 SkPoint last_point; | 99 SkPoint last_point; |
| 100 path.getLastPt(&last_point); | 100 path.getLastPt(&last_point); |
| 101 SkScalar y = path_elements[i++].arg; | 101 SkScalar y = path_elements[++i].arg; |
| 102 path.lineTo(last_point.fX, y); | 102 path.lineTo(last_point.fX, y); |
| 103 break; | 103 break; |
| 104 } | 104 } |
| 105 | 105 |
| 106 case R_V_LINE_TO: { | 106 case R_V_LINE_TO: { |
| 107 SkScalar y = path_elements[i++].arg; | 107 SkScalar y = path_elements[++i].arg; |
| 108 path.rLineTo(0, y); | 108 path.rLineTo(0, y); |
| 109 break; | 109 break; |
| 110 } | 110 } |
| 111 | 111 |
| 112 case CUBIC_TO: { | 112 case CUBIC_TO: { |
| 113 SkScalar x1 = path_elements[i++].arg; | 113 SkScalar x1 = path_elements[++i].arg; |
| 114 SkScalar y1 = path_elements[i++].arg; | 114 SkScalar y1 = path_elements[++i].arg; |
| 115 SkScalar x2 = path_elements[i++].arg; | 115 SkScalar x2 = path_elements[++i].arg; |
| 116 SkScalar y2 = path_elements[i++].arg; | 116 SkScalar y2 = path_elements[++i].arg; |
| 117 SkScalar x3 = path_elements[i++].arg; | 117 SkScalar x3 = path_elements[++i].arg; |
| 118 SkScalar y3 = path_elements[i++].arg; | 118 SkScalar y3 = path_elements[++i].arg; |
| 119 path.cubicTo(x1, y1, x2, y2, x3, y3); | 119 path.cubicTo(x1, y1, x2, y2, x3, y3); |
| 120 break; | 120 break; |
| 121 } | 121 } |
| 122 | 122 |
| 123 case R_CUBIC_TO: { | 123 case R_CUBIC_TO: { |
| 124 SkScalar x1 = path_elements[i++].arg; | 124 SkScalar x1 = path_elements[++i].arg; |
| 125 SkScalar y1 = path_elements[i++].arg; | 125 SkScalar y1 = path_elements[++i].arg; |
| 126 SkScalar x2 = path_elements[i++].arg; | 126 SkScalar x2 = path_elements[++i].arg; |
| 127 SkScalar y2 = path_elements[i++].arg; | 127 SkScalar y2 = path_elements[++i].arg; |
| 128 SkScalar x3 = path_elements[i++].arg; | 128 SkScalar x3 = path_elements[++i].arg; |
| 129 SkScalar y3 = path_elements[i++].arg; | 129 SkScalar y3 = path_elements[++i].arg; |
| 130 path.rCubicTo(x1, y1, x2, y2, x3, y3); | 130 path.rCubicTo(x1, y1, x2, y2, x3, y3); |
| 131 break; | 131 break; |
| 132 } | 132 } |
| 133 | 133 |
| 134 case CLOSE: { | 134 case CLOSE: { |
| 135 path.close(); | 135 path.close(); |
| 136 break; | 136 break; |
| 137 } | 137 } |
| 138 | 138 |
| 139 case CIRCLE: { | 139 case CIRCLE: { |
| 140 SkScalar x = path_elements[i++].arg; | 140 SkScalar x = path_elements[++i].arg; |
| 141 SkScalar y = path_elements[i++].arg; | 141 SkScalar y = path_elements[++i].arg; |
| 142 SkScalar r = path_elements[i++].arg; | 142 SkScalar r = path_elements[++i].arg; |
| 143 path.addCircle(x, y, r); | 143 path.addCircle(x, y, r); |
| 144 break; | 144 break; |
| 145 } | 145 } |
| 146 | 146 |
| 147 case END: | 147 case END: |
| 148 NOTREACHED(); | 148 NOTREACHED(); |
| 149 break; | 149 break; |
| 150 } | 150 } |
| 151 } | 151 } |
| 152 | 152 |
| 153 SkPaint paint; | 153 SkPaint paint; |
| 154 paint.setStyle(SkPaint::kFill_Style); | 154 paint.setStyle(SkPaint::kFill_Style); |
| 155 paint.setAntiAlias(true); | 155 paint.setAntiAlias(true); |
| 156 paint.setColor(color); | 156 paint.setColor(color); |
| 157 canvas->DrawPath(path, paint); | 157 canvas->DrawPath(path, paint); |
| 158 } | 158 } |
| 159 | 159 |
| 160 ImageSkia CreateVectorIcon(VectorIconId id, size_t dip_size, SkColor color) { | 160 ImageSkia CreateVectorIcon(VectorIconId id, size_t dip_size, SkColor color) { |
| 161 return ImageSkia( | 161 return ImageSkia( |
| 162 new VectorIconSource(id, dip_size, color), | 162 new VectorIconSource(id, dip_size, color), |
| 163 gfx::Size(static_cast<int>(dip_size), static_cast<int>(dip_size))); | 163 gfx::Size(static_cast<int>(dip_size), static_cast<int>(dip_size))); |
| 164 } | 164 } |
| 165 | 165 |
| 166 } // namespace gfx | 166 } // namespace gfx |
| OLD | NEW |