1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/widget/windows/TaskbarPreviewButton.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,145 @@ 1.4 +/* vim: se cin sw=2 ts=2 et : */ 1.5 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- 1.6 + * 1.7 + * This Source Code Form is subject to the terms of the Mozilla Public 1.8 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.9 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.10 + 1.11 +#include <windows.h> 1.12 +#include <strsafe.h> 1.13 + 1.14 +#include "TaskbarWindowPreview.h" 1.15 +#include "TaskbarPreviewButton.h" 1.16 +#include "nsWindowGfx.h" 1.17 +#include <imgIContainer.h> 1.18 + 1.19 +namespace mozilla { 1.20 +namespace widget { 1.21 + 1.22 +NS_IMPL_ISUPPORTS(TaskbarPreviewButton, nsITaskbarPreviewButton, nsISupportsWeakReference) 1.23 + 1.24 +TaskbarPreviewButton::TaskbarPreviewButton(TaskbarWindowPreview* preview, uint32_t index) 1.25 + : mPreview(preview), mIndex(index) 1.26 +{ 1.27 +} 1.28 + 1.29 +TaskbarPreviewButton::~TaskbarPreviewButton() { 1.30 + SetVisible(false); 1.31 +} 1.32 + 1.33 +NS_IMETHODIMP 1.34 +TaskbarPreviewButton::GetTooltip(nsAString &aTooltip) { 1.35 + aTooltip = mTooltip; 1.36 + return NS_OK; 1.37 +} 1.38 + 1.39 +NS_IMETHODIMP 1.40 +TaskbarPreviewButton::SetTooltip(const nsAString &aTooltip) { 1.41 + mTooltip = aTooltip; 1.42 + size_t destLength = sizeof Button().szTip / (sizeof Button().szTip[0]); 1.43 + wchar_t *tooltip = &(Button().szTip[0]); 1.44 + StringCchCopyNW(tooltip, 1.45 + destLength, 1.46 + mTooltip.get(), 1.47 + mTooltip.Length()); 1.48 + return Update(); 1.49 +} 1.50 + 1.51 +NS_IMETHODIMP 1.52 +TaskbarPreviewButton::GetDismissOnClick(bool *dismiss) { 1.53 + *dismiss = (Button().dwFlags & THBF_DISMISSONCLICK) == THBF_DISMISSONCLICK; 1.54 + return NS_OK; 1.55 +} 1.56 + 1.57 +NS_IMETHODIMP 1.58 +TaskbarPreviewButton::SetDismissOnClick(bool dismiss) { 1.59 + if (dismiss) 1.60 + Button().dwFlags |= THBF_DISMISSONCLICK; 1.61 + else 1.62 + Button().dwFlags &= ~THBF_DISMISSONCLICK; 1.63 + return Update(); 1.64 +} 1.65 + 1.66 +NS_IMETHODIMP 1.67 +TaskbarPreviewButton::GetHasBorder(bool *hasBorder) { 1.68 + *hasBorder = (Button().dwFlags & THBF_NOBACKGROUND) != THBF_NOBACKGROUND; 1.69 + return NS_OK; 1.70 +} 1.71 + 1.72 +NS_IMETHODIMP 1.73 +TaskbarPreviewButton::SetHasBorder(bool hasBorder) { 1.74 + if (hasBorder) 1.75 + Button().dwFlags &= ~THBF_NOBACKGROUND; 1.76 + else 1.77 + Button().dwFlags |= THBF_NOBACKGROUND; 1.78 + return Update(); 1.79 +} 1.80 + 1.81 +NS_IMETHODIMP 1.82 +TaskbarPreviewButton::GetDisabled(bool *disabled) { 1.83 + *disabled = (Button().dwFlags & THBF_DISABLED) == THBF_DISABLED; 1.84 + return NS_OK; 1.85 +} 1.86 + 1.87 +NS_IMETHODIMP 1.88 +TaskbarPreviewButton::SetDisabled(bool disabled) { 1.89 + if (disabled) 1.90 + Button().dwFlags |= THBF_DISABLED; 1.91 + else 1.92 + Button().dwFlags &= ~THBF_DISABLED; 1.93 + return Update(); 1.94 +} 1.95 + 1.96 +NS_IMETHODIMP 1.97 +TaskbarPreviewButton::GetImage(imgIContainer **img) { 1.98 + if (mImage) 1.99 + NS_ADDREF(*img = mImage); 1.100 + else 1.101 + *img = nullptr; 1.102 + return NS_OK; 1.103 +} 1.104 + 1.105 +NS_IMETHODIMP 1.106 +TaskbarPreviewButton::SetImage(imgIContainer *img) { 1.107 + if (Button().hIcon) 1.108 + ::DestroyIcon(Button().hIcon); 1.109 + if (img) { 1.110 + nsresult rv; 1.111 + rv = nsWindowGfx::CreateIcon(img, false, 0, 0, 1.112 + nsWindowGfx::GetIconMetrics(nsWindowGfx::kRegularIcon), 1.113 + &Button().hIcon); 1.114 + NS_ENSURE_SUCCESS(rv, rv); 1.115 + } else { 1.116 + Button().hIcon = nullptr; 1.117 + } 1.118 + return Update(); 1.119 +} 1.120 + 1.121 +NS_IMETHODIMP 1.122 +TaskbarPreviewButton::GetVisible(bool *visible) { 1.123 + *visible = (Button().dwFlags & THBF_HIDDEN) != THBF_HIDDEN; 1.124 + return NS_OK; 1.125 +} 1.126 + 1.127 +NS_IMETHODIMP 1.128 +TaskbarPreviewButton::SetVisible(bool visible) { 1.129 + if (visible) 1.130 + Button().dwFlags &= ~THBF_HIDDEN; 1.131 + else 1.132 + Button().dwFlags |= THBF_HIDDEN; 1.133 + return Update(); 1.134 +} 1.135 + 1.136 +THUMBBUTTON& 1.137 +TaskbarPreviewButton::Button() { 1.138 + return mPreview->mThumbButtons[mIndex]; 1.139 +} 1.140 + 1.141 +nsresult 1.142 +TaskbarPreviewButton::Update() { 1.143 + return mPreview->UpdateButton(mIndex); 1.144 +} 1.145 + 1.146 +} // namespace widget 1.147 +} // namespace mozilla 1.148 +