fix(editor): add hover and press states to color mark icons - #511
fix(editor): add hover and press states to color mark icons#511tianming-1996 wants to merge 1 commit into
Conversation
There was a problem hiding this comment.
Sorry @tianming-1996, you have reached your weekly rate limit of 500000 diff characters.
Please try again later or upgrade to continue using Sourcery
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: tianming-1996 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 |
Reviewer's GuideAdds proper hover and press interaction states to ColorLabel in ColorSelectWdg, refactoring painting and mouse event handling so the color markers visually respond to hover/press and emit their selection signal on mouse release instead of press. Sequence diagram for updated ColorLabel mouse interactionsequenceDiagram
actor User
participant ColorLabel
participant ColorSelectWdg
User->>ColorLabel: enterEvent
ColorLabel->>ColorLabel: m_bHover = true
ColorLabel->>ColorLabel: update
User->>ColorLabel: mousePressEvent (LeftButton)
ColorLabel->>ColorLabel: m_bPressed = true
ColorLabel->>ColorLabel: update
User->>ColorLabel: mouseReleaseEvent (LeftButton)
ColorLabel->>ColorLabel: m_bPressed = false
ColorLabel->>ColorLabel: m_bSelected = true
ColorLabel->>ColorLabel: update
ColorLabel-->>ColorSelectWdg: sigColorClicked(m_bSelected, m_color)
User->>ColorLabel: leaveEvent
ColorLabel->>ColorLabel: m_bHover = false
ColorLabel->>ColorLabel: m_bPressed = false
ColorLabel->>ColorLabel: update
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
bf0c578 to
05c27ad
Compare
ColorLabel widget only implements selected/unselected visual states, missing hover and press feedback. This adds enterEvent/leaveEvent for hover highlighting and mousePressEvent/mouseReleaseEvent for press animation, improving interaction experience. 为颜色标记图标增加悬停与按压交互状态。ColorLabel 原先仅有选中/未选中两种 视觉状态,缺少 hover 和 press 反馈。新增 enterEvent/leaveEvent 实现悬停 高亮,mousePressEvent/mouseReleaseEvent 实现按压动画。 Log: 为颜色标记图标增加悬停与按压交互状态 PMS: BUG-196825 Influence: 右键菜单颜色标记子菜单的颜色图标现在有 hover/press 视觉反馈, 不影响已有标记和清除功能。
05c27ad to
3604de7
Compare
deepin pr auto review★ 总体评分:98分■ 【总体评价】
■ 【详细分析】
■ 【改进建议代码示例】 // src/widgets/ColorSelectWdg.h
class ColorLabel : public DWidget
{
// ... 其他代码保持不变
private:
void drawSelectedRing(QPainter &painter, const QRect &r, int innerDistance);
// ... 其他代码保持不变
};
// src/widgets/ColorSelectWdg.cpp
void ColorLabel::drawSelectedRing(QPainter &painter, const QRect &r, int innerDistance)
{
if (!m_bSelected) return;
QPainterPath ring;
ring.addEllipse(r.adjusted(innerDistance, innerDistance, -innerDistance, -innerDistance));
QPainterPath outerPath;
outerPath.addEllipse(r);
ring = outerPath - ring;
painter.fillPath(ring, m_color);
}
void ColorLabel::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
int distance = 2;
QRect r = rect();
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::Qt4CompatiblePainting);
if (m_bPressed) {
QRectF pressedRect = r.adjusted(distance, distance, -distance, -distance);
QPainterPath pressedPath;
pressedPath.addEllipse(pressedRect);
painter.fillPath(pressedPath, m_color.darker(130));
drawSelectedRing(painter, r, distance / 2);
} else if (m_bHover) {
QRectF hoverRect = r.adjusted(distance, distance, -distance, -distance);
QPainterPath hoverPath;
hoverPath.addEllipse(hoverRect);
painter.fillPath(hoverPath, m_color);
drawSelectedRing(painter, r, distance);
} else {
QPainterPath bigCircle;
bigCircle.addEllipse(r);
QPainterPath smallCircle;
smallCircle.addEllipse(r.adjusted(2 * distance, 2 * distance, -2 * distance, -2 * distance));
painter.fillPath(smallCircle, m_color);
drawSelectedRing(painter, r, distance);
}
painter.end();
} |
根因分析
颜色标记图标
ColorLabel(src/widgets/ColorSelectWdg.h:53-63)仅实现m_bSelected一个状态,缺失 hover 和 press 交互状态:setMouseTracking(true),但未重写enterEvent()/leaveEvent()mousePressEvent()直接选中,无 press 过渡反馈paintEvent()只绘制默认圆/选中圆环两态修复方案
为
ColorLabel增加m_bHover/m_bPressed状态变量,重写enterEvent()/leaveEvent()/mousePressEvent()/mouseReleaseEvent()。paintEvent()三分支渲染:press 态颜色加深+微缩,hover 态外扩,normal 保持原有逻辑。选中信号改为 release 触发(与 Qt 按钮标准行为一致)。改动安全评估
低风险。
ColorLabel是ColorSelectWdg中的私有控件,无外部引用。新增 hover/press 属纯叠加性视觉增强,sigColorClicked信号语义不变(仅触发时机从 press 改为 release),不破坏ColorSelectWdg的互斥选中逻辑。PMS: BUG-196825
Summary by Sourcery
Bug Fixes: