Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(210)

Side by Side Diff: chrome_frame/turndown_prompt/turndown_prompt_window.cc

Issue 18769007: Make the dismiss button on the CF infobar be an image button. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome_frame/turndown_prompt/turndown_prompt_window.h" 5 #include "chrome_frame/turndown_prompt/turndown_prompt_window.h"
6 6
7 #include <atlctrls.h> 7 #include <atlctrls.h>
8 #include <commctrl.h> 8 #include <commctrl.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 10
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "chrome_frame/ready_mode/internal/url_launcher.h" 12 #include "chrome_frame/ready_mode/internal/url_launcher.h"
13 #include "chrome_frame/simple_resource_loader.h" 13 #include "chrome_frame/simple_resource_loader.h"
14 #include "chrome_frame/utils.h" 14 #include "chrome_frame/utils.h"
15 #include "grit/chrome_frame_dialogs.h" 15 #include "grit/chrome_frame_dialogs.h"
16 #include "grit/chrome_frame_resources.h"
16 #include "grit/chromium_strings.h" 17 #include "grit/chromium_strings.h"
17 18
18 // atlctrlx.h requires 'min' and 'max' macros, the definition of which conflicts 19 // atlctrlx.h requires 'min' and 'max' macros, the definition of which conflicts
19 // with STL headers. Hence we include them out of the order defined by style 20 // with STL headers. Hence we include them out of the order defined by style
20 // guidelines. As a result you may not refer to std::min or std::max in this 21 // guidelines. As a result you may not refer to std::min or std::max in this
21 // file. 22 // file.
22 #include <minmax.h> // NOLINT 23 #include <minmax.h> // NOLINT
23 #include <atlctrlx.h> // NOLINT 24 #include <atlctrlx.h> // NOLINT
24 25
26 namespace {
27 const uint32 kBitmapImageSize = 18;
28 } // namespace
29
30 // WTL's CBitmapButton's drawing code is horribly broken when using transparent
31 // images (specifically, it doesn't clear the background between redraws).
32 // Fix it here.
33 class CFBitmapButton: public CBitmapButtonImpl<CFBitmapButton>
34 {
35 public:
36 DECLARE_WND_SUPERCLASS(_T("WTL_BitmapButton"), GetWndClassName())
37
38 CFBitmapButton() :
grt (UTC plus 2) 2013/07/22 16:07:27 CFBitmapButton() : CBitmapButtonImpl<CFBitma
robertshield 2013/07/22 19:58:57 Done.
39 CBitmapButtonImpl<CFBitmapButton>(BMPBTN_AUTOSIZE | BMPBTN_HOVER, NULL) {}
40
41 // "Overridden" from CBitmapButtonImpl via template hackery. See
42 // CBitmapButtonImpl::OnPaint() in atlctrlx.h for details.
43 void DoPaint(CDCHandle dc) {
44 RECT rc;
45 GetClientRect(&rc);
46 dc.FillRect(&rc, (HBRUSH)(COLOR_BTNFACE+1));
grt (UTC plus 2) 2013/07/22 16:07:27 reinterpret_cast<HBRUSH>(COLOR_BTNFACE + 1)
robertshield 2013/07/22 19:58:57 Done.
47
48 // Call original implementation.
49 CBitmapButtonImpl<CFBitmapButton>::DoPaint(dc);
50 }
51 };
52
53 // static
25 base::WeakPtr<TurndownPromptWindow> TurndownPromptWindow::CreateInstance( 54 base::WeakPtr<TurndownPromptWindow> TurndownPromptWindow::CreateInstance(
26 InfobarContent::Frame* frame, 55 InfobarContent::Frame* frame,
27 UrlLauncher* url_launcher, 56 UrlLauncher* url_launcher,
28 const base::Closure& uninstall_callback) { 57 const base::Closure& uninstall_callback) {
29 DCHECK(frame != NULL); 58 DCHECK(frame != NULL);
30 DCHECK(url_launcher != NULL); 59 DCHECK(url_launcher != NULL);
31 60
32 base::WeakPtr<TurndownPromptWindow> instance( 61 base::WeakPtr<TurndownPromptWindow> instance(
33 (new TurndownPromptWindow(frame, url_launcher, uninstall_callback)) 62 (new TurndownPromptWindow(frame, url_launcher, uninstall_callback))
34 ->weak_ptr_factory_.GetWeakPtr()); 63 ->weak_ptr_factory_.GetWeakPtr());
35 64
36 DCHECK(!instance->IsWindow()); 65 DCHECK(!instance->IsWindow());
37 66
38 if (instance->Create(frame->GetFrameWindow()) == NULL) { 67 if (instance->Create(frame->GetFrameWindow()) == NULL) {
39 DPLOG(ERROR) << "Failed to create HWND for TurndownPromptWindow."; 68 DPLOG(ERROR) << "Failed to create HWND for TurndownPromptWindow.";
40 return base::WeakPtr<TurndownPromptWindow>(); 69 return base::WeakPtr<TurndownPromptWindow>();
41 } 70 }
42 71
43 // Subclass the "Learn more." text to make it behave like a link. Clicks are 72 // Subclass the "Learn more." text to make it behave like a link. Clicks are
44 // routed to OnLearnMore(). 73 // routed to OnLearnMore().
45 CWindow rte = instance->GetDlgItem(IDC_TD_PROMPT_LINK); 74 CWindow rte = instance->GetDlgItem(IDC_TD_PROMPT_LINK);
46 instance->link_.reset(new CHyperLink()); 75 instance->link_.reset(new CHyperLink());
47 instance->link_->SubclassWindow(rte); 76 instance->link_->SubclassWindow(rte);
48 instance->link_->SetHyperLinkExtendedStyle(HLINK_NOTIFYBUTTON, 77 instance->link_->SetHyperLinkExtendedStyle(HLINK_NOTIFYBUTTON,
49 HLINK_NOTIFYBUTTON); 78 HLINK_NOTIFYBUTTON);
50 79
80 SetupBitmapButton(instance);
81
51 // Substitute the proper text given the current IE version. 82 // Substitute the proper text given the current IE version.
52 CWindow text = instance->GetDlgItem(IDC_TD_PROMPT_MESSAGE); 83 CWindow text = instance->GetDlgItem(IDC_TD_PROMPT_MESSAGE);
53 string16 prompt_text(GetPromptText()); 84 string16 prompt_text(GetPromptText());
54 if (!prompt_text.empty()) 85 if (!prompt_text.empty())
55 text.SetWindowText(prompt_text.c_str()); 86 text.SetWindowText(prompt_text.c_str());
56 87
57 return instance; 88 return instance;
58 } 89 }
59 90
91 // static
92 void TurndownPromptWindow::SetupBitmapButton(
93 const base::WeakPtr<TurndownPromptWindow>& instance) {
grt (UTC plus 2) 2013/07/22 16:07:27 since this function doesn't store |instance| for l
robertshield 2013/07/22 19:58:57 Done.
94 CWindow close_window = instance->GetDlgItem(IDDISMISS);
95 instance->close_button_.reset(new CFBitmapButton());
96
97 // Set the resource instance to the current dll which contains the bitmap.
98 HINSTANCE old_res_module = _AtlBaseModule.GetResourceInstance();
99 HINSTANCE this_module = _AtlBaseModule.GetModuleInstance();
100 _AtlBaseModule.SetResourceInstance(this_module);
101
102 HBITMAP close_bitmap = static_cast<HBITMAP>(
103 LoadImage(this_module, MAKEINTRESOURCE(IDB_TURNDOWN_PROMPT_CLOSE_BUTTON),
104 IMAGE_BITMAP, 0, 0, 0));
105
106 // Restore the module's resource instance.
107 _AtlBaseModule.SetResourceInstance(old_res_module);
108
109 // Create the image list with the appropriate size and colour mask.
110 instance->close_button_->m_ImageList.Create(kBitmapImageSize,
111 kBitmapImageSize,
112 ILC_COLOR8|ILC_MASK, 4, 0);
grt (UTC plus 2) 2013/07/22 16:07:27 ILC_COLOR8 | ILC_MASK
robertshield 2013/07/22 19:58:57 Done.
113 instance->close_button_->m_ImageList.Add(close_bitmap, RGB(255,0,255));
grt (UTC plus 2) 2013/07/22 16:07:27 255, 0, 255
robertshield 2013/07/22 19:58:57 Done.
114 instance->close_button_->m_ImageList.SetBkColor(CLR_NONE);
115
116 // Configure the button states and initialize the button.
117 instance->close_button_->SetImages(0, 1, 2, 3);
grt (UTC plus 2) 2013/07/22 16:07:27 4, 5, 6, 7, 8 who do we appreciate robertshield ro
robertshield 2013/07/22 19:58:57 \o/
118 instance->close_button_->SubclassWindow(close_window);
119
120 // The CDialogResize() implementation incorrectly captures the size
121 // of the bitmap image button. Reset it here to ensure that resizing works
122 // as desired.
123
124 // Find the resize data. The parameters here must match the resize map in
125 // turndown_prompt_window.h.
126 _AtlDlgResizeData resize_params = { IDDISMISS, DLSZ_CENTER_Y | DLSZ_MOVE_X };
127 int resize_index = instance->m_arrData.Find(resize_params);
128 DCHECK(resize_index > -1 && resize_index < instance->m_arrData.GetSize());
129
130 // Fiddle CDialogResize's internal data to fix up the size for the image
131 // control.
132 _AtlDlgResizeData& resize_data = instance->m_arrData[resize_index];
133 resize_data.m_rect.right = resize_data.m_rect.left + kBitmapImageSize;
134 resize_data.m_rect.top = 0;
135 resize_data.m_rect.bottom = kBitmapImageSize;
136 }
137
60 TurndownPromptWindow::TurndownPromptWindow( 138 TurndownPromptWindow::TurndownPromptWindow(
61 InfobarContent::Frame* frame, 139 InfobarContent::Frame* frame,
62 UrlLauncher* url_launcher, 140 UrlLauncher* url_launcher,
63 const base::Closure& uninstall_closure) 141 const base::Closure& uninstall_closure)
64 : frame_(frame), 142 : frame_(frame),
65 url_launcher_(url_launcher), 143 url_launcher_(url_launcher),
66 uninstall_closure_(uninstall_closure), 144 uninstall_closure_(uninstall_closure),
67 weak_ptr_factory_(this) { 145 weak_ptr_factory_(this) {
68 } 146 }
69 147
70 TurndownPromptWindow::~TurndownPromptWindow() {} 148 TurndownPromptWindow::~TurndownPromptWindow() {}
71 149
72 void TurndownPromptWindow::OnFinalMessage(HWND) { 150 void TurndownPromptWindow::OnFinalMessage(HWND) {
73 delete this; 151 delete this;
74 } 152 }
75 153
76 void TurndownPromptWindow::OnDestroy() { 154 void TurndownPromptWindow::OnDestroy() {
155 close_button_->m_ImageList.Destroy();
77 frame_ = NULL; 156 frame_ = NULL;
78 } 157 }
79 158
80 BOOL TurndownPromptWindow::OnInitDialog(CWindow wndFocus, LPARAM lInitParam) { 159 BOOL TurndownPromptWindow::OnInitDialog(CWindow wndFocus, LPARAM lInitParam) {
81 DlgResize_Init(false); // false => 'no gripper' 160 DlgResize_Init(false); // false => 'no gripper'
82 return TRUE; 161 return TRUE;
83 } 162 }
84 163
85 LRESULT TurndownPromptWindow::OnLearnMore(WORD /*wParam*/, 164 LRESULT TurndownPromptWindow::OnLearnMore(WORD /*wParam*/,
86 LPNMHDR /*lParam*/, 165 LPNMHDR /*lParam*/,
(...skipping 22 matching lines...) Expand all
109 } 188 }
110 189
111 // static 190 // static
112 string16 TurndownPromptWindow::GetPromptText() { 191 string16 TurndownPromptWindow::GetPromptText() {
113 IEVersion ie_version = GetIEVersion(); 192 IEVersion ie_version = GetIEVersion();
114 int message_id = IDS_CHROME_FRAME_TURNDOWN_TEXT_IE_NEWER; 193 int message_id = IDS_CHROME_FRAME_TURNDOWN_TEXT_IE_NEWER;
115 if (ie_version == IE_6 || ie_version == IE_7 || ie_version == IE_8) 194 if (ie_version == IE_6 || ie_version == IE_7 || ie_version == IE_8)
116 message_id = IDS_CHROME_FRAME_TURNDOWN_TEXT_IE_OLDER; 195 message_id = IDS_CHROME_FRAME_TURNDOWN_TEXT_IE_OLDER;
117 return SimpleResourceLoader::GetInstance()->Get(message_id); 196 return SimpleResourceLoader::GetInstance()->Get(message_id);
118 } 197 }
OLDNEW
« chrome/app/cf_resources.rc ('K') | « chrome_frame/turndown_prompt/turndown_prompt_window.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698