forked from mirrors/gecko-dev
		
	 f9e0ad7f00
			
		
	
	
		f9e0ad7f00
		
	
	
	
	
		
			
			Differential Revision: https://phabricator.services.mozilla.com/D35325 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			137 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* vim: se cin sw=2 ts=2 et : */
 | |
| /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 | |
|  *
 | |
|  * This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #include <windows.h>
 | |
| #include <strsafe.h>
 | |
| 
 | |
| #include "TaskbarWindowPreview.h"
 | |
| #include "TaskbarPreviewButton.h"
 | |
| #include "nsWindowGfx.h"
 | |
| #include <imgIContainer.h>
 | |
| 
 | |
| namespace mozilla {
 | |
| namespace widget {
 | |
| 
 | |
| NS_IMPL_ISUPPORTS(TaskbarPreviewButton, nsITaskbarPreviewButton,
 | |
|                   nsISupportsWeakReference)
 | |
| 
 | |
| TaskbarPreviewButton::TaskbarPreviewButton(TaskbarWindowPreview* preview,
 | |
|                                            uint32_t index)
 | |
|     : mPreview(preview), mIndex(index) {}
 | |
| 
 | |
| TaskbarPreviewButton::~TaskbarPreviewButton() { SetVisible(false); }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::GetTooltip(nsAString& aTooltip) {
 | |
|   aTooltip = mTooltip;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::SetTooltip(const nsAString& aTooltip) {
 | |
|   mTooltip = aTooltip;
 | |
|   size_t destLength = sizeof Button().szTip / (sizeof Button().szTip[0]);
 | |
|   wchar_t* tooltip = &(Button().szTip[0]);
 | |
|   StringCchCopyNW(tooltip, destLength, mTooltip.get(), mTooltip.Length());
 | |
|   return Update();
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::GetDismissOnClick(bool* dismiss) {
 | |
|   *dismiss = (Button().dwFlags & THBF_DISMISSONCLICK) == THBF_DISMISSONCLICK;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::SetDismissOnClick(bool dismiss) {
 | |
|   if (dismiss)
 | |
|     Button().dwFlags |= THBF_DISMISSONCLICK;
 | |
|   else
 | |
|     Button().dwFlags &= ~THBF_DISMISSONCLICK;
 | |
|   return Update();
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::GetHasBorder(bool* hasBorder) {
 | |
|   *hasBorder = (Button().dwFlags & THBF_NOBACKGROUND) != THBF_NOBACKGROUND;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::SetHasBorder(bool hasBorder) {
 | |
|   if (hasBorder)
 | |
|     Button().dwFlags &= ~THBF_NOBACKGROUND;
 | |
|   else
 | |
|     Button().dwFlags |= THBF_NOBACKGROUND;
 | |
|   return Update();
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::GetDisabled(bool* disabled) {
 | |
|   *disabled = (Button().dwFlags & THBF_DISABLED) == THBF_DISABLED;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::SetDisabled(bool disabled) {
 | |
|   if (disabled)
 | |
|     Button().dwFlags |= THBF_DISABLED;
 | |
|   else
 | |
|     Button().dwFlags &= ~THBF_DISABLED;
 | |
|   return Update();
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::GetImage(imgIContainer** img) {
 | |
|   if (mImage)
 | |
|     NS_ADDREF(*img = mImage);
 | |
|   else
 | |
|     *img = nullptr;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::SetImage(imgIContainer* img) {
 | |
|   if (Button().hIcon) ::DestroyIcon(Button().hIcon);
 | |
|   if (img) {
 | |
|     nsresult rv;
 | |
|     rv = nsWindowGfx::CreateIcon(
 | |
|         img, false, LayoutDeviceIntPoint(),
 | |
|         nsWindowGfx::GetIconMetrics(nsWindowGfx::kRegularIcon),
 | |
|         &Button().hIcon);
 | |
|     NS_ENSURE_SUCCESS(rv, rv);
 | |
|   } else {
 | |
|     Button().hIcon = nullptr;
 | |
|   }
 | |
|   return Update();
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::GetVisible(bool* visible) {
 | |
|   *visible = (Button().dwFlags & THBF_HIDDEN) != THBF_HIDDEN;
 | |
|   return NS_OK;
 | |
| }
 | |
| 
 | |
| NS_IMETHODIMP
 | |
| TaskbarPreviewButton::SetVisible(bool visible) {
 | |
|   if (visible)
 | |
|     Button().dwFlags &= ~THBF_HIDDEN;
 | |
|   else
 | |
|     Button().dwFlags |= THBF_HIDDEN;
 | |
|   return Update();
 | |
| }
 | |
| 
 | |
| THUMBBUTTON& TaskbarPreviewButton::Button() {
 | |
|   return mPreview->mThumbButtons[mIndex];
 | |
| }
 | |
| 
 | |
| nsresult TaskbarPreviewButton::Update() {
 | |
|   return mPreview->UpdateButton(mIndex);
 | |
| }
 | |
| 
 | |
| }  // namespace widget
 | |
| }  // namespace mozilla
 |