diff options
| -rw-r--r-- | core/color.h | 12 | ||||
| -rw-r--r-- | core/debugger/remote_debugger.cpp | 2 | ||||
| -rw-r--r-- | core/input/godotcontrollerdb.txt | 3 | ||||
| -rw-r--r-- | core/variant.cpp | 5 | ||||
| -rw-r--r-- | core/variant_call.cpp | 9 | ||||
| -rw-r--r-- | doc/classes/Camera3D.xml | 7 | ||||
| -rw-r--r-- | doc/classes/Color.xml | 14 | ||||
| -rw-r--r-- | modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs | 10 | ||||
| -rw-r--r-- | platform/windows/display_server_windows.cpp | 2 | ||||
| -rw-r--r-- | platform/windows/key_mapping_windows.cpp | 2 | ||||
| -rw-r--r-- | scene/2d/touch_screen_button.cpp | 5 | ||||
| -rw-r--r-- | scene/3d/camera_3d.cpp | 2 | ||||
| -rw-r--r-- | scene/gui/link_button.cpp | 4 | ||||
| -rw-r--r-- | scene/gui/rich_text_label.cpp | 6 | ||||
| -rw-r--r-- | scene/gui/text_edit.cpp | 4 | ||||
| -rw-r--r-- | scene/resources/dynamic_font.cpp | 28 | ||||
| -rw-r--r-- | scene/resources/dynamic_font.h | 6 | ||||
| -rw-r--r-- | scene/resources/font.cpp | 10 | ||||
| -rw-r--r-- | scene/resources/font.h | 4 | ||||
| -rw-r--r-- | servers/rendering/rendering_server_scene.h | 2 |
20 files changed, 115 insertions, 22 deletions
diff --git a/core/color.h b/core/color.h index d95e80f5da..8b689fdde1 100644 --- a/core/color.h +++ b/core/color.h @@ -205,7 +205,7 @@ struct Color { operator String() const; /** - * No construct parameters, r=0, g=0, b=0. a=255 + * No construct parameters, r=0, g=0, b=0. a=1 */ _FORCE_INLINE_ Color() { r = 0; @@ -223,6 +223,16 @@ struct Color { b = p_b; a = p_a; } + + /** + * Construct a Color from another Color, but with the specified alpha value. + */ + _FORCE_INLINE_ Color(const Color &p_c, float p_a) { + r = p_c.r; + g = p_c.g; + b = p_c.b; + a = p_a; + } }; bool Color::operator<(const Color &p_color) const { diff --git a/core/debugger/remote_debugger.cpp b/core/debugger/remote_debugger.cpp index daa607767e..97d5c71b6f 100644 --- a/core/debugger/remote_debugger.cpp +++ b/core/debugger/remote_debugger.cpp @@ -466,7 +466,7 @@ void RemoteDebugger::_print_handler(void *p_this, const String &p_string, bool p String s = p_string; int allowed_chars = MIN(MAX(rd->max_chars_per_second - rd->char_count, 0), s.length()); - if (allowed_chars == 0) + if (allowed_chars == 0 && s.length() > 0) return; if (allowed_chars < s.length()) { diff --git a/core/input/godotcontrollerdb.txt b/core/input/godotcontrollerdb.txt index f6411e2429..adc3649d64 100644 --- a/core/input/godotcontrollerdb.txt +++ b/core/input/godotcontrollerdb.txt @@ -1,6 +1,9 @@ # Game Controller DB for Godot in SDL 2.0.10 format # Source: https://github.com/godotengine/godot +# Windows +__XINPUT_DEVICE__,XInput Gamepad,a:b12,b:b13,x:b14,y:b15,start:b4,back:b5,leftstick:b6,rightstick:b7,leftshoulder:b8,rightshoulder:b9,dpup:b0,dpdown:b1,dpleft:b2,dpright:b3,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Windows, + # Javascript Default HTML5 Gamepad, Default Mapping,leftx:a0,lefty:a1,dpdown:b13,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:b14,lefttrigger:a6,x:b2,dpup:b12,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:b15,righttrigger:a7,b:b1,platform:Javascript, c2a94d6963726f736f66742058626f78,Wireless X360 Controller,leftx:a0,lefty:a1,dpdown:b14,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:b11,lefttrigger:a2,x:b2,dpup:b13,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:b12,righttrigger:a5,b:b1,platform:Javascript, diff --git a/core/variant.cpp b/core/variant.cpp index b3611536b8..a91876dd98 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -102,11 +102,6 @@ String Variant::get_type_name(Variant::Type p_type) { return "Plane"; } break; - /* - case QUAT: { - - - } break;*/ case AABB: { return "AABB"; diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 39bfd04a0b..9fffb42ff6 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -1075,6 +1075,11 @@ struct _VariantCall { r_ret = Color::hex(*p_args[0]); } + static void Color_init5(Variant &r_ret, const Variant **p_args) { + + r_ret = Color(((Color)(*p_args[0])), *p_args[1]); + } + static void AABB_init1(Variant &r_ret, const Variant **p_args) { r_ret = ::AABB(*p_args[0], *p_args[1]); @@ -1353,6 +1358,8 @@ Variant Variant::construct(const Variant::Type p_type, const Variant **p_args, i case RECT2I: return (Rect2i(*p_args[0])); case VECTOR3: return (Vector3(*p_args[0])); case VECTOR3I: return (Vector3i(*p_args[0])); + case TRANSFORM2D: + return (Transform2D(p_args[0]->operator Transform2D())); case PLANE: return (Plane(*p_args[0])); case QUAT: return (p_args[0]->operator Quat()); case AABB: @@ -2209,6 +2216,8 @@ void register_variant_methods() { _VariantCall::add_constructor(_VariantCall::Color_init1, Variant::COLOR, "r", Variant::FLOAT, "g", Variant::FLOAT, "b", Variant::FLOAT, "a", Variant::FLOAT); _VariantCall::add_constructor(_VariantCall::Color_init2, Variant::COLOR, "r", Variant::FLOAT, "g", Variant::FLOAT, "b", Variant::FLOAT); + // init3 and init4 are the constructors for HTML hex strings and integers respectively which don't need binding here, so we skip to init5. + _VariantCall::add_constructor(_VariantCall::Color_init5, Variant::COLOR, "c", Variant::COLOR, "a", Variant::FLOAT); _VariantCall::add_constructor(_VariantCall::AABB_init1, Variant::AABB, "position", Variant::VECTOR3, "size", Variant::VECTOR3); diff --git a/doc/classes/Camera3D.xml b/doc/classes/Camera3D.xml index bfba23c7ee..6ff4875364 100644 --- a/doc/classes/Camera3D.xml +++ b/doc/classes/Camera3D.xml @@ -183,8 +183,13 @@ <member name="far" type="float" setter="set_zfar" getter="get_zfar" default="100.0"> The distance to the far culling boundary for this camera relative to its local Z axis. </member> - <member name="fov" type="float" setter="set_fov" getter="get_fov" default="70.0"> + <member name="fov" type="float" setter="set_fov" getter="get_fov" default="75.0"> The camera's field of view angle (in degrees). Only applicable in perspective mode. Since [member keep_aspect] locks one axis, [code]fov[/code] sets the other axis' field of view angle. + For reference, the default vertical field of view value ([code]75.0[/code]) is equivalent to an horizontal FOV of: + - ~91.31 degrees in a 4:3 viewport + - ~101.67 degrees in a 16:10 viewport + - ~107.51 degrees in a 16:9 viewport + - ~121.63 degrees in a 21:9 viewport </member> <member name="frustum_offset" type="Vector2" setter="set_frustum_offset" getter="get_frustum_offset" default="Vector2( 0, 0 )"> The camera's frustum offset. This can be changed from the default to create "tilted frustum" effects such as [url=https://zdoom.org/wiki/Y-shearing]Y-shearing[/url]. diff --git a/doc/classes/Color.xml b/doc/classes/Color.xml index 1af5c87532..b35d4fb36a 100644 --- a/doc/classes/Color.xml +++ b/doc/classes/Color.xml @@ -42,6 +42,20 @@ <method name="Color"> <return type="Color"> </return> + <argument index="0" name="c" type="Color"> + </argument> + <argument index="1" name="a" type="float"> + </argument> + <description> + Constructs a color from an existing color, but with a custom alpha value. + [codeblock] + var red = Color(Color.red, 0.5) # 50% transparent red. + [/codeblock] + </description> + </method> + <method name="Color"> + <return type="Color"> + </return> <argument index="0" name="r" type="float"> </argument> <argument index="1" name="g" type="float"> diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs index facaf74606..6030b72a44 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs @@ -420,7 +420,7 @@ namespace Godot return txt; } - // Constructors + // Constructors public Color(float r, float g, float b, float a = 1.0f) { this.r = r; @@ -429,6 +429,14 @@ namespace Godot this.a = a; } + public Color(Color c, float a = 1.0f) + { + r = c.r; + g = c.g; + b = c.b; + this.a = a; + } + public Color(uint rgba) { a = (rgba & 0xFF) / 255.0f; diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index 6b450fb452..3afe6c20ec 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -2846,7 +2846,7 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode, wd.tilt_supported = orientation[0].axResolution && orientation[1].axResolution; } } else { - ERR_PRINT("WinTab context creation falied."); + print_verbose("WinTab context creation failed."); } } else { wd.wtctx = 0; diff --git a/platform/windows/key_mapping_windows.cpp b/platform/windows/key_mapping_windows.cpp index da63e92622..92a2585745 100644 --- a/platform/windows/key_mapping_windows.cpp +++ b/platform/windows/key_mapping_windows.cpp @@ -130,7 +130,7 @@ static _WinTranslatePair _vk_to_keycode[] = { { KEY_MASK_META, VK_LWIN }, //(0x5B) { KEY_MASK_META, VK_RWIN }, //(0x5C) - //VK_APPS (0x5D) + { KEY_MENU, VK_APPS }, //(0x5D) { KEY_STANDBY, VK_SLEEP }, //(0x5F) { KEY_KP_0, VK_NUMPAD0 }, //(0x60) { KEY_KP_1, VK_NUMPAD1 }, //(0x61) diff --git a/scene/2d/touch_screen_button.cpp b/scene/2d/touch_screen_button.cpp index 85fd05ac15..590cc1e6c4 100644 --- a/scene/2d/touch_screen_button.cpp +++ b/scene/2d/touch_screen_button.cpp @@ -260,9 +260,10 @@ bool TouchScreenButton::_is_point_inside(const Point2 &p_point) { bool check_rect = true; if (shape.is_valid()) { - check_rect = false; - Transform2D xform = shape_centered ? Transform2D().translated(shape->get_rect().size * 0.5f) : Transform2D(); + + Vector2 size = texture.is_null() ? shape->get_rect().size : texture->get_size(); + Transform2D xform = shape_centered ? Transform2D().translated(size * 0.5f) : Transform2D(); touched = shape->collide(xform, unit_rect, Transform2D(0, coord + Vector2(0.5, 0.5))); } diff --git a/scene/3d/camera_3d.cpp b/scene/3d/camera_3d.cpp index 2fcb2715be..871f3119bc 100644 --- a/scene/3d/camera_3d.cpp +++ b/scene/3d/camera_3d.cpp @@ -689,7 +689,7 @@ Camera3D::Camera3D() { viewport = nullptr; force_change = false; mode = PROJECTION_PERSPECTIVE; - set_perspective(70.0, 0.05, 100.0); + set_perspective(75.0, 0.05, 100.0); keep_aspect = KEEP_HEIGHT; layers = 0xfffff; v_offset = 0; diff --git a/scene/gui/link_button.cpp b/scene/gui/link_button.cpp index 3dffa06b49..098e8297ad 100644 --- a/scene/gui/link_button.cpp +++ b/scene/gui/link_button.cpp @@ -111,11 +111,11 @@ void LinkButton::_notification(int p_what) { draw_string(font, Vector2(0, font->get_ascent()), text, color); if (do_underline) { - int underline_spacing = get_theme_constant("underline_spacing"); + int underline_spacing = get_theme_constant("underline_spacing") + font->get_underline_position(); int width = font->get_string_size(text).width; int y = font->get_ascent() + underline_spacing; - draw_line(Vector2(0, y), Vector2(width, y), color); + draw_line(Vector2(0, y), Vector2(width, y), color, font->get_underline_thickness()); } } break; diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 5c293cdf3c..84097eb6a1 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -600,8 +600,8 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & if (underline) { Color uc = color; uc.a *= 0.5; - int uy = y + lh - line_descent + 2; - float underline_width = 1.0; + int uy = y + lh - line_descent + font->get_underline_position(); + float underline_width = font->get_underline_thickness(); #ifdef TOOLS_ENABLED underline_width *= EDSCALE; #endif @@ -610,7 +610,7 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & Color uc = color; uc.a *= 0.5; int uy = y + lh - (line_ascent + line_descent) / 2; - float strikethrough_width = 1.0; + float strikethrough_width = font->get_underline_thickness(); #ifdef TOOLS_ENABLED strikethrough_width *= EDSCALE; #endif diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 3c10e1027c..aa518fbb7d 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -1487,12 +1487,12 @@ void TextEdit::_notification(int p_what) { int yofs = ofs_y + (get_row_height() - cache.font->get_height()) / 2; int w = drawer.draw_char(ci, Point2i(char_ofs + char_margin + ofs_x, yofs + ascent), str[j], str[j + 1], in_selection && override_selected_font_color ? cache.font_color_selected : color); if (underlined) { - float line_width = 1.0; + float line_width = cache.font->get_underline_thickness(); #ifdef TOOLS_ENABLED line_width *= EDSCALE; #endif - draw_rect(Rect2(char_ofs + char_margin + ofs_x, yofs + ascent + 2, w, line_width), in_selection && override_selected_font_color ? cache.font_color_selected : color); + draw_rect(Rect2(char_ofs + char_margin + ofs_x, yofs + ascent + cache.font->get_underline_position(), w, line_width), in_selection && override_selected_font_color ? cache.font_color_selected : color); } } else if (draw_tabs && str[j] == '\t') { int yofs = (get_row_height() - cache.tab_icon->get_height()) / 2; diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index eea4d12d0e..442151de36 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -221,6 +221,8 @@ Error DynamicFontAtSize::_load() { ascent = (face->size->metrics.ascender / 64.0) / oversampling * scale_color_font; descent = (-face->size->metrics.descender / 64.0) / oversampling * scale_color_font; + underline_position = -face->underline_position / 64.0 / oversampling * scale_color_font; + underline_thickness = face->underline_thickness / 64.0 / oversampling * scale_color_font; linegap = 0; valid = true; @@ -243,6 +245,16 @@ float DynamicFontAtSize::get_descent() const { return descent; } +float DynamicFontAtSize::get_underline_position() const { + + return underline_position; +} + +float DynamicFontAtSize::get_underline_thickness() const { + + return underline_thickness; +} + const Pair<const DynamicFontAtSize::Character *, DynamicFontAtSize *> DynamicFontAtSize::_find_char_with_font(CharType p_char, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks) const { const Character *chr = char_map.getptr(p_char); ERR_FAIL_COND_V(!chr, (Pair<const Character *, DynamicFontAtSize *>(nullptr, nullptr))); @@ -821,6 +833,22 @@ float DynamicFont::get_descent() const { return data_at_size->get_descent() + spacing_bottom; } +float DynamicFont::get_underline_position() const { + + if (!data_at_size.is_valid()) + return 2; + + return data_at_size->get_underline_position(); +} + +float DynamicFont::get_underline_thickness() const { + + if (!data_at_size.is_valid()) + return 1; + + return data_at_size->get_underline_thickness(); +} + Size2 DynamicFont::get_char_size(CharType p_char, CharType p_next) const { if (!data_at_size.is_valid()) diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h index ef4b9dd9d0..2fa1951d27 100644 --- a/scene/resources/dynamic_font.h +++ b/scene/resources/dynamic_font.h @@ -124,6 +124,8 @@ class DynamicFontAtSize : public Reference { float rect_margin; float oversampling; float scale_color_font; + float underline_position; + float underline_thickness; bool valid; @@ -187,6 +189,8 @@ public: float get_ascent() const; float get_descent() const; + float get_underline_position() const; + float get_underline_thickness() const; Size2 get_char_size(CharType p_char, CharType p_next, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks) const; @@ -274,6 +278,8 @@ public: virtual float get_ascent() const; virtual float get_descent() const; + virtual float get_underline_position() const; + virtual float get_underline_thickness() const; virtual Size2 get_char_size(CharType p_char, CharType p_next = 0) const; diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index 267816f267..51c2ff389a 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -356,6 +356,16 @@ float BitmapFont::get_descent() const { return height - ascent; } +float BitmapFont::get_underline_position() const { + + return 2; +} + +float BitmapFont::get_underline_thickness() const { + + return 1; +} + void BitmapFont::add_texture(const Ref<Texture2D> &p_texture) { ERR_FAIL_COND_MSG(p_texture.is_null(), "It's not a reference to a valid Texture object."); diff --git a/scene/resources/font.h b/scene/resources/font.h index c233344529..54b1eaa1b9 100644 --- a/scene/resources/font.h +++ b/scene/resources/font.h @@ -47,6 +47,8 @@ public: virtual float get_ascent() const = 0; virtual float get_descent() const = 0; + virtual float get_underline_position() const = 0; + virtual float get_underline_thickness() const = 0; virtual Size2 get_char_size(CharType p_char, CharType p_next = 0) const = 0; Size2 get_string_size(const String &p_string) const; @@ -167,6 +169,8 @@ public: void set_ascent(float p_ascent); float get_ascent() const; float get_descent() const; + float get_underline_position() const; + float get_underline_thickness() const; void add_texture(const Ref<Texture2D> &p_texture); void add_char(CharType p_char, int p_texture_idx, const Rect2 &p_rect, const Size2 &p_align, float p_advance = -1); diff --git a/servers/rendering/rendering_server_scene.h b/servers/rendering/rendering_server_scene.h index db2fbd6707..eb66cea3aa 100644 --- a/servers/rendering/rendering_server_scene.h +++ b/servers/rendering/rendering_server_scene.h @@ -82,7 +82,7 @@ public: Camera() { visible_layers = 0xFFFFFFFF; - fov = 70; + fov = 75; type = PERSPECTIVE; znear = 0.05; zfar = 100; |