feat(widget): add hover border effect to RoundColorWidget - #346
Conversation
Add enter/leave event handlers to draw a theme-aware hover border on the round color button (15% black in light, 15% white in dark). 为圆形颜色按钮添加鼠标悬停边框效果,浅色主题用15%黑、深色主题用15%白。 Log: 添加RoundColorWidget悬停边框效果 PMS: TASK-394181 Influence: 颜色选项按钮鼠标悬停时显示边框反馈,提升交互体验,不影响选中态显示。
Reviewer's GuideImplements hover feedback for RoundColorWidget by handling pointer entry and exit, maintaining a hover flag, and rendering a theme-aware 15% opacity border while preserving selected-state visuals and Qt 5/6 compatibility. Sequence diagram for RoundColorWidget hover feedbacksequenceDiagram
actor User
participant Widget as RoundColorWidget
participant Painter as QPainter
participant Theme as DGuiApplicationHelper
User->>Widget: enterEvent(event)
Widget->>Widget: m_isHovered = true
Widget->>Widget: update()
Widget->>Widget: paintEvent(event)
Widget->>Theme: themeType()
Theme-->>Widget: DarkType or LightType
Widget->>Painter: drawEllipse(hover border)
User->>Widget: leaveEvent(event)
Widget->>Widget: m_isHovered = false
Widget->>Widget: update()
Widget->>Widget: paintEvent(event)
Widget->>Painter: drawEllipse(without hover border)
State diagram for RoundColorWidget visual statesstateDiagram-v2
[*] --> Normal
Normal --> Hovered: enterEvent(event)
Hovered --> Normal: leaveEvent(event)
Normal --> Selected: mousePressEvent(event)
Hovered --> Selected: mousePressEvent(event)
Selected --> Normal: selection cleared
Selected --> Hovered: enterEvent(event)
state Normal {
[*] --> ColorCircle
}
state Hovered {
[*] --> ThemeAwareBorder
}
state Selected {
[*] --> HighlightBorder
}
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: add-uos, lzwind The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
deepin pr auto review🤖 AI 代码审查报告📊 总体评价
📋 需求背景
本次提交的目的是为 RoundColorWidget(圆形颜色选择按钮)添加鼠标悬停时的边框效果,浅色主题使用15%透明度黑色边框,深色主题使用15%透明度白色边框,提升交互体验。代码实现与 commit 目的一致。 🔍 详细分析1. 语法逻辑 ✅评分: 25/25 ✓ 语法正确,逻辑清晰 潜在问题: 分析详情:
2. 代码质量 ✅评分: 22/25 ✓ 代码结构清晰,注释完整 潜在问题:
分析详情:
3. 代码性能 ✅评分: 20/20 ✓ 性能良好,资源使用合理 潜在问题: 分析详情:
4. 代码安全 🔒评分: 30/30 ✓ 存在0个安全漏洞
安全漏洞详情: 漏洞对比统计:新增漏洞 0 个,减少漏洞 0 个,持平 0 个 分析详情:
💡 改进建议代码示例// 建议提取公共边框绘制逻辑为辅助方法,减少 paintEvent 中的代码重复
// 在 RoundColorWidget.h 中添加私有辅助方法声明:
private:
void drawBorder(QPainter &painter, const QColor &color, int width, const QRect &rect);
// 在 RoundColorWidget.cpp 中实现:
void RoundColorWidget::drawBorder(QPainter &painter, const QColor &color, int width, const QRect &rect)
{
QPen pen;
pen.setBrush(QBrush(color));
pen.setWidth(width);
painter.setPen(pen);
QRect r = rect.adjusted(3, 3, -3, -3);
painter.drawEllipse(r);
}
// paintEvent 中简化为:
void RoundColorWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QPainter painter(this);
painter.setPen(Qt::NoPen);
painter.setRenderHints(QPainter::Antialiasing);
int borderWidth = style()->pixelMetric(
static_cast<QStyle::PixelMetric>(DStyle::PM_FocusBorderWidth), nullptr, this);
QRect squareRect = rect();
if (m_isSelected) {
QColor highlightColor = DGuiApplicationHelper::instance()
->applicationPalette().highlight().color();
drawBorder(painter, highlightColor, borderWidth, squareRect);
} else if (m_isHovered) {
bool isDark = DGuiApplicationHelper::instance()->themeType()
== DGuiApplicationHelper::DarkType;
QColor hoverColor = isDark ? Qt::white : Qt::black;
hoverColor.setAlpha(38);
drawBorder(painter, hoverColor, borderWidth, squareRect);
}
// ... 后续绘制逻辑保持不变
}📁 文件分析统计
本报告由 AI 代码审查工具自动生成 项目: linuxdeepin/deepin-reader | PR: #346 |
|
/merge |
Add enter/leave event handlers to draw a theme-aware hover border on the round color button (15% black in light, 15% white in dark).
为圆形颜色按钮添加鼠标悬停边框效果,浅色主题用15%黑、深色主题用15%白。
Log: 添加RoundColorWidget悬停边框效果
PMS: TASK-394181
Influence: 颜色选项按钮鼠标悬停时显示边框反馈,提升交互体验,不影响选中态显示。
Summary by Sourcery
New Features: