Bug 1882714 [wpt PR 44850] - Update wpt metadata, a=testonly
[gecko.git] / widget / windows / TaskbarPreviewButton.cpp
blobabbb1069a97dbc104a97a61d8bdfe4c194754d55
1 /* vim: se cin sw=2 ts=2 et : */
2 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
8 #include <windows.h>
9 #include <strsafe.h>
11 #include "TaskbarWindowPreview.h"
12 #include "TaskbarPreviewButton.h"
13 #include "nsWindowGfx.h"
14 #include <imgIContainer.h>
16 namespace mozilla {
17 namespace widget {
19 NS_IMPL_ISUPPORTS(TaskbarPreviewButton, nsITaskbarPreviewButton,
20 nsISupportsWeakReference)
22 TaskbarPreviewButton::TaskbarPreviewButton(TaskbarWindowPreview* preview,
23 uint32_t index)
24 : mPreview(preview), mIndex(index) {}
26 TaskbarPreviewButton::~TaskbarPreviewButton() { SetVisible(false); }
28 NS_IMETHODIMP
29 TaskbarPreviewButton::GetTooltip(nsAString& aTooltip) {
30 aTooltip = mTooltip;
31 return NS_OK;
34 NS_IMETHODIMP
35 TaskbarPreviewButton::SetTooltip(const nsAString& aTooltip) {
36 mTooltip = aTooltip;
37 size_t destLength = sizeof Button().szTip / (sizeof Button().szTip[0]);
38 wchar_t* tooltip = &(Button().szTip[0]);
39 StringCchCopyNW(tooltip, destLength, mTooltip.get(), mTooltip.Length());
40 return Update();
43 NS_IMETHODIMP
44 TaskbarPreviewButton::GetDismissOnClick(bool* dismiss) {
45 *dismiss = (Button().dwFlags & THBF_DISMISSONCLICK) == THBF_DISMISSONCLICK;
46 return NS_OK;
49 NS_IMETHODIMP
50 TaskbarPreviewButton::SetDismissOnClick(bool dismiss) {
51 if (dismiss)
52 Button().dwFlags |= THBF_DISMISSONCLICK;
53 else
54 Button().dwFlags &= ~THBF_DISMISSONCLICK;
55 return Update();
58 NS_IMETHODIMP
59 TaskbarPreviewButton::GetHasBorder(bool* hasBorder) {
60 *hasBorder = (Button().dwFlags & THBF_NOBACKGROUND) != THBF_NOBACKGROUND;
61 return NS_OK;
64 NS_IMETHODIMP
65 TaskbarPreviewButton::SetHasBorder(bool hasBorder) {
66 if (hasBorder)
67 Button().dwFlags &= ~THBF_NOBACKGROUND;
68 else
69 Button().dwFlags |= THBF_NOBACKGROUND;
70 return Update();
73 NS_IMETHODIMP
74 TaskbarPreviewButton::GetDisabled(bool* disabled) {
75 *disabled = (Button().dwFlags & THBF_DISABLED) == THBF_DISABLED;
76 return NS_OK;
79 NS_IMETHODIMP
80 TaskbarPreviewButton::SetDisabled(bool disabled) {
81 if (disabled)
82 Button().dwFlags |= THBF_DISABLED;
83 else
84 Button().dwFlags &= ~THBF_DISABLED;
85 return Update();
88 NS_IMETHODIMP
89 TaskbarPreviewButton::GetImage(imgIContainer** img) {
90 if (mImage)
91 NS_ADDREF(*img = mImage);
92 else
93 *img = nullptr;
94 return NS_OK;
97 NS_IMETHODIMP
98 TaskbarPreviewButton::SetImage(imgIContainer* img) {
99 if (Button().hIcon) ::DestroyIcon(Button().hIcon);
100 if (img) {
101 nsresult rv;
102 rv = nsWindowGfx::CreateIcon(
103 img, false, LayoutDeviceIntPoint(),
104 nsWindowGfx::GetIconMetrics(nsWindowGfx::kRegularIcon),
105 &Button().hIcon);
106 NS_ENSURE_SUCCESS(rv, rv);
107 } else {
108 Button().hIcon = nullptr;
110 return Update();
113 NS_IMETHODIMP
114 TaskbarPreviewButton::GetVisible(bool* visible) {
115 *visible = (Button().dwFlags & THBF_HIDDEN) != THBF_HIDDEN;
116 return NS_OK;
119 NS_IMETHODIMP
120 TaskbarPreviewButton::SetVisible(bool visible) {
121 if (visible)
122 Button().dwFlags &= ~THBF_HIDDEN;
123 else
124 Button().dwFlags |= THBF_HIDDEN;
125 return Update();
128 THUMBBUTTON& TaskbarPreviewButton::Button() {
129 return mPreview->mThumbButtons[mIndex];
132 nsresult TaskbarPreviewButton::Update() {
133 return mPreview->UpdateButton(mIndex);
136 } // namespace widget
137 } // namespace mozilla