OLD | NEW |
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 #include "ui/views/controls/menu/menu_image_util.h" | 5 #include "ui/views/controls/menu/menu_image_util.h" |
6 | 6 |
7 #include "base/i18n/rtl.h" | 7 #include "base/i18n/rtl.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "grit/ui_resources.h" | 9 #include "grit/ui_resources.h" |
10 #include "third_party/skia/include/effects/SkGradientShader.h" | 10 #include "third_party/skia/include/effects/SkGradientShader.h" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 DISALLOW_COPY_AND_ASSIGN(RadioButtonImageSource); | 98 DISALLOW_COPY_AND_ASSIGN(RadioButtonImageSource); |
99 }; | 99 }; |
100 | 100 |
101 gfx::ImageSkia* CreateRadioButtonImage(bool selected) { | 101 gfx::ImageSkia* CreateRadioButtonImage(bool selected) { |
102 RadioButtonImageSource* source = new RadioButtonImageSource(selected); | 102 RadioButtonImageSource* source = new RadioButtonImageSource(selected); |
103 return new gfx::ImageSkia(source, source->size()); | 103 return new gfx::ImageSkia(source, source->size()); |
104 } | 104 } |
105 | 105 |
106 class SubmenuArrowImageSource : public gfx::CanvasImageSource { | 106 class SubmenuArrowImageSource : public gfx::CanvasImageSource { |
107 public: | 107 public: |
108 SubmenuArrowImageSource() | 108 SubmenuArrowImageSource(int image_id) |
109 : gfx::CanvasImageSource(GetSubmenuArrowSize(), false) { | 109 : gfx::CanvasImageSource(ui::ResourceBundle::GetSharedInstance(). |
110 } | 110 GetImageNamed(image_id).ToImageSkia()->size(), false), |
| 111 image_id_(image_id) {} |
111 virtual ~SubmenuArrowImageSource() {} | 112 virtual ~SubmenuArrowImageSource() {} |
112 | 113 |
113 virtual void Draw(gfx::Canvas* canvas) OVERRIDE { | 114 virtual void Draw(gfx::Canvas* canvas) OVERRIDE { |
114 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 115 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
115 const gfx::ImageSkia* r = | 116 const gfx::ImageSkia* r = rb.GetImageNamed(image_id_).ToImageSkia(); |
116 rb.GetImageNamed(IDR_MENU_HIERARCHY_ARROW).ToImageSkia(); | |
117 canvas->Scale(-1, 1); | 117 canvas->Scale(-1, 1); |
118 canvas->DrawImageInt(*r, - r->width(), 0); | 118 canvas->DrawImageInt(*r, - r->width(), 0); |
119 } | 119 } |
120 | 120 |
121 private: | 121 private: |
122 static gfx::Size GetSubmenuArrowSize() { | 122 static gfx::Size GetSubmenuArrowSize() { |
123 return ui::ResourceBundle::GetSharedInstance() | 123 return ui::ResourceBundle::GetSharedInstance() |
124 .GetImageNamed(IDR_MENU_HIERARCHY_ARROW).ToImageSkia()->size(); | 124 .GetImageNamed(IDR_MENU_HIERARCHY_ARROW).ToImageSkia()->size(); |
125 } | 125 } |
126 | 126 |
| 127 int image_id_; |
| 128 |
127 DISALLOW_COPY_AND_ASSIGN(SubmenuArrowImageSource); | 129 DISALLOW_COPY_AND_ASSIGN(SubmenuArrowImageSource); |
128 }; | 130 }; |
129 | 131 |
130 gfx::ImageSkia* GetRtlSubmenuArrowImage() { | 132 gfx::ImageSkia GetRtlSubmenuArrowImage(bool rtl, |
| 133 bool dark_background) { |
| 134 int image_id = dark_background ? IDR_MENU_HIERARCHY_ARROW_DARK_BACKGROUND : |
| 135 IDR_MENU_HIERARCHY_ARROW; |
| 136 |
| 137 if (!rtl) { |
| 138 return ui::ResourceBundle::GetSharedInstance().GetImageNamed(image_id). |
| 139 AsImageSkia(); |
| 140 } |
| 141 |
131 static gfx::ImageSkia* kRtlArrow = NULL; | 142 static gfx::ImageSkia* kRtlArrow = NULL; |
132 if (!kRtlArrow) { | 143 static gfx::ImageSkia* kRtlArrowDarkBg = NULL; |
133 SubmenuArrowImageSource* source = new SubmenuArrowImageSource(); | 144 gfx::ImageSkia** image = dark_background ? &kRtlArrowDarkBg : &kRtlArrow; |
134 kRtlArrow = new gfx::ImageSkia(source, source->size()); | 145 |
| 146 if (!*image) { |
| 147 SubmenuArrowImageSource* source = new SubmenuArrowImageSource(image_id); |
| 148 *image = new gfx::ImageSkia(source, source->size()); |
135 } | 149 } |
136 return kRtlArrow; | 150 |
| 151 return **image; |
137 } | 152 } |
138 | 153 |
139 } // namespace | 154 } // namespace |
140 | 155 |
141 namespace views { | 156 namespace views { |
142 | 157 |
143 const gfx::ImageSkia* GetMenuCheckImage() { | 158 gfx::ImageSkia GetMenuCheckImage(bool dark_background) { |
144 return ui::ResourceBundle::GetSharedInstance().GetImageNamed( | 159 int image_id = dark_background ? IDR_MENU_CHECK_CHECKED_DARK_BACKGROUND : |
145 IDR_MENU_CHECK_CHECKED).ToImageSkia(); | 160 IDR_MENU_CHECK_CHECKED; |
| 161 return ui::ResourceBundle::GetSharedInstance().GetImageNamed(image_id). |
| 162 AsImageSkia(); |
146 } | 163 } |
147 | 164 |
148 const gfx::ImageSkia* GetRadioButtonImage(bool selected) { | 165 gfx::ImageSkia GetRadioButtonImage(bool selected) { |
149 int image_id = selected ? IDR_MENU_RADIO_SELECTED : IDR_MENU_RADIO_EMPTY; | 166 int image_id = selected ? IDR_MENU_RADIO_SELECTED : IDR_MENU_RADIO_EMPTY; |
150 return ui::ResourceBundle::GetSharedInstance().GetImageNamed( | 167 return ui::ResourceBundle::GetSharedInstance().GetImageNamed(image_id). |
151 image_id).ToImageSkia(); | 168 AsImageSkia(); |
152 } | 169 } |
153 | 170 |
154 const gfx::ImageSkia* GetSubmenuArrowImage() { | 171 gfx::ImageSkia GetSubmenuArrowImage(bool dark_background) { |
155 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 172 return GetRtlSubmenuArrowImage(base::i18n::IsRTL(), dark_background); |
156 return base::i18n::IsRTL() | |
157 ? GetRtlSubmenuArrowImage() | |
158 : rb.GetImageNamed(IDR_MENU_HIERARCHY_ARROW).ToImageSkia(); | |
159 } | 173 } |
160 | 174 |
161 } // namespace views | 175 } // namespace views |
OLD | NEW |