CMake: Fix installing webp libraries in static build Fixes #25439
CMake: Create all mswu include directories when installing Create both mswu and mswud directories, so CMake can be used when only one of them in installed. Fixes #25440
CMake: Fix monolithic build with static wxWebviewEdge
Update Turkish translations Closes #25445.
Add RTL support to wxGCDC when using GDI+ backend Closes #25427. Closes #25431.
Merge branch 'cmake-webp-fixes' of github.com:MaartenBent/wxWidgets Fix CMake webp installation and missing mswu include directory. See #25442.
Add wxGraphicsContext overloads taking wx{Rect,Point}2DDouble
Also, add missing documentation for ClearRectangle().
Closes #25444.
| ... | ... | @@ -542,6 +542,21 @@ macro(wx_lib_link_libraries name) |
| 542 | 542 | endif()
|
| 543 | 543 | endmacro()
|
| 544 | 544 | |
| 545 | +# wx_lib_link_directories(name [])
|
|
| 546 | +# Forwards everything to target_link_directories() except for monolithic
|
|
| 547 | +# build where it collects all directories for linking with the mono lib
|
|
| 548 | +macro(wx_lib_link_directories name)
|
|
| 549 | + if(wxBUILD_MONOLITHIC)
|
|
| 550 | + cmake_parse_arguments(_DIR_LINK "" "" "PUBLIC;PRIVATE" ${ARGN})
|
|
| 551 | + list(APPEND wxMONO_DIRS_PUBLIC ${_DIR_LINK_PUBLIC})
|
|
| 552 | + list(APPEND wxMONO_DIRS_PRIVATE ${_DIR_LINK_PRIVATE})
|
|
| 553 | + set(wxMONO_DIRS_PUBLIC ${wxMONO_DIRS_PUBLIC} PARENT_SCOPE)
|
|
| 554 | + set(wxMONO_DIRS_PRIVATE ${wxMONO_DIRS_PRIVATE} PARENT_SCOPE)
|
|
| 555 | + else()
|
|
| 556 | + target_link_directories(${name};${ARGN})
|
|
| 557 | + endif()
|
|
| 558 | +endmacro()
|
|
| 559 | + |
|
| 545 | 560 | # wx_exe_link_libraries(target libs...)
|
| 546 | 561 | # Link wx libraries to executable
|
| 547 | 562 | macro(wx_exe_link_libraries name)
|
| ... | ... | @@ -38,6 +38,13 @@ endif() |
| 38 | 38 | |
| 39 | 39 | # setup header and wx-config
|
| 40 | 40 | if(WIN32_MSVC_NAMING)
|
| 41 | + # create both Debug and Release directories, so CMake doesn't complain about
|
|
| 42 | + # non-existent path when only Release or Debug build has been installed
|
|
| 43 | + set(lib_unicode "u")
|
|
| 44 | + install(DIRECTORY
|
|
| 45 | + DESTINATION "lib/${wxPLATFORM_LIB_DIR}/${wxBUILD_TOOLKIT}${lib_unicode}")
|
|
| 46 | + install(DIRECTORY
|
|
| 47 | + DESTINATION "lib/${wxPLATFORM_LIB_DIR}/${wxBUILD_TOOLKIT}${lib_unicode}d")
|
|
| 41 | 48 | install(
|
| 42 | 49 | DIRECTORY "${wxSETUP_HEADER_PATH}"
|
| 43 | 50 | DESTINATION "lib/${wxPLATFORM_LIB_DIR}")
|
| ... | ... | @@ -12,6 +12,8 @@ if(wxBUILD_MONOLITHIC) |
| 12 | 12 | set(wxMONO_SRC_FILES)
|
| 13 | 13 | set(wxMONO_LIBS_PRIVATE)
|
| 14 | 14 | set(wxMONO_LIBS_PUBLIC)
|
| 15 | + set(wxMONO_DIRS_PRIVATE)
|
|
| 16 | + set(wxMONO_DIRS_PUBLIC)
|
|
| 15 | 17 | set(wxMONO_INCLUDE_DIRS)
|
| 16 | 18 | set(wxMONO_DEFINITIONS)
|
| 17 | 19 | set(wxMONO_NONCOMPILED_CPP_FILES)
|
| ... | ... | @@ -90,6 +92,9 @@ if(wxBUILD_MONOLITHIC) |
| 90 | 92 | |
| 91 | 93 | target_link_libraries(wxmono ${vis} ${wxMONO_LIBS_${vis}})
|
| 92 | 94 | endif()
|
| 95 | + if(wxMONO_DIRS_${vis})
|
|
| 96 | + target_link_directories(wxmono ${vis} ${wxMONO_DIRS_${vis}})
|
|
| 97 | + endif()
|
|
| 93 | 98 | endforeach()
|
| 94 | 99 | if(wxMONO_INCLUDE_DIRS)
|
| 95 | 100 | target_include_directories(wxmono BEFORE PRIVATE ${wxMONO_INCLUDE_DIRS})
|
| ... | ... | @@ -45,11 +45,19 @@ if(wxUSE_LIBWEBP STREQUAL "builtin") |
| 45 | 45 | foreach(target_name IN LISTS webpTargets)
|
| 46 | 46 | set_target_properties(${target_name} PROPERTIES
|
| 47 | 47 | FOLDER "Third Party Libraries/WebP"
|
| 48 | - OUTPUT_NAME "${target_name}"
|
|
| 48 | + PREFIX ""
|
|
| 49 | + OUTPUT_NAME "wx${target_name}"
|
|
| 50 | + PUBLIC_HEADER ""
|
|
| 49 | 51 | )
|
| 50 | 52 | endforeach()
|
| 51 | 53 | |
| 52 | - set(WebP_LIBRARIES webp webpdemux)
|
|
| 54 | + set(WebP_LIBRARIES webp webpdemux sharpyuv)
|
|
| 55 | + if(NOT wxBUILD_SHARED)
|
|
| 56 | + wx_install(TARGETS ${WebP_LIBRARIES}
|
|
| 57 | + EXPORT wxWidgetsTargets
|
|
| 58 | + ARCHIVE DESTINATION "lib${GEN_EXPR_DIR}${wxPLATFORM_LIB_DIR}"
|
|
| 59 | + )
|
|
| 60 | + endif()
|
|
| 53 | 61 | |
| 54 | 62 | elseif(wxUSE_LIBWEBP)
|
| 55 | 63 | find_package(WebP REQUIRED)
|
| ... | ... | @@ -81,7 +81,7 @@ elseif(WXMSW) |
| 81 | 81 | endif()
|
| 82 | 82 | |
| 83 | 83 | if (wxUSE_WEBVIEW_EDGE_STATIC)
|
| 84 | - target_link_directories(wxwebview PUBLIC
|
|
| 84 | + wx_lib_link_directories(wxwebview PUBLIC
|
|
| 85 | 85 | $<BUILD_INTERFACE:${WEBVIEW2_PACKAGE_DIR}/build/native/$(LibrariesArchitecture)/>
|
| 86 | 86 | )
|
| 87 | 87 | else()
|
| ... | ... | @@ -516,21 +516,37 @@ public: |
| 516 | 516 | |
| 517 | 517 | // adds a quadratic Bezier curve from the current point, using a control point and an end point
|
| 518 | 518 | virtual void AddQuadCurveToPoint( wxDouble cx, wxDouble cy, wxDouble x, wxDouble y );
|
| 519 | + void AddQuadCurveToPoint(const wxPoint2DDouble& cp, const wxPoint2DDouble& e)
|
|
| 520 | + {
|
|
| 521 | + AddQuadCurveToPoint(cp.m_x, cp.m_y, e.m_x, e.m_y);
|
|
| 522 | + }
|
|
| 519 | 523 | |
| 520 | 524 | // appends a rectangle as a new closed subpath
|
| 521 | 525 | virtual void AddRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h );
|
| 526 | + virtual void AddRectangle(const wxRect2DDouble& rect)
|
|
| 527 | + {
|
|
| 528 | + AddRectangle(rect.m_x, rect.m_y, rect.m_width, rect.m_height);
|
|
| 529 | + }
|
|
| 522 | 530 | |
| 523 | 531 | // appends an ellipsis as a new closed subpath fitting the passed rectangle
|
| 524 | 532 | virtual void AddCircle( wxDouble x, wxDouble y, wxDouble r );
|
| 525 | 533 | |
| 526 | - // appends a an arc to two tangents connecting (current) to (x1,y1) and (x1,y1) to (x2,y2), also a straight line from (current) to (x1,y1)
|
|
| 534 | + // appends an arc to two tangents connecting (current) to (x1,y1) and (x1,y1) to (x2,y2), also a straight line from (current) to (x1,y1)
|
|
| 527 | 535 | virtual void AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r );
|
| 528 | 536 | |
| 529 | 537 | // appends an ellipse
|
| 530 | 538 | virtual void AddEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
| 539 | + void AddEllipse(const wxRect2DDouble& rect)
|
|
| 540 | + {
|
|
| 541 | + AddEllipse(rect.m_x, rect.m_y, rect.m_width, rect.m_height);
|
|
| 542 | + }
|
|
| 531 | 543 | |
| 532 | 544 | // appends a rounded rectangle
|
| 533 | 545 | virtual void AddRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius);
|
| 546 | + void AddRoundedRectangle(const wxRect2DDouble& rect, wxDouble radius)
|
|
| 547 | + {
|
|
| 548 | + AddRoundedRectangle(rect.m_x, rect.m_y, rect.m_width, rect.m_height, radius);
|
|
| 549 | + }
|
|
| 534 | 550 | |
| 535 | 551 | // returns the native path
|
| 536 | 552 | virtual void * GetNativePath() const;
|
| ... | ... | @@ -699,12 +715,24 @@ public: |
| 699 | 715 | // clips drawings to the rect intersected with the current clipping region
|
| 700 | 716 | virtual void Clip( wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0;
|
| 701 | 717 | |
| 718 | + void Clip(const wxRect2DDouble& rect)
|
|
| 719 | + {
|
|
| 720 | + Clip(rect.m_x, rect.m_y, rect.m_width, rect.m_height);
|
|
| 721 | + }
|
|
| 722 | + |
|
| 702 | 723 | // resets the clipping to original extent
|
| 703 | 724 | virtual void ResetClip() = 0;
|
| 704 | 725 | |
| 705 | 726 | // returns bounding box of the clipping region
|
| 706 | 727 | virtual void GetClipBox(wxDouble* x, wxDouble* y, wxDouble* w, wxDouble* h) = 0;
|
| 707 | 728 | |
| 729 | + wxNODISCARD wxRect2DDouble GetClipBox()
|
|
| 730 | + {
|
|
| 731 | + wxDouble x, y, w, h;
|
|
| 732 | + GetClipBox(&x, &y, &w, &h);
|
|
| 733 | + return wxRect2DDouble{ x, y, w, h };
|
|
| 734 | + }
|
|
| 735 | + |
|
| 708 | 736 | // returns the native context
|
| 709 | 737 | virtual void * GetNativeContext() = 0;
|
| 710 | 738 | |
| ... | ... | @@ -782,6 +810,11 @@ public: |
| 782 | 810 | // translate
|
| 783 | 811 | virtual void Translate( wxDouble dx , wxDouble dy ) = 0;
|
| 784 | 812 | |
| 813 | + void Translate(const wxPoint2DDouble& pt)
|
|
| 814 | + {
|
|
| 815 | + Translate(pt.m_x, pt.m_y);
|
|
| 816 | + }
|
|
| 817 | + |
|
| 785 | 818 | // scale
|
| 786 | 819 | virtual void Scale( wxDouble xScale , wxDouble yScale ) = 0;
|
| 787 | 820 | |
| ... | ... | @@ -828,6 +861,11 @@ public: |
| 828 | 861 | // paints a transparent rectangle (only useful for bitmaps or windows)
|
| 829 | 862 | virtual void ClearRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
| 830 | 863 | |
| 864 | + void ClearRectangle(const wxRect2DDouble& rect)
|
|
| 865 | + {
|
|
| 866 | + ClearRectangle(rect.m_x, rect.m_y, rect.m_width, rect.m_height);
|
|
| 867 | + }
|
|
| 868 | + |
|
| 831 | 869 | //
|
| 832 | 870 | // text
|
| 833 | 871 | //
|
| ... | ... | @@ -835,6 +873,9 @@ public: |
| 835 | 873 | void DrawText( const wxString &str, wxDouble x, wxDouble y )
|
| 836 | 874 | { DoDrawText(str, x, y); }
|
| 837 | 875 | |
| 876 | + void DrawText( const wxString &str, const wxPoint2DDouble& pt)
|
|
| 877 | + { DoDrawText(str, pt.m_x, pt.m_y); }
|
|
| 878 | + |
|
| 838 | 879 | void DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle )
|
| 839 | 880 | { DoDrawRotatedText(str, x, y, angle); }
|
| 840 | 881 | |
| ... | ... | @@ -858,10 +899,20 @@ public: |
| 858 | 899 | |
| 859 | 900 | virtual void DrawBitmap( const wxGraphicsBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0;
|
| 860 | 901 | |
| 902 | + void DrawBitmap(const wxGraphicsBitmap& bmp, const wxRect2DDouble& rect)
|
|
| 903 | + {
|
|
| 904 | + DrawBitmap(bmp, rect.m_x, rect.m_y, rect.m_width, rect.m_height);
|
|
| 905 | + }
|
|
| 906 | + |
|
| 861 | 907 | virtual void DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0;
|
| 862 | 908 | |
| 863 | 909 | virtual void DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0;
|
| 864 | 910 | |
| 911 | + void DrawIcon(const wxIcon& icon, const wxRect2DDouble& rect)
|
|
| 912 | + {
|
|
| 913 | + DrawIcon(icon, rect.m_x, rect.m_y, rect.m_width, rect.m_height);
|
|
| 914 | + }
|
|
| 915 | + |
|
| 865 | 916 | //
|
| 866 | 917 | // convenience methods
|
| 867 | 918 | //
|
| ... | ... | @@ -869,6 +920,11 @@ public: |
| 869 | 920 | // strokes a single line
|
| 870 | 921 | virtual void StrokeLine( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2);
|
| 871 | 922 | |
| 923 | + void StrokeLine(const wxPoint2DDouble& pt1, const wxPoint2DDouble& pt2)
|
|
| 924 | + {
|
|
| 925 | + StrokeLine(pt1.m_x, pt1.m_y, pt2.m_x, pt2.m_y);
|
|
| 926 | + }
|
|
| 927 | + |
|
| 872 | 928 | // stroke lines connecting each of the points
|
| 873 | 929 | virtual void StrokeLines( size_t n, const wxPoint2DDouble *points);
|
| 874 | 930 | |
| ... | ... | @@ -881,13 +937,26 @@ public: |
| 881 | 937 | // draws a rectangle
|
| 882 | 938 | virtual void DrawRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
| 883 | 939 | |
| 940 | + void DrawRectangle(const wxRect2DDouble& rect)
|
|
| 941 | + {
|
|
| 942 | + DrawRectangle(rect.m_x, rect.m_y, rect.m_width, rect.m_height);
|
|
| 943 | + }
|
|
| 944 | + |
|
| 884 | 945 | // draws an ellipse
|
| 885 | 946 | virtual void DrawEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
| 886 | 947 | |
| 948 | + void DrawEllipse(const wxRect2DDouble& rect)
|
|
| 949 | + {
|
|
| 950 | + DrawEllipse(rect.m_x, rect.m_y, rect.m_width, rect.m_height);
|
|
| 951 | + }
|
|
| 952 | + |
|
| 887 | 953 | // draws a rounded rectangle
|
| 888 | 954 | virtual void DrawRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius);
|
| 889 | 955 | |
| 890 | - // wrappers using wxPoint2DDouble TODO
|
|
| 956 | + void DrawRoundedRectangle(const wxRect2DDouble& rect, wxDouble radius)
|
|
| 957 | + {
|
|
| 958 | + DrawRoundedRectangle(rect.m_x, rect.m_y, rect.m_width, rect.m_height, radius);
|
|
| 959 | + }
|
|
| 891 | 960 | |
| 892 | 961 | // helper to determine if a 0.5 offset should be applied for the drawing operation
|
| 893 | 962 | virtual bool ShouldOffset() const { return false; }
|
| ... | ... | @@ -126,6 +126,13 @@ public: |
| 126 | 126 | */
|
| 127 | 127 | virtual void AddEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
| 128 | 128 | |
| 129 | + /**
|
|
| 130 | + @overload
|
|
| 131 | + |
|
| 132 | + @since 3.3.0
|
|
| 133 | + */
|
|
| 134 | + void AddEllipse(const wxRect2DDouble& rect);
|
|
| 135 | + |
|
| 129 | 136 | /**
|
| 130 | 137 | Adds a straight line from the current point to (@a x,@a y).
|
| 131 | 138 | If current point is not yet set before the call to AddLineToPoint(),
|
| ... | ... | @@ -170,12 +177,26 @@ public: |
| 170 | 177 | virtual void AddQuadCurveToPoint(wxDouble cx, wxDouble cy,
|
| 171 | 178 | wxDouble x, wxDouble y);
|
| 172 | 179 | |
| 180 | + /**
|
|
| 181 | + @overload
|
|
| 182 | + |
|
| 183 | + @since 3.3.0
|
|
| 184 | + */
|
|
| 185 | + void AddQuadCurveToPoint(const wxPoint2DDouble& cp, const wxPoint2DDouble& e);
|
|
| 186 | + |
|
| 173 | 187 | /**
|
| 174 | 188 | Appends a rectangle as a new closed subpath. After this call
|
| 175 | 189 | the current point will be at (@a x, @a y).
|
| 176 | 190 | */
|
| 177 | 191 | virtual void AddRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
| 178 | 192 | |
| 193 | + /**
|
|
| 194 | + @overload
|
|
| 195 | + |
|
| 196 | + @since 3.3.0
|
|
| 197 | + */
|
|
| 198 | + void AddRectangle(const wxRect2DDouble& rect);
|
|
| 199 | + |
|
| 179 | 200 | /**
|
| 180 | 201 | Appends a rounded rectangle as a new closed subpath.
|
| 181 | 202 | If @a radius equals 0, then this function will behave as AddRectangle();
|
| ... | ... | @@ -185,6 +206,13 @@ public: |
| 185 | 206 | virtual void AddRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
|
| 186 | 207 | wxDouble h, wxDouble radius);
|
| 187 | 208 | |
| 209 | + /**
|
|
| 210 | + @overload
|
|
| 211 | + |
|
| 212 | + @since 3.3.0
|
|
| 213 | + */
|
|
| 214 | + void AddRoundedRectangle(const wxRect2DDouble& rect, wxDouble radius);
|
|
| 215 | + |
|
| 188 | 216 | /**
|
| 189 | 217 | Closes the current sub-path. After this call, the current point will be
|
| 190 | 218 | at the joined end point of the sub-path.
|
| ... | ... | @@ -623,6 +651,13 @@ public: |
| 623 | 651 | */
|
| 624 | 652 | virtual void Clip(wxDouble x, wxDouble y, wxDouble w, wxDouble h) = 0;
|
| 625 | 653 | |
| 654 | + /**
|
|
| 655 | + @overload
|
|
| 656 | + |
|
| 657 | + @since 3.3.0
|
|
| 658 | + */
|
|
| 659 | + void Clip(const wxRect2DDouble& rect);
|
|
| 660 | + |
|
| 626 | 661 | /**
|
| 627 | 662 | Returns a bounding box of the current clipping region.
|
| 628 | 663 | |
| ... | ... | @@ -646,6 +681,13 @@ public: |
| 646 | 681 | */
|
| 647 | 682 | virtual void GetClipBox(wxDouble* x, wxDouble* y, wxDouble* w, wxDouble* h) = 0;
|
| 648 | 683 | |
| 684 | + /**
|
|
| 685 | + @overload
|
|
| 686 | + |
|
| 687 | + @since 3.3.0
|
|
| 688 | + */
|
|
| 689 | + wxRect2DDouble GetClipBox();
|
|
| 690 | + |
|
| 649 | 691 | /** @}
|
| 650 | 692 | */
|
| 651 | 693 | |
| ... | ... | @@ -842,17 +884,38 @@ public: |
| 842 | 884 | wxDouble x, wxDouble y,
|
| 843 | 885 | wxDouble w, wxDouble h) = 0;
|
| 844 | 886 | |
| 887 | + /**
|
|
| 888 | + @overload
|
|
| 889 | + |
|
| 890 | + @since 3.3.0
|
|
| 891 | + */
|
|
| 892 | + void DrawBitmap(const wxGraphicsBitmap& bmp, const wxRect2DDouble& rect);
|
|
| 893 | + |
|
| 845 | 894 | /**
|
| 846 | 895 | Draws an ellipse.
|
| 847 | 896 | */
|
| 848 | 897 | virtual void DrawEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
| 849 | 898 | |
| 899 | + /**
|
|
| 900 | + @overload
|
|
| 901 | + |
|
| 902 | + @since 3.3.0
|
|
| 903 | + */
|
|
| 904 | + void DrawEllipse(const wxRect2DDouble& rect);
|
|
| 905 | + |
|
| 850 | 906 | /**
|
| 851 | 907 | Draws the icon.
|
| 852 | 908 | */
|
| 853 | 909 | virtual void DrawIcon(const wxIcon& icon, wxDouble x, wxDouble y,
|
| 854 | 910 | wxDouble w, wxDouble h) = 0;
|
| 855 | 911 | |
| 912 | + /**
|
|
| 913 | + @overload
|
|
| 914 | + |
|
| 915 | + @since 3.3.0
|
|
| 916 | + */
|
|
| 917 | + void DrawIcon(const wxIcon& icon, const wxRect2DDouble& rect);
|
|
| 918 | + |
|
| 856 | 919 | /**
|
| 857 | 920 | Draws a polygon.
|
| 858 | 921 | */
|
| ... | ... | @@ -870,17 +933,38 @@ public: |
| 870 | 933 | */
|
| 871 | 934 | virtual void DrawRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
| 872 | 935 | |
| 936 | + /**
|
|
| 937 | + @overload
|
|
| 938 | + |
|
| 939 | + @since 3.3.0
|
|
| 940 | + */
|
|
| 941 | + void DrawRectangle(const wxRect2DDouble& rect);
|
|
| 942 | + |
|
| 873 | 943 | /**
|
| 874 | 944 | Draws a rounded rectangle.
|
| 875 | 945 | */
|
| 876 | 946 | virtual void DrawRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
|
| 877 | 947 | wxDouble h, wxDouble radius);
|
| 878 | 948 | |
| 949 | + /**
|
|
| 950 | + @overload
|
|
| 951 | + |
|
| 952 | + @since 3.3.0
|
|
| 953 | + */
|
|
| 954 | + void DrawRoundedRectangle(const wxRect2DDouble& rect, wxDouble radius);
|
|
| 955 | + |
|
| 879 | 956 | /**
|
| 880 | 957 | Draws text at the defined position.
|
| 881 | 958 | */
|
| 882 | 959 | void DrawText(const wxString& str, wxDouble x, wxDouble y);
|
| 883 | 960 | |
| 961 | + /**
|
|
| 962 | + @overload
|
|
| 963 | + |
|
| 964 | + @since 3.3.0
|
|
| 965 | + */
|
|
| 966 | + void DrawText(const wxString& str, const wxPoint2DDouble& pt);
|
|
| 967 | + |
|
| 884 | 968 | /**
|
| 885 | 969 | Draws text at the defined position.
|
| 886 | 970 | |
| ... | ... | @@ -928,6 +1012,18 @@ public: |
| 928 | 1012 | void DrawText(const wxString& str, wxDouble x, wxDouble y,
|
| 929 | 1013 | wxDouble angle, const wxGraphicsBrush& backgroundBrush);
|
| 930 | 1014 | |
| 1015 | + /**
|
|
| 1016 | + Paints a transparent rectangle (only useful for bitmaps or windows).
|
|
| 1017 | + */
|
|
| 1018 | + virtual void ClearRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
|
| 1019 | + |
|
| 1020 | + /**
|
|
| 1021 | + @overload
|
|
| 1022 | + |
|
| 1023 | + @since 3.3.0
|
|
| 1024 | + */
|
|
| 1025 | + void ClearRectangle(const wxRect2DDouble& rect);
|
|
| 1026 | + |
|
| 931 | 1027 | /**
|
| 932 | 1028 | Creates a native graphics path which is initially empty.
|
| 933 | 1029 | */
|
| ... | ... | @@ -944,6 +1040,13 @@ public: |
| 944 | 1040 | */
|
| 945 | 1041 | virtual void StrokeLine(wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2);
|
| 946 | 1042 | |
| 1043 | + /**
|
|
| 1044 | + @overload
|
|
| 1045 | + |
|
| 1046 | + @since 3.3.0
|
|
| 1047 | + */
|
|
| 1048 | + void StrokeLine(const wxPoint2DDouble& pt1, const wxPoint2DDouble& pt2);
|
|
| 1049 | + |
|
| 947 | 1050 | /**
|
| 948 | 1051 | Stroke disconnected lines from begin to end points, using the
|
| 949 | 1052 | fastest method available.
|
| ... | ... | @@ -2161,6 +2264,13 @@ public: |
| 2161 | 2264 | Translates this matrix.
|
| 2162 | 2265 | */
|
| 2163 | 2266 | virtual void Translate(wxDouble dx, wxDouble dy);
|
| 2267 | + |
|
| 2268 | + /**
|
|
| 2269 | + @overload
|
|
| 2270 | + |
|
| 2271 | + @since 3.3.0
|
|
| 2272 | + */
|
|
| 2273 | + void Translate(const wxPoint2DDouble& pt);
|
|
| 2164 | 2274 | };
|
| 2165 | 2275 | |
| 2166 | 2276 | /// An empty wxGraphicsPen object.
|
| ... | ... | @@ -10,7 +10,7 @@ msgstr "" |
| 10 | 10 | "Project-Id-Version: wxWidgets\n"
|
| 11 | 11 | "Report-Msgid-Bugs-To: \n"
|
| 12 | 12 | "POT-Creation-Date: 2025-05-14 20:23+0200\n"
|
| 13 | -"PO-Revision-Date: 2025-03-24 02:03+0300\n"
|
|
| 13 | +"PO-Revision-Date: 2025-05-24 02:24+0300\n"
|
|
| 14 | 14 | "Last-Translator: Kerim Demirkaynak <ke...@post.com>\n"
|
| 15 | 15 | "Language-Team: Turkish (Turkey) (http://www.transifex.com/klyok/wxwidgets/"
|
| 16 | 16 | "language/tr_TR/)\n"
|
| ... | ... | @@ -723,7 +723,6 @@ msgid "SPECIAL" |
| 723 | 723 | msgstr "SPECIAL"
|
| 724 | 724 | |
| 725 | 725 | #: ../src/common/accelcmn.cpp:373
|
| 726 | -#, fuzzy
|
|
| 727 | 726 | msgid "Ctrl"
|
| 728 | 727 | msgstr "Ctrl"
|
| 729 | 728 | |
| ... | ... | @@ -2216,7 +2215,7 @@ msgstr "DIB başlık bilgisi: Kodlama, bit derinliğine uymuyor." |
| 2216 | 2215 | #: ../src/common/imagbmp.cpp:1180
|
| 2217 | 2216 | #, c-format
|
| 2218 | 2217 | msgid "BMP Header: Invalid number of colors (%d)."
|
| 2219 | -msgstr ""
|
|
| 2218 | +msgstr "BMP Başlığı: Geçersiz renk sayısı (%d)."
|
|
| 2220 | 2219 | |
| 2221 | 2220 | #: ../src/common/imagbmp.cpp:1273
|
| 2222 | 2221 | msgid "Error in reading image DIB."
|
| ... | ... | @@ -2453,37 +2452,35 @@ msgstr "TIFF: Veri boşaltma hatası." |
| 2453 | 2452 | |
| 2454 | 2453 | #: ../src/common/imagwebp.cpp:56
|
| 2455 | 2454 | msgid "WebP: Invalid data (failed to get features)."
|
| 2456 | -msgstr ""
|
|
| 2455 | +msgstr "WebP: Geçersiz veri (özellikler alınamadı)."
|
|
| 2457 | 2456 | |
| 2458 | 2457 | #: ../src/common/imagwebp.cpp:65
|
| 2459 | 2458 | msgid "WebP: Allocating image memory failed."
|
| 2460 | -msgstr ""
|
|
| 2459 | +msgstr "WebP: Görüntü belleği ayrılamadı."
|
|
| 2461 | 2460 | |
| 2462 | 2461 | #: ../src/common/imagwebp.cpp:82
|
| 2463 | 2462 | msgid "WebP: Decoding RGBA image data failed."
|
| 2464 | -msgstr ""
|
|
| 2463 | +msgstr "WebP: RGBA görüntü verisi çözülemedi."
|
|
| 2465 | 2464 | |
| 2466 | 2465 | #: ../src/common/imagwebp.cpp:98
|
| 2467 | 2466 | msgid "WebP: Decoding RGB image data failed."
|
| 2468 | -msgstr ""
|
|
| 2467 | +msgstr "WebP: RGB görüntü verisi çözülemedi."
|
|
| 2469 | 2468 | |
| 2470 | 2469 | #: ../src/common/imagwebp.cpp:113 ../src/common/imagwebp.cpp:201
|
| 2471 | 2470 | msgid "WebP: Allocating stream buffer failed."
|
| 2472 | -msgstr ""
|
|
| 2471 | +msgstr "WebP: Akış arabelleği ayrılamadı."
|
|
| 2473 | 2472 | |
| 2474 | 2473 | #: ../src/common/imagwebp.cpp:131
|
| 2475 | -#, fuzzy
|
|
| 2476 | 2474 | msgid "WebP: Failed to parse container data."
|
| 2477 | -msgstr "Pano verisi ayarlanamadı."
|
|
| 2475 | +msgstr "WebP: Konteyner verisi çözümlenemedi."
|
|
| 2478 | 2476 | |
| 2479 | 2477 | #: ../src/common/imagwebp.cpp:222
|
| 2480 | -#, fuzzy
|
|
| 2481 | 2478 | msgid "WebP: Error decoding animation."
|
| 2482 | -msgstr "Ayarlar okunurken sorun çıktı."
|
|
| 2479 | +msgstr "WebP: Animasyonun çözülmesinde hata oluştu."
|
|
| 2483 | 2480 | |
| 2484 | 2481 | #: ../src/common/imagwebp.cpp:240
|
| 2485 | 2482 | msgid "WebP: Error getting next animation frame."
|
| 2486 | -msgstr ""
|
|
| 2483 | +msgstr "WebP: Sonraki animasyon karesi alınırken hata oluştu."
|
|
| 2487 | 2484 | |
| 2488 | 2485 | #: ../src/common/init.cpp:172
|
| 2489 | 2486 | #, c-format
|
| ... | ... | @@ -3990,14 +3987,12 @@ msgid "Failed to set proxy \"%s\": %s" |
| 3990 | 3987 | msgstr "\"%s\" proxy'si ayarlanamadı: %s"
|
| 3991 | 3988 | |
| 3992 | 3989 | #: ../src/common/webview_chromium.cpp:989
|
| 3993 | -#, fuzzy
|
|
| 3994 | 3990 | msgid ""
|
| 3995 | 3991 | "Chromium can't be used because libcef.so wasn't loaded early enough; please "
|
| 3996 | 3992 | "relink the application or use LD_PRELOAD to load it earlier."
|
| 3997 | 3993 | msgstr ""
|
| 3998 | -"Chromium, libcef.so dosyası yeterince erken yüklenmediği için kullanılamaz; "
|
|
| 3999 | -"lütfen uygulamayı yeniden bağlayın veya LD_PRELOAD kullanarak daha erken "
|
|
| 4000 | -"yüklenmesini sağlayın."
|
|
| 3994 | +"Chromium kullanılamıyor çünkü libcef.so yeterince erken yüklenemedi; lütfen "
|
|
| 3995 | +"uygulamayı yeniden bağlayın ya da LD_PRELOAD kullanarak daha erken yükleyin."
|
|
| 4001 | 3996 | |
| 4002 | 3997 | #: ../src/common/webview_chromium.cpp:1108
|
| 4003 | 3998 | msgid "Could not initialize Chromium"
|
| ... | ... | @@ -5256,31 +5251,30 @@ msgid "MDI child" |
| 5256 | 5251 | msgstr "MDI alt"
|
| 5257 | 5252 | |
| 5258 | 5253 | #: ../src/gtk/power.cpp:188
|
| 5259 | -#, fuzzy, c-format
|
|
| 5254 | +#, c-format
|
|
| 5260 | 5255 | msgid "Failed to open D-Bus connection to the login manager: %s"
|
| 5261 | -msgstr "'%s' sunucusuna '%s' konusundan bağlantı kurulamadı"
|
|
| 5256 | +msgstr "Giriş yöneticisine D-Bus bağlantısı açılamadı: %s"
|
|
| 5262 | 5257 | |
| 5263 | 5258 | #: ../src/gtk/power.cpp:214
|
| 5264 | -#, fuzzy
|
|
| 5265 | 5259 | msgid "wxWidgets application"
|
| 5266 | -msgstr "Uygulamayı gizle"
|
|
| 5260 | +msgstr "wxWidgets uygulaması"
|
|
| 5267 | 5261 | |
| 5268 | 5262 | #: ../src/gtk/power.cpp:226
|
| 5269 | 5263 | msgid "Application needs to keep running"
|
| 5270 | -msgstr ""
|
|
| 5264 | +msgstr "Uygulamanın çalışmaya devam etmesi gerekiyor."
|
|
| 5271 | 5265 | |
| 5272 | 5266 | #: ../src/gtk/power.cpp:233
|
| 5273 | 5267 | msgid "Clean up before suspend"
|
| 5274 | -msgstr ""
|
|
| 5268 | +msgstr "Kapanmadan önce temizle"
|
|
| 5275 | 5269 | |
| 5276 | 5270 | #: ../src/gtk/power.cpp:259
|
| 5277 | -#, fuzzy, c-format
|
|
| 5271 | +#, c-format
|
|
| 5278 | 5272 | msgid "Failed to inhibit sleep: %s"
|
| 5279 | -msgstr "Çevirmeli bağlantı başlatılamadı: %s"
|
|
| 5273 | +msgstr "Uyku engellenemedi: %s"
|
|
| 5280 | 5274 | |
| 5281 | 5275 | #: ../src/gtk/power.cpp:265
|
| 5282 | 5276 | msgid "Unexpected response to D-Bus \"Inhibit\" request."
|
| 5283 | -msgstr ""
|
|
| 5277 | +msgstr "D-Bus ‘Inhibit’ isteğine beklenmeyen yanıt alındı."
|
|
| 5284 | 5278 | |
| 5285 | 5279 | #: ../src/gtk/print.cpp:218
|
| 5286 | 5280 | msgid "Custom size"
|
| ... | ... | @@ -7070,7 +7064,7 @@ msgstr "Bir dosya seçin" |
| 7070 | 7064 | |
| 7071 | 7065 | #: ../src/qt/mdi.cpp:254
|
| 7072 | 7066 | msgid "&Tile"
|
| 7073 | -msgstr ""
|
|
| 7067 | +msgstr "&Döşeme"
|
|
| 7074 | 7068 | |
| 7075 | 7069 | #: ../src/richtext/richtextbackgroundpage.cpp:147
|
| 7076 | 7070 | #: ../src/richtext/richtextformatdlg.cpp:376
|
| ... | ... | @@ -92,7 +92,7 @@ StringFormat* gs_drawTextStringFormat = nullptr; |
| 92 | 92 | // Get the string format used for the text drawing and measuring functions:
|
| 93 | 93 | // notice that it must be the same one for all of them, otherwise the drawn
|
| 94 | 94 | // text might be of different size than what measuring it returned.
|
| 95 | -inline StringFormat* GetDrawTextStringFormat()
|
|
| 95 | +inline StringFormat* GetDrawTextStringFormat(wxLayoutDirection dir = wxLayout_Default)
|
|
| 96 | 96 | {
|
| 97 | 97 | if ( !gs_drawTextStringFormat )
|
| 98 | 98 | {
|
| ... | ... | @@ -100,11 +100,13 @@ inline StringFormat* GetDrawTextStringFormat() |
| 100 | 100 | |
| 101 | 101 | // This doesn't make any difference for DrawText() actually but we want
|
| 102 | 102 | // this behaviour when measuring text.
|
| 103 | - gs_drawTextStringFormat->SetFormatFlags
|
|
| 104 | - (
|
|
| 105 | - gs_drawTextStringFormat->GetFormatFlags()
|
|
| 106 | - | StringFormatFlagsMeasureTrailingSpaces
|
|
| 107 | - );
|
|
| 103 | + auto flags = gs_drawTextStringFormat->GetFormatFlags()
|
|
| 104 | + | StringFormatFlagsMeasureTrailingSpaces;
|
|
| 105 | + |
|
| 106 | + if ( dir == wxLayout_RightToLeft )
|
|
| 107 | + flags |= StringFormatFlagsDirectionRightToLeft;
|
|
| 108 | + |
|
| 109 | + gs_drawTextStringFormat->SetFormatFlags(flags);
|
|
| 108 | 110 | }
|
| 109 | 111 | |
| 110 | 112 | return gs_drawTextStringFormat;
|
| ... | ... | @@ -481,6 +483,8 @@ public: |
| 481 | 483 | |
| 482 | 484 | Graphics* GetGraphics() const { return m_context; }
|
| 483 | 485 | |
| 486 | + bool IsRTL() const { return m_layoutDir == wxLayout_RightToLeft; }
|
|
| 487 | + |
|
| 484 | 488 | virtual WXHDC GetNativeHDC() override;
|
| 485 | 489 | virtual void ReleaseNativeHDC(WXHDC hdc) override;
|
| 486 | 490 | |
| ... | ... | @@ -501,6 +505,7 @@ private: |
| 501 | 505 | GraphicsState m_state2;
|
| 502 | 506 | Matrix* m_internalTransform;
|
| 503 | 507 | Matrix* m_internalTransformInv;
|
| 508 | + wxLayoutDirection m_layoutDir = wxLayout_Default;
|
|
| 504 | 509 | |
| 505 | 510 | wxDECLARE_NO_COPY_CLASS(wxGDIPlusContext);
|
| 506 | 511 | };
|
| ... | ... | @@ -566,6 +571,36 @@ public: |
| 566 | 571 | void GetDPI(wxDouble* dpiX, wxDouble* dpiY) const override;
|
| 567 | 572 | };
|
| 568 | 573 | |
| 574 | +// Helper class to disable mirroring the DC in RTL layout for correct
|
|
| 575 | +// rendering, e.g. text shouldn't be mirrored.
|
|
| 576 | +class wxDCMirrorDisabler
|
|
| 577 | +{
|
|
| 578 | +public:
|
|
| 579 | + wxDCMirrorDisabler(wxGDIPlusContext* ctx, wxDouble x)
|
|
| 580 | + : m_ctx(ctx)
|
|
| 581 | + {
|
|
| 582 | + if ( m_ctx->IsRTL() )
|
|
| 583 | + {
|
|
| 584 | + m_ctx->PushState();
|
|
| 585 | + m_ctx->Translate(2*x, 0);
|
|
| 586 | + m_ctx->Scale(-1, 1);
|
|
| 587 | + }
|
|
| 588 | + }
|
|
| 589 | + |
|
| 590 | + ~wxDCMirrorDisabler()
|
|
| 591 | + {
|
|
| 592 | + if ( m_ctx->IsRTL() )
|
|
| 593 | + {
|
|
| 594 | + m_ctx->PopState();
|
|
| 595 | + }
|
|
| 596 | + }
|
|
| 597 | + |
|
| 598 | +private:
|
|
| 599 | + wxGDIPlusContext* const m_ctx;
|
|
| 600 | + |
|
| 601 | + wxDECLARE_NO_COPY_CLASS(wxDCMirrorDisabler);
|
|
| 602 | +};
|
|
| 603 | + |
|
| 569 | 604 | //-----------------------------------------------------------------------------
|
| 570 | 605 | // wxGDIPlusRenderer declaration
|
| 571 | 606 | //-----------------------------------------------------------------------------
|
| ... | ... | @@ -1868,12 +1903,14 @@ public : |
| 1868 | 1903 | |
| 1869 | 1904 | wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, HDC hdc, wxDouble width, wxDouble height )
|
| 1870 | 1905 | : wxGraphicsContext(renderer)
|
| 1906 | + , m_layoutDir((::GetLayout(hdc) & LAYOUT_RTL) ? wxLayout_RightToLeft : wxLayout_LeftToRight)
|
|
| 1871 | 1907 | {
|
| 1872 | 1908 | Init(new Graphics(hdc), width, height);
|
| 1873 | 1909 | }
|
| 1874 | 1910 | |
| 1875 | 1911 | wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, const wxDC& dc )
|
| 1876 | 1912 | : wxGraphicsContext(renderer, dc.GetWindow())
|
| 1913 | + , m_layoutDir(dc.GetLayoutDirection())
|
|
| 1877 | 1914 | {
|
| 1878 | 1915 | HDC hdc = (HDC) dc.GetHDC();
|
| 1879 | 1916 | wxSize sz = dc.GetSize();
|
| ... | ... | @@ -1900,6 +1937,8 @@ wxGDIPlusContext::wxGDIPlusContext( wxGraphicsRenderer* renderer, |
| 1900 | 1937 | HWND hwnd,
|
| 1901 | 1938 | wxWindow* window )
|
| 1902 | 1939 | : wxGraphicsContext(renderer, window)
|
| 1940 | + , m_layoutDir((::GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_LAYOUTRTL) ? wxLayout_RightToLeft
|
|
| 1941 | + : wxLayout_LeftToRight)
|
|
| 1903 | 1942 | {
|
| 1904 | 1943 | RECT rect = wxGetWindowRect(hwnd);
|
| 1905 | 1944 | Init(new Graphics(hwnd), rect.right - rect.left, rect.bottom - rect.top);
|
| ... | ... | @@ -1929,6 +1968,12 @@ void wxGDIPlusContext::Init(Graphics* graphics, int width, int height, const Mat |
| 1929 | 1968 | m_height = height;
|
| 1930 | 1969 | m_internalTransform = new Matrix();
|
| 1931 | 1970 | |
| 1971 | + if ( m_layoutDir == wxLayout_RightToLeft )
|
|
| 1972 | + {
|
|
| 1973 | + m_context->ScaleTransform(-1, 1);
|
|
| 1974 | + m_context->TranslateTransform(-width, 0);
|
|
| 1975 | + }
|
|
| 1976 | + |
|
| 1932 | 1977 | m_context->SetTextRenderingHint(TextRenderingHintSystemDefault);
|
| 1933 | 1978 | m_context->SetPixelOffsetMode(PixelOffsetModeHalf);
|
| 1934 | 1979 | m_context->SetSmoothingMode(SmoothingModeHighQuality);
|
| ... | ... | @@ -2353,13 +2398,17 @@ void wxGDIPlusContext::DoDrawText(const wxString& str, |
| 2353 | 2398 | wxGDIPlusFontData * const
|
| 2354 | 2399 | fontData = (wxGDIPlusFontData *)m_font.GetRefData();
|
| 2355 | 2400 | |
| 2401 | + |
|
| 2402 | + // Text is not mirrored in RTL layout
|
|
| 2403 | + wxDCMirrorDisabler disableMirror(this, x);
|
|
| 2404 | + |
|
| 2356 | 2405 | m_context->DrawString
|
| 2357 | 2406 | (
|
| 2358 | 2407 | str.wc_str(), // string to draw, always Unicode
|
| 2359 | 2408 | -1, // length: string is NUL-terminated
|
| 2360 | 2409 | fontData->GetGDIPlusFont(),
|
| 2361 | 2410 | PointF(x, y),
|
| 2362 | - GetDrawTextStringFormat(),
|
|
| 2411 | + GetDrawTextStringFormat(m_layoutDir),
|
|
| 2363 | 2412 | fontData->GetGDIPlusBrush()
|
| 2364 | 2413 | );
|
| 2365 | 2414 | }
|
| ... | ... | @@ -2424,7 +2473,8 @@ void wxGDIPlusContext::GetTextExtent( const wxString &str, wxDouble *width, wxDo |
| 2424 | 2473 | RectF layoutRect(0,0, 100000.0f, 100000.0f);
|
| 2425 | 2474 | |
| 2426 | 2475 | RectF bounds ;
|
| 2427 | - m_context->MeasureString((const wchar_t *) s , wcslen(s) , f, layoutRect, GetDrawTextStringFormat(), &bounds ) ;
|
|
| 2476 | + m_context->MeasureString((const wchar_t *) s , wcslen(s) , f, layoutRect,
|
|
| 2477 | + GetDrawTextStringFormat(m_layoutDir), &bounds ) ;
|
|
| 2428 | 2478 | if ( width )
|
| 2429 | 2479 | *width = bounds.Width;
|
| 2430 | 2480 | if ( height )
|
| ... | ... | @@ -2448,7 +2498,7 @@ void wxGDIPlusContext::GetPartialTextExtents(const wxString& text, wxArrayDouble |
| 2448 | 2498 | wxASSERT_MSG(text.length() == len , wxT("GetPartialTextExtents not yet implemented for multichar situations"));
|
| 2449 | 2499 | |
| 2450 | 2500 | RectF layoutRect(0,0, 100000.0f, 100000.0f);
|
| 2451 | - StringFormat strFormat( GetDrawTextStringFormat() );
|
|
| 2501 | + StringFormat strFormat( GetDrawTextStringFormat(m_layoutDir) );
|
|
| 2452 | 2502 | |
| 2453 | 2503 | size_t startPosition = 0;
|
| 2454 | 2504 | size_t remainder = len;
|
—
View it on GitLab.
You're receiving this email because of your account on gitlab.com. Manage all notifications · Help