add tab search, color, and restore button to Th24!

This commit is contained in:
Alexander Frick 2024-11-18 02:04:15 -06:00
parent 48b05cb71a
commit 3ed9098c14
9 changed files with 1276 additions and 2630 deletions

File diff suppressed because it is too large Load diff

View file

@ -18,7 +18,8 @@ import sys
from gn_helpers import ToGNString
# VS 2022 17.11.5 with 10.1.26100.1742 SDK with ARM64 libraries and UWP support.
# Also includes progwrp.lib and progwrp.dll for Windows XP. See https://github.com/Alex313031/thorium-legacy/tree/main/patches/progwrp
# Also includes progwrp.lib and progwrp.dll for Windows XP.
# See https://github.com/Alex313031/thorium-legacy/tree/main/patches/progwrp
# See go/chromium-msvc-toolchain for instructions about how to update the
# toolchain.
#
@ -555,11 +556,56 @@ def SetEnvironmentAndGetSDKDir():
return NormalizePath(os.environ['WINDOWSSDKDIR'])
def SDKIncludesIDCompositionDevice4():
"""Returns true if the selected Windows SDK includes the declaration for the
IDCompositionDevice4 interface. This is essentially the equivalent checking
if a (non-preview) SDK version >=10.0.22621.2428.
We cannot check for this SDK version directly since it installs to a folder
with the minor version set to 0 (i.e. 10.0.22621.0) and the
IDCompositionDevice4 interface was added in a servicing release which did
not increment the major version.
There doesn't seem to be a straightforward and cross-platform way to get the
minor version of an installed SDK directory. To work around this, we look
for the GUID declaring the interface which implies the SDK version and
ensures the interface itself is present."""
win_sdk_dir = SetEnvironmentAndGetSDKDir()
if not win_sdk_dir:
return False
# Skip this check if we know the major version definitely includes
# IDCompositionDevice4.
if int(SDK_VERSION.split('.')[2]) > 22621:
return True
dcomp_header_path = os.path.join(win_sdk_dir, 'Include', SDK_VERSION, 'um',
'dcomp.h')
DECLARE_DEVICE4_LINE = ('DECLARE_INTERFACE_IID_('
'IDCompositionDevice4, IDCompositionDevice3, '
'"85FC5CCA-2DA6-494C-86B6-4A775C049B8A")')
with open(dcomp_header_path) as f:
for line in f.readlines():
if line.rstrip() == DECLARE_DEVICE4_LINE:
return True
return False
def GetToolchainDir():
"""Gets location information about the current toolchain (must have been
previously updated by 'update'). This is used for the GN build."""
runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs()
win_sdk_dir = SetEnvironmentAndGetSDKDir()
version_as_year = GetVisualStudioVersion()
if not SDKIncludesIDCompositionDevice4():
print(
'Windows SDK >= 10.0.22621.2428 required. You can get it by updating '
f'Visual Studio {version_as_year} using the Visual Studio Installer.',
file=sys.stderr,
)
return 1
print('''vs_path = %s
sdk_version = %s
@ -569,7 +615,7 @@ wdk_dir = %s
runtime_dirs = %s
''' % (ToGNString(NormalizePath(
os.environ['GYP_MSVS_OVERRIDE_PATH'])), ToGNString(SDK_VERSION),
ToGNString(win_sdk_dir), ToGNString(GetVisualStudioVersion()),
ToGNString(win_sdk_dir), ToGNString(version_as_year),
ToGNString(NormalizePath(os.environ.get('WDK_DIR', ''))),
ToGNString(os.path.pathsep.join(runtime_dll_dirs or ['None']))))

View file

@ -0,0 +1,24 @@
// Copyright 2024 The Chromium Authors and Alex313031
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/frame/window_caption_util.h"
#include "build/build_config.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/thorium_2024.h"
// static
bool WindowCaptionUtil::IsWindowsTabSearchCaptionButtonEnabled(
const Browser* browser) {
#if BUILDFLAG(IS_WIN)
static const bool remove_tabsearch_button =
base::CommandLine::ForCurrentProcess()->HasSwitch("remove-tabsearch-button");
static const bool disable_caption_button =
base::CommandLine::ForCurrentProcess()->HasSwitch("disable-caption-button");
return features::IsThorium2024() && browser->is_type_normal() &&
!remove_tabsearch_button && !disable_caption_button;
#else
return false;
#endif // BUILDFLAG(IS_WIN)
}

View file

@ -0,0 +1,21 @@
// Copyright 2024 The Chromium Authors and Alex313031
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_WINDOW_CAPTION_UTIL_H_
#define CHROME_BROWSER_UI_VIEWS_FRAME_WINDOW_CAPTION_UTIL_H_
class Browser;
// Static-only class containing values and helper functions for frame classes
// that need to be accessible outside of /browser/ui/views.
class WindowCaptionUtil {
public:
// Returns true if the Windows caption button is enabled.
static bool IsWindowsTabSearchCaptionButtonEnabled(const Browser* browser);
private:
WindowCaptionUtil() {}
};
#endif // CHROME_BROWSER_UI_VIEWS_FRAME_WINDOW_CAPTION_UTIL_H_

File diff suppressed because it is too large Load diff

View file

@ -1,97 +0,0 @@
// Copyright 2024 The Chromium Authors and Alex313031
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_STYLE_VIEWS_H_
#define CHROME_BROWSER_UI_VIEWS_TABS_TAB_STYLE_VIEWS_H_
#include <memory>
#include "chrome/browser/ui/tabs/tab_style.h"
#include "chrome/browser/ui/views/tabs/glow_hover_controller.h"
#include "ui/base/metadata/base_type_conversion.h"
#include "ui/gfx/geometry/rect_f.h"
template <>
struct ui::metadata::TypeConverter<TabStyle::TabColors>
: ui::metadata::BaseTypeConverter<true> {
static std::u16string ToString(
ui::metadata::ArgType<TabStyle::TabColors> source_value);
static std::optional<TabStyle::TabColors> FromString(
const std::u16string& source_value);
static ui::metadata::ValidStrings GetValidStrings();
};
class Tab;
namespace gfx {
class Canvas;
}
// Holds Views-specific logic for rendering and sizing tabs.
class TabStyleViews {
public:
// Factory function allows to experiment with different variations on tab
// style at runtime or via flag.
static std::unique_ptr<TabStyleViews> CreateForTab(Tab* tab);
TabStyleViews();
virtual ~TabStyleViews();
// Gets the specific |path_type| associated with the specific |tab|.
// If |force_active| is true, applies an active appearance on the tab (usually
// involving painting an optional stroke) even if the tab is not the active
// tab.
virtual SkPath GetPath(TabStyle::PathType path_type,
float scale,
bool force_active = false,
TabStyle::RenderUnits render_units =
TabStyle::RenderUnits::kPixels) const = 0;
// Returns the appropriate fonts for the current theme and active state.
virtual const gfx::FontList& GetFontList() const = 0;
// Paints the tab.
virtual void PaintTab(gfx::Canvas* canvas) const = 0;
// Returns the insets to use for laying out tab contents.
virtual gfx::Insets GetContentsInsets() const = 0;
// Returns the z-value of the tab, which should be used to paint them in
// ascending order. Return values are in the range (0,
// TabStyle::GetMaximumZValue()).
virtual float GetZValue() const = 0;
// Returns whichever of (active, inactive) the tab appears more like given the
// active opacity.
virtual TabActive GetApparentActiveState() const = 0;
// Returns the target opacity of the "active" portion of the tab's state. The
// current opacity may be animating towards this value.
virtual float GetTargetActiveOpacity() const = 0;
// Returns the current opacity of the "active" portion of the tab's state.
virtual float GetCurrentActiveOpacity() const = 0;
// Derives and returns colors for the tab. See TabColors, above.
virtual TabStyle::TabColors CalculateTargetColors() const = 0;
// Sets the center of the radial highlight in the hover animation.
virtual void SetHoverLocation(const gfx::Point& location) = 0;
// Shows the hover animation.
virtual void ShowHover(TabStyle::ShowHoverStyle style) = 0;
// Hides the hover animation.
virtual void HideHover(TabStyle::HideHoverStyle style) = 0;
// Returns the progress (0 to 1) of the hover animation.
virtual double GetHoverAnimationValue() const = 0;
const TabStyle* tab_style() const { return tab_style_; }
private:
const raw_ptr<const TabStyle> tab_style_;
};
#endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_STYLE_VIEWS_H_

View file

@ -0,0 +1,54 @@
// Copyright 2024 The Chromium Authors and Alex313031
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/toolbar/restore_tab_button.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/command_updater.h"
#include "chrome/browser/external_protocol/external_protocol_handler.h"
#include "chrome/browser/ui/browser.h"
#include "components/vector_icons/vector_icons.h"
//#include "ui/base/l10n/l10n_util.h"
#include "ui/base/metadata/metadata_impl_macros.h"
#include "ui/base/ui_base_features.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/controls/button/button_controller.h"
RestoreTabButton::RestoreTabButton(CommandUpdater* command_updater)
: ToolbarButton(base::BindRepeating(&RestoreTabButton::ButtonPressed,
base::Unretained(this))),
command_updater_(command_updater) {
SetIcon();
constexpr char16_t RestoreTabAccessName[] = u"Restore Tab Button";
GetViewAccessibility().SetName(RestoreTabAccessName);
constexpr char16_t RestoreTabAccessToolTipName[] = u"Restore Tab";
SetTooltipText(RestoreTabAccessToolTipName);
button_controller()->set_notify_action(
views::ButtonController::NotifyAction::kOnPress);
}
RestoreTabButton::~RestoreTabButton() = default;
void RestoreTabButton::ButtonPressed() {
ExternalProtocolHandler::PermitLaunchUrl();
int command = IDC_RESTORE_TAB;
ExecuteBrowserCommand(command);
}
void RestoreTabButton::SetIcon() {
SetVectorIcon(vector_icons::kRestoreIcon);
}
void RestoreTabButton::ExecuteBrowserCommand(int command) {
if (!command_updater_) {
return;
}
command_updater_->ExecuteCommand(command);
}
BEGIN_METADATA(RestoreTabButton)
END_METADATA

View file

@ -0,0 +1,31 @@
// Copyright 2024 The Chromium Authors and Alex313031
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_VIEWS_TOOLBAR_RESTORE_TAB_BUTTON_H_
#define CHROME_BROWSER_UI_VIEWS_TOOLBAR_RESTORE_TAB_BUTTON_H_
#include "base/memory/raw_ptr.h"
#include "chrome/browser/ui/views/toolbar/toolbar_button.h"
#include "ui/base/metadata/metadata_header_macros.h"
class CommandUpdater;
class RestoreTabButton : public ToolbarButton {
METADATA_HEADER(RestoreTabButton, ToolbarButton)
public:
explicit RestoreTabButton(CommandUpdater* command_updater);
RestoreTabButton(const RestoreTabButton&) = delete;
RestoreTabButton& operator=(const RestoreTabButton&) = delete;
~RestoreTabButton() override;
private:
void SetIcon();
void ButtonPressed();
void ExecuteBrowserCommand(int command);
raw_ptr<CommandUpdater, DanglingUntriaged> command_updater_;
};
#endif // CHROME_BROWSER_UI_VIEWS_TOOLBAR_RESTORE_TAB_BUTTON_H_

File diff suppressed because it is too large Load diff