fix: 修正滑块填充残留、数值内联输入与信号/分组重命名,拖拽虚影跟随鼠标
- 滑块最小值时不再有超出圆钮的填充残留,三处滑块统一为共享实现 - 透明度/RGB/色号支持点击或双击直接输入,整段高亮、首次键入替换、回车提交、Ctrl+C 复制 - 双击信号行或分组名进入重命名编辑;分组竖线改为绘制而非字符 - 拖拽信号时曲线虚影跟随鼠标纵向位移 - 数据层新增展示名覆盖,面板改为持有可写数据集合
This commit is contained in:
1 parent
542aa51e40
commit
261b8ac07d
13 files changed
+1074
-274
No files matched your search
@@ -99,12 +99,25 @@ namespace jdi
|
||||
bool OnLButtonUp();
|
||||
|
||||
/**
|
||||
* @brief 处理键盘按键(Esc 收起)。
|
||||
* @brief 处理键盘按键(Esc 收起、回车提交输入)。
|
||||
* @param [IN] key 虚拟键码。
|
||||
* @return 事件已被消费返回 true。
|
||||
*/
|
||||
bool OnKeyDown(WPARAM key);
|
||||
|
||||
/**
|
||||
* @brief 处理字符输入。
|
||||
* @param [IN] character 输入字符('\r' 提交、'\b' 退格、0x03 复制)。
|
||||
* @return 界面状态发生变化返回 true。
|
||||
*/
|
||||
bool OnChar(wchar_t character);
|
||||
|
||||
/**
|
||||
* @brief 判断面板是否处于内联文本输入状态。
|
||||
* @return 正在输入返回 true。
|
||||
*/
|
||||
bool IsEditing() const { return m_editField != EditField::NONE; }
|
||||
|
||||
/**
|
||||
* @brief 判断坐标是否落在拾色面板内部。
|
||||
* @param [IN] x 客户区横坐标。
|
||||
@@ -122,6 +135,18 @@ namespace jdi
|
||||
HCURSOR QueryCursor(int x, int y) const;
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief 面板内可进行内联文本输入的字段。
|
||||
*/
|
||||
enum class EditField : int
|
||||
{
|
||||
NONE = 0, /**< 未处于编辑状态。 */
|
||||
R = 1, /**< 红色分量(0-255)。 */
|
||||
G = 2, /**< 绿色分量(0-255)。 */
|
||||
B = 3, /**< 蓝色分量(0-255)。 */
|
||||
HEX = 4 /**< 十六进制色号。 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 依据锚点矩形与客户区计算面板矩形与内部控件矩形。
|
||||
* @param [IN] bounds 宿主客户区矩形。
|
||||
@@ -129,6 +154,26 @@ namespace jdi
|
||||
*/
|
||||
void BuildLayout(const gd::RectF& bounds, const gd::RectF& anchor);
|
||||
|
||||
/**
|
||||
* @brief 进入指定字段的内联输入状态。
|
||||
* @param [IN] field 目标字段。
|
||||
* @return 状态发生变化返回 true。
|
||||
*/
|
||||
bool BeginEdit(EditField field);
|
||||
|
||||
/**
|
||||
* @brief 结束内联输入状态。
|
||||
* @param [IN] commit 是否提交输入值。
|
||||
* @return 状态发生变化返回 true。
|
||||
*/
|
||||
bool EndEdit(bool commit);
|
||||
|
||||
/**
|
||||
* @brief 计算当前输入框的矩形。
|
||||
* @return 输入框矩形。
|
||||
*/
|
||||
gd::RectF EditFieldRect() const;
|
||||
|
||||
/**
|
||||
* @brief 查询坐标命中的滑块下标。
|
||||
* @param [IN] x 客户区横坐标。
|
||||
@@ -160,6 +205,10 @@ namespace jdi
|
||||
std::array<gd::RectF, 3> m_values; /**< 数值文本矩形。 */
|
||||
gd::RectF m_previewRect; /**< 预览色块矩形。 */
|
||||
gd::RectF m_hexRect; /**< 十六进制文本矩形。 */
|
||||
|
||||
EditField m_editField = EditField::NONE; /**< 当前处于输入状态的字段。 */
|
||||
bool m_editFresh = false; /**< 输入缓冲是否仍为初始值(首次键入应整体替换)。 */
|
||||
std::wstring m_editText; /**< 输入缓冲。 */
|
||||
};
|
||||
|
||||
} // namespace jdi
|
||||
|
||||
Reference in new issue
Block a user