Add support for bilinear bars in TextureProgress
These bars will extend from the center to the left and right of the node, or from the center to the top and bottom of the node depending on the option selected. The Clockwise and Counter Clockwise mode will expand the progress bar both ways in a circular fashion.
This commit is contained in:
parent
0902915c33
commit
814989e106
2 changed files with 28 additions and 6 deletions
|
@ -309,15 +309,23 @@ void TextureProgress::_notification(int p_what) {
|
|||
draw_texture_rect_region(progress, region, region, tint_progress);
|
||||
} break;
|
||||
case FILL_CLOCKWISE:
|
||||
case FILL_COUNTER_CLOCKWISE: {
|
||||
case FILL_COUNTER_CLOCKWISE:
|
||||
case FILL_CLOCKWISE_AND_COUNTER_CLOCKWISE: {
|
||||
float val = get_as_ratio() * rad_max_degrees / 360;
|
||||
if (val == 1) {
|
||||
Rect2 region = Rect2(Point2(), s);
|
||||
draw_texture_rect_region(progress, region, region, tint_progress);
|
||||
} else if (val != 0) {
|
||||
Array pts;
|
||||
float direction = mode == FILL_CLOCKWISE ? 1 : -1;
|
||||
float start = rad_init_angle / 360;
|
||||
float direction = mode == FILL_COUNTER_CLOCKWISE ? -1 : 1;
|
||||
float start;
|
||||
|
||||
if (mode == FILL_CLOCKWISE_AND_COUNTER_CLOCKWISE) {
|
||||
start = rad_init_angle / 360 - val / 2;
|
||||
} else {
|
||||
start = rad_init_angle / 360;
|
||||
}
|
||||
|
||||
float end = start + direction * val;
|
||||
pts.append(start);
|
||||
pts.append(end);
|
||||
|
@ -351,6 +359,14 @@ void TextureProgress::_notification(int p_what) {
|
|||
draw_line(p - Point2(0, 8), p + Point2(0, 8), Color(0.9, 0.5, 0.5), 2);
|
||||
}
|
||||
} break;
|
||||
case FILL_BILINEAR_LEFT_AND_RIGHT: {
|
||||
Rect2 region = Rect2(Point2(s.x / 2 - s.x * get_as_ratio() / 2, 0), Size2(s.x * get_as_ratio(), s.y));
|
||||
draw_texture_rect_region(progress, region, region, tint_progress);
|
||||
} break;
|
||||
case FILL_BILINEAR_TOP_AND_BOTTOM: {
|
||||
Rect2 region = Rect2(Point2(0, s.y / 2 - s.y * get_as_ratio() / 2), Size2(s.x, s.y * get_as_ratio()));
|
||||
draw_texture_rect_region(progress, region, region, tint_progress);
|
||||
} break;
|
||||
default:
|
||||
draw_texture_rect_region(progress, Rect2(Point2(), Size2(s.x * get_as_ratio(), s.y)), Rect2(Point2(), Size2(s.x * get_as_ratio(), s.y)), tint_progress);
|
||||
}
|
||||
|
@ -364,7 +380,7 @@ void TextureProgress::_notification(int p_what) {
|
|||
}
|
||||
|
||||
void TextureProgress::set_fill_mode(int p_fill) {
|
||||
ERR_FAIL_INDEX(p_fill, 6);
|
||||
ERR_FAIL_INDEX(p_fill, 9);
|
||||
mode = (FillMode)p_fill;
|
||||
update();
|
||||
}
|
||||
|
@ -446,7 +462,7 @@ void TextureProgress::_bind_methods() {
|
|||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_under", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_under_texture", "get_under_texture");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_over", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_over_texture", "get_over_texture");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture_progress", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_progress_texture", "get_progress_texture");
|
||||
ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "fill_mode", PROPERTY_HINT_ENUM, "Left to Right,Right to Left,Top to Bottom,Bottom to Top,Clockwise,Counter Clockwise"), "set_fill_mode", "get_fill_mode");
|
||||
ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "fill_mode", PROPERTY_HINT_ENUM, "Left to Right,Right to Left,Top to Bottom,Bottom to Top,Clockwise,Counter Clockwise,Bilinear (Left and Right),Bilinear (Top and Bottom), Clockwise and Counter Clockwise"), "set_fill_mode", "get_fill_mode");
|
||||
ADD_GROUP("Tint", "tint_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "tint_under", PROPERTY_HINT_COLOR_NO_ALPHA), "set_tint_under", "get_tint_under");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "tint_over", PROPERTY_HINT_COLOR_NO_ALPHA), "set_tint_over", "get_tint_over");
|
||||
|
@ -468,6 +484,9 @@ void TextureProgress::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(FILL_BOTTOM_TO_TOP);
|
||||
BIND_ENUM_CONSTANT(FILL_CLOCKWISE);
|
||||
BIND_ENUM_CONSTANT(FILL_COUNTER_CLOCKWISE);
|
||||
BIND_ENUM_CONSTANT(FILL_BILINEAR_LEFT_AND_RIGHT);
|
||||
BIND_ENUM_CONSTANT(FILL_BILINEAR_TOP_AND_BOTTOM);
|
||||
BIND_ENUM_CONSTANT(FILL_CLOCKWISE_AND_COUNTER_CLOCKWISE);
|
||||
}
|
||||
|
||||
TextureProgress::TextureProgress() {
|
||||
|
|
|
@ -52,7 +52,10 @@ public:
|
|||
FILL_TOP_TO_BOTTOM,
|
||||
FILL_BOTTOM_TO_TOP,
|
||||
FILL_CLOCKWISE,
|
||||
FILL_COUNTER_CLOCKWISE
|
||||
FILL_COUNTER_CLOCKWISE,
|
||||
FILL_BILINEAR_LEFT_AND_RIGHT,
|
||||
FILL_BILINEAR_TOP_AND_BOTTOM,
|
||||
FILL_CLOCKWISE_AND_COUNTER_CLOCKWISE
|
||||
};
|
||||
|
||||
void set_fill_mode(int p_fill);
|
||||
|
|
Loading…
Add table
Reference in a new issue