mirror of
https://github.com/Alex313031/thorium.git
synced 2025-01-09 19:37:30 -03:00
add tab search, color, and restore button to Th24!
This commit is contained in:
parent
48b05cb71a
commit
3ed9098c14
9 changed files with 1276 additions and 2630 deletions
File diff suppressed because it is too large
Load diff
|
@ -18,7 +18,8 @@ import sys
|
||||||
from gn_helpers import ToGNString
|
from gn_helpers import ToGNString
|
||||||
|
|
||||||
# VS 2022 17.11.5 with 10.1.26100.1742 SDK with ARM64 libraries and UWP support.
|
# 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
|
# See go/chromium-msvc-toolchain for instructions about how to update the
|
||||||
# toolchain.
|
# toolchain.
|
||||||
#
|
#
|
||||||
|
@ -555,11 +556,56 @@ def SetEnvironmentAndGetSDKDir():
|
||||||
return NormalizePath(os.environ['WINDOWSSDKDIR'])
|
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():
|
def GetToolchainDir():
|
||||||
"""Gets location information about the current toolchain (must have been
|
"""Gets location information about the current toolchain (must have been
|
||||||
previously updated by 'update'). This is used for the GN build."""
|
previously updated by 'update'). This is used for the GN build."""
|
||||||
runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs()
|
runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs()
|
||||||
win_sdk_dir = SetEnvironmentAndGetSDKDir()
|
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
|
print('''vs_path = %s
|
||||||
sdk_version = %s
|
sdk_version = %s
|
||||||
|
@ -569,7 +615,7 @@ wdk_dir = %s
|
||||||
runtime_dirs = %s
|
runtime_dirs = %s
|
||||||
''' % (ToGNString(NormalizePath(
|
''' % (ToGNString(NormalizePath(
|
||||||
os.environ['GYP_MSVS_OVERRIDE_PATH'])), ToGNString(SDK_VERSION),
|
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(NormalizePath(os.environ.get('WDK_DIR', ''))),
|
||||||
ToGNString(os.path.pathsep.join(runtime_dll_dirs or ['None']))))
|
ToGNString(os.path.pathsep.join(runtime_dll_dirs or ['None']))))
|
||||||
|
|
||||||
|
|
24
src/chrome/browser/ui/views/frame/window_caption_util.cc
Normal file
24
src/chrome/browser/ui/views/frame/window_caption_util.cc
Normal 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)
|
||||||
|
}
|
21
src/chrome/browser/ui/views/frame/window_caption_util.h
Normal file
21
src/chrome/browser/ui/views/frame/window_caption_util.h
Normal 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
|
@ -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_
|
|
54
src/chrome/browser/ui/views/toolbar/restore_tab_button.cc
Normal file
54
src/chrome/browser/ui/views/toolbar/restore_tab_button.cc
Normal 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
|
31
src/chrome/browser/ui/views/toolbar/restore_tab_button.h
Normal file
31
src/chrome/browser/ui/views/toolbar/restore_tab_button.h
Normal 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
Loading…
Reference in a new issue