c670e38b4b
* chore: bump chromium in DEPS to 124.0.6361.0 * chore: bump chromium in DEPS to 124.0.6363.0 * chore: update patches Manually apply printing.patch w/no code changes due to upstream shear. Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5349263 * chore: bump chromium in DEPS to 124.0.6365.0 * chore: bump chromium in DEPS to 124.0.6367.0 * update patches * 5371735: Rename SystemGeolocationSourceMac to SystemGeolocationSourceApple https://chromium-review.googlesource.com/c/chromium/src/+/5371735 * missed a MAS bit * chore: update windows toolchain 5350823: New toolchain for Windows 11 10.0.22621.2428 SDK | https://chromium-review.googlesource.com/c/chromium/src/+/5350823 * chore: bump chromium in DEPS to 125.0.6368.0 * fix patches * chore: update patches * 5232401: [PDF] Move generic utils from //chrome to //components/pdf (1/2) https://chromium-review.googlesource.com/c/chromium/src/+/5232401 * revert https://chromium-review.googlesource.com/c/chromium/src/+/5380898 * chore: bump chromium in DEPS to 125.0.6370.0 * build: use updated windows toolchain * fix patches * chore: update patches * more pdf_util to components * 5372414: [Extensions] Remove DispatcherDelegate https://chromium-review.googlesource.com/c/chromium/src/+/5372414 * fix accessibility_ui patch * chore: bump chromium in DEPS to 125.0.6372.0 * chore: bump chromium in DEPS to 125.0.6374.0 * chore: bump chromium in DEPS to 125.0.6376.0 * chore: bump chromium in DEPS to 125.0.6378.0 * chore: bump chromium in DEPS to 125.0.6379.3 * chore: update patches (+ MAS patch changes) * chore: update patches * 5381159: Cleanup media::KeySystemSupportObserver https://chromium-review.googlesource.com/c/chromium/src/+/5381159 * 5382233: Reland "Web `Speech to Text` with SODA backend" https://chromium-review.googlesource.com/c/chromium/src/+/5382233 * chore: update `exclusive_access` patch - 5367497: Add a metric for the website state when Fullscreen API is requested - https://chromium-review.googlesource.com/c/chromium/src/+/5367497 * chore: add build dependency 5367497: Add a metric for the website state when Fullscreen API is requested https://chromium-review.googlesource.com/c/chromium/src/+/5367497 * chore: bump chromium in DEPS to 125.0.6382.0 * chore: update libcxx filenames * chore: update patches * chore: bump chromium in DEPS to 125.0.6384.0 * chore: remove old patch * 5394039: [Extensions] Change "blessed" -> "privileged" in extension feature files https://chromium-review.googlesource.com/c/chromium/src/+/5394039 * fix: remove deprecated errno constants in node/libuv * 5362194: Return expected from ProcessMetrics CPU methods https://chromium-review.googlesource.com/c/chromium/src/+/5362194 * 5383927: Add new Pickle factory functions with explicit ownership https://chromium-review.googlesource.com/c/chromium/src/+/5383927 * 5373340: Simplify app-region/Draggable Region implementation https://chromium-review.googlesource.com/c/chromium/src/+/5373340 * 5386875: Cleanup printing preferences files https://chromium-review.googlesource.com/c/chromium/src/+/5386875 * chore: update libc++ filenames * fix: add enterprise buildflags dep * chore: bump chromium in DEPS to 125.0.6386.0 * chore: add build dep * chore: update patches * chore: bump chromium in DEPS to 125.0.6388.0 * chore: bump chromium in DEPS to 125.0.6390.0 * chore: update patches * 4918014: preloading: Add NewTabPagePageLoadMetricsObserver https://chromium-review.googlesource.com/c/chromium/src/+/4918014 * 5401234: [PDF] Remove `PDFDocumentHelperClient::FindPdfChildFrame` API https://chromium-review.googlesource.com/c/chromium/src/+/5401234 * 5116175: Relocate Windows XPS printing feature helper methods https://chromium-review.googlesource.com/c/chromium/src/+/5116175 * fixup! 5373340: Simplify app-region/Draggable Region implementation https://chromium-review.googlesource.com/c/chromium/src/+/5373340 * fixup! chore: add build dep * chore: remove dead code & dead patch Was dealing with https://chromium-review.googlesource.com/c/chromium/src/+/5402805 when I realized this code is no longer possible to call. It seems like this code became dead in the previous roll (#41514). The patch exposed a `DxdiagDx12VulkanRequested` method on Chromium's `GpuDataManagerImpl`, which we consumed only in our own `GPUInfoManager::NeedsCompleteGpuInfoCollection`. There are no other references to this method, so it and the patch can both be deleted. Yay! * chore: bump chromium in DEPS to 125.0.6392.0 * chore: bump chromium in DEPS to 125.0.6393.0 * chore: update patches * chore: bump chromium in DEPS to 125.0.6394.0 * chore: bump chromium in DEPS to 125.0.6396.0 * chore: bump chromium in DEPS to 125.0.6397.0 * chore: update printing.patch Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5100842 No code changes, but had to apply patch manually due to upstream code shear * chore: update add_maximized_parameter_to_linuxui_getwindowframeprovider.patch No manual changes; patch applied with fuzz 1 * chore: update feat_allow_code_cache_in_custom_schemes.patch No manual changes; patch applied with fuzz 2 * chore: silence "space before tab in indent" git rebase-apply warning * chore: e patches all * build: update all.gn to avoid FTBFS when disabling raw_ptr Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5371737 * Rename PdfService Mojo interface to PdfHost Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5411957 * chore: bump chromium in DEPS to 125.0.6398.0 * chore: update patches * chore: bump chromium in DEPS to 125.0.6400.0 * chore: update patches * [media] Remove unused `GetSupportedKeySystems` from MediaClient Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5420247 * chore: update JSInjection::New call to match upstream change Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5403967 [Extensions] Wire up the renderer for multiple user script worlds * 5362362: Derive display ID from monitor adapter ID instead of szDevice. https://chromium-review.googlesource.com/c/chromium/src/+/5362362 * 5116175: Relocate Windows XPS printing feature helper methods https://chromium-review.googlesource.com/c/chromium/src/+/5116175 * chore: add v8-sandbox.h to electron-node * chore: update patches * chore: update patches * fixup! 5394039: [Extensions] Change blessed -> privileged in extension feature files * chore: bump chromium in DEPS to 125.0.6412.0 * chore: update patches * chore: node script/gen-libc++-filenames.js * [FPF] Create Fingerprinting Protection ruleset service. Refs https://chromium-review.googlesource.com/c/chromium/src/+/5420158 * Add ExclusiveAccessPermissionManager Refs https://chromium-review.googlesource.com/c/chromium/src/+/5273787 * Preserve the PNG colorspace when decoding into a SkBitmap. Refs https://chromium-review.googlesource.com/c/chromium/src/+/5421254 * chore: iwyu * fix: abstract-socket compilation * ci: bump container for node 20 support * fixup! abstract-socket compilation * fix: compiling nan specs * chore: revert winreg version bump accidental bump to 1.2.5 revealed failing app.setasdefaultprotocolclient test suite. Should be revisited separately. * ci: set node 20 for darwin x64 tests * fix: broken patch export * chore: cleanup mas_avoid_private_macos_api_usage.patch.patch Removed code that was inadvertently put back after https://chromium-review.googlesource.com/c/chromium/src/+/5348565 removed it --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: Charles Kerr <charles@charleskerr.com> Co-authored-by: Jeremy Rose <jeremya@chromium.org> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org> Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com> Co-authored-by: clavin <clavin@electronjs.org> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> Co-authored-by: deepak1556 <hop2deep@gmail.com>
146 lines
5.4 KiB
C++
146 lines
5.4 KiB
C++
// Copyright (c) 2022 Microsoft, Inc. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "shell/browser/ui/views/win_icon_painter.h"
|
|
|
|
#include "base/numerics/safe_conversions.h"
|
|
#include "third_party/skia/include/core/SkPath.h"
|
|
#include "ui/gfx/color_utils.h"
|
|
#include "ui/gfx/geometry/rect_conversions.h"
|
|
#include "ui/gfx/geometry/rrect_f.h"
|
|
#include "ui/gfx/geometry/skia_conversions.h"
|
|
#include "ui/gfx/scoped_canvas.h"
|
|
|
|
namespace {
|
|
|
|
// The rounded rect corner radius for MaximizeIcon and RestoreIcon in
|
|
// Windows 11.
|
|
constexpr float kWin11RoundedCornerRadius = 1.5f;
|
|
|
|
void DrawRect(gfx::Canvas* canvas,
|
|
const gfx::Rect& rect,
|
|
const cc::PaintFlags& flags) {
|
|
gfx::RectF rect_f(rect);
|
|
|
|
// The rect is used as a bounding box, and the stroke is kept within.
|
|
float stroke_half_width = flags.getStrokeWidth() / 2;
|
|
rect_f.Inset(stroke_half_width);
|
|
|
|
canvas->DrawRect(rect_f, flags);
|
|
}
|
|
|
|
} // namespace
|
|
|
|
namespace electron {
|
|
|
|
WinIconPainter::WinIconPainter() = default;
|
|
WinIconPainter::~WinIconPainter() = default;
|
|
|
|
void WinIconPainter::PaintMinimizeIcon(gfx::Canvas* canvas,
|
|
const gfx::Rect& symbol_rect,
|
|
cc::PaintFlags& flags) {
|
|
const int y = symbol_rect.CenterPoint().y();
|
|
const gfx::Point p1 = gfx::Point(symbol_rect.x(), y);
|
|
const gfx::Point p2 = gfx::Point(symbol_rect.right(), y);
|
|
canvas->DrawLine(p1, p2, flags);
|
|
}
|
|
|
|
void WinIconPainter::PaintMaximizeIcon(gfx::Canvas* canvas,
|
|
const gfx::Rect& symbol_rect,
|
|
cc::PaintFlags& flags) {
|
|
DrawRect(canvas, symbol_rect, flags);
|
|
}
|
|
|
|
void WinIconPainter::PaintRestoreIcon(gfx::Canvas* canvas,
|
|
const gfx::Rect& symbol_rect,
|
|
cc::PaintFlags& flags) {
|
|
const int separation = base::ClampFloor(2 * canvas->image_scale());
|
|
gfx::Rect icon_rect = symbol_rect;
|
|
icon_rect.Inset(gfx::Insets::TLBR(separation, 0, 0, separation));
|
|
|
|
// Bottom left ("in front") square.
|
|
DrawRect(canvas, icon_rect, flags);
|
|
|
|
// Top right ("behind") square.
|
|
canvas->ClipRect(icon_rect, SkClipOp::kDifference);
|
|
icon_rect.Offset(separation, -separation);
|
|
DrawRect(canvas, icon_rect, flags);
|
|
}
|
|
|
|
void WinIconPainter::PaintCloseIcon(gfx::Canvas* canvas,
|
|
const gfx::Rect& symbol_rect,
|
|
cc::PaintFlags& flags) {
|
|
// TODO(bsep): This sometimes draws misaligned at fractional device scales
|
|
// because the button's origin isn't necessarily aligned to pixels.
|
|
cc::PaintFlags paint_flags = flags;
|
|
paint_flags.setAntiAlias(true);
|
|
|
|
canvas->ClipRect(symbol_rect);
|
|
SkPath path;
|
|
path.moveTo(symbol_rect.x(), symbol_rect.y());
|
|
path.lineTo(symbol_rect.right(), symbol_rect.bottom());
|
|
path.moveTo(symbol_rect.right(), symbol_rect.y());
|
|
path.lineTo(symbol_rect.x(), symbol_rect.bottom());
|
|
canvas->DrawPath(path, flags);
|
|
}
|
|
|
|
Win11IconPainter::Win11IconPainter() = default;
|
|
Win11IconPainter::~Win11IconPainter() = default;
|
|
|
|
void Win11IconPainter::PaintMaximizeIcon(gfx::Canvas* canvas,
|
|
const gfx::Rect& symbol_rect,
|
|
cc::PaintFlags& flags) {
|
|
gfx::RectF rect_f(symbol_rect);
|
|
flags.setAntiAlias(true);
|
|
const float corner_radius =
|
|
base::ClampFloor(kWin11RoundedCornerRadius * canvas->image_scale());
|
|
|
|
// The symbol rect is used as a bounding box, and the stroke is kept within.
|
|
float stroke_half_width = flags.getStrokeWidth() / 2;
|
|
rect_f.Inset(stroke_half_width);
|
|
|
|
canvas->DrawRoundRect(rect_f, corner_radius, flags);
|
|
}
|
|
|
|
void Win11IconPainter::PaintRestoreIcon(gfx::Canvas* canvas,
|
|
const gfx::Rect& symbol_rect,
|
|
cc::PaintFlags& flags) {
|
|
gfx::RectF rect_f(symbol_rect);
|
|
const float separation = 2.0f * canvas->image_scale();
|
|
const int round_rect_radius =
|
|
base::ClampFloor(kWin11RoundedCornerRadius * canvas->image_scale());
|
|
const int top_rect_upper_right_radius = 2 * round_rect_radius;
|
|
flags.setAntiAlias(true);
|
|
|
|
// The symbol rect is used as a bounding box, and the stroke is kept within.
|
|
const float stroke_half_width = flags.getStrokeWidth() / 2;
|
|
rect_f.Inset(stroke_half_width);
|
|
|
|
// Shrink the rect to make space for the top rect.
|
|
rect_f.Inset(gfx::InsetsF::TLBR(separation, 0, 0, separation));
|
|
|
|
gfx::RRectF rrect(rect_f, round_rect_radius);
|
|
|
|
// Bottom ("in front") rounded square.
|
|
canvas->sk_canvas()->drawRRect(SkRRect(rrect), flags);
|
|
|
|
// The top rounded square is clipped to only draw the top and right edges,
|
|
// and give corners a flat base. The clip rect sits right below the bottom
|
|
// half of the stroke.
|
|
gfx::RRectF clip_rrect(rrect);
|
|
const float clip_rect_growth = separation - stroke_half_width;
|
|
// The upper-right corner radius doesn't need to be updated because |Outset|
|
|
// does that for us.
|
|
clip_rrect.Outset(clip_rect_growth);
|
|
canvas->sk_canvas()->clipRRect(SkRRect(clip_rrect), SkClipOp::kDifference,
|
|
true);
|
|
|
|
// Top ("behind") rounded square.
|
|
rrect.Offset(separation, -separation);
|
|
rrect.SetCornerRadii(gfx::RRectF::Corner::kUpperRight,
|
|
top_rect_upper_right_radius,
|
|
top_rect_upper_right_radius);
|
|
canvas->sk_canvas()->drawRRect(SkRRect(rrect), flags);
|
|
}
|
|
} // namespace electron
|