Skip to content

Commit e69f2fe

Browse files
committed
新增了 Button 的是否启用状态,并修复了 Toggle 的大小 getter
1 parent 66faf75 commit e69f2fe

2 files changed

Lines changed: 65 additions & 2 deletions

File tree

include/Widget.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,13 @@ class Widget {
6868
* @brief 获取控件宽度
6969
* @return 宽度值
7070
*/
71-
double getWidth();
71+
virtual double getWidth();
7272

7373
/**
7474
* @brief 获取控件高度
7575
* @return 高度值
7676
*/
77-
double getHeight();
77+
virtual double getHeight();
7878

7979
virtual void deleteFocus(const mouse_msg& msg);
8080
virtual void releaseMouseOwningFlag(const mouse_msg& msg);
@@ -379,6 +379,7 @@ class Button : public Widget {
379379
PIMAGE icon = nullptr; ///< 图标图像
380380
int iconSize = 100; ///< 图标尺寸
381381
ege_path clippath;
382+
bool disabled = false;
382383

383384
public:
384385
/**
@@ -488,6 +489,9 @@ class Button : public Widget {
488489
virtual void catchMouseOwningFlag(const mouse_msg& msg) override;
489490

490491
void reset() override;
492+
493+
void disable();
494+
void enable();
491495
};
492496

493497
/**
@@ -552,6 +556,8 @@ class InputBox : public Widget {
552556
float m_ime_pos_x = 0;
553557
float m_ime_pos_y = 0;
554558

559+
bool disabled = false;
560+
555561
bool dragging = false;
556562
int dragBegin = 0, dragEnd = 0;
557563
int dragSide = 0; // -1=左出界,1=右出界,0=无
@@ -671,6 +677,9 @@ class InputBox : public Widget {
671677
void updateIMEPosition();
672678

673679
void reset() override;
680+
681+
void disable();
682+
void enable();
674683
};
675684

676685

@@ -1182,6 +1191,9 @@ class Toggle : public Widget {
11821191

11831192
bool isBackendDirty() const override;
11841193

1194+
double getWidth() override ;
1195+
double getHeight() override ;
1196+
11851197
protected:
11861198
double cx, cy;
11871199
double width, height, scale = 1.0;

src/Widget.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,7 @@ void Button::catchMouseOwningFlag(const mouse_msg& msg){
786786

787787
bool Button::handleEvent(const mouse_msg& msg) {
788788
bool inside = isInside(msg.x, msg.y);
789+
if(disabled) return inside;
789790

790791
// 处理其它控件焦点
791792
if(msg.is_left() && msg.is_up()){
@@ -944,6 +945,26 @@ void Button::reset(){
944945
ripples.shrink_to_fit();
945946
}
946947

948+
void Button::disable(){
949+
disabled = true;
950+
needRedraw = true;
951+
if(this->parent != nullptr){
952+
if (Panel* p = dynamic_cast<Panel*>(this->parent)) {
953+
p->setDirty();
954+
}
955+
}
956+
}
957+
958+
void Button::enable(){
959+
disabled = false;
960+
needRedraw = true;
961+
if(this->parent != nullptr){
962+
if (Panel* p = dynamic_cast<Panel*>(this->parent)) {
963+
p->setDirty();
964+
}
965+
}
966+
}
967+
947968
// InputBox 类实现
948969
ButtonBuilder& ButtonBuilder::setIdentifier(const wstring& id) {
949970
identifier = id;
@@ -1264,6 +1285,8 @@ void InputBox::updateIMEPosition() {
12641285

12651286
bool InputBox::handleEvent(const mouse_msg& msg) {
12661287
const bool inside = isInside(msg.x, msg.y);
1288+
if(disabled) return inside;
1289+
12671290
// 鼠标移入移出处理
12681291
if (inside) {
12691292
setCursor(IDC_IBEAM);
@@ -1750,6 +1773,26 @@ void InputBox::reset(){
17501773
ripples.shrink_to_fit();
17511774
}
17521775

1776+
void InputBox::disable(){
1777+
disabled = true;
1778+
needRedraw = true;
1779+
if(this->parent != nullptr){
1780+
if (Panel* p = dynamic_cast<Panel*>(this->parent)) {
1781+
p->setDirty();
1782+
}
1783+
}
1784+
}
1785+
1786+
void InputBox::enable(){
1787+
disabled = false;
1788+
needRedraw = true;
1789+
if(this->parent != nullptr){
1790+
if (Panel* p = dynamic_cast<Panel*>(this->parent)) {
1791+
p->setDirty();
1792+
}
1793+
}
1794+
}
1795+
17531796
// Slider 类实现
17541797
InputBoxBuilder& InputBoxBuilder::setIdentifier(const wstring& id) {
17551798
identifier = id;
@@ -2996,6 +3039,14 @@ bool Toggle::isBackendDirty() const {
29963039
return fabs(knobOffset - knobTarget) > 1e-3;
29973040
}
29983041

3042+
double Toggle::getWidth(){
3043+
return width * scale;
3044+
}
3045+
3046+
double Toggle::getHeight(){
3047+
return height * scale;
3048+
}
3049+
29993050
ToggleBuilder& ToggleBuilder::setCenter(double x, double y) {
30003051
cx = x; cy = y;
30013052
return *this;

0 commit comments

Comments
 (0)