mirror of
https://github.com/Alex313031/thorium.git
synced 2025-01-09 11:27:32 -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
|
||||
|
||||
# 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']))))
|
||||
|
||||
|
|
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