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 import '../mojo/asset_bundle.dart'; | 5 import '../mojo/asset_bundle.dart'; |
6 import 'basic.dart'; | 6 import 'basic.dart'; |
| 7 import 'icon_theme.dart'; |
| 8 import 'theme.dart'; |
7 | 9 |
8 AssetBundle _initIconBundle() { | 10 AssetBundle _initIconBundle() { |
9 if (rootBundle != null) | 11 if (rootBundle != null) |
10 return rootBundle; | 12 return rootBundle; |
11 const String _kAssetBase = '/packages/sky/assets/material-design-icons/'; | 13 const String _kAssetBase = '/packages/sky/assets/material-design-icons/'; |
12 return new NetworkAssetBundle(Uri.base.resolve(_kAssetBase)); | 14 return new NetworkAssetBundle(Uri.base.resolve(_kAssetBase)); |
13 } | 15 } |
14 | 16 |
15 final AssetBundle _iconBundle = _initIconBundle(); | 17 final AssetBundle _iconBundle = _initIconBundle(); |
16 | 18 |
17 class Icon extends Component { | 19 class Icon extends Component { |
18 Icon({ String key, this.size, this.type: '' }) : super(key: key); | 20 Icon({ String key, this.size, this.type: '', this.color }) : super(key: key); |
19 | 21 |
20 final int size; | 22 final int size; |
21 final String type; | 23 final String type; |
| 24 final IconThemeColor color; |
| 25 |
| 26 String get colorSuffix { |
| 27 IconThemeColor iconThemeColor = color; |
| 28 if (iconThemeColor == null) { |
| 29 IconThemeData iconThemeData = IconTheme.of(this); |
| 30 iconThemeColor = iconThemeData == null ? null : iconThemeData.color; |
| 31 } |
| 32 if (iconThemeColor == null) { |
| 33 ThemeBrightness themeBrightness = Theme.of(this).brightness; |
| 34 iconThemeColor = themeBrightness == ThemeBrightness.dark ? IconThemeColor.
white : IconThemeColor.black; |
| 35 } |
| 36 switch(iconThemeColor) { |
| 37 case IconThemeColor.white: |
| 38 return "white"; |
| 39 case IconThemeColor.black: |
| 40 return "black"; |
| 41 } |
| 42 } |
22 | 43 |
23 Widget build() { | 44 Widget build() { |
24 String category = ''; | 45 String category = ''; |
25 String subtype = ''; | 46 String subtype = ''; |
26 List<String> parts = type.split('/'); | 47 List<String> parts = type.split('/'); |
27 if (parts.length == 2) { | 48 if (parts.length == 2) { |
28 category = parts[0]; | 49 category = parts[0]; |
29 subtype = parts[1]; | 50 subtype = parts[1]; |
30 } | 51 } |
31 // TODO(eseidel): This clearly isn't correct. Not sure what would be. | 52 // TODO(eseidel): This clearly isn't correct. Not sure what would be. |
32 // Should we use the ios images on ios? | 53 // Should we use the ios images on ios? |
33 String density = 'drawable-xxhdpi'; | 54 String density = 'drawable-xxhdpi'; |
34 return new AssetImage( | 55 return new AssetImage( |
35 bundle: _iconBundle, | 56 bundle: _iconBundle, |
36 name: '${category}/${density}/ic_${subtype}_${size}dp.png', | 57 name: '${category}/${density}/ic_${subtype}_${colorSuffix}_${size}dp.png', |
37 size: new Size(size.toDouble(), size.toDouble()) | 58 size: new Size(size.toDouble(), size.toDouble()) |
38 ); | 59 ); |
39 } | 60 } |
40 } | 61 } |
OLD | NEW |