pax_global_header00006660000000000000000000000064134744017450014523gustar00rootroot0000000000000052 comment=891b5a121a5915719218ead85c9de668008d23ff qt5integration-5.0.0/000077500000000000000000000000001347440174500145025ustar00rootroot00000000000000qt5integration-5.0.0/.clog.toml000066400000000000000000000002261347440174500164010ustar00rootroot00000000000000[clog] repository = "https://github.com/linuxdeepin/qt5integration" from-latest-tag = true changelog = "CHANGELOG.md" [sections] Others = ["chore"] qt5integration-5.0.0/.gitignore000066400000000000000000000005771347440174500165030ustar00rootroot00000000000000*.pro.user* build*/ bin/ # C++ objects and libs *.slo *.lo *.o *.a *.la *.lai *.so *.dll *.dylib # Qt-es /.qmake.cache /.qmake.stash *.pro.user *.pro.user.* *.qbs.user *.qbs.user.* *.moc moc_*.cpp qrc_*.cpp ui_*.h Makefile* *build-* # QtCreator *.autosave # QtCtreator Qml *.qmlproject.user *.qmlproject.user.* # QtCtreator CMake CMakeLists.txt.user platformthemeplugin/NUL qt5integration-5.0.0/.release.json000066400000000000000000000010141347440174500170670ustar00rootroot00000000000000{ "commit": { "quilt": false, "pkgver": "git describe --tags --long %(ref)s | awk '{split($0,v,\"-\"); print v[1]\"+r\"v[2]\"+\"v[3]}'", "dist": "experimental" }, "release": { "quilt": true, "pkgver": "git describe --abbrev=0 --tags %(ref)s", "dist": "unstable" }, "release-candidate": { "quilt": true, "pkgver": "2.0.11", "dist": "unstable" } } qt5integration-5.0.0/CHANGELOG.md000066400000000000000000000311701347440174500163150ustar00rootroot00000000000000 ## 0.3.11 (2019-04-17) #### Bug Fixes * ScreenScaleFactors cannot be applied to all screens when only one value is specified ([24a73d6b](https://github.com/linuxdeepin/qt5integration/commit/24a73d6b2243602781dd7c56071efadb5387142c)) * font pixel changed when connect a screen ([fcca6b5e](https://github.com/linuxdeepin/qt5integration/commit/fcca6b5e64863741a48600bdc22b18d2c3eac3d6)) * enable real-time scale for window only on enable screenScaleFactors ([520f00eb](https://github.com/linuxdeepin/qt5integration/commit/520f00eb47e57883838040372fa4bc377cf8be78)) #### Features * support auto update the window geometry by new device pixel ratio ([6902fc8a](https://github.com/linuxdeepin/qt5integration/commit/6902fc8ad8923f1579b115561f4aa0a361ac0f64)) ## 0.3.10 (2019-04-04) ## 0.3.9 (2019-04-03) #### Bug Fixes * build failed on Qt 5.7.x ([9159a9fa](https://github.com/linuxdeepin/qt5integration/commit/9159a9fadf70c0190c698769b7f0d576bf380567)) #### Features * screen scale support takes effect in real time ([1e9c855b](https://github.com/linuxdeepin/qt5integration/commit/1e9c855b7409fdaa04eb938ddab42b5a38d51790)) ## 0.3.8 (2019-03-27) ## 0.3.7.2 (2019-01-10) #### Bug Fixes * QComboBox show icon ([9ac0b0bc](https://github.com/linuxdeepin/qt5integration/commit/9ac0b0bc54add64fa249cf78d1960a270e8f5af1)) * adjust QComboBox height ([4778931f](https://github.com/linuxdeepin/qt5integration/commit/4778931f7605a04ff5ec3c6166d89bb9166c9b4e)) #### Features * add property "touchFlickBeginMoveDelay" for DThemeSettings ([2ab1fab0](https://github.com/linuxdeepin/qt5integration/commit/2ab1fab0b65f6d4f41d3f2c06a61816346fda153)) ## 0.3.7.1 (2018-12-14) #### Bug Fixes * QPushButton icon color follow theme ([e1f6d379](https://github.com/linuxdeepin/qt5integration/commit/e1f6d379ebf05a96689ddcfa01e02126df42c540)) ## 0.3.7 (2018-11-30) #### Bug Fixes * can not read image file on the second time ([668540cf](https://github.com/linuxdeepin/qt5integration/commit/668540cfc655ae9e9953b90b70411f8f6f7a732a)) * set the QMenu Qt::WA_TranslucentBackground does not take effect ([6814e028](https://github.com/linuxdeepin/qt5integration/commit/6814e028a90e3b82e4db91e8b62ee76cc86a5489)) * **Menu:** check icon when select state ([8fe47513](https://github.com/linuxdeepin/qt5integration/commit/8fe475130f7d7aacef438b258acfaeae0560c598)) ## 0.3.6 (2018-10-25) #### Features * **menu:** add check label ([f7d4530b](https://github.com/linuxdeepin/qt5integration/commit/f7d4530bb396e79a45e6b62e0cdb0b1c14b431e9)) ## 0.3.5 (2018-08-28) #### Bug Fixes * **iconengine:** use the original one if cast failed ([50286e1d](https://github.com/linuxdeepin/qt5integration/commit/50286e1d2d4a31c86bc556f3cc8433ac2e2803bb)) ## 0.3.4 (2018-08-13) #### Bug Fixes * build failed on libqt5xdg2 ([da972cac](https://github.com/linuxdeepin/qt5integration/commit/da972cac239240ae4f2ed08e505c75a2bd7aaae9)) * return a null pixmap in QIcon::pixmap ([8d923ea9](https://github.com/linuxdeepin/qt5integration/commit/8d923ea94f49eee3ad6cda201a04b1125031ebe7)) ## 0.3.3 (2018-08-06) #### Features * anyway try to enable dxcb for QMenu and QTipLabel ([689e440b](https://github.com/linuxdeepin/qt5integration/commit/689e440bf160a0ed094f03eca9d307e1d1d0f63c)) #### Bug Fixes * the dde-desktop UI is blocked ([c75ffad8](https://github.com/linuxdeepin/qt5integration/commit/c75ffad83ff353f10840dac2e38a2daa3b8e3187)) ## 0.3.2 (2018-07-31) #### Bug Fixes * not update the xdg system icon theme when the icon theme is changed ([cc738c11](https://github.com/linuxdeepin/qt5integration/commit/cc738c114853ed9a9be46f2ebe711e2db98a41e1)) * remove gtk2 depend ([6b2d1f7d](https://github.com/linuxdeepin/qt5integration/commit/6b2d1f7dfae7d17591f3f1d98a67da933505b9f6)) #### Features * support custom the color scheme of get icon from theme ([0daec72b](https://github.com/linuxdeepin/qt5integration/commit/0daec72b6467a29bcbc126b9bfefe5a7e22c1123)) ## 0.3.1 (2018-07-19) #### Bug Fixes * can not build if the "Qt5Xdg" package version is not 2.0.0 ([444f3a47](https://github.com/linuxdeepin/qt5integration/commit/444f3a47cec873010c254c726249b476dd29c8fc)) #### Features * **DIconEngine:** bypass some path which contains '/' ([0c6a7496](https://github.com/linuxdeepin/qt5integration/commit/0c6a7496ec64348fde628866c5d42b493aa7cdd7)) ### 0.3.0 (2018-05-24) #### Features * **style:** use QPalette active text brush on DTabBar tab widget ([d8ee34e6](https://github.com/linuxdeepin/qt5integration/commit/d8ee34e6efeda4faa3a953849d2b5e5a6a183985)) #### Bug Fixes * crash on paint QTabBar ([8d74156e](https://github.com/linuxdeepin/qt5integration/commit/8d74156e4fc07eecc86bf992a9a2a05370f2756d)) * the line edit widget border color on focus state ([4718470d](https://github.com/linuxdeepin/qt5integration/commit/4718470d0b31b28d67b71c1a77d05a0443fcaa21)) * **QLineEdit:** not refresh close button after theme changed ([7aca7279](https://github.com/linuxdeepin/qt5integration/commit/7aca72794235f9345c916102f5ed9a2666c3e61f)) * **combox:** don't render text when edit state ([2f558376](https://github.com/linuxdeepin/qt5integration/commit/2f558376d7788cadf27e280eed01c174435d1262)) * **style:** DTabBar close button cannot visible ([399ad32d](https://github.com/linuxdeepin/qt5integration/commit/399ad32d4facfc73574d4a56551309f3f7c28e6b)) ### 0.2.10 (2018-03-14) #### Bug Fixes * the line edit widget border color on focus state ([4718470d](https://github.com/linuxdeepin/qt5integration/commit/4718470d0b31b28d67b71c1a77d05a0443fcaa21)) ## 0.2.9 (2018-03-08) #### Bug Fixes * set the progress bar widget radius to 4 ([3cc29bbf](https://github.com/linuxdeepin/qt5integration/commit/3cc29bbf49d93d48ec3027a35721f4ccfa6af1cb)) * progress bar border color ([7da33a5d](https://github.com/linuxdeepin/qt5integration/commit/7da33a5d5882debae5448a24fc01200b4a390e56)) * button border color in pressed state ([578948d4](https://github.com/linuxdeepin/qt5integration/commit/578948d4d1a22521f8c39d2f89914761af4a0c20)) * Style::fullBrush filled icon is not the right size ([fb785a3f](https://github.com/linuxdeepin/qt5integration/commit/fb785a3fa6fabc82117846eeca64a3ee479077f8)) * drawProgressBarContentsControl crash if widget is nullptr ([1494cff6](https://github.com/linuxdeepin/qt5integration/commit/1494cff6247968025c3c0750f30cb4f186acafcd)) * crash at drawPushButtonLabel ([795e9fb6](https://github.com/linuxdeepin/qt5integration/commit/795e9fb65f7fb88fc414fb33b230396db7e4ffb4)) * crash at drawStandardIcon/isTabBarToolButton ([45a305fd](https://github.com/linuxdeepin/qt5integration/commit/45a305fd5919525b8dc6cc9dc0234f242cf00874)) * tab of QTabBar close button visible position is wrong on after tabs move ([6049831b](https://github.com/linuxdeepin/qt5integration/commit/6049831bc14a0a39aa15d3189b1ab35155e20d0f)) * not visible close button on tab when QTabBar style is QStyleSheetStyle ([0ca51e06](https://github.com/linuxdeepin/qt5integration/commit/0ca51e0651972ebbf26d14cbbeb0528cf2e2df79)) * **dstyle:** button border corner offset ([2c74e56e](https://github.com/linuxdeepin/qt5integration/commit/2c74e56e9d75adab5b4a8853043af596abdf2710)) * **style:** * set the scroll bar padding to 2px ([8cf9a91a](https://github.com/linuxdeepin/qt5integration/commit/8cf9a91ad77c90684e2da9412810b37dbcc6be64)) * scroll bar border color on dark style ([0b3472b0](https://github.com/linuxdeepin/qt5integration/commit/0b3472b048cc20803b8c468c60662de477d3a2c5)) #### Features * support add custom widgets to deepin file chooser dialog ([63caf8ff](https://github.com/linuxdeepin/qt5integration/commit/63caf8ff553c3951ff91af12792f3c40be1eba61)) * add split line for DTabBar add button ([31730a0b](https://github.com/linuxdeepin/qt5integration/commit/31730a0b2285504cbb3d803655ad55adae545187)) * add dark style for QTabBar/DTabBar ([7c811b44](https://github.com/linuxdeepin/qt5integration/commit/7c811b440b6fafa1233261690b03abc81645011d)) * draw QTabBar widget ([9da78b60](https://github.com/linuxdeepin/qt5integration/commit/9da78b6088596da68e800a048a47d6264642ee01)) * **dstyle:** * hide menu icon with DApplication and QLineEdit ([291c7292](https://github.com/linuxdeepin/qt5integration/commit/291c7292ff6f49349e3591835962bb1c715e8972)) * support SuggestButtonColor ([a644e697](https://github.com/linuxdeepin/qt5integration/commit/a644e697d47573ee8d5dc907c9d21411d925fd99)) * **style:** * draw alert border on DLineEdit ([810ebeda](https://github.com/linuxdeepin/qt5integration/commit/810ebedad0c50610aee6edd8507858931bfc954d)) * the tab bar tab text below the close button increases the transparency gradient ([83bdc592](https://github.com/linuxdeepin/qt5integration/commit/83bdc59210366ac53a41f7397dbc32c22d364d65)) * lineedit left padding to 3px ([e56ae93c](https://github.com/linuxdeepin/qt5integration/commit/e56ae93c32f3020d528e7cd780d544c63fea3ab5)) ## 0.2.8.3 (2017-12-06) #### Bug Fixes * **style:** visable bottom lines on QMenu when hover item ([c8eb56b7](https://github.com/linuxdeepin/qt5integration/commit/c8eb56b7cadb8f7a3d95207bf6ff7a7048a89706)) ## 0.2.8.2 (2017-12-06) #### Features * **theme:** set window flags for native dialog ([3ec67bf0](https://github.com/linuxdeepin/qt5integration/commit/3ec67bf01fead41dbac5a4b096622f7ca50d685c)) #### Bug Fixes * is dxcb platform if the "_d_isDxcb" property is true of QCoreApplication ([714b5f78](https://github.com/linuxdeepin/qt5integration/commit/714b5f78b98f7e63757db15ab84a8eb653c36b31)) * **style:** * visable left/top lines on draw rubber band control ([9c06e770](https://github.com/linuxdeepin/qt5integration/commit/9c06e7709b99958e6ebb98714fbbfa2a61d7a0a5)) * bottom/right visible lines on draw rubber band rect for QListView ([1177381a](https://github.com/linuxdeepin/qt5integration/commit/1177381ae5914188ca4236e993475367071d66bd)) * slider icons ([dae8caa6](https://github.com/linuxdeepin/qt5integration/commit/dae8caa6ec73b95b3781ebe6ecd6da0b359a189f)) ## 0.2.8.1 (2017-11-02) #### Bug Fixes * remove libqt5dxcb-dev for "Conflicts" and "Provides" ([4d38dbca](https://github.com/linuxdeepin/qt5integration/commit/4d38dbcac71375f96469cfdda2b4bad0124c7b16)) ## 0.2.8 (2017-11-02) #### Features * keep the window border is 1px for hiDPI ([da8040c4](https://github.com/linuxdeepin/qt5integration/commit/da8040c42df0cbde97e21693f472a288ef46a9d8)) * **theme plugin:** read settings from config file ([aacc2995](https://github.com/linuxdeepin/qt5integration/commit/aacc299512f4006ff174c5700d471d344d7155d0)) * **theme style:** auto update the widgets font when theme config file changed ([d478074e](https://github.com/linuxdeepin/qt5integration/commit/d478074e73d8e22e2d70080ad1430c565261d9af)) #### Bug Fixes * add build-depend: libegl1-mesa-dev ([2d265267](https://github.com/linuxdeepin/qt5integration/commit/2d265267ad1f6f113a74c931a67fe938b85a5af0)) * build failed(add build-depend: libmtdev-dev) ([babdc356](https://github.com/linuxdeepin/qt5integration/commit/babdc3561ab22d85ab83e4b6e385a4daa1387516)) * set cursor is invaild ([a2e235be](https://github.com/linuxdeepin/qt5integration/commit/a2e235bed7873d35030be380e8cd73acc0192e89)) * **dxcb:** * crash when screen changed ([7e1627c2](https://github.com/linuxdeepin/qt5integration/commit/7e1627c20fd92d7b4c1d7a69c55b4de5869cf6b6)) * the window border size is wrong ([83d6ac50](https://github.com/linuxdeepin/qt5integration/commit/83d6ac500b7e070f5c97ff220da16736229fd060)) * draw shadow area ([284cae9d](https://github.com/linuxdeepin/qt5integration/commit/284cae9dd90e9b9d7af92480e3a0e217a7c5f478)) * the DFrameWindow shadow area ([6e9c8274](https://github.com/linuxdeepin/qt5integration/commit/6e9c8274ef871fe3fa48a60a0861a96b6880dbf0)) * **style:** * update all widgets on font changed ([0e28f244](https://github.com/linuxdeepin/qt5integration/commit/0e28f244217f57d454424cc7dfba488ee6be93e3)) * update all widgets on font changed ([d4a65deb](https://github.com/linuxdeepin/qt5integration/commit/d4a65deb9e21e18390447c8b26eb429843333be4)) * **theme:** * "DFileSystemWatcherPrivate::addPaths: inotify_add_watch failed" ([a0322a68](https://github.com/linuxdeepin/qt5integration/commit/a0322a68447b7d918af49fbba23ebe1d5f53da25)) * set ini codec to "utf8" for QSettings ([3a4f7d76](https://github.com/linuxdeepin/qt5integration/commit/3a4f7d7651f6c433ef9735426d936289ac04d6c9)) qt5integration-5.0.0/LICENSE000066400000000000000000001045141347440174500155140ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . qt5integration-5.0.0/README.md000066400000000000000000000023531347440174500157640ustar00rootroot00000000000000# qt5integration qt5integration is the Qt platform theme integration plugins for Deepin Desktop Environment. It includes multiple Qt5 plugins to make make DDE more Qt5 Apps friendly. ## Dependencies ### Build dependencies * Qt (>= 5.6) * gtk+-2.0 * mtdev * [dtk](https://github.com/linuxdeepin/deepin-tool-kit) * [libqtxdg](https://github.com/lxde/libqtxdg) * Qt5 (>= 5.6) * Qt5-Core * Qt5-Gui * Qt5-Widgets * Qt5-DBus * Qt5-Multimedia * Qt5-MultimediaWidgets * Qt5-Svg * Qt5-OpenGL * Qt5-X11extras * Qt5-Core-Private * Qt5-Widgets-Private ### Runtime dependencies * DDE File Manager (suggestion, to make Qt5 file dialogs more elegant) ## Installation ### Build from source code 1. Make sure you have installed all dependencies. 2. Build: ``` $ cd qt5integration $ mkdir build $ cd build $ qmake .. $ make ``` 3. Install: ``` $ sudo make install ``` ## Usage To be done. ## Getting help You may also find these channels useful if you encounter any other issues: * [Gitter](https://gitter.im/orgs/linuxdeepin/rooms) * [IRC Channel](https://webchat.freenode.net/?channels=deepin) * [Official Forum](https://bbs.deepin.org/) * [Wiki](http://wiki.deepin.org/) ## License qt5integration is licensed under [GPLv3](LICENSE). qt5integration-5.0.0/clog.toml000066400000000000000000000001661347440174500163260ustar00rootroot00000000000000[clog] repository = "https://github.com/linuxdeepin/qt5integration" from-latest-tag = true changelog = "CHANGELOG.md" qt5integration-5.0.0/debian/000077500000000000000000000000001347440174500157245ustar00rootroot00000000000000qt5integration-5.0.0/debian/changelog000066400000000000000000000003171347440174500175770ustar00rootroot00000000000000qt5integration (1.0.0) unstable; urgency=medium * Initial release (Closes: #nnnn) -- Deepin Packages Builder Tue, 08 Nov 2016 15:10:02 +0800 qt5integration-5.0.0/debian/compat000066400000000000000000000000021347440174500171220ustar00rootroot000000000000009 qt5integration-5.0.0/debian/control000066400000000000000000000013651347440174500173340ustar00rootroot00000000000000Source: qt5integration Section: devel Priority: optional Maintainer: Deepin Packages Builder Build-Depends: debhelper (>=9), qt5-default, qtbase5-dev, qtbase5-private-dev, libqt5xdg-dev, libdtkwidget-dev, pkg-config, libqt5x11extras5-dev, libfontconfig1-dev, libfreetype6-dev, libglib2.0-dev, libqt5svg5-dev, libqt5xdgiconloader-dev, libmtdev-dev, libegl1-mesa-dev, libxrender-dev Standards-Version: 3.9.8 Package: dde-qt5integration Architecture: any Provides: libqt5deepintheme-plugin Conflicts: libqt5deepintheme-plugin Depends: ${shlibs:Depends}, ${misc:Depends}, qt5dxcb-plugin Description: Qt platform theme integration plugins for DDE Multiple Qt plugins to provide better Qt5 integration for DDE is included. qt5integration-5.0.0/debian/copyright000066400000000000000000000017441347440174500176650ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: qt5integration Source: https://github.com/linuxdeepin/qt5integration Files: * Copyright: 2017 Deepin.Inc License: GPL-3+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". qt5integration-5.0.0/debian/rules000077500000000000000000000013711347440174500170060ustar00rootroot00000000000000#!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. #export DH_VERBOSE = 1 # see FEATURE AREAS in dpkg-buildflags(1) #export DEB_BUILD_MAINT_OPTIONS = hardening=+all # see ENVIRONMENT in dpkg-buildflags(1) # package maintainers to append CFLAGS #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic # package maintainers to append LDFLAGS #export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ override_dh_shlibdeps: dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info # dh_make generated override targets # This is example for Cmake (See https://bugs.debian.org/641051 ) #override_dh_auto_configure: # dh_auto_configure -- # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) qt5integration-5.0.0/debian/source/000077500000000000000000000000001347440174500172245ustar00rootroot00000000000000qt5integration-5.0.0/debian/source/format000066400000000000000000000000151347440174500204330ustar00rootroot000000000000003.0 (native) qt5integration-5.0.0/dstyleplugin/000077500000000000000000000000001347440174500172255ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets.qrc000066400000000000000000000054771347440174500212530ustar00rootroot00000000000000 assets/icons/arrow-down.png assets/icons/arrow-left.png assets/icons/arrow-right.png assets/icons/arrow-up.png assets/icons/button-cancel.png assets/icons/computer.svg assets/icons/dialog-apply.png assets/icons/document-save.png assets/icons/drive-harddisk.png assets/icons/emblem-symbolic-link.png assets/icons/folder-open.svg assets/icons/folder.svg assets/icons/help-faq.png assets/icons/media-optical.png assets/icons/process-stop.png assets/icons/text-x-generic.svg assets/icons/user-home.svg assets/icons/user-trash.svg assets/icons/view-refresh.png assets/icons/window_close_hover_dark.png assets/icons/window_close_hover_light.png assets/icons/window_close_normal_dark.png assets/icons/window_close_normal_light.png assets/icons/window_close_press_dark.png assets/icons/window_close_press_light.png assets/icons/window_max_hover_dark.png assets/icons/window_max_hover_light.png assets/icons/window_max_normal_dark.png assets/icons/window_max_normal_light.png assets/icons/window_max_press_dark.png assets/icons/window_max_press_light.png assets/icons/window_min_hover_dark.png assets/icons/window_min_hover_light.png assets/icons/window_min_normal_dark.png assets/icons/window_min_normal_light.png assets/icons/window_min_press_dark.png assets/icons/window_min_press_light.png assets/icons/window_option_hover_dark.png assets/icons/window_option_hover_light.png assets/icons/window_option_normal_dark.png assets/icons/window_option_normal_light.png assets/icons/window_option_press_dark.png assets/icons/window_option_press_light.png assets/icons/window_unmax_hover_dark.png assets/icons/window_unmax_hover_light.png assets/icons/window_unmax_normal_dark.png assets/icons/window_unmax_normal_light.png assets/icons/window_unmax_press_dark.png assets/icons/window_unmax_press_light.png qt5integration-5.0.0/dstyleplugin/assets/000077500000000000000000000000001347440174500205275ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/README000066400000000000000000000002421347440174500214050ustar00rootroot00000000000000All images under this directory and its subdirectories are made by Wuhan Deepin Technology Co., Ltd. Licensed under GNU GENERAL PUBLIC LICENSE Version 3 or later.qt5integration-5.0.0/dstyleplugin/assets/dark/000077500000000000000000000000001347440174500214505ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/dark/check_disabled.png000066400000000000000000000003321347440174500250600ustar00rootroot00000000000000PNG  IHDR  gAMA aIDAT} @w@`!SY "R Z`Xvw3$谖2V[huȲF1)"U!T (()Gx!5StNjѫ4L=mo/:-)=.Hj:+h[55QIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/check_normal.png000066400000000000000000000003251347440174500246030ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`" %Lxԁ8:>Ob5|D & L @ ـL ȸ&;sA1@$S@\@V1@ m@^iTT M@<Pex@@& .H"xIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/check_selected.png000066400000000000000000000003151347440174500251020ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`Ċx@Z3T _@lO2P{ .+rxX&dsE ^ @i@|y@@z1_ኁ@|q1budPBo1#a dC*t/IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/000077500000000000000000000000001347440174500232365ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_checked.png000066400000000000000000000010011347440174500271700ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c` ܿ_DHs160/H9ȷ+r޿†@ݻgvݟ@$jǖ-[$߽{3yda5@0330/9[0!Dv޽JQQH ?kÆ >jr>رٟ>}ZS1 bؼyHzzzTTT&\RRRLFxa֭ZZZKϜ9SR;_K.M;oF 0?$$d޽{MYXXXYYU.\ F1۷ ʁ.x4$׭AAAG5!Q It=z-48NlPXXX #eԂ r&eA ͠dc2L0 ,0E3L,DUzIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_checked@2x.png000066400000000000000000000021371347440174500275550ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WmHQr#+,NHBB$HaZ-4i1d,B%h"BQ:!$E0JCS3w_ݹ|<{{w ſ6&''a伕`jۉw3s/ZQTZW3 &ơva'0b9LVSSSǀ_j@ ir0"beeew`0|Xd7422p9dfu/%MQQQ ёKSSS7Rv9 5o=@{XGRbb (e^d;h w$rI|= `M c' #hpp0 ί35p{bR}ZsL\777DŽ=dxT,6L R(Ѐ>APo- '቞"_I.%nJjYGV>x8y|hxxx5ܜ3inZ %$$2bby={WWWFEE8QJw{ Qy#/R9ƴ8g{ʖ@TߘmeӒ'۽W0Xbbb=']uVu 33k ˟ozl6Gƺ<Lrcc']Qbl ) } ָ,r29~YY,+Sg0~;+l%L\oq(3>$xOO~o@r0 SJlmpIЫOo@-5.Ao#)57e=ʏ0 _ypS)IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_checked_focus.png000066400000000000000000000010331347440174500303740ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c` ܿ_Dv߯F30HЁ&3;0_ q322Z@eqlNjS%%Nد{o"GQQ"4 {ɓ69Hr6.AA@ZZy!P[˿3b *m>|X t=KG;vp"GG@ ytW...͛7;$`GIEEe߿%%%a4[n Zz̙2OOON__9@Zti4hH,@y!!!kk"((T,ʪr…0M4o߾o``Pt{! _n : bLĤѣoͧı03>$lmm=! &Z ȸ= edb\#:3 h[=,sȢ <IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_checked_focus@2x.png000066400000000000000000000022541347440174500307540ustar00rootroot00000000000000PNG  IHDR szzgAMA acIDATX WoL[Uvu@Af$N [Dp7I!;> 1q1uDHAu&LHL@0̚ ,]y)O{}= 6ރ Z7#(v εdKԪ}^e;;;.6/c̒'-zq97E.~ $3z}'vd V.G{$R )}|+w4 .ٜG;滻 ${{'D#) E*b[QQ 0V_ `@[[p(z?Ѿv-3/(_A֠ TkZ-| h\jB 9@ͰSsg4IN044tjɑN; LMUUd2][&777lKaap|+?΀>00ÃMA9w V2j.L*䙙kSSd,tċ-//_uͦF>Q9!h4^*oCeccm6;Ⱦ U \ n?]-,t='9rްSյ$77ڞ{)IfL:ab1rкܜXQ@7-~S9f=Vgˊ4#g߄\k?)6;/5r*mf P<#M6;@kF# NV?̿!NhIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_checked_hover.png000066400000000000000000000011201347440174500303750ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c` pQ|lvJg??C?+%# YgRp6÷O释_?@Heabh/Y"43(w=' 1&fV.>&mά4cՙ,.3~Ύxp . %kjGk~9n+WyVVV֌U1{T140|ubc.F72A,r>u A'@% XwC￘z2[C~6^6N'd=:Fŀ߾gkckAL=ύ=ӀNU1{&AY_M ahgd+rl Y( D `Ct3A9410<qH7]/r-BN "/!&1Pe@.IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_checked_hover@2x.png000066400000000000000000000023701347440174500307570ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WoLU{{k aҮں`V,Eef ctk\ʴ`O&馱j%k17\Qgµ%ƽp9/煔?/ۧvss{^[o$D9n& r`8wݎ3>8ǰo3ŜGHzUU!|P"/jˇ @ 8wb,[;7 aZn*@#/!E3vB]^rRt01cƢbi~8m hpY׺>pJw?&7g:6:ڟLpxt ` ^ a^ 7\.1-7m; e{Xc৙nrl(Yy|\AS Ȩ(YunG^!7A2m?ttCc%rq}]qɍ ~zѧkG}m;x|fAN/BgęFp#3|~)\0s2tOĻ >t0EMe,wxn8"ʳg{ANyy͎a:RUPdQc#Ɖw4Gz^fK{!6ީ4#t+xOnݮݲL퓐)uZkVJs qN,w%qmʄ+1|lYZ(};vNzoK8kh%{ Yu4j;o}Lv{[|V¼>*}#qjĖ9Z*c]?هڷB8plO{R֝/h ű2 5qtOTӚ+cGٜÇŃ(S'AFW?LxpS"e \GrnSD]C@r7̻?^栞$0IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_checked_insensitive.png000066400000000000000000000007631347440174500316260ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8SK`w-]0\M "U򢑗xb7g*x,괈i`bi(8%}~y<\~ߏTl\l 306zt:L&F|>W7bHt:! l~FfbQv ؕrS<7V-IZ|;(R xJ8.b /z~Zz}/Y˲^TwaORf AP}jzUU=G@6e3 rjͯM ǘ.˲^4Mr2DOx0&!Lj#O(H$MӼdžp j%r"piD bA ,察ě>?n@ko/okIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_checked_insensitive@2x.png000066400000000000000000000020771347440174500322000ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W[OZA"4PC[5&XjW?ۣ&5X!Hm6( K"J7gqA/&ۙ9k>vss۷ z*L?99 \]J۱/'ƕ+鰑B**D\:,/A]9v&xRzffN'lܳ(P*-VTP3XD(`H[F0ĝ3#Q{s@ pp %DDv!߿f7A!Gާ'AߓqW<'l.6A`@Maf)bǣ@0 HXUJK_KlqL/k?7M`d<15yAūmLPT6X8r^o`$RӭqWt6+ *bV@ 3frA2Q6-6$ŒɨuыxY7[VcbzH:|44>,z+@@IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_checked_press@2x.png000066400000000000000000000027371347440174500307770ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX Wmhe޳sq0XȲ>)*3+2*,+V ѲSF*BAC"(UQ} Yf|<]>{W羯xߝ7Yu.µغ#SFVkKp@sh;Uep\ G9YmЍ9-Q:z+x_+D*gdHJ.؄m(Nc;=u]”R6]ƂڢG Éx ~~FPtc;w}w}X"_:)yFێb=R[oW,J!1gꧩi؊Pm*\&*/F7aP$B`otcd枍G"T!ݍ{NXHL0TNJT.1 ` j#t_wCz@ Vxadʹx()̓}nZ+[Zro6(-3=ΊC !0"t '+`-TXq=H߆iy ~BBƝ?Ua+; 289ppH%~kWD kqEp*Iv 1FO'o *6<7glB)Kvxזs7YY3Wu]qXs 8"FTaڮd}JG]DگVr ^Pɻjw<2]hâA-"1~>glŨbtw%KNC-?6ӁlTaBedô.^lg݉ 8Tb+ ۸cXLBkCl?ܱM[GYM`}Yh#Y XPfFӆ"k~ }CćNwKh!xL*l3'YzȟU$+_|"!ÇCcMY Cc>TI@s@d熠 (y 222+`{(%> RR  "b4 y! - bYLjn `s5'!˽xz>=0qp!,Mʰ@,3\B 6SIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_mixed@2x.png000066400000000000000000000007211347440174500272720ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W1N@Wvf+bIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_mixed_focus@2x.png000066400000000000000000000010201347440174500304620ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX c`[-my!Z3В\dKsbWt-w:<D-w[|٢ʗjHeKŵZ+Wgdt4 f<@`?0EԠ%Ev302J210 f8(Alϩm9\ Al] 6`Ѵ0jNis8lp>4uhJ]/*ŧ$jjj6< J$4u<{C`!`:Am8Z~v扫 PD̆`$.\j@ 3A-c>lxA]cOwۨ,Ɂ,9\W} 958I -IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_mixed_hover.png000066400000000000000000000004261347440174500301250ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`02PR`2v,` ]g85QI0&00H2142]X @jAzza`$vAX!E{PĀ@b(F @z#(y jz?÷7 n10' fՍ |"w q0635$~31;<< IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_mixed_hover@2x.png000066400000000000000000000010021347440174500304660ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX 헱KQǿwgIbAR ֤ :FH MԐK45$ bw|j.y&qw=z{/( j)Ϗ%v3Ǎi11yD<0 ʀWѲ#~jXf GDr/:(z>P'6vӈθ,6]}IF.DmYdJ))y߹+'E&L)e_CAAcO 9k;il'$I[a'&};Q,W\.zFf%%odvRp!r+|ġԤ6d)(C 6  De.a4E^s4I ^ iἸ KpGg 6ŏ/kVUź j$%5Zp,XQLp-t`̈́֏[R\[2egg৛.MEw~ ~_{/% .=\3ڽ:(KfJdXr-ЩLޔad?8/Ho\$7@MY Q!s`nR'QIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_mixed_press.png000066400000000000000000000006231347440174500301350ustar00rootroot00000000000000PNG  IHDRagAMA aJIDAT8R1N1 78x'P'^ (OHt Xfq6 a;'و|=J$r?L(D3v0&ҦsuÊ~ d6#Q1=`}DMreZށyilrm1-ȁM$D5jkj@}=l^Ol'׳ $$4ű-Id8խoWz"oGhwܪ@qȿeA@EYG΍& ;`UyC3H.Duc{"y/;1srM/3 gyn;f _g[k.IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_mixed_press@2x.png000066400000000000000000000020061347440174500305040ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX 嗽nSAw(R$R PsgH /@::-H@HMqp|og=e=3眙]_;rJpv~}ikBDJL P*Ǜ>mm˹tUCO[g7ͳ:A=^MDɢ)[o`d[:fM4dX~uKJaKAJB}6͡he 2n`\ nϐ^:djkTcӞDǘRo"D4M7D7(@ݷ %4qk yib!ۚw g Zo'XPoe1FCu9NM[n <˃[^z).>WsuB#b|S PT:_YI&jמy z\X<˧ȅiQ!Z.n #P޸0nNta[ sÑz<(ХpBć=s9  zsCD`=;: _x|f@VY[%b[ ̎@zèm〮YmiDh" ɜ .4Z|@$ 񼧽 "⪡x,+hi@<5?dP\ǁS^"Obޗ/ ]? 0|ywiBSď(JA|`Hgh ugVގܸkwM <Zεtn7{Wklq/_b&k$G cO6l; (y 222+`{(%> RR  "b4 y! - bYLjn߀WTCՂ4%I)L0CԲCY IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_unchecked@2x.png000066400000000000000000000006541347440174500301220ustar00rootroot00000000000000PNG  IHDR szzgAMA acIDATX WAN@T;ݙ^x t 2܀. @luцɗtcuљda}o8!cӜmچzi~ 3jXҜGo gEB> P-=w]YUkoY}]j'I\axy)a$`Yȣ(zi4Q E"v1pMܺ75 Ņ .S ^-H8<ӳ8s9@zpS3l.Y @N12;ҫc ([SjZM̲X,#[6&5a/G3yHwI3IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_unchecked_focus.png000066400000000000000000000003771347440174500307510ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0v߯F30H3#" &aX@AeqlNj3@6O= C#P]%XO&@v DMf:ylLzh,x0= DP0hZp*AɓC@j@jAd 2H?ERnE/:ZoIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_unchecked_focus@2x.png000066400000000000000000000007261347440174500313210ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX c`[-my!Z3В\dKsbWt-w:<D-w[|٢ʗjHeKŵZ+Wgdt4 f<@`?0EԠ%Ev302J210 f8(Alϩm9\ Al] 6`Ѵ0jNis8lp>4uhhh"WP jѪ d3HԀѴ0av@8n K(W 65LPd&3* . '`d狻mnZ@ w_l@.+JAl$%͠ ѩ8IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_unchecked_hover.png000066400000000000000000000003631347440174500307500ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`02PR`2v,` ]g85QI0&00H2142]X @jAzzQF@ɓXV  Qepۏ??qf5ndɍX35+$~31ĺ1rǖIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_unchecked_hover@2x.png000066400000000000000000000007221347440174500313210ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX 헱K@_j0Č UqNn'qrqMpqrp H&PCI+(M^;ŦE%wN:$1.Q >,+*@[{$^.)7MǚERBxAyI)j2߼蝓"S D}T̄3`0 L&I%b:-iowʸl" m9=5K]#6qȟ=T5=xp{DN|' LJ I ʋ1%|i61tF, O*8ؒœ\+nAE{ /K/wyz3IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_unchecked_insensitive.png000066400000000000000000000003321347440174500321610ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0 H1??G ~b xBtt4ˍԀ- G@`AjAz@a^:4" r@= qN4 L:ZH2%IAuYOp@`IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_unchecked_insensitive@2x.png000066400000000000000000000006151347440174500325370ustar00rootroot00000000000000PNG  IHDR szzgAMA aDIDATX WK 0LQFgw9z܋{ŕ"XgB,/F֘L|Q߇~( MZ@qօ$s @@W. =L\_8!VX'I2 p* iἸ1ɩ]`XEݳԈC֗5WiO' 0]zGYp4YEQTG,T~ޔad?βlV'"s~"'jN& 1SQ?P IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/checkbox_unchecked_press.png000066400000000000000000000005751347440174500307660ustar00rootroot00000000000000PNG  IHDRagAMA a4IDAT8RAR0 ||ϡ9wz26hFҮi߽}5{W|(c;30X/j"&10 `дw(@zD#f^!76i lc7*@ROۦv@sFZ_4q5QnTt8<3s󧐔5-tm*G"𶁀7R(j@pXDU/O6Еx8~|x5)A*[`⡥(p̑dؙ%/y+ nf ]oqX#(AQGC~@oƙjo;PFm 6 qkyqGJXmMyy 7YD>94_o.(G>>hnmT'<O)bc8|WSx9֦U"MNUZ1 *?bb݀tb8S߁\gm 43_Ƕջ8"|WEí;Ht~_ I*HX ba[G)Z#HZ_'ښHp"l^:NҠԄB"]yD2G6Jp0Q0#&7f4&z22|"'@r!O=6<+gVn9B2?yد`aN΅1YbvMߺgw2[k5& |ubt$)+YlXn!r ^1gYx7FB9Cznn+AreSis!Y5 pEёΘe `#j+48kΘO\A0V) [%in$).\bo#U C+j'?Leɤ'gIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_checked@2x.png000066400000000000000000000017331347440174500270660ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WKAޘJ4JD ^b9K7k{^o-^PHJ R-BI "-3m2ԃ3e] (ס߃ڍzUU4OUnz<6S"ý (tP?F#`Aa:>|h4lG B^O}]4 W0~ 6>\^^222R+p*NlhhhD1p Mcggr78 ;X"dgsIl||i'IlO<$WAFv~~~mR:ԕ2ض-%vmu< l`x5&60a ǣ?J8;+Պm&'''ڍL./-X 5x9 \In l{+ .+L&_McRFJ lT}Π'!uzzy=:B81͛e~0hl6qxxd C?鯝gmM9qq1{(81 b/}'727X]]j.\uVF{Ʉ)+ C pv 3&BǬ&^8sU6ĔyaMrZsG/bRAaZN]FsO5 z3cB㲀ȹI ]]1 aIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_checked_focus.png000066400000000000000000000006631347440174500277140ustar00rootroot00000000000000PNG  IHDRagAMA ajIDAT8c`0_%r*P;@8z3~FփbߎǷZyܛ żJfaL\LY#f4,LX(P@ ɁԀ 9W~(L 4ĚSŨ]&"AΆi644d=}t՝;w΁0 g̚5THH(QAlDʰ) )bPf]PT xF#AɁ FFP<u{n_0 Ƀl0exلN@j@.)$')2l5/IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_checked_focus@2x.png000066400000000000000000000021121347440174500302550ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W]HTAs׻4EJ5!*H )@ɟL0(ا(I0H4!Bb0Q[]r{;ͷ6w,|3|3\pUIB" *a@f@gDJD/w&NR&tW2B+C_'$Ei$;edǩς$b3sw3=xY'<3tL%T  J} wmLIͼ,Dt WH}Vv]j^KTU7_kn`'RX!nF$Lx̊D\Q24-o"7Wj*npCtm:ˬC>`ߜpl\+X[ 7ǵut6 gxjX}s-V'2Y5`k|LDᩍ]=h>/,G8Wq(#l$Q1 PLh1/HU0Wc b!G9c{\aU6Z $cuֵ(L,gʈ,$Я# Q5pA|$#jlnu?Ԑ GIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_checked_hover.png000066400000000000000000000010761347440174500277170ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S=H[QˋşhI@CşLV08*8M":t֥&.7]ZhI,TAQS$O6{7Q{9s9Onn(,7Mf:`T\\W}_wc!2+yn V{-A1O@؜_Ɯ}eB+Է}" ~n~L aH3۷*m`lDDr$ˠxWoVwcZn Y’#Y-L:E_c~#^/'``|ssYw| #ǘ'|R}T 9Q>Ygi2مqT|u ??<:Y&1I\zd_ԐA"iIQm7`'{gr-_qae0ǹ,@9P ;N ,JXCWLI,l j? ٲSq,o]pt"ү[dIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_checked_hover@2x.png000066400000000000000000000024751347440174500302750ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W]hU~4mβHMċNPAa Uqwc(tT!wzVAz!Q\B\if]m.Lq|sr5IZ|cVGs_tF;=mB\DL{4a#X = FK A{9Α~'57Ua_bSᒊ'_Nީa bb\XenPu.s  wĶV9^JaC#Ehb=‹Еjsq[,sj$;}p|aU.>~ { QYBV\q[G{߼t^owd5FTZ D^G`JyN2Sa_6~lrSL 藊jffQ[M.ryk\,x'3 o7jk ׊qFcYF|Ul.^|XPm"'Vk5؎\NU wo5>FmW\DW`R-CY>պj[5mī˜lOVd'xOG__WW>~5iHL 4rS̋@=8B->:+0Rߝ@arƔiBSYv6M󡹮SN<v8~뺖`NN#.#m`pAZ|g&gLGXp=`VeěvIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_checked_insensitive@2x.png000066400000000000000000000014761347440174500315120ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX Wn15hRH[!ED/;čΝ $T*KJ9jpm!&7^⩷}7`6MBϨ&IX,>EP_Crxk%UP$3Bl2JFxxoSv?x/V&:`B9(WZ]t<~lĹ@(_Db>%O0naf.w;hZD̚nkݓE8 -sxpzq ըa*jNۏV')d BW!WθQC5k_7ykg_짙'5qU@\rg%(,8KΊ`þ4d IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_checked_press@2x.png000066400000000000000000000026701347440174500303030ustar00rootroot00000000000000PNG  IHDR szzgAMA aoIDATX WMh]Us^SĚ"vUTDTэ. ĕ WRpFԍPRTŠ ԶRkS6i!!$}swkNfo9?ވNdW]~ob<P/_JU2=n&)R)-LLdɏqE^ ոe't}Gy/P0`, Թ/y]찛 ZwAq&'}]zJ\345Y9Ĵ1"'Jlםϣb)%bUN6Ylac K4bIJy":]vvgAX. LIrL3xnY˜|GI@&Lm´R1S7rb4Ln Z@[ـ`r,cYd#[VܺwY}b mt)Je[sp)ZJxw=AS=[D^,2ХrzFd70-%C9-ߛ[_.y&6"4MDO` y*pxh4 J@kahm'!ÉEh[6Kުs!yܰP,O/5kƦН {Z!V'۳\M ؔ"-aN5Mq1W ]!0_G[0&Hm?b̬n.~_8v29U[׮! )Uk2Bd7g,Xm=9#6D-ʥ(@*_/f09zVdVgCTWn1=A hږ 005á00ô4 Ib،û Au#m"⮷uoK| ϼ[BF>3 ?<}͐űPӺK`%(npPx1Zb,@sSxD꥟FbӜ+TGB`FB(.ǩ>!t*u^?{ru_EH!Z1Sh߅ nO]t,-Riu5ܹp.&bAV5O{e畎f.(B%83مFu\߰mKNbn *\rvvԫ/>x'/b@6Ė<̜,#|V5J[ -0B:M̧E@Gw }=cEAmtRtskgGϗ&p112{6m~j+4}6oxM[Ǧ 2!p܊ CxyYIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_mixed.png000066400000000000000000000005351347440174500262330ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0?PL偘*H?Kb` f)Ǐ._ŋTDFF0{h38 iO9st 00HjB?@O3@Z `/9&@g ]A#wr LgZPejA3`Jj1ĂMɹs^xQcmm=Y AHgg&P#䱉 Z ^%` L@j :JH'e@N̄ r8㫡5 IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_mixed@2x.png000066400000000000000000000014761347440174500266120ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WAkAލ -b4z ҃D{oО,C R 5j-3˨k6!ơ}Դt'\.`C ~ v-pK;B@|? cd!A-`0l6v}h4^Wd2T*u G{"7Fp9_ZoBa08P kZ8N?CL!u0Kp~7drt:?ʺdr^!אV$6mc9Z":Ͷ:2|Z}Cy` W- }Kc8W=VD {s|F=:ë #' *v.m  w᜘ I`߮rmWVvb 0jljcLZ k'j]*ls'*QXLa\\qER:Uu\!#9`;63#[љ; "Ӕ\)ꃩ6 Gg,&ح) tc1_:so6YZ+m4 OkV2,&v9ZQ $c]QnT!,-e$A݈A?&* Af>_x[[ubL~IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_mixed_focus.png000066400000000000000000000010661347440174500274320ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0bӯ_F_ `yF6_ฅU9?/[} ūxwAp~0E_`@sxz&6NF66KA@pt\ۻ{ג%@E\BJ#ك@j@U_k3@j@jV 'v/> 9'>_s $@ 5Q-`ϝ;|ݧѣ0wY _p{dI~722R p;&K00z#VX!j01片 cQ"RR ҃":_v(%aH H-L3 lm ,d6RnoS@jjS?`qff FFFs/sl$V΍@Ew/E_!&)+CIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_mixed_focus@2x.png000066400000000000000000000023671347440174500300110ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W]lUwfwf.iSjRh F*>HH!lC61$T1+ Ƥ>ISJ $ -߅X~t?%[ܝ\ϙr%1$ι|s;K]\ IGH[DHFFx*pwu#d9a,6R4%o7L,H,_UVBi#cLDJ$c1#DNF՘T$oOY <ޭ1|TS&N޹qN^>\ږisܒQv"GErW'%t L 8{pP{`tpqaSGcyT1(Yz5BK}D'(RVҎDd[hK'cfX>j,^ԱTpƺ&b`!>O ?߻ZG$K[P 8D''͘hJ`"v$^-8׀7wH昰%b.kE͒Et3!]ĺ8I@cz4FB|4' ~B\ &xKEub\E?<-cNz$ 7E붶"}-XӴ;s+Pu_ @ l|2ľ @#G|r7+ޞʽTRe<9RR`Yhh]˗ .!o |Fkk L940s4gMm9b:4缴U#11 K2S< "!4b`=xwͅ-;NT+WR2`+.~ydB8 _G9u:vß؏ѭW~u r5QLRj@Z(7Bwя3[Fhc ? g]$WI%Y 3+ہ*:8`1gDn;LIq?:4`wE4xd 盧8[׋}z'Թap ./BS*ɈP!YvTZA HFfygKT!#BŢC +%#XyL,U$Wf*B K9d(*p o|rA dkV{rH2Z2"IQ"s5ӯHk1"qv hG`:anMVh'GFܷ D2Ec)T}J Ⱥ C OIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_mixed_hover@2x.png000066400000000000000000000022231347440174500300040ustar00rootroot00000000000000PNG  IHDR szzgAMA aJIDATX WMhcU=/i4Lmb2:NAQtƝTA ;7t7 ,E\t%8t43t: ?L̽F}76Q).cin+WjY28F'Na$A47F,n%Eeu[[(8ΕPwƆ<<13ܓSF#} ?IDMGQ{߼=FWw%'H=8Fb">$"7Ov;(n\.k?L.0 Xah" t(uhv~ACcOY{Ռw\3pZs 䆉?0űͬvӆuͷ K2 =0{9:j6a KղM2et;jnt/Oaffᡱ3dIxH^pe[\⤅{w1`x VuŎ wnqW3-lZ"X3'm i}18zTiծж4#TļeBxkI!a;.SMƠor Ux~rpYp+@5%ӬdB_&,a!.qҬY=J&bvmf/lqKȶ4zl[7s>v "͊ 8l{ąYD9j5 TKɆ#Z"~&@P`NtCV3a&C@S$/\oo\G("RZO<$5-ךfyY3{ATs"TY|_zO>xǾ?DBNr'BxLDyk$ x$lW bk\79n /}E%kV'& :aqLbq5-o~v}[wQ8,@Nޝ >DHʢKF\"0:IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_mixed_insensitive.png000066400000000000000000000005101347440174500306440ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S@ Z02&|%CǏP)@GcgBMpc| jh♟繆jE <@u1Cg<븮CȎ ?DC>TQ;r)D,r HFILJЧH,9hsmyTX͠mޟĒCvf8^J)eΘeqc>4W+ GZk DzHrM@䧟8&Rw hIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_mixed_insensitive@2x.png000066400000000000000000000013471347440174500312270ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WA1˶vw[a)\*EzT<%=^œE/`Ѳt;,MBf 3:x>d&|Bw:aVŏp_31˅(@R!CJ+@y/t:d2ᛋZvl6/jkq.W4? W Rt XgU7iv6 mM-||~KK K?i"kYnTT6:2 m"l6+ O5F=j~KNPbĆØޞ[Mp8 'OMN\beb4+d0 [r.0 [r :f!6:g'u:v=crGR?n9Xt#-)"؆}AChb\\+b #1 %9lL6b[J.mT0Su]OՀ1UmP'Q^<7iXvbSl0B?q =YK ua)8ߕ *"Fր&"2 0Dτ%lY }IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_mixed_press.png000066400000000000000000000010411347440174500274400ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8R=OTA=36nAH06|X #-\k5;DMtl@ :caavf8gfg٬νs9޷o\f^s+h:g::PDTg-pɌpIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_mixed_press@2x.png000066400000000000000000000026041347440174500300200ustar00rootroot00000000000000PNG  IHDR szzgAMA a;IDATX WMhU>w~^SVkE+.F VFwvw.*EP"EAp*ET Ň"$)67;sϼ=p{ϹLD!?dwμ|$t]=uWk)m9wr9 L dB=}rU5ovL{/O!C`g(c7ʾ_q|Mr߶ғS&5Ylo|Ȝ|RX?Z>{}} 2r)?K&Yl#.9 p@.mH宵`t"y `XL`Z$CM<21wړ51JL譕%W)`y$$Zlc1f7ڳ- +n+yޡ͂fm:t"/kyV_j}tPe+; ~9.j -!TCd:"|{!4MWo.?y+P+ ĺ(nPA.z_pYFa94Z^iJ[*C3c:ÍKƌ[c~]1FD{( Ok":(FS!Ȍgfx2Uk97Nf5,Q@1} 4j M"?ALʙ"*?N#(8D22E"-\k3d)g³Iᣅ؀Z!Wpm'hl_?—2d<ģ"̠7sxd>(;Cɝ=4v;1R' cYk"& G\be,b1m39|xrc|D0'` pĥ b=8zȪ7ǧRT" .`z:ǧ <@(nxԸˍTZ^N@p~1g!ngNdY]sgq 5L@Ȝ\9ybLE'sFwNd髷ڣoWv%`'sG9kxSDk_xgYXrPО1YWwmG<~ˎLt@+MPi2m {-\7X:C~Sa/ٸK8luRκˋ'{?›O_3&ƫ9Y2hRfz7dg\:64u Nbi'"1O{NIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_unchecked.png000066400000000000000000000005521347440174500270550ustar00rootroot00000000000000PNG  IHDRagAMA a!IDAT8J@`Փw"!o!@»_x@l6:?̎FGm{``ik C]EQyA`(:B*t %7Miw,{SP2쭨DT #sO0 _UUU QOvOq#eY⹑\U=*$I20-WV/hnYnV?H]t?QvDcǤQ3^cu$IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_unchecked@2x.png000066400000000000000000000015551347440174500274330ustar00rootroot00000000000000PNG  IHDR szzgAMA a$IDATX WMKQZ4Ѧ.%Bh@\tS.1JU0jlbibKczfI&w͝y}w$鮋j5;OBǠ`3b)¶%mcfBK?@ PZ-D"qN+XZe‚<777 p\Vu!h D+o&?M Be8lmm}^[[;)J ySaD18 fL o1adiiigoojЬ݋FFFF1DULefI\#_8;X,l΁ID$ ^ҿ5_^^ԫsb# pO҇&ްgccc5MT*/x5іuGt[v B'#(q>l8:::s9D=l 0J@0"zR2v7n1J:w@dss6%0@K&ud1WKzQon4A ))Bfp ك?Ƥ~ 1Y+C[[d&+d*[(b-WD"OET h/^UlX Sh[XO59׼J{b0&OcCh N[1O>; eA"j&8b@= qx<縜|,BDTC,X6Mw;W" Pƥ2\%A "Y0sH?wA>TaIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_unchecked_focus.png000066400000000000000000000007171347440174500302570ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0_%r@ d2eϰQ@d=(߹~|;ީUwϽƩle9B$dClf?  Ha*txfX쟗;[zL 4ĆSٰC]&O?~ ! w-ȻJ@| > $@ ~*`B }3o񥷀bnMரS:&YFC.H=&faj4`>n&vn{`"d(A *gĜ̩h<!*-Ǭ9 'R#,IcO4 5Y/ +3$)ҸYIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_unchecked_focus@2x.png000066400000000000000000000020371347440174500306260ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WkHTAȷYDU&TPB?ATPԏ" J4T0J(BͲ(r]MW՝ιښ[h`9w3\BBDzeBFF)qX6hD6J rw㌱roJ6nYD#%cW);Ur{U" XmKN"̖ uP\@TАO[a / [a=m%#o>uxਦqB|1b^`M),(EHQ@[ 3_PX]wө7n69zsD4& DL/{;c S\ h̬Ϧ6(>2{8?su2y1iG |lv\It^).IuF7kquϵC<=;gmJ \^,@`;\IĆR/p gFDxwΉFD N\%&˼eܹR8 ֢gZL_sLHDXq~[lb B܌:i.l.;![¡4ORN"`Z꫐ڴ<$%ŧ$Ꚗs(ُBd_pr:k6ΞɝIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_unchecked_hover_dark.png000066400000000000000000000010301347440174500312510ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8KKaKČhb+R/ EK]Min RF ]Fj2~g<9gy,?Uy) eMEF"4~>py= GPZCZ&4K@`Nma+7\?mU7OncO,¥ ֦ɨ-ţJGI,B $;bCy4zRk{~'"9\X?hz:s9 >7kO>k^șMZݚ o)G:T<ѯ:F 7d!SMqΨz2˳=B A=E 1Ad6D9|({b IvMZ[,Rivml{.mm B=E&4ذ<\< _aeiVtoNL@!se+J4~͈lL/b/FC%"4fȌh C6#a<1@K8FDj`wf:E2fa|$6plGM[@gx?8SĽxveض %A7N}xmlOkx+|q|u2&|'K,!:xry Ǻ*Ź$NN>pj˼ây1ȫδ4C(ioܸ0!ɬ[Rb&*Omjjv=9DJL)J,{t.-Ωk].E$@+tdo.|'>Pk~LE[-/:sEgnnEEi4>UL 4vCRFwUpϋ=yO\rpywmk8RqXvM&I FQvS4?jCYw,,\Zg7] $q\8ZBwjI Nlc@tDNDVslsL~FbLI](:oAwO O}|[ktcbL}UdQ݂/EE;8um`?y-~-0"g HFDZų?~K,TW/8G@PLGi!A))CMAป Ji[ ~J?憟| QXFX{~vZyt1?tpMB$D`R;XNi<|C\\G{$({ׂE`K#ƒobH@͛.IK 360gn[ ̥j'T|_ hvH ɺ;_?Ss6 u9IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_unchecked_insensitive@2x.png000066400000000000000000000013001347440174500320370ustar00rootroot00000000000000PNG  IHDR szzgAMA awIDATX A@e-uAx)؋x7W?IAh)3d I&ɼ̼Qn1}?4+q/߉R)i 'ADYV[TBȃxY\rc6Ee:j]ufYA\s_,_:G_(<ZV0R>%\qw $GN@*{I/@r$DBN,!D$ʅ32$0 $љ;:u*e*tW:9dbUT0TN̾Mr4QvqPZXESLɏ͢8C R%(~,s`eLU42;9CrBgU!`E[Uf{)5YBó=E< Ӣ̦L>DUfP$I8l{s}֘_|*/Et'q=ovA;kk283uv@jo6vI:çd579l-Ǿs<~&X,XNqvL y^nwh>%m* LFBfYlRC߬ѱaRՔ_.~1FnEx->oK1Bs"O ?\VIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/checkbox/radio_unchecked_press_dark@2x.png000066400000000000000000000026321347440174500316450ustar00rootroot00000000000000PNG  IHDR szzgAMA aQIDATX WMhU>wfkbhB41e AW.\ nܴ]tEpcɦ]QWH S+BĘ[mkZ5i23;sϼDSns9̫uy'2V yxs2~62y񰻈~#7R?˖^FAAl7˗Mnho,"O3 &ԤucIz>~<䮙9s-rW[2Us,&5Of#oY{ɹMN\x՝da]Wdr#%ı:8]* >R7ȗFSjliPh4ae4bLb`|= u)o<.jHQ1"^J\ZP@  x2P ݗ3uN@) t)TEBfJ pyhdI&C`5!, z1&A^ڐEȯ$m|$$+Lj"#T[MA6{S!DmBŗH7IIK[I@8xR ]Y? XL1 |X6D,a˳ zy-I$Z9~E4;n $[`}r@j'(Z xVUf_"mǏ\0Quc:.q/tN{ "$1a5Ww~_2Ov"R3Wƶ{'&Cx8䧩ߏ^g$7FSN : C:#Qy=RCrXpӧFy01sܾ}Wt-w>t_ݎcD`VLODxdl2;XO]~`b51J=I!=c8Cg{z<#i2?\>xAҩEXB LAEp }`ϣ1fιADn[6YL'&CM΍%#ɉV!e}ȳ3.KhhVi@T:, XO8'y+ql#IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/header_arrow_down.svg000066400000000000000000000011461347440174500256640ustar00rootroot00000000000000 down Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/header_arrow_up.svg000066400000000000000000000012721347440174500253410ustar00rootroot00000000000000 up Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/input/000077500000000000000000000000001347440174500226075ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/dark/input/input_clear_hover.svg000066400000000000000000000026601347440174500270440ustar00rootroot00000000000000 input_clear_dark_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/input/input_clear_normal.svg000066400000000000000000000026571347440174500272170ustar00rootroot00000000000000 input_clear_dark_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/input/input_clear_press.svg000066400000000000000000000025511347440174500270540ustar00rootroot00000000000000 input_clear_dark_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/slider/000077500000000000000000000000001347440174500227325ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_handle_focus.svg000077500000000000000000000037131347440174500274560ustar00rootroot00000000000000 slider_handle_focus Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_handle_insensitive.svg000077500000000000000000000037171347440174500307030ustar00rootroot00000000000000 slider_handle_insensitive Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_handle_normal.svg000077500000000000000000000036741347440174500276350ustar00rootroot00000000000000 slider_handle_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_handle_press.svg000077500000000000000000000036601347440174500274740ustar00rootroot00000000000000 slider_handle_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_point_handle.png000066400000000000000000000013471347440174500274530ustar00rootroot00000000000000PNG  IHDRw=sRGBIDATH U;Ql4Km$@ߡf !M( Vi B뢄`o䛽 &gΙ;/,n:w͛l;X,cpCdGm:kFNNsF@(nTѷFg|^t: ^ɤf?íwL@%_d%F] wOTz7 .srhDRl^aT.j-1Ձ]R(FkO\. =G*x{ノh^G-ohTWL ȗXD"n8~ r}V 'GTe-9]ҠP(gYIGkX2Ob:ekTw=H^.7J͡Ѭ@z%QE^7o;WpvF@JQ[~> 8UuLF(ɃuBL=ZE\\IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_point_handle@2x.png000066400000000000000000000034501347440174500300220ustar00rootroot00000000000000PNG  IHDR00WsRGBIDAThYIOdU@l%F;i;(alX1MoVv[ @#b"@hP3qrPē:{ޫ2eѐbE1^YT".-dMttԞ%[XX⃼`rbb`)Ya(<\XaUcn擉)cXy؆:^>>|ɓw>WQQq27ɔ&....899zff/-OE/: BCȱioo{%3U mkC'8VLX9&4zGTV"i!@1p͂} 6aKbu  Y$ g^J\LJ5`*0E9C*1w/SWc {|zi  zD7&Lig~W1I#DG|NF.V::E˅]g2 MQFҿ?cua:It+RP0v 3L]`Pr!q y>HkO19udXiB?v ŌIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_point_handle_focus.png000066400000000000000000000016231347440174500306470ustar00rootroot00000000000000PNG  IHDRw=sRGBMIDATH TKLQ'BcPBpKD++,tэĐ….pcDQnЅ,d݈"i;3:}36M{,D.٤PYӴǙ~dͶ-Ir\ޠ3^n1I4g? :9Ԁ&uV]:i,SX,-OupbWDsΫllt $ε:GM-0pJbޚ =e&jF64(aE)"U(6ő˄p_r!-sOP MCChz:Q@0l KBȉ"*$M1QSL7=@(r? ަZqWYwa `T}$"LKZÂp:Z`X aͿ+{o^_v#,Mo)!s6<1pV1eSˣ#\9J{aM͋\7i'usם u֊MRvѤ)ƀLġWbduis,tRda[_öC}ݯœ4Ȃ˖-3z? ]q1%>mK$ÐAh^*/,Gr q:UgϞ8qGA$CK>9 c#N#"Ur"6}",<~NM !B`8C݃i/$)ALJĒIBLd͕~~s(mܾz%w'`ۅ)H Yw-bF-"h ɛnx 9 #&8i]'=IVcL9Ot]atDXm([W30ҼR ͖ZXv 'H>$K>|M5?u~`Q1$u"I9וCk4-I8eO Oxz< xӎю"׽{#O6 KW^q~`n!JH\'-[S;]`(1BnaI@H B|)^ ]MKpHQL~d\'u$,.)"S "F"Fɹ}}N>XC.Tn/@JZ#o#q޳H^>N5ȅx-U$#9ͥ 3i5N ):!"FRD8$_+ 9Unƅ|*>(B=CN}]tYBM+-.iCS N`]Ns6EӼUv,<jA!d4[Nz.jMWjSJomƿO5i@wЍ>$?Ӕ"鵲<7 ֑znbM`m*^$g-u@IAdC`Zk8qA.Xmk:]pj*[-[!CDa pvqmy.[BPqܯiK򍨼108aTCZD{FFlF]}O_v#SS{4FMK̋ 5ԻeJ#a+{ iؘd*>8;X;簰QDy+֋jXc])|%8x x87d3*EgZ΋ 7K7+zx:G6{߃ M jinQ:kn0d`:`0oR~ ZHn}HҙF˂[֑7n.`)N|jNLs6.Lk;]~R9Jtvyâ{b7r7_D4϶zsqmP^7/\ovME̡ݗ>s]h/j(_dɯ3yM8xPɁf49azOv&@nw'y'` 4= ,P5qZR.Mm* KgDH6 YYF90`$f%4irٚaXF71Rļr^}$`^_C6Zַr ZTjRnt:[ 9Wrw d2i2fNtG L{DwVVVpu_iY6UO)7 fvAxM4"P5N|UzgY9ll󎭻)^U!`0\j1mH|h4~BAkC2EpB'-,k\8/?J rO$)% ~$;KֿTb&`bŋIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_point_handle_insensitive@2x.png000066400000000000000000000031701347440174500324410ustar00rootroot00000000000000PNG  IHDR00WsRGB2IDAThXJdGn[x 1B0!7gH$o$m//Qjw:NYUtk6T]{ڷmVcYb)}JW7O%եuW>̰2MTy.F,_=Py> PyuOy.k\a###_6۾z^NcCU%𤋮ǂ7WVV7@Z=,0y}aai:_l\vCNĂ-1v~ߚwwww= 3L\paI,#`y*N>2/Z3Nec"24dJC̃AvS,Lik\\f?bhu{8gD:R]`;E ſ}3::|̙3Unu:%q> D\s|¾jCe&A ٧t!l݋uLKrO٨r1Dcʉv1sӫ|k2h_W.Aiթ0!`ٌSE0NFuCc&TĪ7`yq_%V U Y|AiĠ0xi6Pʖb&un͍ & yЁTF<| G +szaA^"v͋GeSnK/lؙ=`@2/&<Y\F,[ @`H'N.//'Sި1̮Bz(r?6WǻɒC@n3MFtmZm=W;<<,#}>@ј%HBƐ[,M (!)\n<ËVDy 8q8.4 cb0Fn~&9:Voup|LN.ump-@7@7lfLiN}} &Ђ\]]= /Cg6:G>,W}tfgg1oColl|dF>n@;^ֵw$-[` mwtTV@ߪ"6QFhEy||| d$gE< 5:~pː.6JV;%P?n t &v7NYuՎ~fJ>}1( #D-?6J ?LktWEqSSS(mtfL'We챐Om`!#)OY)jƞ 7=!9@=ig@h*'$cv²8Su;br`Ę@jOtIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_point_handle_press.png000066400000000000000000000015171347440174500306660ustar00rootroot00000000000000PNG  IHDRw=sRGB IDATH TKQ?Օ]ɯ"?0m§50 ^ W7SJ˰֯Zw{g;̮م;{~ܙ!=HvߑPLgA?D$jp$Q J7 nZx%Bn S%sb .%LÍ DyV^{ҕgcojN &""LVq5]{ug4PYV~G$y>۾CC :1N?;}ĹcESIk΂nܤĞ`#dĮwSa mxXD9Er1vf :5Xw*eG]"fHb\[#0?p| 5nаx9Vՠih9wӾʗg/cѯ{Wڜp hAT,~\@KA0{ćHc̴IƵSI퉷F+gZ.ow4 k4u55M⪖ $D=/δVElٟ^ծ:޼oszrGo) fݢ Ow` ;1~ `1z6~?qy{IFbqYXVVfy X,e*ean}]%r{Nf%O7g-_yə[WW"YPBw0v4^o*YAkR4\4Ag;#ƚ2.XVSa=/x4IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/slider/slider_point_handle_press@2x.png000066400000000000000000000041531347440174500312370ustar00rootroot00000000000000PNG  IHDR00WsRGB%IDAThYoU?glExPD 1'F-! &}0x!T/%bȥ@mi;̷v:3ۢdw3V-]e, ,+7l"/-<^ccq|e(LӺ6ichѽspGu{n8P K\JDaTI$%39BB\ƼE#汓OG0N&V'D78y@d$Au@ڏCTeX( 84^|d*M'3WPJX})WrrM*$.iI1%G\CquN{cKNfgy !KZbh(&beD'!$>’ ݥ`>rv߹XR䑔cӿPAhYZ^*h2b'dn ZU|8 ii @vuf]J-R(O_O%NsЍl¶ҙEԠ{_  '< %5Ò1z&% fuJfeh JW!:4~C-s.>ig5-ix'M`<1W_ GЍNu=u2h6%ϴyƛj>Ҿ-q Aeֽ6[1ՙ$&|jcM6USCgzCPNAwKw,0=Yj}G+ׇ-ityF,/íUō&Ԡ[*&i8Lۛˏ}^C=?i:VsG(n٠ ƕd6`@b'i@&j|([ځ`VLSƘHC'γpK&nMԃ ԅh\7(q憣C7n.`B}g#A1/5|K咵 眰IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/000077500000000000000000000000001347440174500231325ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_down_hover.png000066400000000000000000000002211347440174500302720ustar00rootroot00000000000000PNG  IHDRxUsRGBKIDATc-}FF%@@Ŀ@4L$ ?8,b" * '\'LFCMʆA4HLSIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_down_insensitive.png000066400000000000000000000002461347440174500315160ustar00rootroot00000000000000PNG  IHDRxUsRGB`IDATc|߿?+++f@ݓK2$޽ Jſ0A E?5$O\+@VdIL n߾ 2f6IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_down_normal.png000066400000000000000000000002441347440174500304440ustar00rootroot00000000000000PNG  IHDRxUsRGB^IDATcw^-}%%%@@y@,H(I122&A@v )`Ȋ@b$HLldAb3IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_down_press.png000066400000000000000000000002571347440174500303140ustar00rootroot00000000000000PNG  IHDRxUsRGBiIDATc]?+K@Kg\!#H$ RT?$c)`(%A04$ݕ@\..IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_minus_hover.png000066400000000000000000000001501347440174500304570ustar00rootroot00000000000000PNG  IHDR;֕JsRGB"IDAT(c`C$a06!T!{46gcfIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_minus_insensitive.png000066400000000000000000000001531347440174500316770ustar00rootroot00000000000000PNG  IHDR;֕JsRGB%IDAT(c`C$asNMVQQEHͨ NLUIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_minus_normal.png000066400000000000000000000001541347440174500306300ustar00rootroot00000000000000PNG  IHDR;֕JsRGB&IDAT(c`C$a{ GHixIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_minus_press.png000066400000000000000000000001541347440174500304740ustar00rootroot00000000000000PNG  IHDR;֕JsRGB&IDAT(c`C$aY?MGHF:IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_plus_hover.png000066400000000000000000000001741347440174500303150ustar00rootroot00000000000000PNG  IHDR;֕JsRGB6IDAT(c`?s>IBrCT3#_D32+C4(r6ր rvIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_plus_insensitive.png000066400000000000000000000001771347440174500315350ustar00rootroot00000000000000PNG  IHDR;֕JsRGB9IDAT(c`Ν;iƄO***Xل F]o +IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_plus_normal.png000066400000000000000000000002001347440174500304500ustar00rootroot00000000000000PNG  IHDR;֕JsRGB:IDAT(c`ݻ9 $!!/BSQ؄ FQ >wIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_plus_press.png000066400000000000000000000002001347440174500303140ustar00rootroot00000000000000PNG  IHDR;֕JsRGB:IDAT(c`@gƄOW"9Q؄ FQ YLIENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_up_hover.png000066400000000000000000000002101347440174500277450ustar00rootroot00000000000000PNG  IHDRxUsRGBBIDATc`@d$!*H $+@q6## djqE0IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_up_insensitive.png000066400000000000000000000002361347440174500311720ustar00rootroot00000000000000PNG  IHDRxUsRGBXIDATc`@nRdddt "$ ˑ?b"FdIEE ŘA:a jjjV.IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_up_normal.png000066400000000000000000000002371347440174500301230ustar00rootroot00000000000000PNG  IHDRxUsRGBYIDATc`@ d$!$@>#ͨ4$"`@T8(cA1L  @:a ]@X4H 2'IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/spinbox/spinbutton_up_press.png000066400000000000000000000002541347440174500277660ustar00rootroot00000000000000PNG  IHDRxUsRGBfIDATMA 0 Q7=E_Cb+(og8HCA!ȐMahL' ޺Tз&v{0V#IENDB`qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/000077500000000000000000000000001347440174500227035ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/add_hover.svg000066400000000000000000000013171347440174500253610ustar00rootroot00000000000000 add_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/add_normal.svg000066400000000000000000000013471347440174500255310ustar00rootroot00000000000000 add_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/add_press.svg000066400000000000000000000013171347440174500253720ustar00rootroot00000000000000 add_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/pagedown_hover.svg000066400000000000000000000012011347440174500264250ustar00rootroot00000000000000 pagedown_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/pagedown_insensitive.svg000066400000000000000000000012331347440174500276470ustar00rootroot00000000000000 pagedown_insensitive Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/pagedown_normal.svg000066400000000000000000000012311347440174500265750ustar00rootroot00000000000000 pagedown_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/pagedown_press.svg000066400000000000000000000012011347440174500264360ustar00rootroot00000000000000 pagedown_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/pageup_hover.svg000066400000000000000000000012261347440174500261110ustar00rootroot00000000000000 pageup_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/pageup_insensitive.svg000066400000000000000000000012601347440174500273240ustar00rootroot00000000000000 pageup_insensitive Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/pageup_normal.svg000066400000000000000000000012561347440174500262610ustar00rootroot00000000000000 pageup_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/pageup_press.svg000066400000000000000000000012261347440174500261220ustar00rootroot00000000000000 pageup_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/tab_close_hover.svg000066400000000000000000000025221347440174500265630ustar00rootroot00000000000000 tab_close_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/tab_close_normal.svg000066400000000000000000000026431347440174500267340ustar00rootroot00000000000000 tab_close_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/dark/tabbar/tab_close_press.svg000066400000000000000000000024521347440174500265760ustar00rootroot00000000000000 tab_close_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/icons/000077500000000000000000000000001347440174500216425ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/icons/arrow-down.png000066400000000000000000000011041347440174500244430ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs33o~tEXtSoftwarewww.inkscape.org<IDAThJP@Ͻu6ąe #.**!ݗ? }3_Tt#8PY#ܹh- -2 |g&9'7((a%-(Ug6_f])\/槦 sggqkMdZv |rmE`VN7Q#ݱ#uN)np`)׋rτ0;b'΋ ;*u_m-ΤS~%Jŷ/.~ךƃRSR gGH !%@Iy"!`,!E< Jos|;[$w"'E,ah4ahLaARwKN?.@OD.+̙57y((|D!އIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/arrow-left.png000066400000000000000000000010761347440174500244360ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs33o~tEXtSoftwarewww.inkscape.org<IDATh홱JAEL F&!$AԔj$؇E kF,Jp&$3JSܽy{31Je>efZb D[}׊G QuNSkp,Mw>?ղФo ݳ(zi]&+<CהQ4h /wWOQt0e,Bǐy0BR60d a e i4m4HX3N5b,Y݇7:*uoPWM'H@S<^vrw{xn 5}0~-R W` ͅ+x/2.(7ըb&2Q,.yxw!AIITl61ҁa?tǧS$&m;|ݱ+Ss^~It\TmXȶLL|}(\:jDygg3F 1.SeM4oYOt8UZ^xazRHMk)^ܩ{(f;/9 !8evacoaI$brX}CAzz']M%_-V" Ikm/ħ[˷l~k+x@+s>L1T=,Go'D 6ELtUG[4*͞`. :w}:Pibj9V8Bowa٫cU;fjV=;^)KIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/computer.svg000066400000000000000000000271641347440174500242330ustar00rootroot00000000000000 计算机 Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/icons/dialog-apply.png000066400000000000000000000021541347440174500247340ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs33o~tEXtSoftwarewww.inkscape.org<IDAThMheϻmZBKŪP(F{IOG`xQS1T*iTMAQ/&l4t7 =$a7mtKE[CEgǝٯwja;)x Lμ v0dKٝJX4|yjO3|Ima|)`z*GC~Y"C!TahPkL8Mvv`?- ?p;SOkWX3Rp瀮ΦtV1JpοQ."zU]Un!Y-}OAyo_'m#Aꘕ>=JH;tܹ[n`e5b_JAa ţ 3IfQ= DDcv,䒢]ǕSإSU+3WeBӓg][#mN/{!>y7'8M@=s%z/¸wv~m&JHSb -.r6u#;k֛8JeӾKj}jg+T l !zuط0=1U:fl7T5 'YO-v`GWv^A6G-ZԟLIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/document-save.png000066400000000000000000000012131347440174500251170ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs33o~tEXtSoftwarewww.inkscape.org<IDAThOkPM&*vt*d o/aE[~n ~n*U\Y&qiAuE)Be亰c_gI:A6y!` պVυsA%ȯ=Xq@.HXYy Ly`պ&s17$Dx< e7Be+fP<`+z]6@: Ki)~Բ?蚤 |< 7e(2_%&@7&nr}4}pYa-0tcЍ Ob!D43S46ї_}B˶+ΏU5LXWǷi x0r B1羨= !:`4RdDxj;j15L 0I 1LH);{k 7JolT&*by@!fa~ي43n`ܞ axc6,0IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/drive-harddisk.png000066400000000000000000000022161347440174500252510ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs))"ߌtEXtSoftwarewww.inkscape.org< IDAThYMh\U}oZHE*ZJhۅ FP  T҅v rj SŅЅTsah!ЩmJqԍI"3:Nw: afΜ{߹6L~PZ8c-mQEVE1D p8m4|iqߏ@ H5BJ9(3pD{e=B=ϻ٭]033˝nd^}rpDֺ񉉉3O!u~&`S\\ YZ$@o00 ~ vfU8kJl?RJjR :gsr!]p7ZgC4 `9R:BbʳBϦY&8'q oXD"Ř/dDOy,bQt[،NVq9ElNd#`DfwǦqm\$ɚ.UV5WP0-`*m*Ru󋋋(J(J|]<7tN/Mi_p 38^@kD cLtML1 ɿWRX>99y7OQ,rYzPߌ({* X)u }zcc7֏698INbuٷ>/ *bq͊;.tJ@2Q?7*]JmrY> ຳT*m$InϕROo ӎiG!y}~2K ľϹElqs4}R}r.T(nA໎3L/buŽl&BTZ$ĥR4 t\P(0]?Jdޕ$%)Saf''s%%a/Xm!r(fT<8nذ![Q oǖQ_DڈF. sMQL#^+???l6C/(-M[iiiG|Y,Q}9̂f5l]D eF}.//KrJ!/'VAVyڕgٗLj4:gxo{d@ bw}rhN6N8{RJXx)z^*D? ѩˢ/kɏ8B]H[4.#~FNvMQDv{c#vq##OЏ6.*meB+5Pz՝5k*`| BU0+%fB)bl#+w?"6 aXB~O!pc"$͏ I̭h f")DJ IqDYD ڻD!aG(((o' 6̵tDY2DF}HݲB)5fsuA3$8ER744|/bzӍM'IDZFZ7eSw fQ2`:bWd JDȼ(o+BsȨpܓ[۹8H xs:!unAc}EΣ; uԧg0Ұ }+?KG%*/Rh5x[&wvv>/:`B_ZN$dqJ8RU‡hfUHDmGN folder-open-48px Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/icons/folder.svg000066400000000000000000000056741347440174500236520ustar00rootroot00000000000000 folder Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/icons/help-faq.png000066400000000000000000000017541347440174500240540ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs33o~tEXtSoftwarewww.inkscape.org<iIDAThMh\U羙iS1(+uRL:`i+E%4dTj)Rhqc%;MQB#C~ӢX!vR+E%䣙3mܱ ﷼?yw;RRRRn$Ҏ];6rJb;oVrS˛+=] '7ƾ@wh7*G[YX#>{LV[6ac߹DpKu׺p6[|Pk~沾h`Đ4>3/HI<L7){]:ɸ$u_oU \ b30yfekծ⨹`kTbI^^7H'<Sl\T豮|F9|=4j`uU$X ui?p+#BCC[IXmJեB6 ̗T*pu[z]+afû.ÿ` %Y}a 2=zl)ujle2@Fx5s'lqE_XD'.Ӗ#T(1>y{ ^lZNըFeѫx$hL-fjJI?TʕJZuOG[<$0[8|vbZ*dIn¾ŅnZu7'7wԪ{ f~o Х3V}jj`2:5~{},-mZ ESJt|:))))7mL>pIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/media-optical.png000066400000000000000000000060601347440174500250620ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDAThYkluΝ.%._(Yʒiq\9v@N&6n@#Hҟu? hiu!XFTȲbݝ{OcgW#rss]ooѻf[E?Ȅ;0 D`:^-NExZqz9Q1:/ o :tf1.GH @o0둢ύ3Ⱦѯ!NHI?# !fVۄ}_hb,}lȥ .f{H FQz;QSےzWvC[?P.KR t[:Y[)Yz^MJO s@zj?#hr7Zϸ/7@@ MRFP20 PpQ*a;Nlx1p0fXǫU\߿ 74]{F {VYA+ %0 b'Damzu ?CTI+"z mIAԖڤD"@ ǶAjg@!s yGLJ8ze!LYk ZXEQo[">*AGΨj ) C1 _en_dxuau8e^ka`DRe*#!Yn>M;4f~ mc9j6Tx+D[زRE` D `aqcc ܎ S7=bត<8OD ;lӫO2504m ZfE8p3$3m8A@қ c޻+b̅J[_(.`罵<ᝣ{=4;^ ԅ EMKSøc'&<σe;== NBF?4 P(++(fH& FSPY22ӨM i*zvk >R iu-^wVo=m0°Un>C{y F(dlo8=j?|0Mu] #)_{O8s6h&H#hmBɲv `@;Xe=s#c4H`k X5Q`Q\l64{=|sӑ#GYYVl<Ӣ(mk`;]/{g!gPD!(BBq`rimlRٲo>Oh øA)%6dYN)%RVflwP P!h[E|.! P4p7w׋R_xUJi- {i:LOO `?Lާ Ib R! rTS[ D'- Bd5=q/WՅW홙'"$RvjmO@y`dr@~ou/ 1WJT> p]i@FQ&(ͼrҒ5::g(t)TV1eclN]N GKg#d^_E^ܟXrVJ\eI3$Xa`kna 0#_ 6.O~44QK)NI膉 @hI()b`K[ kSRoO:Bk Wyߝdž&^e7gbDQ'x0Sg5f^rq5.߈{m߮upOt ++W{'O'{~3g|Y/g"Mu6?0~í&篟{,hX&R\v\:G3f ~>7 n2zh0 Z}~M TByO%>{o}__̀K9Bs'^}{&0I |V8;{O~_#N?%]ѩ_ݶsӆ?b>open?}_$f,3ikc>~_::8X~HIm7H )d0uVj1[a}O|G'7KHJ&$*7 hvO[7؛ߋ?IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/process-stop.png000066400000000000000000000025511347440174500250140ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs33o~tEXtSoftwarewww.inkscape.org<IDAThYMpSU}1Jՙ638CuA$e]X;PWD uZ$-3N5M,\@i$uVhq$^MUsw;:ijM&!nXkrp??!:Dڸ0&dj׮*p0HB~ TD:t* `yppG WQѨ7WzL8B~ ekt;(KR|cnB`.^0#֑L,7=l )^.`l+L"hrpBh5CHǕ9'\BDtd! : GBO0>}t O17 ͫ:y'Pc._L4p\<u9v rJ]#1s"% c* )dɏJ ~R]ZHgx]W60ޗL @᥃h`9޲x+&F04JcPmrZ*8? D%@;[4f,9\zѓg:a2|=~'NL_)~]!HMvyN& aD/6߭%ͭP<lyo1hلeDlrfxijՒy-Vn9aKIY[@s*:@jΡC _X3BJeOdRSM-{\yReT)-ZP%x@R<ɣߴi5kh s/7}g^BZ?kDK4^nN0O:m6R؞D':'a^h`K6&:]%lLt FA5 {ȸ۬Ak@g"J*,dvev}mxfc LT6,,p8V1g1fh#c)zml/CW7s٨OB$w{bDĩUBcXYtɃD|L2G|jrz}d(j|c׽z/}ox3{݊Y㭁Շ; Lh'T+l4_]es ӿTvb xCth7Xk;U0/@WuQGOy*YmIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/text-x-generic.svg000066400000000000000000000146121347440174500252320ustar00rootroot00000000000000 image/svg+xml qt5integration-5.0.0/dstyleplugin/assets/icons/user-home.svg000066400000000000000000000072161347440174500242750ustar00rootroot00000000000000 folder-home Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/icons/user-trash.svg000066400000000000000000000056671347440174500244760ustar00rootroot00000000000000 Artboard 2 Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/icons/view-refresh.png000066400000000000000000000021421347440174500247550ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs33o~tEXtSoftwarewww.inkscape.org<IDAThk\EǿyimcNV$h&($]EDCE{Ѓ%ԃ֋A`v1xPD Uԃ-C6awvyowm =L}s+ao\F-#x]tl[wnו|rslKZO/-/v:wG $sYEuZ!J$ߩJQ=DJ`lrfqg@u:YWFHsT k7j}leƏ y\T.Z(XpJ⾁! 8U?""Dfv2'HsrA03w{XV|k$mW*əa'/nK8&c3}t@j 90 ~GJ( 3"61ڮ@b:%ղ!o8pnvԶ4PLey4 (ӆ$ <-Z.\eC覹\d6҂bR*g[3"5:V^ \OICRt[ Fi㈥8&V"@[d\9E?472(|މAK5G=ׯojQSz;OWԨ_r!-5;_[|PJo7.ց7+joEeo$-p7;vgI-mwېR#Ǩbχz& 軸ޤm O`)1ɯ?.T;LmwEP^sgoӟ7Ktp6Se 8z'4 l0ߌOg>o m2:$ҹ^ C.G "qK1[o"@hA4|7V \vq ~Bc}.HG~sL5kdo#!{7뷏y 2*;ӧO;$ wIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_close_hover_dark.png000066400000000000000000000006651347440174500272570ustar00rootroot00000000000000PNG  IHDR4.sRGBoIDATH c`c 1 @ f  2` &"9`iYe_[yf|_`cYr~.q5Đ"@Ϙ$}x|@̵2k%,fcaKR @2[qO> sg^dRMP8і4}gm l28=Y9b\>$ G 1ZD}zj*Jb!Bep qęr0(0 DYuTpЇ .E5;G%Ձ,b o BeG`$pB2PG a6}ڄD55zr68RzIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_close_hover_light.png000066400000000000000000000006461347440174500274440ustar00rootroot00000000000000PNG  IHDR4.sRGB`IDATH c`c @1&&&t9b1`Ad= "P [Gfa l>CCU೬OC?7;'DbC#ggjfn!".λߙ@7(˖yrq0Vu =6XpABϮO@3@Ͼ\L?I٥ʞL_f(.hːhKqdq,S:8BN4r &*&٥qK4e8Q|vY2j!N6QS7k#͘ʱg)4ƭb26*IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_close_normal_dark.png000066400000000000000000000004111347440174500274110ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH A 0EڋI<ྦྷAܸn%/)h:BLw'dҁҁo`m4u_YpwC W#'8]Z@!ܱ`p=ؓVj' `HfT5*:lh$h|Ɉjf:ɾ#sk![$2xiIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_close_normal_light.png000066400000000000000000000005151347440174500276040ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH c`!0"C_5HHHhx zCC&IIIulrjYXX hp&<"x Pl-8.6Q>{99M//`122:?5. 9fffTw#9R,MT0qԩ@&E^@#~,#0́!P\4і!љ3gN9-H4,@ G#Xl`yL4Y#g- CVVVG&&0Qz4FC#}Es叺IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_close_press_dark.png000066400000000000000000000007161347440174500272650ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH c`8b@̄EX@lRj| sP6˰h"alY4~? t H~1[](]n%,d AQs24K GcFy潾MPlM6s0|a)$2XMMz0."$IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_min_hover_dark.png000066400000000000000000000003271347440174500267300ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH c`c 1 @ f  2` &"9`iYF-#+5 `dA*S,b؄VIĈLRz٨(M`l> C!kj a˾EdIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_min_hover_light.png000066400000000000000000000003441347440174500271150ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH c`c @1&&&t9b1`Ad= "P [Gfa l>CCUeT ,ܹ O 3140)§eFF En٨HI8l0B+>#V9|Bb-Ԥj1z3IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_min_normal_dark.png000066400000000000000000000001721347440174500270730ustar00rootroot00000000000000PNG  IHDR4.sRGB4IDATH c`!0!0$B+?<##c:=JhGd,IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_min_normal_light.png000066400000000000000000000001741347440174500272630ustar00rootroot00000000000000PNG  IHDR4.sRGB6IDATH c`!0!0$B+ R_p…D"Վ*  YcIENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_min_press_dark.png000066400000000000000000000003431347440174500267370ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH c`8b@̄EX@lRj| sP6˰h"al2 ] Ftux.WEİ R0I*ϐq63x&=0ab;c˃Xc Fk:| (IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_min_press_light.png000066400000000000000000000003471347440174500271310ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH c`c _~'|XYZ2P9Q#dñajG-J`d!>V=%,J qE+L 8)ځ FPŇi$H`3gBaԤj4,*6IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_option_hover_dark.png000066400000000000000000000003541347440174500274550ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH U 0ѡcӺةm\ HP@Xaڌϐ G+DK&G!0X` |4>HQP|x&l*!KT>×%lԐ>!>IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_unmax_normal_light.png000066400000000000000000000002431347440174500276250ustar00rootroot00000000000000PNG  IHDR4.sRGB]IDATH c`!0"CX_ǧ… Dr3G3e! lg&H+Q˨D | [¡F  NgJ4IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_unmax_press_dark.png000066400000000000000000000003771347440174500273130ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH UK@@ KҚ++.K5C,Ф^߼W4&I)x0GXEڈ8S.$xՈYuvd t(E{Ԭ˨q5Zkf3MidiM&3&#Q 1G7_}y@a@Ã:B#trVR >; B'IENDB`qt5integration-5.0.0/dstyleplugin/assets/icons/window_unmax_press_light.png000066400000000000000000000004101347440174500274650ustar00rootroot00000000000000PNG  IHDR4.sRGBIDATH c`c _~'|XYZ2P9Q#dñajj ])>]aArD[0B9(0K`4Qc3#` tM !=lĀ-`sQk6 FPU|^'`հb)&EV +92AIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/000077500000000000000000000000001347440174500216365ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/light/arrow-right_disabled.svg000066400000000000000000000012161347440174500264530ustar00rootroot00000000000000 菜单箭头 Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/arrow-right_normal.svg000066400000000000000000000012161347440174500261740ustar00rootroot00000000000000 菜单箭头 Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/arrow-right_selected.svg000066400000000000000000000012321347440174500264720ustar00rootroot00000000000000 菜单箭头选中 Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/check_disabled.svg000066400000000000000000000014621347440174500252660ustar00rootroot00000000000000 select_insensitive Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/check_normal.svg000066400000000000000000000014111347440174500250010ustar00rootroot00000000000000 select Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/check_selected.svg000066400000000000000000000014201347440174500253010ustar00rootroot00000000000000 select_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/000077500000000000000000000000001347440174500234245ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked.png000066400000000000000000000007371347440174500273750ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S=kAZ\c" ",DRډ`g 1BQ^Hm ~@@46r nxKBԀfgnvُtTkͷᳰcX H~r"H۶}oX,7Aܰ0LDP6 ȡd2/Lơ ['~j%F<eá7MUgȦ}  \׍>9$01N URI Llۺp\Brf̀Cd,|^\וn+B|t:bf`@V;a7^?Pb:`Vkx,rY6>${%EnRy<x0&֠.sa0c$.& `pIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked@2x.png000066400000000000000000000020311347440174500277340ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WMH[A [ 9HAo *CKK/V^ %Zb[E"z/zkl̓KE?ԟm|MjS;33GQnnBnH-t\\ssBxϳ&XV[ tƅ La1\\:)gSNNNA xT=`b6ucccyj0nJ1^o888xÎA;1==Q@l=8_ZZzl= 8[[[d,+sid]`y_\)/@ЋwdoVCs̯٘}E[Vdw@]#NhAFǽAND6n'1̨~effBn|x-.< g7˩TqpI9QH \ש!+pttDMMM!L& l6zb yZZZ9JgD0F lnnRuu2OmhbbB뉟\UD܁}Z[[S fCUPEE* )) i||Z[[  , j#6pYE~|>Njz{{ť#`IIjC\`! C j[ZZFV ПWq.Zq(// 1CnLc``@ ~‡he¬78U])o_xQ.kB Bna؅oH7MIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked_focus.png000066400000000000000000000010061347440174500305620ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S?Ha c *&5%$Hc VɈFtiqdFc E!h$I2ƹY,p0D"AbQUuL`CqhZP.A:y(Jx8-tfrARaL&PBXx"Nf T{հ;oo97 w=TQD'~Z 1g9cGXُ=6ﵹ?P)9/<v7?TIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked_focus@2x.png000066400000000000000000000021331347440174500311360ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W_HQ?w̜Z(C|LM3|I=HABfjZn0D E-Aa΂!'%5YЛ!J 2ݚ:MoϽwν?8nq/777$?HY-nGt7==c߱ܜC5,%=~;^R뜰.!J)䴴;HG3A~+I+h~g%hq+{ggg'x+0XG}ڼ~$ﯞN(!T褞Fa.:L:ڗ5ͅY'r $&%s­CH@τsTΩ=-{A__[tL ?m\ ```ະҿCO.x awP[[ ĉ~cK0_Z@+@q333(چĄ3ـ<&Ų2^Orr&MMM@Y__ J ͸TRNN<66ơGFF`mmn5p: ?@8TT`0\ONN'%%UB@ @mllr%%%!XEE?l( LG⇦`7jaa!OGww7xJ%oM8H{^^/R5ޖcb>.72~/)QKӿU}@{I'_|U/I%b>mP4_oWӎvζ9OXpJ4j+NXފ6QPds3HAHrrDOd?nPdKsfXXT_ XVT~셿Kgh<IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked_hover.png000066400000000000000000000011231347440174500305660ustar00rootroot00000000000000PNG  IHDRagAMA a IDAT8=hQo.w~5QD,-Zh4VZY'Fbi҈"(`?P0h''8{@q`?- +ux +K88փ9DRxr7v4ɍA͞B ?DXbq,K礧cD~*50a2OҸRPZ44[,wG̿7 ,czc7 [yK}(5/շprVzF5h~s2%_}XެE`{10f`-ȅpqQ|-Xw< ǟ8/xQlav[)KnՙMBgNL-KygOBX:sN8.wfm]J 8 >yqHg4a  Y}Ji 9j'"aV^ W)%d;W]+ :BdXbgF9IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked_hover@2x.png000066400000000000000000000025301347440174500311430ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WklTUνlBi!V Vb41i4((|G#E 4O13DnдU+mR=;]F'99|͜woۈ+œZ֏jV t9/b1w&F=1(m}xz#S}^N`wD~)[2 thjwn pAJ#ꀺ2 c[hBRJIPt v~M)/|wph^-zZԸ#,+ȇW g GXԮc8DwWFζ&V(*Rv+3YIvl?䌥ujW̖g2y/Tp*Lv Xp8_0軿Wx OޭȒ@}%O;Ӷ!jry_79 %^3#)xY oeM"%I&62ЩpdМwcl",p)eIswdܤ+hQu `BdƣWu_pK08cdg("DiB۔owR4yRKl ^IyFzW.l',nPx`Z7l nXE .m2 mXYtKʫ =`ldAFUń̵)xdžk;kQ(WŰKF^6,'+ 7>qg:ykF*hQ_أ}9p^9WK lW`;M& ClZjA1'?dml' FbKg1 C9B pq>=[Im+A|Y!&)Hvd]@.7Ǔ0{`8_ 8ӧCΊ;`}Ok~$PuʙO>v31I/0@q)s}r^lSbKQ:iD܊GP/Jw4Ї$nBT =Wqqu:\Tg0cI P3pkvl?hESzDv<Na4I#B$23s0D_4 !2£G\YS]6YfIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked_insensitive.png000066400000000000000000000007601347440174500320110ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S1kPRTn-.ƹ8:8(tA \DбH.ִ}|w{#-JQ+1FEta:Db[ I,f/ øm;:A,_`^F1L@l67`𔊼EirZ=p m& 5MA8џzE<`5z*_c>t:d2N8==`@k * HRv*BeYP,CV;s7& Z-0Mq<4 Bn6D\@ v۩+ H8O`{t]\.{ y $X,>EQ|A8f[+򆉥)`+rlB?G̾P;sQ>hIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked_insensitive@2x.png000066400000000000000000000020261347440174500323600ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WKA$b[h 6xŃ7 * >N"xQQ U"#&c$MOdgvg7;;_Ңn"Hf+Yǜ gXʞAg(n0V777O&V11g2' SbSyy#~QFc@Cz)d6l6LnIIInFFA1Hɶv͍}>{]{<|,8"eb +Ų$I$vVTT<6p8^r[~Vt%%QpdMggg_Z+C@\*i=>y.D#R/..ЂV-g#000@3JƂ; @ނȱyZ[[SCw (Z3ETWWGՊDR|Ӗc"pFqq1KxŴת(SG###.6{ZҔhqttvvvĀN99X;kQcccڈߐ(xq33|xxΛ1UGCCCj"^27ٌK(5esuu%uA6QA=<gUXXYYQ}VVV B ψ/[ q )++KkXW6F9멪*?юæ&T}[ZZT=-tZ[[+crr#"tleQ"@FcR|b~L&X\c{{+(YpۭgEpt~~0m |r+;QsGnHbj _swwn,Ar L '4:LȬf82!+xʬ̩5iaC}a R3 Ő3gO>IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked_press.png000066400000000000000000000011361347440174500306030ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8R=hQ޻ۃT("$B $!FAE+R$(h#"%&v$H@v7Wٙy ~zhvzOhPVEw΅Sa*Z__$ rJ\ 2Yt~=憶c}!Gާ'AߓqW<'l.6A`@Maf)bǣ@0 HXUJK_KlqL/k?7M`d<15yAūmLPT6X8r^o`$RӭqWt6+ *bV@ 3frA2Q6-6$ŒɨuыxY7[VcbzH:|44>,z+@@IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_checked_press@2x.png000066400000000000000000000027371347440174500311650ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX Wmhe޳sq0XȲ>)*3+2*,+V ѲSF*BAC"(UQ} Yf|<]>{W羯xߝ7Yu.µغ#SFVkKp@sh;Uep\ G9YmЍ9-Q:z+x_+D*gdHJ.؄m(Nc;=u]”R6]ƂڢG Éx ~~FPtc;w}w}X"_:)yFێb=R[oW,J!1gꧩi؊Pm*\&*/F7aP$B`otcd枍G"T!ݍ{NXHL0TNJT.1 ` j#t_wCz@ Vxadʹx()̓}nZ+[Zro6(-3=ΊC !0"t '+`-TXq=H߆iy ~BBƝ?Ua+; 289ppH%~kWD kqEp*Iv 1FO'o *6<7glB)Kvxזs7YY3Wu]qXs 8"FTaڮd}JG]DگVr ^Pɻjw<2]hâA-"1~>glŨbtw%KNC-?6ӁlTaBedô.^lg݉ 8Tb+ ۸cXLBkCl?ܱM[GYM`}Yh#Y XPfFӆ"k~ }CćNwKh!xL*l3'YzȟU$+_|"!ÇCcMY Cc>TI@s@d熠%/ `ݻ Z.^0ULf @] L`@g @)ZWaԄK 5X/ &jV?k!,0o.&P_Ty{L%ٹryIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_mixed_focus.png000066400000000000000000000004241347440174500303050ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0v߯F&33?Ll_ 5 =pWxAf = @\ qUiîj`hhWX Q?`L4 ;H<_~98R R (mgC@j@jAz@PƸf =A)hXdIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_mixed_focus@2x.png000066400000000000000000000007611347440174500306630ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W;N@5cY h (@pЀBr 8\"44,ACnH|Nd+xgA;I*+*>@qZ}Z,iDՆDV(7z _M&qmn]HD-OZ%^d{ ]׈;o tLp7d4VIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_mixed_hover@2x.png000066400000000000000000000015761347440174500306740ustar00rootroot00000000000000PNG  IHDR szzgAMA a5IDATX W1ka}{39cFP !hcMBW!A4B C9Ϡ&:oݹۻ#3;f.tq-ĵ4"ܨEXHs81=õ%"b S\ǻ0[_aUVoEaD_ ONWOFa+6J,QiVwx ,V{6N[ˈL:qĈqQzf<2NA""9r0yݔ`^5|'A"6/K0<dz_1Os7aJ>-xŸ &)7} ?Q)["Vdb}ؠhhSNS,כs%~C' HDq|\FLh8M`\j ˸+cK ?Noo8k)e-(SXf8NJ?VE:$RBhY'}qFe\8Щ1a+y|~ħg@MՌ^ /}q.}t>(_ #",ELe)?(P-m~-h6j؋^+($8O[PqL\̧f"?Κj"p{Kt tp9iw ņI YzR$L`xsSmm˹tUCO[g7ͳ:A=^MDɢ)[o`d[:fM4dX~uKJaKAJB}6͡he 2n`\ nϐ^:djkTcӞDǘRo"D4M7D7(@ݷ %4qk yib!ۚw g Zo'XPoe1FCu9NM[n <˃[^z).>WsuB#b|S PT:_YI&jמy z\X<˧ȅiQ!Z.n #P޸0nNta[ sÑz<(ХpBć=s9  zsCD`=;: _x|f@VY[%b[ ̎@zèm〮YmiDh" ɜ .4Z|@$ 񼧽 "⪡x,+hi@<5?dP\ǁS^"Obޗ/ ]? 0|ywiBSď(JA|`Hgh ugVގܸkwM <Zεtn7{Wklq/_b&k$G cO6l;%/ `ݻ Z.^0ULf @] L`@g @)ZWaԄKXFũ߿uPP$ OHӗcH H-P/(?0P-3 # ySIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_unchecked@2x.png000066400000000000000000000006411347440174500303040ustar00rootroot00000000000000PNG  IHDR szzgAMA aXIDATX Oj@Ƨ]h).^Y!r6@ko*HV2twΞmCIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_unchecked_hover@2x.png000066400000000000000000000015341347440174500315110ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W1kaܙh&)`6 6;`ge+iCeJP kAēC9π&fnNB#{ff.|4[n%HjH))&$)i 7ԠWI1]|&Lئ%Eݪ䰑f,j W}Pkx@mӴn3&N} **_l7뙖i26L |]/$> !Hsy>&kMy -\$3€3٠?kuNpڢ2Uc, Aq,Ud4=S2e /Ӽ1vp؀)DuF 2\0cӢ8+AEȺυ%݁Y>=/ܛfTu(11rN]8) T*g5pїذa,GPe>D*$2bxh6@ݯYֹc^@>zR/3bՌ"7P#'G34?,?_tyVs* -~G&-s '?*H<(F GK-G{ i<71TPX̷0*a6>|GMPW$'A-&t좇akh+zti h7p Ci{{/>M5X2]2wv'i5lKIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/checkbox_unchecked_insensitive.png000066400000000000000000000003461347440174500323540ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0B3ii b.P-? .; 5 = 0$A ]s ACՂ 38G ``N<f_@ĽteY&qFoUU22ip"D 9wx8~|x5)A*[`⡥(p̑dؙ%/y+ nf ]oqX#(AQGC~@oƙjo;PFm 6 qkyqGJXmMyy 7YD>94_o.(G>>hnmT'<O)bc8|WSx9֦U"MNUZ1 *?bb݀tb8S߁\gm 43_Ƕջ8"|WEí;Ht~_ I*HX ba[G)Z#HZ_'ښHp"l^:NҠԄB"]yD2G6Jp0Q0#&7f4&z22|"'@r!O=6<+gVn9B2?yد`aN΅1YbvMߺgw2[k5ﭭ-zbx7s31cgMmכ.J{ޟs l_ r"KX,[|lPvwvv/mN7Nfm ؖ-/2G`(Xn_.J`){1h -MOORP D"cΌLm]Đ1DyVSN4lU*95$0eYշ~ YQ4+psnkcR):& +@JlU[ؘ}[Ăp*@*l% ۫ VNllL/qAHR2XUye4^5K)bA%[~}}hpV6LhRPsnE1K@V/}}2$d#MmMĂvnBcx fffhuujQӡ) H$(Ll\.v|kx-ҵ_FGL6s\aLX6S?ZFLrqormkF$ "M+}ZʟV jt0_bXʣ6M.FvL\iT-52IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_checked_focus.png000066400000000000000000000006151347440174500300770ustar00rootroot00000000000000PNG  IHDRagAMA aDIDAT8S-O@8 A9j8U G%A N)(ץo4]H:N߾ۙ [pgVYqLxЋ!,/GUcFCEzc6imlwT '0ʛIj9{x8SG`p-ۉ>'8B&_S j) Cr]r`pL({LTq$]e |b1+s*$y1xEDyZŘ[6MQ異>* =BQA6RV py &/Ozr8IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_checked_focus@2x.png000066400000000000000000000017241347440174500304530ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WKTAFJDIԋX զd7 O)V AB_R`Z>D;VϰWgk >ԁe9w~u,c,1*Kna!k%ԢP|w7Qq#h))ŲJQ98gkhU*uhzwረkف=U`+Kg ~*{JK\m'֑Rfи/o]iB8=Vfp^;o+?}Uy.فDdq=xAp\,Uuen,&)ƹϹ赑0, qW̜%7F=W y%oyn1.X\Ɛi{eۙtÌ!jā\ }\,`bb$LPq՞)ilhhMMM`l544\Q/.P2+ 2 qm1V+8A,ɠA l !/v|3ap!C@#(#idxx& JD6_`>CD6#zUϭ?* 92W?:s5s}tIZO) b.vb9gwnG%^9J4&^^)r07ɮY=Μզ|biNaxK.MTBZ^![A H47)c' +T7G>C,jܡqw+ulDk /_}[y& ү#ݭM#D#AE;ZE%N2oONHIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_checked_hover@2x.png000066400000000000000000000027511347440174500304600ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX VKlUt)tBcy15DlxMM,PDݸbA  FcZ`1,0&"-% G->}f:uʓ=u{u5oexan 6G ͷRWFqa|&YHa~@QgaS)t[5܊WӨAJr`iEE`nsrd`p̢A`dќ^lmF_>" |Wo>Nr@b{C?p)gśؼ~Ensi JT2Z2P)J/S[`$E"'e:܃iR?8b `BN6&۾B5 Kve;Q#ϟXjr e".Ekk-gr L"Coccl㜨ņ:.,0/~rWKiv )ǁvM Ӷ0ҟl2'Ij a'/czB朸t]D63;eRޅG ZL5'0 XVgIV;p:#&J]$1o"?]B(հBLiK V8NpqTÑxDzݡ|ԌMxc4eLLmN1 N"Lr_nEǻdSؿ幇z< h$Is׼$+5홤F< H-ϑH5,C7M".)O3IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_checked_insensitive.png000066400000000000000000000007231347440174500313200ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8Sj`hEJ34]Rtsķ7gWW /G(hPD7R=8E?Ja*ɮI_H!&M2f~8>0ωw+ d2)O$Nj:[,a+\ m_/bn'WP{9'A R.xܳ\._Dip#iۢx:z1: ^RzD"fxx8}xxx\*`X.S0(O1rez\0Bd7P bɽh!Emvvv|hhhLNNiر(YS )7jznLRj+Y__7$"Yx)O?{os8 λ |RCV,ʬ0zAڃ\smłP  Sqo+kK:Yp~ʷ?_@24lNUX熮Sqo+E}pAbNE?0N! #]QW®bfS5 t_vvA9e пPq"ǰ4}O@竫}^U,@B_e՞qN`vvlһ}ZWʮdkLty tMRIIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_checked_press.png000066400000000000000000000011061347440174500301100ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8R1KA}3KN4"Ę$$.PIڥ$),- hZ l 1A XXewfvgw7s2MOjSx,_\/``bG'ӈE++9Ye5ӷ[(u VEܝ_svN)NPY!70q)6!#PϞb@LF 8Ȗ;qaƨbe&?ƀ81q\,6Ltdvi>$3Bl2JFxxoSv?x/V&:`B9(WZ]t<~lĹ@(_Db>%O0naf.w;hZD̚nkݓE8 -sxpzq ըa*jNۏV')d BW!WθQC5k_7ykg_짙'5qU@\rg%(,8KΊ`þ4d IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_checked_press@2x.png000066400000000000000000000026701347440174500304710ustar00rootroot00000000000000PNG  IHDR szzgAMA aoIDATX WMh]Us^SĚ"vUTDTэ. ĕ WRpFԍPRTŠ ԶRkS6i!!$}swkNfo9?ވNdW]~ob<P/_JU2=n&)R)-LLdɏqE^ ոe't}Gy/P0`, Թ/y]찛 ZwAq&'}]zJ\345Y9Ĵ1"'Jlםϣb)%bUN6Ylac K4bIJy":]vvgAX. LIrL3xnY˜|GI@&Lm´R1S7rb4Ln Z@[ـ`r,cYd#[VܺwY}b mt)Je[sp)ZJxw=AS=[D^,2ХrzFd70-%C9-ߛ[_.y&6"4MDO` y*pxh4 J@kahm'!ÉEh[6Kުs!yܰP,O/5kƦН {Z!V'۳\M ؔ"-aN5Mq1W ]!0_G[0&Hm?b̬n.~_8v29U[׮! )Uk2Bd7g,Xm=9#6D-ʥ(@*_/f09zVdVgCTWn1=A hږ 005á00ô4 Ib،û Au#m"⮷uoK| ϼ[BF>3 ?<}͐űPӺK`%(npPx1Zb,@sSxD꥟FbӜ+TGB`FB(.ǩ>!t*u^?{ru_EH!Z1Sh߅ nO]t,-Riu5ܹp.&bAV5O{e畎f.(B%83مFu\߰mKNbn *\rvvԫ/>x'/b@6Ė<̜,#|V5J[ -0B:M̧E@Gw }=cEAmtRtskgGϗ&p112{6m~j+4}6oxM[Ǧ 2!p܊ CxyYIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_mixed.png000066400000000000000000000004431347440174500264170ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0bbu ʿ7aSܹsǏA+Pj|8H i RR =pr"L!Gn #OBa @= @ȨBIZp @`hhWXCn̝;HPG#$)FRRfDA!;3!CmsWtCIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_mixed@2x.png000066400000000000000000000013341347440174500267710ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WAC [XK$7\a %W@e ʿ䢕9@.zhb(\w|޷/0x U@!~),h;`{  q=r$* JrT*dGTgt:vhd;l~aSs0`r9}us ǒx 8@ cjc]_Uqjo~q?Fr ]~m25u¥&d2uLj\FM"kپgr'~In(X7*ɰ nE 3͹E!NN[ϯ5 n@"x<籺cNsF~303Aj@jAz@0Aζ` pZ ?҄.R d@Z`花j1v.CCCb teʟ.PhZ?/LxFR JXp@) HʰRR ҃"OnB8)r p$I JFcIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_mixed_focus@2x.png000066400000000000000000000015241347440174500301710ustar00rootroot00000000000000PNG  IHDR szzgAMA a IDATX ;OTAgސUcAQCVĄD11])ZSS런(q[I,ĠX 4JF3~agg/r)syw/JIe.<^25s3fL+}(uY7ʬyF/.]ˍ%`d2a6ƜZZMLFf͐etexK8kuV2 /?z1؞/^fiIVU~wJ] L3Yby]{Q4ԷTMnh/5n2[lyyfDjt?ݩ{R_7>yuUko0_y%ɳtQgu2熗]i]/C~ 0p`6Tvp9#wt &5*p{]fh7,^2r9jv &lbY - 95y/9L6}Ykrʤs*l'Bn^%˶ș ^%˶~+˪X,mppPJ}qSE^%-dcM&xi_Bc?aЋ5=cw~F!9Oj sa5Y`&xmr߅MfE=O* ư<6 'Hb%` 'F ILG}ak&KMԒYijJ8ܞr+1i7NwIMLКy+ mXzGIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_mixed_hover.png000066400000000000000000000011341347440174500276200ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8RAKTQ73錠3aD0 ~Dp'HѪMZ%nvU &PԱ4rfIw\gm;}9 f~_F"c8Ũt\Wm#_#. &ПnLJ$R=I㒅.y`=#ܟU(-nbEn/Iu , b9̪|J#u\)+|Ví~URTOBR]q1@rdz.bLPopO3WQ;!CiQ[IGbl<3kӉ?Yd]0ON}K00~꫊_i@-9e;sU">~1m*'"{?7{b0Ã*|/2u@;n+C!<]U{fUGp1=9O%^jB™L,R>1s<#X Q6xjo`t oǧ;^o68=DZ~)yTqL,-tIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_mixed_hover@2x.png000066400000000000000000000026341347440174500302000ustar00rootroot00000000000000PNG  IHDR szzgAMA aSIDATX V]k\U]$$L&1 I!jĀ"ID}"DЧ>hMED,1V҇6iFeL:I&=u3Lon9gnfּ6z\m5y]b7[ŵ]g7i݂m.@ߚā:y&>n-wqn3!qj ;qAU] ƄAmU85ōEi`y-n1 KaۂqV[\ER9-tImq\BP@4 8Yo7HHoQiI֩8 81i3[끖p-,%P"-GLF Dȟ둬0eW2\X~ hw#=Y8GF0A# rU`;MŸ3ԺGb.M'}N˕pEBӢfoXEo9?rb3E@N. ŋmzI؅%b--br=ٗuؿ+M#W9HV"+u $SPOlr]`yf5Y^ }藛4x+=cʫqRa>aK_TR@$r}" =_NwŪ RX/¾'яضp",~L&0"+Tp;1gg9Ë&fy(#:a$nf<]64 v1<܌/hb:@ƋEgzVM;ïL'9gh%11-"8&[L;m3Liwbs-!l>INPF)2.A Cq5$Wܝ5U+8̅:μ8 &%3Wʍآ"GC@.a29.# Y4( ήjUEW!B|QJ.(!3pD,߮]؈bIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_mixed_insensitive.png000066400000000000000000000006401347440174500310360ustar00rootroot00000000000000PNG  IHDRagAMA aWIDAT8SAjP)iЍBJEh7n[>ƍ;.r%J$* -q7@aoޛ9挾L49'ؾjcAx^|QDqDx&sT` IR ϝn=!*ϙٲ0 [:PqTS_.pl6\u{i xҴvt:=@˲y XO&Me+^BMg"ѿ0 S!IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_mixed_insensitive@2x.png000066400000000000000000000014541347440174500314140ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WoA~%\9h8GpHLq?gz!h &ĤQZ) K%K^g|3 u7@_/pWkw:o0>ki3{#R>n"|>3H;^W4NhjM*ʷpHw JS$jx<KghۣcM85 /$2Z>xLbG2+Xdn¤*9d&LrCnInBuHRPH4 S?Ab\/g繋W!NcckߑK59Lg+V_"RXx[=~Ԫ aD<*O c06z^FA}߸TLp \X,,?=^Xy!!{XL$=pr] 4r^3pV 'VʥTWk.Y][ Lp=A. IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_mixed_press.png000066400000000000000000000010411347440174500276260ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8R=OTA=36nAH06|X #-\k5;DMtl@ :caavf8gfg٬νs9޷o\f^s+h:g::PDTg-pɌpIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_mixed_press@2x.png000066400000000000000000000026041347440174500302060ustar00rootroot00000000000000PNG  IHDR szzgAMA a;IDATX WMhU>w~^SVkE+.F VFwvw.*EP"EAp*ET Ň"$)67;sϼ=p{ϹLD!?dwμ|$t]=uWk)m9wr9 L dB=}rU5ovL{/O!C`g(c7ʾ_q|Mr߶ғS&5Ylo|Ȝ|RX?Z>{}} 2r)?K&Yl#.9 p@.mH宵`t"y `XL`Z$CM<21wړ51JL譕%W)`y$$Zlc1f7ڳ- +n+yޡ͂fm:t"/kyV_j}tPe+; ~9.j -!TCd:"|{!4MWo.?y+P+ ĺ(nPA.z_pYFa94Z^iJ[*C3c:ÍKƌ[c~]1FD{( Ok":(FS!Ȍgfx2Uk97Nf5,Q@1} 4j M"?ALʙ"*?N#(8D22E"-\k3d)g³Iᣅ؀Z!Wpm'hl_?—2d<ģ"̠7sxd>(;Cɝ=4v;1R' cYk"& G\be,b1m39|xrc|D0'` pĥ b=8zȪ7ǧRT" .`z:ǧ <@(nxԸˍTZ^N@p~1g!ngNdY]sgq 5L@Ȝ\9ybLE'sFwNd髷ڣoWv%`'sG9kxSDk_xgYXrPО1YWwmG<~ˎLt@+MPi2m {-\7X:C~Sa/ٸK8luRκˋ'{?›O_3&ƫ9Y2hRfz7dg\:64u Nbi'"1O{NIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_unchecked.png000066400000000000000000000005001347440174500272340ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S1@Dk- c|F;J7H Q;MrԘH*GLHpe73ܠi'0#ga/Pygbaj3UUh Zo8><$EHm"sM!,8M,=9HU,65SE4MOHO4U Øz!.fI\Ȳ"|I&;VGmf]WUzb plD`[svES _lP&+."q*3TW$^w؞!vFT%ФG̐Q=lV _l#JFy gm3ɭ\.P_l tl6{*͔ZVQ :k6RFG:RNC[Gy9 4nγl!1'.cfDIHmNI$Δ03Aa!L ӏ_RL, 1\ZFJ@j0gLbť ]p e~Ft UF6Z`/Uݽ @jakkH qu|( G_ JPT"OLB:%!aMʠ4 *PRr))g`Nκf; ApWfIS5}VIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_unchecked_focus@2x.png000066400000000000000000000016641347440174500310210ustar00rootroot00000000000000PNG  IHDR szzgAMA akIDATX W[OAĠb$EhD" QGOF&hqQڥ9β--P3{v;ߜo ꅦN'*(N^d lS~&ޑzedk"P&iX 0(imPEE=qQv>Ȥ| fSG D\d| 3t4fuSBJH#j='KI1!;+tTg fb1Qgl# ٟ vlp"l×-%75w&Ӳqv ue/ժa;;Ѯ-` OND`.92x5/3i&SKU(rnS1v\h̗=\/ O XT nasjB?61Gl]r1 l0&,d $-,o¶Mr2j*rrpqZ٪oeI3_/| dx40] |6E }$mo!!b[5j? 5nPFM 2[bb[  E}8cn^͆yV`D6Rj0fOիxq((W  !#n AUQ1޻NIAyݒL0TQ*H$1l ^ mY.H`i&NԟfӐK&ic=A=*IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_unchecked_hover.png000066400000000000000000000011331347440174500304420ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8SAOSAfyڂmAbMDxЄx׋'E.^<Ћ!ƅMDH fRDcXhjyoj8vfwlgSybİ; ˝Gd7nWq[-d piJĶ.C|Nd@RhBryROBAY&!=6IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_unchecked_hover@2x.png000066400000000000000000000026561347440174500310270ustar00rootroot00000000000000PNG  IHDR szzgAMA aeIDATX VYlU,Rf:@i(-Y1BB! &#DA 1&Cb0&ꃚW5PhKM|(y`OAҖeweB/{r;bkcp♸ cMƢBgǻqNC&@b݂ ^Kx;> 6ԯքϬ3M 2I\[\N;|ׅ޿wY1$rpTF ?wYGĘ?~Ɨ7c<c'"U5euMTZK?%^Jn8xQVxr$VGRL"'@zMd\OHc.BFKHH-0.cZ&PX]X "  m F$YD$6HXQӁ$riWplfq}ֆ^"xUQoBbGƚ{|V'\kE,iER7Fl>p@~ࡍ%s,٘+^:eoF̨f9Y4 OrLR uVkr%=f e`LhhRI8ҍ A׀9`q,BJd4ljK0p'5Z'G l*4N/At XrM>R"DнC׀7oYkۗ8]_M׃P)ƭ5Y l>Z85% xᨃf|K -PJ&TKl&-WNB'+k-$nרdRfh8Xt_@'٬@! 8f"vF?\6/'x "^.Hi 6OzX1:9ODēоێvmv`k0E5P^ qw*i ~b1 ugxuŒb0R RR~h;upD-ٗ<}lMnPĊ9aaEnmەc("Ly#gh3q<yTh_ -|-Yތ[=CRFjp 9r[>8ev =y~މ$ZI$zGl}10'ԒIa:|E,z9<-0Hlt;b`C:CW+=G.rS1sgo= +6+ \2V= 4D\uc?mӮy\kBd|${"A"u{+Hd G2g$͒RѹIӾLIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_unchecked_insensitive.png000066400000000000000000000006111347440174500316570ustar00rootroot00000000000000PNG  IHDRagAMA a@IDAT8Sj@)i˒KJE^^zx<'॒ A ڠNA6 ~}?3+7 [ | rwkI^]&I7Ms0fxQm5ME"AG0vY%K˔xDkyqi@ V,5yl͹}(oF Nycg ޸\ 0K $7t&f: 5rӷ4jj|?üTe!Cugz,PM Ɵ>]yHLJIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_unchecked_insensitive@2x.png000066400000000000000000000014001347440174500322260ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX =Q]TmHƠ5TTj~ %7!h &4&QW<י]@f?`'yso3}{=U79oDpwe _5"]A5_SwB@x_pC`q\._d2{XV$Qf9L>wi:qǎoZi qՊ_~8ύ^7)GE,͒K|>l6ph5LY*^qc^ D؛HEZ JZV{ V,̓` tž`*@cHB˗Cr'Ҋ3RTt4}mMrm-,m평-!k\2%ο IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_unchecked_press.png000066400000000000000000000010541347440174500304550ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8SJ\A=uM&A\I>@r$DBN,!D$ʅ32$0 $љ;:u*e*tW:9dbUT0TN̾Mr4QvqPZXESLɏ͢8C R%(~,s`eLU42;9CrBgU!`E[Uf{)5YBó=E< Ӣ̦L>DUfP$I8l{s}֘_|*/Et'q=ovA;kk283uv@jo6vI:çd579l-Ǿs<~&X,XNqvL y^nwh>%m* LFBfYlRC߬ѱaRՔ_.~1FnEx->oK1Bs"O ?\VIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/checkbox/radio_unchecked_press@2x.png000066400000000000000000000026321347440174500310320ustar00rootroot00000000000000PNG  IHDR szzgAMA aQIDATX WMhU>wfkbhB41e AW.\ nܴ]tEpcɦ]QWH S+BĘ[mkZ5i23;sϼDSns9̫uy'2V yxs2~62y񰻈~#7R?˖^FAAl7˗Mnho,"O3 &ԤucIz>~<䮙9s-rW[2Us,&5Of#oY{ɹMN\x՝da]Wdr#%ı:8]* >R7ȗFSjliPh4ae4bLb`|= u)o<.jHQ1"^J\ZP@  x2P ݗ3uN@) t)TEBfJ pyhdI&C`5!, z1&A^ڐEȯ$m|$$+Lj"#T[MA6{S!DmBŗH7IIK[I@8xR ]Y? XL1 |X6D,a˳ zy-I$Z9~E4;n $[`}r@j'(Z xVUf_"mǏ\0Quc:.q/tN{ "$1a5Ww~_2Ov"R3Wƶ{'&Cx8䧩ߏ^g$7FSN : C:#Qy=RCrXpӧFy01sܾ}Wt-w>t_ݎcD`VLODxdl2;XO]~`b51J=I!=c8Cg{z<#i2?\>xAҩEXB LAEp }`ϣ1fιADn[6YL'&CM΍%#ɉV!e}ȳ3.KhhVi@T:, XO8'y+ql#IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/header_arrow_down.png000066400000000000000000000002561347440174500260400ustar00rootroot00000000000000PNG  IHDR Vu\gAMA aeIDAT(c`FK 1L /(&eʁa @|ܹsK@|@iK5"+a MP`d " 0NIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/header_arrow_up.png000066400000000000000000000002721347440174500255130ustar00rootroot00000000000000PNG  IHDR Vu\gAMA aqIDAT(c`(y]RRR?~ Y bFF$ ҈ hRs- R $))yŋ7A61cbb dĠLx4 &OIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/input/000077500000000000000000000000001347440174500227755ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/light/input/input_clear_hover.svg000066400000000000000000000026411347440174500272310ustar00rootroot00000000000000 input_clear_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/input/input_clear_normal.svg000066400000000000000000000026051347440174500273760ustar00rootroot00000000000000 input_clear_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/input/input_clear_press.svg000066400000000000000000000026161347440174500272440ustar00rootroot00000000000000 input_clear_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/slider/000077500000000000000000000000001347440174500231205ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_handle_focus.svg000077500000000000000000000050401347440174500276370ustar00rootroot00000000000000 slider_handle_focus Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_handle_insensitive.svg000077500000000000000000000040721347440174500310640ustar00rootroot00000000000000 slider_handle_insensitive Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_handle_normal.svg000077500000000000000000000051701347440174500300140ustar00rootroot00000000000000 slider_handle_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_handle_press.svg000077500000000000000000000052001347440174500276520ustar00rootroot00000000000000 slider_handle_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_point_handle.png000066400000000000000000000011001347440174500276240ustar00rootroot00000000000000PNG  IHDRw=sRGBIDATH Un0LB}qG~jտ|IC 8V%?H[tx#DZC8t:Yg8[_,/|kr(6ۂFd2yIY'rk( r'0րf S:I c0HƜ<% ur6$n 7@V.}{R̛Oa㡐1 0Nd؞ U+rHde^%:R78+Yp轵"3cWA8] DkFyGEq j1?hl+Q3't:f$$Jպ_Vz^4;֨>4~hCoRW=brL`nlAr4{'FamSvvAp\U8e+يg:vȫ@!`riH])M(~4B,QtG44N5B"-zXv~*ϵט'y>0Ti` IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_point_handle@2x.png000066400000000000000000000027541347440174500302160ustar00rootroot00000000000000PNG  IHDR00WsRGBIDAThMO$UQ0 G1~`W`E5jb&nNLL@cFQ$& cnߧR].$ssǽoݪ.w w(EISSUI -"1SLK9_&'w^V/%1Mr9.;32E_\\J%MgwXlW4@.rɝJ= ;0888[9EmEV |RDZ$ĘɺvYŹnڧӀW"߸, @fꌅǣ(͇ji.̒֓>HXCNrS?۰5e[bcoOSj&gy>rmJkXdA#C݋'a +-‚lC#2YO٧,@\'h85x"T +ƫoO'縹&p]f.h@|=Z16u% CzXhhЖ_IYI v\$w*JR iyqENO 4<ys|K݁,i~Dl%X'œ'a&Id38 :9Rqϼ]`[*AS8?$x;tQ`2 TL|4 t~/?87t;/o(j :#((1a@"fQKJ[[[J!D:A(NJ5t\Us+Oo_dN75|.QQy2PjBiii (Q@ 1U.KnZjwTVd'V..+3>R{h\ Es)xH\9IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_point_handle_focus.png000066400000000000000000000011371347440174500310350ustar00rootroot00000000000000PNG  IHDRw=sRGBIDATH c`1`D7?t51?8<6>3# 5W1¦.gG/_|O4pp1Wxf,_Lh1sb`)JcX@Yീf}@4Z@(0AP^t ֕}t = 1 yF.rmoٔc?oAz@zt A*mVoRr Ak}cBVDlXkn^ E0D -rsý?pYzK\prQ'?TJaAD Kش缘3@ ^ % 0ɸ' .z{?aAwSpH 9h]*.F+YJqbAC@jX53|=zD9P7bb?:E1\Ԉpb jyW@AAӠ}IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_point_handle_focus@2x.png000066400000000000000000000026261347440174500314130ustar00rootroot00000000000000PNG  IHDR00WsRGBPIDATh[LUA#AbTM}1ꋩ414M\J-j4jńjl!*PӪڂPiar].;s{;gvg/9aw]K[n׽oѷ &hLkmq`zzZCJT+nPqQP7e=4UT)Ă_}36fMel'4:LEC/T 95<(;pMx0 _zscf&ؖ0 ֤o+z^?tĢ. -W"Q h9S sQ]^9 _SG[?S%p>}f@iCG3TQjY&J1ÈW^S{t%@Ehd_zKbQ%-7hUe^R=aCgJV ƤuX}MP}~-I` Dz+̙;9:J'XFU>NT& aX~Ґ1=&!&deӾϫd6:_2 ȖzoѽL5wGi? /ƃN* `R ;Y/¾7NGkEWۧ-d:t5/x)^L$BKU}ޏ:BiJi* ,C#B~ _0X0NS_q1 ')vJZWc = EX71J8pr;L&g'WvnJ6iL, p]Ȅ*a.'T;P~5S N,\wW^X2pL"Ŗb7z#7J*ltqnD 8[L#fBBL:k/Actd)' į*///OL#i&mæG֞rDnSI2[)fI)<׀86ԧ[gV2 zߘ8 3#{79`dJZ\$dRtDǨfv׻˨ ~FTVMP8Hv +~&^oxFh8G8~GHF u;&$rJ#Q$NMOME< UdAKnx`IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_point_handle_insensitive@2x.png000066400000000000000000000023771347440174500326370ustar00rootroot00000000000000PNG  IHDR00WsRGBIDAThKOVH)Hl6iK UB(iX A|!EjO M.i%"a a<>t6s;Rhʐۖg񵤹#ǠD#KIA}X`ޑRX,[GgwUQE. @ @dA]|J'''?vttEo\.wvv>iR4o&)PsA0wRlN40' kZ|˔d$-TWh4 V݊ ,ה25YSe.- =],aKQ'uZ0mc¥r+;C B귁;<<<?]]]PNI-x󦦦^V*+]Ug^ quq]P9ȅ.箪?-.ƫhZa]th@A.rJ#wc<. Cq EW`Q{?88x%WTsfff9J%\gszzz9#Wb߲ / qkK|o"݁4VBz*5 R|$QwJWSxlP;+?o~~~"18vwuD:IOpddk-*)Q9V_p|&h<+DJ?:^f'9u[_RO`:0]xx*mmm=xdVss,M-6 \7BCz=,6Je:4~V Ihᩴ|%q=6BRGŹŎդ7_Q ȻGGGN( ALΓ") RI5rlݠߓDXqu^C$hISo{ GՓOoF(3_MlR;Ւ "`IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_point_handle_press.png000066400000000000000000000013361347440174500310530ustar00rootroot00000000000000PNG  IHDRw=sRGBIDATH UkAٺ1%Eǥ^,/  QiXfQШm h06АԦc|AГl1o†\T?a0@Hܯ"qB}857cl^=w; Ap ¢F]ɰ^mH3hxԗeqy̕ҁx\($0R]V: ٠>; lQB]NfR4]~X WWM̼O3W>dx1W9ȕ$Q`Q{yF(g WXF ϗp, csi ޲Y bb9љsȵB6@55a`T%baiFxamb reّl e@1712"YΗjr|(?8;&xxqe!ѺQq5e|a7c{QT=μ dD,/&=u[gGT?D"Iep6:ݣ^ ~4(pAP`Š$R2QuT.Jd4*}+@UJ {۝m8ϽvzEѫM. :{"(/ ES!6S:㽸NejIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/slider/slider_point_handle_press@2x.png000066400000000000000000000033521347440174500314250ustar00rootroot00000000000000PNG  IHDR00WsRGBIDAThY[lU>gʶt[*7E71BLC1R@'@LaA PVE 1**@ {n{sRhwf; ?soߜelT plL2IΤk֖Q |Kޯlِf"Y%%{.= [\"ѬPyƵ)A{VvA~|no+KR˥_#GS2i+z[H1|.oxɻ%;ۦ'2q9,95~M XZ1:mڔ |1@&`UM%鍋b"xNl@zeUTYо4]y`+Qʗ:~V X!1X%psb4gsn=5t0gsn=5t0gsnm-ckPi2zꂕ5+kL܂ l|L@$`rfJaƼ$f_&S|8L+㫙p&!["kC3a}NR\/4}c1X&@QtnHvEXdqPmow-ɟ%O.jw%.%8+,pV~ tŠ幗4zg ki%f̎wMzGsatӿ y1jYa)ELhZ=m?-U xHTQ[e/ULɚT3(hD[בn.E!1%Z0>%]ZAp!%QĄ2ZB\6aЪn]BHQg+* ƕSwTZ*R1'v!:AKҒ ^ j'LQI۹}ԅrjm2-ye-(k- 3r|UzEnpX%=Z @s m`>,ͨ)A6fjLtϥ-/8FsUA6`J`z-^NfC N,E¸ WLMh!AnX%\Q) ?BGd:U'*3 `XI'qBXKStI.Rc%s\\sm,P،q5Ӯo;OKx'Ң_ҺGi|sUM*5z (|HT{"#8pRamE'YSԝW;;$\8P)q畴%*=JT:%:*:r`5{@SA@FB}o_:oYD}k_gc&fIѭ<&u?kmw 1bLa`.}1qte+9ds#'PpCgkRsϒ3ϓN^C88Q<6Bk8\A HJ<)EǿgkP:J$_ (p6=w>~O-}항^]E3"ǦoXݹRMRN&"z`:*V#EupoIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/000077500000000000000000000000001347440174500233205ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_down_hover.png000066400000000000000000000002111347440174500304570ustar00rootroot00000000000000PNG  IHDRxUsRGBCIDATcf``b9 I /( H8 C'P& A&e8 ` k/IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_down_insensitive.png000066400000000000000000000002451347440174500317030ustar00rootroot00000000000000PNG  IHDRxUsRGB_IDATc4666 .f@򌌌L I*L$W&&/ A=yHę3g)bIQ$}}}mdA5# IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_down_normal.png000066400000000000000000000002461347440174500306340ustar00rootroot00000000000000PNG  IHDRxUsRGB`IDATc444eddܹ% HȵcIP &j !#H$ RT~I211MV?P$ G 8YE+3IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_down_press.png000066400000000000000000000002571347440174500305020ustar00rootroot00000000000000PNG  IHDRxUsRGBiIDATc]?+K@Kg\!#H$ RT?$c)`(%A04$ݕ@\..IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_minus_hover.png000066400000000000000000000001461347440174500306520ustar00rootroot00000000000000PNG  IHDR;֕JsRGB IDAT(c`C$MQ^=IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_minus_insensitive.png000066400000000000000000000001531347440174500320650ustar00rootroot00000000000000PNG  IHDR;֕JsRGB%IDAT(c`C$a400H .\EHͨ TIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_minus_normal.png000066400000000000000000000001541347440174500310160ustar00rootroot00000000000000PNG  IHDR;֕JsRGB&IDAT(c`C$a400c/\GHxEơIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_minus_press.png000066400000000000000000000001541347440174500306620ustar00rootroot00000000000000PNG  IHDR;֕JsRGB&IDAT(c`C$aY?MGHF:IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_plus_hover.png000066400000000000000000000001721347440174500305010ustar00rootroot00000000000000PNG  IHDR;֕JsRGB4IDAT(c`?>1$$7D53" o 1I!x FACo}yl=IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_plus_insensitive.png000066400000000000000000000001771347440174500317230ustar00rootroot00000000000000PNG  IHDR;֕JsRGB9IDAT(c` ØIa"80u … Xل F]lXIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_plus_normal.png000066400000000000000000000002001347440174500306360ustar00rootroot00000000000000PNG  IHDR;֕JsRGB:IDAT(c`?>1$$7D53E(p`@ Q؄ FQ9u0 F`IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_plus_press.png000066400000000000000000000002001347440174500305020ustar00rootroot00000000000000PNG  IHDR;֕JsRGB:IDAT(c`@gƄOW"9Q؄ FQ YLIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_up_hover.png000066400000000000000000000002001347440174500301320ustar00rootroot00000000000000PNG  IHDRxUsRGB:IDATc`@!@n2 Ŀ8! a$Al," x(pn N>ۂIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_up_insensitive.png000066400000000000000000000002521347440174500313560ustar00rootroot00000000000000PNG  IHDRxUsRGBdIDATc`@JHB 0HN7 9$33;)bD<{ .d1f111;0IgϞNy4rIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_up_normal.png000066400000000000000000000002541347440174500303100ustar00rootroot00000000000000PNG  IHDRxUsRGBfIDATc`@!@$ $GBB/΁ `@~6PR =9d .1L300``2 @:a ϟ_4)4-vfBLIENDB`qt5integration-5.0.0/dstyleplugin/assets/light/spinbox/spinbutton_up_press.png000066400000000000000000000002541347440174500301540ustar00rootroot00000000000000PNG  IHDRxUsRGBfIDATMA 0 Q7=E_Cb+(og8HCA!ȐMahL' ޺Tз&v{0V#IENDB`qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/000077500000000000000000000000001347440174500230715ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/add_hover.svg000066400000000000000000000013171347440174500255470ustar00rootroot00000000000000 add_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/add_normal.svg000066400000000000000000000013211347440174500257070ustar00rootroot00000000000000 add_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/add_press.svg000066400000000000000000000013171347440174500255600ustar00rootroot00000000000000 add_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/pagedown_hover.svg000066400000000000000000000012011347440174500266130ustar00rootroot00000000000000 pagedown_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/pagedown_insensitive.svg000066400000000000000000000012431347440174500300360ustar00rootroot00000000000000 pagedown_insensitive Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/pagedown_normal.svg000066400000000000000000000012031347440174500267620ustar00rootroot00000000000000 pagedown_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/pagedown_press.svg000066400000000000000000000012011347440174500266240ustar00rootroot00000000000000 pagedown_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/pageup_hover.svg000066400000000000000000000012261347440174500262770ustar00rootroot00000000000000 pageup_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/pageup_insensitive.svg000066400000000000000000000012701347440174500275130ustar00rootroot00000000000000 pageup_insensitive Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/pageup_normal.svg000066400000000000000000000012301347440174500264370ustar00rootroot00000000000000 pageup_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/pageup_press.svg000066400000000000000000000012261347440174500263100ustar00rootroot00000000000000 pageup_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/tab_close_hover.svg000066400000000000000000000022001347440174500267420ustar00rootroot00000000000000 tab_close_hover Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/tab_close_normal.svg000066400000000000000000000034261347440174500271220ustar00rootroot00000000000000 tab_close_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/light/tabbar/tab_close_press.svg000066400000000000000000000021301347440174500267550ustar00rootroot00000000000000 tab_close_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/semidark/000077500000000000000000000000001347440174500223265ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/semidark/check_disabled.png000066400000000000000000000003321347440174500257360ustar00rootroot00000000000000PNG  IHDR  gAMA aIDAT} @w@`!SY "R Z`Xvw3$谖2V[huȲF1)"U!T (()Gx!5StNjѫ4L=mo/:-)=.Hj:+h[55QIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/check_normal.png000066400000000000000000000003251347440174500254610ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`" %Lxԁ8:>Ob5|D & L @ ـL ȸ&;sA1@$S@\@V1@ m@^iTT M@<Pex@@& .H"xIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/check_selected.png000066400000000000000000000003151347440174500257600ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`Ċx@Z3T _@lO2P{ .+rxX&dsE ^ @i@|y@@z1_ኁ@|q1budPBo1#a dC*t/IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/000077500000000000000000000000001347440174500241145ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_checked.png000066400000000000000000000010011347440174500300460ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c` ܿ_DHs160/H9ȷ+r޿†@ݻgvݟ@$jǖ-[$߽{3yda5@0330/9[0!Dv޽JQQH ?kÆ >jr>رٟ>}ZS1 bؼyHzzzTTT&\RRRLFxa֭ZZZKϜ9SR;_K.M;oF 0?$$d޽{MYXXXYYU.\ F1۷ ʁ.x4$׭AAAG5!Q It=z-48NlPXXX #eԂ r&eA ͠dc2L0 ,0E3L,DUzIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_checked@2x.png000066400000000000000000000021371347440174500304330ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WmHQr#+,NHBB$HaZ-4i1d,B%h"BQ:!$E0JCS3w_ݹ|<{{w ſ6&''a伕`jۉw3s/ZQTZW3 &ơva'0b9LVSSSǀ_j@ ir0"beeew`0|Xd7422p9dfu/%MQQQ ёKSSS7Rv9 5o=@{XGRbb (e^d;h w$rI|= `M c' #hpp0 ί35p{bR}ZsL\777DŽ=dxT,6L R(Ѐ>APo- '቞"_I.%nJjYGV>x8y|hxxx5ܜ3inZ %$$2bby={WWWFEE8QJw{ Qy#/R9ƴ8g{ʖ@TߘmeӒ'۽W0Xbbb=']uVu 33k ˟ozl6Gƺ<Lrcc']Qbl ) } ָ,r29~YY,+Sg0~;+l%L\oq(3>$xOO~o@r0 SJlmpIЫOo@-5.Ao#)57e=ʏ0 _ypS)IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_checked_focus.png000066400000000000000000000010331347440174500312520ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c` ܿ_Dv߯F30HЁ&3;0_ q322Z@eqlNjS%%Nد{o"GQQ"4 {ɓ69Hr6.AA@ZZy!P[˿3b *m>|X t=KG;vp"GG@ ytW...͛7;$`GIEEe߿%%%a4[n Zz̙2OOON__9@Zti4hH,@y!!!kk"((T,ʪr…0M4o߾o``Pt{! _n : bLĤѣoͧı03>$lmm=! &Z ȸ= edb\#:3 h[=,sȢ <IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_checked_focus@2x.png000066400000000000000000000022541347440174500316320ustar00rootroot00000000000000PNG  IHDR szzgAMA acIDATX WoL[Uvu@Af$N [Dp7I!;> 1q1uDHAu&LHL@0̚ ,]y)O{}= 6ރ Z7#(v εdKԪ}^e;;;.6/c̒'-zq97E.~ $3z}'vd V.G{$R )}|+w4 .ٜG;滻 ${{'D#) E*b[QQ 0V_ `@[[p(z?Ѿv-3/(_A֠ TkZ-| h\jB 9@ͰSsg4IN044tjɑN; LMUUd2][&777lKaap|+?΀>00ÃMA9w V2j.L*䙙kSSd,tċ-//_uͦF>Q9!h4^*oCeccm6;Ⱦ U \ n?]-,t='9rްSյ$77ڞ{)IfL:ab1rкܜXQ@7-~S9f=Vgˊ4#g߄\k?)6;/5r*mf P<#M6;@kF# NV?̿!NhIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_checked_hover.png000066400000000000000000000011201347440174500312530ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c` pQ|lvJg??C?+%# YgRp6÷O释_?@Heabh/Y"43(w=' 1&fV.>&mά4cՙ,.3~Ύxp . %kjGk~9n+WyVVV֌U1{T140|ubc.F72A,r>u A'@% XwC￘z2[C~6^6N'd=:Fŀ߾gkckAL=ύ=ӀNU1{&AY_M ahgd+rl Y( D `Ct3A9410<qH7]/r-BN "/!&1Pe@.IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_checked_hover@2x.png000066400000000000000000000023701347440174500316350ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WoLU{{k aҮں`V,Eef ctk\ʴ`O&馱j%k17\Qgµ%ƽp9/煔?/ۧvss{^[o$D9n& r`8wݎ3>8ǰo3ŜGHzUU!|P"/jˇ @ 8wb,[;7 aZn*@#/!E3vB]^rRt01cƢbi~8m hpY׺>pJw?&7g:6:ڟLpxt ` ^ a^ 7\.1-7m; e{Xc৙nrl(Yy|\AS Ȩ(YunG^!7A2m?ttCc%rq}]qɍ ~zѧkG}m;x|fAN/BgęFp#3|~)\0s2tOĻ >t0EMe,wxn8"ʳg{ANyy͎a:RUPdQc#Ɖw4Gz^fK{!6ީ4#t+xOnݮݲL퓐)uZkVJs qN,w%qmʄ+1|lYZ(};vNzoK8kh%{ Yu4j;o}Lv{[|V¼>*}#qjĖ9Z*c]?هڷB8plO{R֝/h ű2 5qtOTӚ+cGٜÇŃ(S'AFW?LxpS"e \GrnSD]C@r7̻?^栞$0IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_checked_insensitive.png000066400000000000000000000007631347440174500325040ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8SK`w-]0\M "U򢑗xb7g*x,괈i`bi(8%}~y<\~ߏTl\l 306zt:L&F|>W7bHt:! l~FfbQv ؕrS<7V-IZ|;(R xJ8.b /z~Zz}/Y˲^TwaORf AP}jzUU=G@6e3 rjͯM ǘ.˲^4Mr2DOx0&!Lj#O(H$MӼdžp j%r"piD bA ,察ě>?n@ko/okIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_checked_insensitive@2x.png000066400000000000000000000020771347440174500330560ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W[OZA"4PC[5&XjW?ۣ&5X!Hm6( K"J7gqA/&ۙ9k>vss۷ z*L?99 \]J۱/'ƕ+鰑B**D\:,/A]9v&xRzffN'lܳ(P*-VTP3XD(`H[F0ĝ3#Q{s@ pp %DDv!߿f7A!Gާ'AߓqW<'l.6A`@Maf)bǣ@0 HXUJK_KlqL/k?7M`d<15yAūmLPT6X8r^o`$RӭqWt6+ *bV@ 3frA2Q6-6$ŒɨuыxY7[VcbzH:|44>,z+@@IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_checked_press@2x.png000066400000000000000000000027371347440174500316550ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX Wmhe޳sq0XȲ>)*3+2*,+V ѲSF*BAC"(UQ} Yf|<]>{W羯xߝ7Yu.µغ#SFVkKp@sh;Uep\ G9YmЍ9-Q:z+x_+D*gdHJ.؄m(Nc;=u]”R6]ƂڢG Éx ~~FPtc;w}w}X"_:)yFێb=R[oW,J!1gꧩi؊Pm*\&*/F7aP$B`otcd枍G"T!ݍ{NXHL0TNJT.1 ` j#t_wCz@ Vxadʹx()̓}nZ+[Zro6(-3=ΊC !0"t '+`-TXq=H߆iy ~BBƝ?Ua+; 289ppH%~kWD kqEp*Iv 1FO'o *6<7glB)Kvxזs7YY3Wu]qXs 8"FTaڮd}JG]DگVr ^Pɻjw<2]hâA-"1~>glŨbtw%KNC-?6ӁlTaBedô.^lg݉ 8Tb+ ۸cXLBkCl?ܱM[GYM`}Yh#Y XPfFӆ"k~ }CćNwKh!xL*l3'YzȟU$+_|"!ÇCcMY Cc>TI@s@d熠 (y 222+`{(%> RR  "b4 y! - bYLjn `s5'!˽xz>=0qp!,Mʰ@,3\B 6SIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_mixed@2x.png000066400000000000000000000007211347440174500301500ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W1N@Wvf+bIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_mixed_focus@2x.png000066400000000000000000000010201347440174500313400ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX c`[-my!Z3В\dKsbWt-w:<D-w[|٢ʗjHeKŵZ+Wgdt4 f<@`?0EԠ%Ev302J210 f8(Alϩm9\ Al] 6`Ѵ0jNis8lp>4uhJ]/*ŧ$jjj6< J$4u<{C`!`:Am8Z~v扫 PD̆`$.\j@ 3A-c>lxA]cOwۨ,Ɂ,9\W} 958I -IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_mixed_hover.png000066400000000000000000000004261347440174500310030ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`02PR`2v,` ]g85QI0&00H2142]X @jAzza`$vAX!E{PĀ@b(F @z#(y jz?÷7 n10' fՍ |"w q0635$~31;<< IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_mixed_hover@2x.png000066400000000000000000000010021347440174500313440ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX 헱KQǿwgIbAR ֤ :FH MԐK45$ bw|j.y&qw=z{/( j)Ϗ%v3Ǎi11yD<0 ʀWѲ#~jXf GDr/:(z>P'6vӈθ,6]}IF.DmYdJ))y߹+'E&L)e_CAAcO 9k;il'$I[a'&};Q,W\.zFf%%odvRp!r+|ġԤ6d)(C 6  De.a4E^s4I ^ iἸ KpGg 6ŏ/kVUź j$%5Zp,XQLp-t`̈́֏[R\[2egg৛.MEw~ ~_{/% .=\3ڽ:(KfJdXr-ЩLޔad?8/Ho\$7@MY Q!s`nR'QIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_mixed_press.png000066400000000000000000000006231347440174500310130ustar00rootroot00000000000000PNG  IHDRagAMA aJIDAT8R1N1 78x'P'^ (OHt Xfq6 a;'و|=J$r?L(D3v0&ҦsuÊ~ d6#Q1=`}DMreZށyilrm1-ȁM$D5jkj@}=l^Ol'׳ $$4ű-Id8խoWz"oGhwܪ@qȿeA@EYG΍& ;`UyC3H.Duc{"y/;1srM/3 gyn;f _g[k.IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_mixed_press@2x.png000066400000000000000000000020061347440174500313620ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX 嗽nSAw(R$R PsgH /@::-H@HMqp|og=e=3眙]_;rJpv~}ikBDJL P*Ǜ>mm˹tUCO[g7ͳ:A=^MDɢ)[o`d[:fM4dX~uKJaKAJB}6͡he 2n`\ nϐ^:djkTcӞDǘRo"D4M7D7(@ݷ %4qk yib!ۚw g Zo'XPoe1FCu9NM[n <˃[^z).>WsuB#b|S PT:_YI&jמy z\X<˧ȅiQ!Z.n #P޸0nNta[ sÑz<(ХpBć=s9  zsCD`=;: _x|f@VY[%b[ ̎@zèm〮YmiDh" ɜ .4Z|@$ 񼧽 "⪡x,+hi@<5?dP\ǁS^"Obޗ/ ]? 0|ywiBSď(JA|`Hgh ugVގܸkwM <Zεtn7{Wklq/_b&k$G cO6l; (y 222+`{(%> RR  "b4 y! - bYLjn߀WTCՂ4%I)L0CԲCY IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_unchecked@2x.png000066400000000000000000000006541347440174500310000ustar00rootroot00000000000000PNG  IHDR szzgAMA acIDATX WAN@T;ݙ^x t 2܀. @luцɗtcuљda}o8!cӜmچzi~ 3jXҜGo gEB> P-=w]YUkoY}]j'I\axy)a$`Yȣ(zi4Q E"v1pMܺ75 Ņ .S ^-H8<ӳ8s9@zpS3l.Y @N12;ҫc ([SjZM̲X,#[6&5a/G3yHwI3IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_unchecked_focus.png000066400000000000000000000003771347440174500316270ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0v߯F30H3#" &aX@AeqlNj3@6O= C#P]%XO&@v DMf:ylLzh,x0= DP0hZp*AɓC@j@jAd 2H?ERnE/:ZoIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_unchecked_focus@2x.png000066400000000000000000000007261347440174500321770ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX c`[-my!Z3В\dKsbWt-w:<D-w[|٢ʗjHeKŵZ+Wgdt4 f<@`?0EԠ%Ev302J210 f8(Alϩm9\ Al] 6`Ѵ0jNis8lp>4uhhh"WP jѪ d3HԀѴ0av@8n K(W 65LPd&3* . '`d狻mnZ@ w_l@.+JAl$%͠ ѩ8IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_unchecked_hover.png000066400000000000000000000003631347440174500316260ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`02PR`2v,` ]g85QI0&00H2142]X @jAzzQF@ɓXV  Qepۏ??qf5ndɍX35+$~31ĺ1rǖIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_unchecked_hover@2x.png000066400000000000000000000007221347440174500321770ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX 헱K@_j0Č UqNn'qrqMpqrp H&PCI+(M^;ŦE%wN:$1.Q >,+*@[{$^.)7MǚERBxAyI)j2߼蝓"S D}T̄3`0 L&I%b:-iowʸl" m9=5K]#6qȟ=T5=xp{DN|' LJ I ʋ1%|i61tF, O*8ؒœ\+nAE{ /K/wyz3IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_unchecked_insensitive.png000066400000000000000000000003321347440174500330370ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0 H1??G ~b xBtt4ˍԀ- G@`AjAz@a^:4" r@= qN4 L:ZH2%IAuYOp@`IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_unchecked_insensitive@2x.png000066400000000000000000000006151347440174500334150ustar00rootroot00000000000000PNG  IHDR szzgAMA aDIDATX WK 0LQFgw9z܋{ŕ"XgB,/F֘L|Q߇~( MZ@qօ$s @@W. =L\_8!VX'I2 p* iἸ1ɩ]`XEݳԈC֗5WiO' 0]zGYp4YEQTG,T~ޔad?βlV'"s~"'jN& 1SQ?P IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/checkbox_unchecked_press.png000066400000000000000000000005751347440174500316440ustar00rootroot00000000000000PNG  IHDRagAMA a4IDAT8RAR0 ||ϡ9wz26hFҮi߽}5{W|(c;30X/j"&10 `дw(@zD#f^!76i lc7*@ROۦv@sFZ_4q5QnTt8<3s󧐔5-tm*G"𶁀7R(j@pXDU/O6Еx8~|x5)A*[`⡥(p̑dؙ%/y+ nf ]oqX#(AQGC~@oƙjo;PFm 6 qkyqGJXmMyy 7YD>94_o.(G>>hnmT'<O)bc8|WSx9֦U"MNUZ1 *?bb݀tb8S߁\gm 43_Ƕջ8"|WEí;Ht~_ I*HX ba[G)Z#HZ_'ښHp"l^:NҠԄB"]yD2G6Jp0Q0#&7f4&z22|"'@r!O=6<+gVn9B2?yد`aN΅1YbvMߺgw2[k5& |ubt$)+YlXn!r ^1gYx7FB9Cznn+AreSis!Y5 pEёΘe `#j+48kΘO\A0V) [%in$).\bo#U C+j'?Leɤ'gIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_checked@2x.png000066400000000000000000000017331347440174500277440ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WKAޘJ4JD ^b9K7k{^o-^PHJ R-BI "-3m2ԃ3e] (ס߃ڍzUU4OUnz<6S"ý (tP?F#`Aa:>|h4lG B^O}]4 W0~ 6>\^^222R+p*NlhhhD1p Mcggr78 ;X"dgsIl||i'IlO<$WAFv~~~mR:ԕ2ض-%vmu< l`x5&60a ǣ?J8;+Պm&'''ڍL./-X 5x9 \In l{+ .+L&_McRFJ lT}Π'!uzzy=:B81͛e~0hl6qxxd C?鯝gmM9qq1{(81 b/}'727X]]j.\uVF{Ʉ)+ C pv 3&BǬ&^8sU6ĔyaMrZsG/bRAaZN]FsO5 z3cB㲀ȹI ]]1 aIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_checked_focus.png000066400000000000000000000006631347440174500305720ustar00rootroot00000000000000PNG  IHDRagAMA ajIDAT8c`0_%r*P;@8z3~FփbߎǷZyܛ żJfaL\LY#f4,LX(P@ ɁԀ 9W~(L 4ĚSŨ]&"AΆi644d=}t՝;w΁0 g̚5THH(QAlDʰ) )bPf]PT xF#AɁ FFP<u{n_0 Ƀl0exلN@j@.)$')2l5/IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_checked_focus@2x.png000066400000000000000000000021121347440174500311330ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W]HTAs׻4EJ5!*H )@ɟL0(ا(I0H4!Bb0Q[]r{;ͷ6w,|3|3\pUIB" *a@f@gDJD/w&NR&tW2B+C_'$Ei$;edǩς$b3sw3=xY'<3tL%T  J} wmLIͼ,Dt WH}Vv]j^KTU7_kn`'RX!nF$Lx̊D\Q24-o"7Wj*npCtm:ˬC>`ߜpl\+X[ 7ǵut6 gxjX}s-V'2Y5`k|LDᩍ]=h>/,G8Wq(#l$Q1 PLh1/HU0Wc b!G9c{\aU6Z $cuֵ(L,gʈ,$Я# Q5pA|$#jlnu?Ԑ GIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_checked_hover.png000066400000000000000000000010761347440174500305750ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S=H[QˋşhI@CşLV08*8M":t֥&.7]ZhI,TAQS$O6{7Q{9s9Onn(,7Mf:`T\\W}_wc!2+yn V{-A1O@؜_Ɯ}eB+Է}" ~n~L aH3۷*m`lDDr$ˠxWoVwcZn Y’#Y-L:E_c~#^/'``|ssYw| #ǘ'|R}T 9Q>Ygi2مqT|u ??<:Y&1I\zd_ԐA"iIQm7`'{gr-_qae0ǹ,@9P ;N ,JXCWLI,l j? ٲSq,o]pt"ү[dIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_checked_hover@2x.png000066400000000000000000000024751347440174500311530ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W]hU~4mβHMċNPAa Uqwc(tT!wzVAz!Q\B\if]m.Lq|sr5IZ|cVGs_tF;=mB\DL{4a#X = FK A{9Α~'57Ua_bSᒊ'_Nީa bb\XenPu.s  wĶV9^JaC#Ehb=‹Еjsq[,sj$;}p|aU.>~ { QYBV\q[G{߼t^owd5FTZ D^G`JyN2Sa_6~lrSL 藊jffQ[M.ryk\,x'3 o7jk ׊qFcYF|Ul.^|XPm"'Vk5؎\NU wo5>FmW\DW`R-CY>պj[5mī˜lOVd'xOG__WW>~5iHL 4rS̋@=8B->:+0Rߝ@arƔiBSYv6M󡹮SN<v8~뺖`NN#.#m`pAZ|g&gLGXp=`VeěvIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_checked_insensitive@2x.png000066400000000000000000000014761347440174500323700ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX Wn15hRH[!ED/;čΝ $T*KJ9jpm!&7^⩷}7`6MBϨ&IX,>EP_Crxk%UP$3Bl2JFxxoSv?x/V&:`B9(WZ]t<~lĹ@(_Db>%O0naf.w;hZD̚nkݓE8 -sxpzq ըa*jNۏV')d BW!WθQC5k_7ykg_짙'5qU@\rg%(,8KΊ`þ4d IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_checked_press@2x.png000066400000000000000000000026701347440174500311610ustar00rootroot00000000000000PNG  IHDR szzgAMA aoIDATX WMh]Us^SĚ"vUTDTэ. ĕ WRpFԍPRTŠ ԶRkS6i!!$}swkNfo9?ވNdW]~ob<P/_JU2=n&)R)-LLdɏqE^ ոe't}Gy/P0`, Թ/y]찛 ZwAq&'}]zJ\345Y9Ĵ1"'Jlםϣb)%bUN6Ylac K4bIJy":]vvgAX. LIrL3xnY˜|GI@&Lm´R1S7rb4Ln Z@[ـ`r,cYd#[VܺwY}b mt)Je[sp)ZJxw=AS=[D^,2ХrzFd70-%C9-ߛ[_.y&6"4MDO` y*pxh4 J@kahm'!ÉEh[6Kުs!yܰP,O/5kƦН {Z!V'۳\M ؔ"-aN5Mq1W ]!0_G[0&Hm?b̬n.~_8v29U[׮! )Uk2Bd7g,Xm=9#6D-ʥ(@*_/f09zVdVgCTWn1=A hږ 005á00ô4 Ib،û Au#m"⮷uoK| ϼ[BF>3 ?<}͐űPӺK`%(npPx1Zb,@sSxD꥟FbӜ+TGB`FB(.ǩ>!t*u^?{ru_EH!Z1Sh߅ nO]t,-Riu5ܹp.&bAV5O{e畎f.(B%83مFu\߰mKNbn *\rvvԫ/>x'/b@6Ė<̜,#|V5J[ -0B:M̧E@Gw }=cEAmtRtskgGϗ&p112{6m~j+4}6oxM[Ǧ 2!p܊ CxyYIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_mixed.png000066400000000000000000000005351347440174500271110ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0?PL偘*H?Kb` f)Ǐ._ŋTDFF0{h38 iO9st 00HjB?@O3@Z `/9&@g ]A#wr LgZPejA3`Jj1ĂMɹs^xQcmm=Y AHgg&P#䱉 Z ^%` L@j :JH'e@N̄ r8㫡5 IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_mixed@2x.png000066400000000000000000000014761347440174500274700ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WAkAލ -b4z ҃D{oО,C R 5j-3˨k6!ơ}Դt'\.`C ~ v-pK;B@|? cd!A-`0l6v}h4^Wd2T*u G{"7Fp9_ZoBa08P kZ8N?CL!u0Kp~7drt:?ʺdr^!אV$6mc9Z":Ͷ:2|Z}Cy` W- }Kc8W=VD {s|F=:ë #' *v.m  w᜘ I`߮rmWVvb 0jljcLZ k'j]*ls'*QXLa\\qER:Uu\!#9`;63#[љ; "Ӕ\)ꃩ6 Gg,&ح) tc1_:so6YZ+m4 OkV2,&v9ZQ $c]QnT!,-e$A݈A?&* Af>_x[[ubL~IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_mixed_focus.png000066400000000000000000000010661347440174500303100ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0bӯ_F_ `yF6_ฅU9?/[} ūxwAp~0E_`@sxz&6NF66KA@pt\ۻ{ג%@E\BJ#ك@j@U_k3@j@jV 'v/> 9'>_s $@ 5Q-`ϝ;|ݧѣ0wY _p{dI~722R p;&K00z#VX!j01片 cQ"RR ҃":_v(%aH H-L3 lm ,d6RnoS@jjS?`qff FFFs/sl$V΍@Ew/E_!&)+CIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_mixed_focus@2x.png000066400000000000000000000023671347440174500306670ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W]lUwfwf.iSjRh F*>HH!lC61$T1+ Ƥ>ISJ $ -߅X~t?%[ܝ\ϙr%1$ι|s;K]\ IGH[DHFFx*pwu#d9a,6R4%o7L,H,_UVBi#cLDJ$c1#DNF՘T$oOY <ޭ1|TS&N޹qN^>\ږisܒQv"GErW'%t L 8{pP{`tpqaSGcyT1(Yz5BK}D'(RVҎDd[hK'cfX>j,^ԱTpƺ&b`!>O ?߻ZG$K[P 8D''͘hJ`"v$^-8׀7wH昰%b.kE͒Et3!]ĺ8I@cz4FB|4' ~B\ &xKEub\E?<-cNz$ 7E붶"}-XӴ;s+Pu_ @ l|2ľ @#G|r7+ޞʽTRe<9RR`Yhh]˗ .!o |Fkk L940s4gMm9b:4缴U#11 K2S< "!4b`=xwͅ-;NT+WR2`+.~ydB8 _G9u:vß؏ѭW~u r5QLRj@Z(7Bwя3[Fhc ? g]$WI%Y 3+ہ*:8`1gDn;LIq?:4`wE4xd 盧8[׋}z'Թap ./BS*ɈP!YvTZA HFfygKT!#BŢC +%#XyL,U$Wf*B K9d(*p o|rA dkV{rH2Z2"IQ"s5ӯHk1"qv hG`:anMVh'GFܷ D2Ec)T}J Ⱥ C OIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_mixed_hover@2x.png000066400000000000000000000022231347440174500306620ustar00rootroot00000000000000PNG  IHDR szzgAMA aJIDATX WMhcU=/i4Lmb2:NAQtƝTA ;7t7 ,E\t%8t43t: ?L̽F}76Q).cin+WjY28F'Na$A47F,n%Eeu[[(8ΕPwƆ<<13ܓSF#} ?IDMGQ{߼=FWw%'H=8Fb">$"7Ov;(n\.k?L.0 Xah" t(uhv~ACcOY{Ռw\3pZs 䆉?0űͬvӆuͷ K2 =0{9:j6a KղM2et;jnt/Oaffᡱ3dIxH^pe[\⤅{w1`x VuŎ wnqW3-lZ"X3'm i}18zTiծж4#TļeBxkI!a;.SMƠor Ux~rpYp+@5%ӬdB_&,a!.qҬY=J&bvmf/lqKȶ4zl[7s>v "͊ 8l{ąYD9j5 TKɆ#Z"~&@P`NtCV3a&C@S$/\oo\G("RZO<$5-ךfyY3{ATs"TY|_zO>xǾ?DBNr'BxLDyk$ x$lW bk\79n /}E%kV'& :aqLbq5-o~v}[wQ8,@Nޝ >DHʢKF\"0:IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_mixed_insensitive.png000066400000000000000000000005101347440174500315220ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S@ Z02&|%CǏP)@GcgBMpc| jh♟繆jE <@u1Cg<븮CȎ ?DC>TQ;r)D,r HFILJЧH,9hsmyTX͠mޟĒCvf8^J)eΘeqc>4W+ GZk DzHrM@䧟8&Rw hIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_mixed_insensitive@2x.png000066400000000000000000000013471347440174500321050ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WA1˶vw[a)\*EzT<%=^œE/`Ѳt;,MBf 3:x>d&|Bw:aVŏp_31˅(@R!CJ+@y/t:d2ᛋZvl6/jkq.W4? W Rt XgU7iv6 mM-||~KK K?i"kYnTT6:2 m"l6+ O5F=j~KNPbĆØޞ[Mp8 'OMN\beb4+d0 [r.0 [r :f!6:g'u:v=crGR?n9Xt#-)"؆}AChb\\+b #1 %9lL6b[J.mT0Su]OՀ1UmP'Q^<7iXvbSl0B?q =YK ua)8ߕ *"Fր&"2 0Dτ%lY }IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_mixed_press.png000066400000000000000000000010411347440174500303160ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8R=OTA=36nAH06|X #-\k5;DMtl@ :caavf8gfg٬νs9޷o\f^s+h:g::PDTg-pɌpIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_mixed_press@2x.png000066400000000000000000000026041347440174500306760ustar00rootroot00000000000000PNG  IHDR szzgAMA a;IDATX WMhU>w~^SVkE+.F VFwvw.*EP"EAp*ET Ň"$)67;sϼ=p{ϹLD!?dwμ|$t]=uWk)m9wr9 L dB=}rU5ovL{/O!C`g(c7ʾ_q|Mr߶ғS&5Ylo|Ȝ|RX?Z>{}} 2r)?K&Yl#.9 p@.mH宵`t"y `XL`Z$CM<21wړ51JL譕%W)`y$$Zlc1f7ڳ- +n+yޡ͂fm:t"/kyV_j}tPe+; ~9.j -!TCd:"|{!4MWo.?y+P+ ĺ(nPA.z_pYFa94Z^iJ[*C3c:ÍKƌ[c~]1FD{( Ok":(FS!Ȍgfx2Uk97Nf5,Q@1} 4j M"?ALʙ"*?N#(8D22E"-\k3d)g³Iᣅ؀Z!Wpm'hl_?—2d<ģ"̠7sxd>(;Cɝ=4v;1R' cYk"& G\be,b1m39|xrc|D0'` pĥ b=8zȪ7ǧRT" .`z:ǧ <@(nxԸˍTZ^N@p~1g!ngNdY]sgq 5L@Ȝ\9ybLE'sFwNd髷ڣoWv%`'sG9kxSDk_xgYXrPО1YWwmG<~ˎLt@+MPi2m {-\7X:C~Sa/ٸK8luRκˋ'{?›O_3&ƫ9Y2hRfz7dg\:64u Nbi'"1O{NIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_unchecked.png000066400000000000000000000005521347440174500277330ustar00rootroot00000000000000PNG  IHDRagAMA a!IDAT8J@`Փw"!o!@»_x@l6:?̎FGm{``ik C]EQyA`(:B*t %7Miw,{SP2쭨DT #sO0 _UUU QOvOq#eY⹑\U=*$I20-WV/hnYnV?H]t?QvDcǤQ3^cu$IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_unchecked@2x.png000066400000000000000000000015551347440174500303110ustar00rootroot00000000000000PNG  IHDR szzgAMA a$IDATX WMKQZ4Ѧ.%Bh@\tS.1JU0jlbibKczfI&w͝y}w$鮋j5;OBǠ`3b)¶%mcfBK?@ PZ-D"qN+XZe‚<777 p\Vu!h D+o&?M Be8lmm}^[[;)J ySaD18 fL o1adiiigoojЬ݋FFFF1DULefI\#_8;X,l΁ID$ ^ҿ5_^^ԫsb# pO҇&ްgccc5MT*/x5іuGt[v B'#(q>l8:::s9D=l 0J@0"zR2v7n1J:w@dss6%0@K&ud1WKzQon4A ))Bfp ك?Ƥ~ 1Y+C[[d&+d*[(b-WD"OET h/^UlX Sh[XO59׼J{b0&OcCh N[1O>; eA"j&8b@= qx<縜|,BDTC,X6Mw;W" Pƥ2\%A "Y0sH?wA>TaIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_unchecked_focus.png000066400000000000000000000007171347440174500311350ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0_%r@ d2eϰQ@d=(߹~|;ީUwϽƩle9B$dClf?  Ha*txfX쟗;[zL 4ĆSٰC]&O?~ ! w-ȻJ@| > $@ ~*`B }3o񥷀bnMரS:&YFC.H=&faj4`>n&vn{`"d(A *gĜ̩h<!*-Ǭ9 'R#,IcO4 5Y/ +3$)ҸYIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_unchecked_focus@2x.png000066400000000000000000000020371347440174500315040ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WkHTAȷYDU&TPB?ATPԏ" J4T0J(BͲ(r]MW՝ιښ[h`9w3\BBDzeBFF)qX6hD6J rw㌱roJ6nYD#%cW);Ur{U" XmKN"̖ uP\@TАO[a / [a=m%#o>uxਦqB|1b^`M),(EHQ@[ 3_PX]wө7n69zsD4& DL/{;c S\ h̬Ϧ6(>2{8?su2y1iG |lv\It^).IuF7kquϵC<=;gmJ \^,@`;\IĆR/p gFDxwΉFD N\%&˼eܹR8 ֢gZL_sLHDXq~[lb B܌:i.l.;![¡4ORN"`Z꫐ڴ<$%ŧ$Ꚗs(ُBd_pr:k6ΞɝIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_unchecked_hover_dark.png000066400000000000000000000010301347440174500321270ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8KKaKČhb+R/ EK]Min RF ]Fj2~g<9gy,?Uy) eMEF"4~>py= GPZCZ&4K@`Nma+7\?mU7OncO,¥ ֦ɨ-ţJGI,B $;bCy4zRk{~'"9\X?hz:s9 >7kO>k^șMZݚ o)G:T<ѯ:F 7d!SMqΨz2˳=B A=E 1Ad6D9|({b IvMZ[,Rivml{.mm B=E&4ذ<\< _aeiVtoNL@!se+J4~͈lL/b/FC%"4fȌh C6#a<1@K8FDj`wf:E2fa|$6plGM[@gx?8SĽxveض %A7N}xmlOkx+|q|u2&|'K,!:xry Ǻ*Ź$NN>pj˼ây1ȫδ4C(ioܸ0!ɬ[Rb&*Omjjv=9DJL)J,{t.-Ωk].E$@+tdo.|'>Pk~LE[-/:sEgnnEEi4>UL 4vCRFwUpϋ=yO\rpywmk8RqXvM&I FQvS4?jCYw,,\Zg7] $q\8ZBwjI Nlc@tDNDVslsL~FbLI](:oAwO O}|[ktcbL}UdQ݂/EE;8um`?y-~-0"g HFDZų?~K,TW/8G@PLGi!A))CMAป Ji[ ~J?憟| QXFX{~vZyt1?tpMB$D`R;XNi<|C\\G{$({ׂE`K#ƒobH@͛.IK 360gn[ ̥j'T|_ hvH ɺ;_?Ss6 u9IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_unchecked_insensitive@2x.png000066400000000000000000000013001347440174500327150ustar00rootroot00000000000000PNG  IHDR szzgAMA awIDATX A@e-uAx)؋x7W?IAh)3d I&ɼ̼Qn1}?4+q/߉R)i 'ADYV[TBȃxY\rc6Ee:j]ufYA\s_,_:G_(<ZV0R>%\qw $GN@*{I/@r$DBN,!D$ʅ32$0 $љ;:u*e*tW:9dbUT0TN̾Mr4QvqPZXESLɏ͢8C R%(~,s`eLU42;9CrBgU!`E[Uf{)5YBó=E< Ӣ̦L>DUfP$I8l{s}֘_|*/Et'q=ovA;kk283uv@jo6vI:çd579l-Ǿs<~&X,XNqvL y^nwh>%m* LFBfYlRC߬ѱaRՔ_.~1FnEx->oK1Bs"O ?\VIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/checkbox/radio_unchecked_press_dark@2x.png000066400000000000000000000026321347440174500325230ustar00rootroot00000000000000PNG  IHDR szzgAMA aQIDATX WMhU>wfkbhB41e AW.\ nܴ]tEpcɦ]QWH S+BĘ[mkZ5i23;sϼDSns9̫uy'2V yxs2~62y񰻈~#7R?˖^FAAl7˗Mnho,"O3 &ԤucIz>~<䮙9s-rW[2Us,&5Of#oY{ɹMN\x՝da]Wdr#%ı:8]* >R7ȗFSjliPh4ae4bLb`|= u)o<.jHQ1"^J\ZP@  x2P ݗ3uN@) t)TEBfJ pyhdI&C`5!, z1&A^ڐEȯ$m|$$+Lj"#T[MA6{S!DmBŗH7IIK[I@8xR ]Y? XL1 |X6D,a˳ zy-I$Z9~E4;n $[`}r@j'(Z xVUf_"mǏ\0Quc:.q/tN{ "$1a5Ww~_2Ov"R3Wƶ{'&Cx8䧩ߏ^g$7FSN : C:#Qy=RCrXpӧFy01sܾ}Wt-w>t_ݎcD`VLODxdl2;XO]~`b51J=I!=c8Cg{z<#i2?\>xAҩEXB LAEp }`ϣ1fιADn[6YL'&CM΍%#ɉV!e}ȳ3.KhhVi@T:, XO8'y+ql#IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/header_arrow_down.png000066400000000000000000000002561347440174500265300ustar00rootroot00000000000000PNG  IHDR Vu\gAMA aeIDAT(c`FK 1L /(&eʁa @|ܹsK@|@iK5"+a MP`d " 0NIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/header_arrow_up.png000066400000000000000000000002721347440174500262030ustar00rootroot00000000000000PNG  IHDR Vu\gAMA aqIDAT(c`(y]RRR?~ Y bFF$ ҈ hRs- R $))yŋ7A61cbb dĠLx4 &OIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/000077500000000000000000000000001347440174500236105ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_handle_focus.svg000077500000000000000000000050401347440174500303270ustar00rootroot00000000000000 slider_handle_focus Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_handle_insensitive.svg000077500000000000000000000040721347440174500315540ustar00rootroot00000000000000 slider_handle_insensitive Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_handle_normal.svg000077500000000000000000000051701347440174500305040ustar00rootroot00000000000000 slider_handle_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_handle_press.svg000077500000000000000000000052001347440174500303420ustar00rootroot00000000000000 slider_handle_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_point_handle.png000066400000000000000000000011001347440174500303140ustar00rootroot00000000000000PNG  IHDRw=sRGBIDATH Un0LB}qG~jտ|IC 8V%?H[tx#DZC8t:Yg8[_,/|kr(6ۂFd2yIY'rk( r'0րf S:I c0HƜ<% ur6$n 7@V.}{R̛Oa㡐1 0Nd؞ U+rHde^%:R78+Yp轵"3cWA8] DkFyGEq j1?hl+Q3't:f$$Jպ_Vz^4;֨>4~hCoRW=brL`nlAr4{'FamSvvAp\U8e+يg:vȫ@!`riH])M(~4B,QtG44N5B"-zXv~*ϵט'y>0Ti` IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_point_handle@2x.png000066400000000000000000000027541347440174500307060ustar00rootroot00000000000000PNG  IHDR00WsRGBIDAThMO$UQ0 G1~`W`E5jb&nNLL@cFQ$& cnߧR].$ssǽoݪ.w w(EISSUI -"1SLK9_&'w^V/%1Mr9.;32E_\\J%MgwXlW4@.rɝJ= ;0888[9EmEV |RDZ$ĘɺvYŹnڧӀW"߸, @fꌅǣ(͇ji.̒֓>HXCNrS?۰5e[bcoOSj&gy>rmJkXdA#C݋'a +-‚lC#2YO٧,@\'h85x"T +ƫoO'縹&p]f.h@|=Z16u% CzXhhЖ_IYI v\$w*JR iyqENO 4<ys|K݁,i~Dl%X'œ'a&Id38 :9Rqϼ]`[*AS8?$x;tQ`2 TL|4 t~/?87t;/o(j :#((1a@"fQKJ[[[J!D:A(NJ5t\Us+Oo_dN75|.QQy2PjBiii (Q@ 1U.KnZjwTVd'V..+3>R{h\ Es)xH\9IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_point_handle_focus.png000066400000000000000000000011371347440174500315250ustar00rootroot00000000000000PNG  IHDRw=sRGBIDATH c`1`D7?t51?8<6>3# 5W1¦.gG/_|O4pp1Wxf,_Lh1sb`)JcX@Yീf}@4Z@(0AP^t ֕}t = 1 yF.rmoٔc?oAz@zt A*mVoRr Ak}cBVDlXkn^ E0D -rsý?pYzK\prQ'?TJaAD Kش缘3@ ^ % 0ɸ' .z{?aAwSpH 9h]*.F+YJqbAC@jX53|=zD9P7bb?:E1\Ԉpb jyW@AAӠ}IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_point_handle_focus@2x.png000066400000000000000000000026261347440174500321030ustar00rootroot00000000000000PNG  IHDR00WsRGBPIDATh[LUA#AbTM}1ꋩ414M\J-j4jńjl!*PӪڂPiar].;s{;gvg/9aw]K[n׽oѷ &hLkmq`zzZCJT+nPqQP7e=4UT)Ă_}36fMel'4:LEC/T 95<(;pMx0 _zscf&ؖ0 ֤o+z^?tĢ. -W"Q h9S sQ]^9 _SG[?S%p>}f@iCG3TQjY&J1ÈW^S{t%@Ehd_zKbQ%-7hUe^R=aCgJV ƤuX}MP}~-I` Dz+̙;9:J'XFU>NT& aX~Ґ1=&!&deӾϫd6:_2 ȖzoѽL5wGi? /ƃN* `R ;Y/¾7NGkEWۧ-d:t5/x)^L$BKU}ޏ:BiJi* ,C#B~ _0X0NS_q1 ')vJZWc = EX71J8pr;L&g'WvnJ6iL, p]Ȅ*a.'T;P~5S N,\wW^X2pL"Ŗb7z#7J*ltqnD 8[L#fBBL:k/Actd)' į*///OL#i&mæG֞rDnSI2[)fI)<׀86ԧ[gV2 zߘ8 3#{79`dJZ\$dRtDǨfv׻˨ ~FTVMP8Hv +~&^oxFh8G8~GHF u;&$rJ#Q$NMOME< UdAKnx`IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_point_handle_insensitive@2x.png000066400000000000000000000023771347440174500333270ustar00rootroot00000000000000PNG  IHDR00WsRGBIDAThKOVH)Hl6iK UB(iX A|!EjO M.i%"a a<>t6s;Rhʐۖg񵤹#ǠD#KIA}X`ޑRX,[GgwUQE. @ @dA]|J'''?vttEo\.wvv>iR4o&)PsA0wRlN40' kZ|˔d$-TWh4 V݊ ,ה25YSe.- =],aKQ'uZ0mc¥r+;C B귁;<<<?]]]PNI-x󦦦^V*+]Ug^ quq]P9ȅ.箪?-.ƫhZa]th@A.rJ#wc<. Cq EW`Q{?88x%WTsfff9J%\gszzz9#Wb߲ / qkK|o"݁4VBz*5 R|$QwJWSxlP;+?o~~~"18vwuD:IOpddk-*)Q9V_p|&h<+DJ?:^f'9u[_RO`:0]xx*mmm=xdVss,M-6 \7BCz=,6Je:4~V Ihᩴ|%q=6BRGŹŎդ7_Q ȻGGGN( ALΓ") RI5rlݠߓDXqu^C$hISo{ GՓOoF(3_MlR;Ւ "`IENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_point_handle_press.png000066400000000000000000000013361347440174500315430ustar00rootroot00000000000000PNG  IHDRw=sRGBIDATH UkAٺ1%Eǥ^,/  QiXfQШm h06АԦc|AГl1o†\T?a0@Hܯ"qB}857cl^=w; Ap ¢F]ɰ^mH3hxԗeqy̕ҁx\($0R]V: ٠>; lQB]NfR4]~X WWM̼O3W>dx1W9ȕ$Q`Q{yF(g WXF ϗp, csi ޲Y bb9љsȵB6@55a`T%baiFxamb reّl e@1712"YΗjr|(?8;&xxqe!ѺQq5e|a7c{QT=μ dD,/&=u[gGT?D"Iep6:ݣ^ ~4(pAP`Š$R2QuT.Jd4*}+@UJ {۝m8ϽvzEѫM. :{"(/ ES!6S:㽸NejIENDB`qt5integration-5.0.0/dstyleplugin/assets/semidark/slider/slider_point_handle_press@2x.png000066400000000000000000000033521347440174500321150ustar00rootroot00000000000000PNG  IHDR00WsRGBIDAThY[lU>gʶt[*7E71BLC1R@'@LaA PVE 1**@ {n{sRhwf; ?soߜelT plL2IΤk֖Q |Kޯlِf"Y%%{.= [\"ѬPyƵ)A{VvA~|no+KR˥_#GS2i+z[H1|.oxɻ%;ۦ'2q9,95~M XZ1:mڔ |1@&`UM%鍋b"xNl@zeUTYо4]y`+Qʗ:~V X!1X%psb4gsn=5t0gsn=5t0gsnm-ckPi2zꂕ5+kL܂ l|L@$`rfJaƼ$f_&S|8L+㫙p&!["kC3a}NR\/4}c1X&@QtnHvEXdqPmow-ɟ%O.jw%.%8+,pV~ tŠ幗4zg ki%f̎wMzGsatӿ y1jYa)ELhZ=m?-U xHTQ[e/ULɚT3(hD[בn.E!1%Z0>%]ZAp!%QĄ2ZB\6aЪn]BHQg+* ƕSwTZ*R1'v!:AKҒ ^ j'LQI۹}ԅrjm2-ye-(k- 3r|UzEnpX%=Z @s m`>,ͨ)A6fjLtϥ-/8FsUA6`J`z-^NfC N,E¸ WLMh!AnX%\Q) ?BGd:U'*3 `XI'qBXKStI.Rc%s\\sm,P،q5Ӯo;OKx'Ң_ҺGi|sUM*5z (|HT{"#8pRamE'YSԝW;;$\8P)q畴%*=JT:%:*:r`5{@SA@FB}o_:oYD}k_gc&fIѭ<&u?kmw 1bLa`.}1qte+9ds#'PpCgkRsϒ3ϓN^C88Q<6Bk8\A HJ<)EǿgkP:J$_ (p6=w>~O-}항^]E3"ǦoXݹRMRN&"z`:*V#EupoIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/000077500000000000000000000000001347440174500225145ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/semilight/arrow-right_disabled.png000066400000000000000000000003321347440174500273140ustar00rootroot00000000000000PNG  IHDR /3gAMA aIDATc`Pf xXccc  FFk, 6ٳgeee?^ZZ0"k755U33&d &&_ ann./w3ϟ@v?\a*Ap@?IfIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/arrow-right_normal.png000066400000000000000000000003011347440174500270310ustar00rootroot00000000000000PNG  IHDR /3gAMA axIDATc`P6 n߾ Y%%%JHHs  ȹd%$@0􉑑/c066v344tD ~As*?ia4e.}IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/arrow-right_selected.png000066400000000000000000000002461347440174500273410ustar00rootroot00000000000000PNG  IHDR /3gAMA a]IDATc`hdw@"C'Q,0파k:@ܥ &?@,ro@\M Y@al 7NKIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/check_disabled.png000066400000000000000000000004171347440174500261300ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`hnnRˆG)##* &233o={s&l&*rdbb:RRä/7OΝ;w &asOcccVO4 Lf:ׯ_5lIII [ϟ? H3?ʺ*@顋m@Xu~IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/check_normal.png000066400000000000000000000004101347440174500256420ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATcf}x1022hTgddkhh p*266Vښh<ˑ#Gރw7.\Srl/_;88;H$hF>M 4̙37Q8@2ՁCΟ?Y \EGBjSaIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/check_selected.png000066400000000000000000000003151347440174500261460ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`Ċx@Z3T _@lO2P{ .+rxX&dsE ^ @i@|y@@z1_ኁ@|q1budPBo1#a dC*t/IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/000077500000000000000000000000001347440174500243025ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked.png000066400000000000000000000007371347440174500302530ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S=kAZ\c" ",DRډ`g 1BQ^Hm ~@@46r nxKBԀfgnvُtTkͷᳰcX H~r"H۶}oX,7Aܰ0LDP6 ȡd2/Lơ ['~j%F<eá7MUgȦ}  \׍>9$01N URI Llۺp\Brf̀Cd,|^\וn+B|t:bf`@V;a7^?Pb:`Vkx,rY6>${%EnRy<x0&֠.sa0c$.& `pIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked@2x.png000066400000000000000000000020311347440174500306120ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WMH[A [ 9HAo *CKK/V^ %Zb[E"z/zkl̓KE?ԟm|MjS;33GQnnBnH-t\\ssBxϳ&XV[ tƅ La1\\:)gSNNNA xT=`b6ucccyj0nJ1^o888xÎA;1==Q@l=8_ZZzl= 8[[[d,+sid]`y_\)/@ЋwdoVCs̯٘}E[Vdw@]#NhAFǽAND6n'1̨~effBn|x-.< g7˩TqpI9QH \ש!+pttDMMM!L& l6zb yZZZ9JgD0F lnnRuu2OmhbbB뉟\UD܁}Z[[S fCUPEE* )) i||Z[[  , j#6pYE~|>Njz{{ť#`IIjC\`! C j[ZZFV ПWq.Zq(// 1CnLc``@ ~‡he¬78U])o_xQ.kB Bna؅oH7MIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked_focus.png000066400000000000000000000010061347440174500314400ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S?Ha c *&5%$Hc VɈFtiqdFc E!h$I2ƹY,p0D"AbQUuL`CqhZP.A:y(Jx8-tfrARaL&PBXx"Nf T{հ;oo97 w=TQD'~Z 1g9cGXُ=6ﵹ?P)9/<v7?TIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked_focus@2x.png000066400000000000000000000021331347440174500320140ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W_HQ?w̜Z(C|LM3|I=HABfjZn0D E-Aa΂!'%5YЛ!J 2ݚ:MoϽwν?8nq/777$?HY-nGt7==c߱ܜC5,%=~;^R뜰.!J)䴴;HG3A~+I+h~g%hq+{ggg'x+0XG}ڼ~$ﯞN(!T褞Fa.:L:ڗ5ͅY'r $&%s­CH@τsTΩ=-{A__[tL ?m\ ```ະҿCO.x awP[[ ĉ~cK0_Z@+@q333(چĄ3ـ<&Ų2^Orr&MMM@Y__ J ͸TRNN<66ơGFF`mmn5p: ?@8TT`0\ONN'%%UB@ @mllr%%%!XEE?l( LG⇦`7jaa!OGww7xJ%oM8H{^^/R5ޖcb>.72~/)QKӿU}@{I'_|U/I%b>mP4_oWӎvζ9OXpJ4j+NXފ6QPds3HAHrrDOd?nPdKsfXXT_ XVT~셿Kgh<IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked_hover.png000066400000000000000000000011231347440174500314440ustar00rootroot00000000000000PNG  IHDRagAMA a IDAT8=hQo.w~5QD,-Zh4VZY'Fbi҈"(`?P0h''8{@q`?- +ux +K88փ9DRxr7v4ɍA͞B ?DXbq,K礧cD~*50a2OҸRPZ44[,wG̿7 ,czc7 [yK}(5/շprVzF5h~s2%_}XެE`{10f`-ȅpqQ|-Xw< ǟ8/xQlav[)KnՙMBgNL-KygOBX:sN8.wfm]J 8 >yqHg4a  Y}Ji 9j'"aV^ W)%d;W]+ :BdXbgF9IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked_hover@2x.png000066400000000000000000000025301347440174500320210ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WklTUνlBi!V Vb41i4((|G#E 4O13DnдU+mR=;]F'99|͜woۈ+œZ֏jV t9/b1w&F=1(m}xz#S}^N`wD~)[2 thjwn pAJ#ꀺ2 c[hBRJIPt v~M)/|wph^-zZԸ#,+ȇW g GXԮc8DwWFζ&V(*Rv+3YIvl?䌥ujW̖g2y/Tp*Lv Xp8_0軿Wx OޭȒ@}%O;Ӷ!jry_79 %^3#)xY oeM"%I&62ЩpdМwcl",p)eIswdܤ+hQu `BdƣWu_pK08cdg("DiB۔owR4yRKl ^IyFzW.l',nPx`Z7l nXE .m2 mXYtKʫ =`ldAFUń̵)xdžk;kQ(WŰKF^6,'+ 7>qg:ykF*hQ_أ}9p^9WK lW`;M& ClZjA1'?dml' FbKg1 C9B pq>=[Im+A|Y!&)Hvd]@.7Ǔ0{`8_ 8ӧCΊ;`}Ok~$PuʙO>v31I/0@q)s}r^lSbKQ:iD܊GP/Jw4Ї$nBT =Wqqu:\Tg0cI P3pkvl?hESzDv<Na4I#B$23s0D_4 !2£G\YS]6YfIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked_insensitive.png000066400000000000000000000007601347440174500326670ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S1kPRTn-.ƹ8:8(tA \DбH.ִ}|w{#-JQ+1FEta:Db[ I,f/ øm;:A,_`^F1L@l67`𔊼EirZ=p m& 5MA8џzE<`5z*_c>t:d2N8==`@k * HRv*BeYP,CV;s7& Z-0Mq<4 Bn6D\@ v۩+ H8O`{t]\.{ y $X,>EQ|A8f[+򆉥)`+rlB?G̾P;sQ>hIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked_insensitive@2x.png000066400000000000000000000020261347440174500332360ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WKA$b[h 6xŃ7 * >N"xQQ U"#&c$MOdgvg7;;_Ңn"Hf+Yǜ gXʞAg(n0V777O&V11g2' SbSyy#~QFc@Cz)d6l6LnIIInFFA1Hɶv͍}>{]{<|,8"eb +Ų$I$vVTT<6p8^r[~Vt%%QpdMggg_Z+C@\*i=>y.D#R/..ЂV-g#000@3JƂ; @ނȱyZ[[SCw (Z3ETWWGՊDR|Ӗc"pFqq1KxŴת(SG###.6{ZҔhqttvvvĀN99X;kQcccڈߐ(xq33|xxΛ1UGCCCj"^27ٌK(5esuu%uA6QA=<gUXXYYQ}VVV B ψ/[ q )++KkXW6F9멪*?юæ&T}[ZZT=-tZ[[+crr#"tleQ"@FcR|b~L&X\c{{+(YpۭgEpt~~0m |r+;QsGnHbj _swwn,Ar L '4:LȬf82!+xʬ̩5iaC}a R3 Ő3gO>IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked_press.png000066400000000000000000000011361347440174500314610ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8R=hQ޻ۃT("$B $!FAE+R$(h#"%&v$H@v7Wٙy ~zhvzOhPVEw΅Sa*Z__$ rJ\ 2Yt~=憶c}!Gާ'AߓqW<'l.6A`@Maf)bǣ@0 HXUJK_KlqL/k?7M`d<15yAūmLPT6X8r^o`$RӭqWt6+ *bV@ 3frA2Q6-6$ŒɨuыxY7[VcbzH:|44>,z+@@IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_checked_press@2x.png000066400000000000000000000027371347440174500320430ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX Wmhe޳sq0XȲ>)*3+2*,+V ѲSF*BAC"(UQ} Yf|<]>{W羯xߝ7Yu.µغ#SFVkKp@sh;Uep\ G9YmЍ9-Q:z+x_+D*gdHJ.؄m(Nc;=u]”R6]ƂڢG Éx ~~FPtc;w}w}X"_:)yFێb=R[oW,J!1gꧩi؊Pm*\&*/F7aP$B`otcd枍G"T!ݍ{NXHL0TNJT.1 ` j#t_wCz@ Vxadʹx()̓}nZ+[Zro6(-3=ΊC !0"t '+`-TXq=H߆iy ~BBƝ?Ua+; 289ppH%~kWD kqEp*Iv 1FO'o *6<7glB)Kvxזs7YY3Wu]qXs 8"FTaڮd}JG]DگVr ^Pɻjw<2]hâA-"1~>glŨbtw%KNC-?6ӁlTaBedô.^lg݉ 8Tb+ ۸cXLBkCl?ܱM[GYM`}Yh#Y XPfFӆ"k~ }CćNwKh!xL*l3'YzȟU$+_|"!ÇCcMY Cc>TI@s@d熠%/ `ݻ Z.^0ULf @] L`@g @)ZWaԄK 5X/ &jV?k!,0o.&P_Ty{L%ٹryIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_mixed_focus.png000066400000000000000000000004241347440174500311630ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0v߯F&33?Ll_ 5 =pWxAf = @\ qUiîj`hhWX Q?`L4 ;H<_~98R R (mgC@j@jAz@PƸf =A)hXdIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_mixed_focus@2x.png000066400000000000000000000007611347440174500315410ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W;N@5cY h (@pЀBr 8\"44,ACnH|Nd+xgA;I*+*>@qZ}Z,iDՆDV(7z _M&qmn]HD-OZ%^d{ ]׈;o tLp7d4VIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_mixed_hover@2x.png000066400000000000000000000015761347440174500315520ustar00rootroot00000000000000PNG  IHDR szzgAMA a5IDATX W1ka}{39cFP !hcMBW!A4B C9Ϡ&:oݹۻ#3;f.tq-ĵ4"ܨEXHs81=õ%"b S\ǻ0[_aUVoEaD_ ONWOFa+6J,QiVwx ,V{6N[ˈL:qĈqQzf<2NA""9r0yݔ`^5|'A"6/K0<dz_1Os7aJ>-xŸ &)7} ?Q)["Vdb}ؠhhSNS,כs%~C' HDq|\FLh8M`\j ˸+cK ?Noo8k)e-(SXf8NJ?VE:$RBhY'}qFe\8Щ1a+y|~ħg@MՌ^ /}q.}t>(_ #",ELe)?(P-m~-h6j؋^+($8O[PqL\̧f"?Κj"p{Kt tp9iw ņI YzR$L`xsSmm˹tUCO[g7ͳ:A=^MDɢ)[o`d[:fM4dX~uKJaKAJB}6͡he 2n`\ nϐ^:djkTcӞDǘRo"D4M7D7(@ݷ %4qk yib!ۚw g Zo'XPoe1FCu9NM[n <˃[^z).>WsuB#b|S PT:_YI&jמy z\X<˧ȅiQ!Z.n #P޸0nNta[ sÑz<(ХpBć=s9  zsCD`=;: _x|f@VY[%b[ ̎@zèm〮YmiDh" ɜ .4Z|@$ 񼧽 "⪡x,+hi@<5?dP\ǁS^"Obޗ/ ]? 0|ywiBSď(JA|`Hgh ugVގܸkwM <Zεtn7{Wklq/_b&k$G cO6l;%/ `ݻ Z.^0ULf @] L`@g @)ZWaԄKXFũ߿uPP$ OHӗcH H-P/(?0P-3 # ySIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_unchecked@2x.png000066400000000000000000000006411347440174500311620ustar00rootroot00000000000000PNG  IHDR szzgAMA aXIDATX Oj@Ƨ]h).^Y!r6@ko*HV2twΞmCIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_unchecked_hover@2x.png000066400000000000000000000015341347440174500323670ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX W1kaܙh&)`6 6;`ge+iCeJP kAēC9π&fnNB#{ff.|4[n%HjH))&$)i 7ԠWI1]|&Lئ%Eݪ䰑f,j W}Pkx@mӴn3&N} **_l7뙖i26L |]/$> !Hsy>&kMy -\$3€3٠?kuNpڢ2Uc, Aq,Ud4=S2e /Ӽ1vp؀)DuF 2\0cӢ8+AEȺυ%݁Y>=/ܛfTu(11rN]8) T*g5pїذa,GPe>D*$2bxh6@ݯYֹc^@>zR/3bՌ"7P#'G34?,?_tyVs* -~G&-s '?*H<(F GK-G{ i<71TPX̷0*a6>|GMPW$'A-&t좇akh+zti h7p Ci{{/>M5X2]2wv'i5lKIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/checkbox_unchecked_insensitive.png000066400000000000000000000003461347440174500332320ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0B3ii b.P-? .; 5 = 0$A ]s ACՂ 38G ``N<f_@ĽteY&qFoUU22ip"D 9wx8~|x5)A*[`⡥(p̑dؙ%/y+ nf ]oqX#(AQGC~@oƙjo;PFm 6 qkyqGJXmMyy 7YD>94_o.(G>>hnmT'<O)bc8|WSx9֦U"MNUZ1 *?bb݀tb8S߁\gm 43_Ƕջ8"|WEí;Ht~_ I*HX ba[G)Z#HZ_'ښHp"l^:NҠԄB"]yD2G6Jp0Q0#&7f4&z22|"'@r!O=6<+gVn9B2?yد`aN΅1YbvMߺgw2[k5ﭭ-zbx7s31cgMmכ.J{ޟs l_ r"KX,[|lPvwvv/mN7Nfm ؖ-/2G`(Xn_.J`){1h -MOORP D"cΌLm]Đ1DyVSN4lU*95$0eYշ~ YQ4+psnkcR):& +@JlU[ؘ}[Ăp*@*l% ۫ VNllL/qAHR2XUye4^5K)bA%[~}}hpV6LhRPsnE1K@V/}}2$d#MmMĂvnBcx fffhuujQӡ) H$(Ll\.v|kx-ҵ_FGL6s\aLX6S?ZFLrqormkF$ "M+}ZʟV jt0_bXʣ6M.FvL\iT-52IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_checked_focus.png000066400000000000000000000006151347440174500307550ustar00rootroot00000000000000PNG  IHDRagAMA aDIDAT8S-O@8 A9j8U G%A N)(ץo4]H:N߾ۙ [pgVYqLxЋ!,/GUcFCEzc6imlwT '0ʛIj9{x8SG`p-ۉ>'8B&_S j) Cr]r`pL({LTq$]e |b1+s*$y1xEDyZŘ[6MQ異>* =BQA6RV py &/Ozr8IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_checked_focus@2x.png000066400000000000000000000017241347440174500313310ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WKTAFJDIԋX զd7 O)V AB_R`Z>D;VϰWgk >ԁe9w~u,c,1*Kna!k%ԢP|w7Qq#h))ŲJQ98gkhU*uhzwረkف=U`+Kg ~*{JK\m'֑Rfи/o]iB8=Vfp^;o+?}Uy.فDdq=xAp\,Uuen,&)ƹϹ赑0, qW̜%7F=W y%oyn1.X\Ɛi{eۙtÌ!jā\ }\,`bb$LPq՞)ilhhMMM`l544\Q/.P2+ 2 qm1V+8A,ɠA l !/v|3ap!C@#(#idxx& JD6_`>CD6#zUϭ?* 92W?:s5s}tIZO) b.vb9gwnG%^9J4&^^)r07ɮY=Μզ|biNaxK.MTBZ^![A H47)c' +T7G>C,jܡqw+ulDk /_}[y& ү#ݭM#D#AE;ZE%N2oONHIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_checked_hover@2x.png000066400000000000000000000027511347440174500313360ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX VKlUt)tBcy15DlxMM,PDݸbA  FcZ`1,0&"-% G->}f:uʓ=u{u5oexan 6G ͷRWFqa|&YHa~@QgaS)t[5܊WӨAJr`iEE`nsrd`p̢A`dќ^lmF_>" |Wo>Nr@b{C?p)gśؼ~Ensi JT2Z2P)J/S[`$E"'e:܃iR?8b `BN6&۾B5 Kve;Q#ϟXjr e".Ekk-gr L"Coccl㜨ņ:.,0/~rWKiv )ǁvM Ӷ0ҟl2'Ij a'/czB朸t]D63;eRޅG ZL5'0 XVgIV;p:#&J]$1o"?]B(հBLiK V8NpqTÑxDzݡ|ԌMxc4eLLmN1 N"Lr_nEǻdSؿ幇z< h$Is׼$+5홤F< H-ϑH5,C7M".)O3IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_checked_insensitive.png000066400000000000000000000007231347440174500321760ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8Sj`hEJ34]Rtsķ7gWW /G(hPD7R=8E?Ja*ɮI_H!&M2f~8>0ωw+ d2)O$Nj:[,a+\ m_/bn'WP{9'A R.xܳ\._Dip#iۢx:z1: ^RzD"fxx8}xxx\*`X.S0(O1rez\0Bd7P bɽh!Emvvv|hhhLNNiر(YS )7jznLRj+Y__7$"Yx)O?{os8 λ |RCV,ʬ0zAڃ\smłP  Sqo+kK:Yp~ʷ?_@24lNUX熮Sqo+E}pAbNE?0N! #]QW®bfS5 t_vvA9e пPq"ǰ4}O@竫}^U,@B_e՞qN`vvlһ}ZWʮdkLty tMRIIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_checked_press.png000066400000000000000000000011061347440174500307660ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8R1KA}3KN4"Ę$$.PIڥ$),- hZ l 1A XXewfvgw7s2MOjSx,_\/``bG'ӈE++9Ye5ӷ[(u VEܝ_svN)NPY!70q)6!#PϞb@LF 8Ȗ;qaƨbe&?ƀ81q\,6Ltdvi>$3Bl2JFxxoSv?x/V&:`B9(WZ]t<~lĹ@(_Db>%O0naf.w;hZD̚nkݓE8 -sxpzq ըa*jNۏV')d BW!WθQC5k_7ykg_짙'5qU@\rg%(,8KΊ`þ4d IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_checked_press@2x.png000066400000000000000000000026701347440174500313470ustar00rootroot00000000000000PNG  IHDR szzgAMA aoIDATX WMh]Us^SĚ"vUTDTэ. ĕ WRpFԍPRTŠ ԶRkS6i!!$}swkNfo9?ވNdW]~ob<P/_JU2=n&)R)-LLdɏqE^ ոe't}Gy/P0`, Թ/y]찛 ZwAq&'}]zJ\345Y9Ĵ1"'Jlםϣb)%bUN6Ylac K4bIJy":]vvgAX. LIrL3xnY˜|GI@&Lm´R1S7rb4Ln Z@[ـ`r,cYd#[VܺwY}b mt)Je[sp)ZJxw=AS=[D^,2ХrzFd70-%C9-ߛ[_.y&6"4MDO` y*pxh4 J@kahm'!ÉEh[6Kުs!yܰP,O/5kƦН {Z!V'۳\M ؔ"-aN5Mq1W ]!0_G[0&Hm?b̬n.~_8v29U[׮! )Uk2Bd7g,Xm=9#6D-ʥ(@*_/f09zVdVgCTWn1=A hږ 005á00ô4 Ib،û Au#m"⮷uoK| ϼ[BF>3 ?<}͐űPӺK`%(npPx1Zb,@sSxD꥟FbӜ+TGB`FB(.ǩ>!t*u^?{ru_EH!Z1Sh߅ nO]t,-Riu5ܹp.&bAV5O{e畎f.(B%83مFu\߰mKNbn *\rvvԫ/>x'/b@6Ė<̜,#|V5J[ -0B:M̧E@Gw }=cEAmtRtskgGϗ&p112{6m~j+4}6oxM[Ǧ 2!p܊ CxyYIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_mixed.png000066400000000000000000000004431347440174500272750ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8c`0bbu ʿ7aSܹsǏA+Pj|8H i RR =pr"L!Gn #OBa @= @ȨBIZp @`hhWXCn̝;HPG#$)FRRfDA!;3!CmsWtCIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_mixed@2x.png000066400000000000000000000013341347440174500276470ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WAC [XK$7\a %W@e ʿ䢕9@.zhb(\w|޷/0x U@!~),h;`{  q=r$* JrT*dGTgt:vhd;l~aSs0`r9}us ǒx 8@ cjc]_Uqjo~q?Fr ]~m25u¥&d2uLj\FM"kپgr'~In(X7*ɰ nE 3͹E!NN[ϯ5 n@"x<籺cNsF~303Aj@jAz@0Aζ` pZ ?҄.R d@Z`花j1v.CCCb teʟ.PhZ?/LxFR JXp@) HʰRR ҃"OnB8)r p$I JFcIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_mixed_focus@2x.png000066400000000000000000000015241347440174500310470ustar00rootroot00000000000000PNG  IHDR szzgAMA a IDATX ;OTAgސUcAQCVĄD11])ZSS런(q[I,ĠX 4JF3~agg/r)syw/JIe.<^25s3fL+}(uY7ʬyF/.]ˍ%`d2a6ƜZZMLFf͐etexK8kuV2 /?z1؞/^fiIVU~wJ] L3Yby]{Q4ԷTMnh/5n2[lyyfDjt?ݩ{R_7>yuUko0_y%ɳtQgu2熗]i]/C~ 0p`6Tvp9#wt &5*p{]fh7,^2r9jv &lbY - 95y/9L6}Ykrʤs*l'Bn^%˶ș ^%˶~+˪X,mppPJ}qSE^%-dcM&xi_Bc?aЋ5=cw~F!9Oj sa5Y`&xmr߅MfE=O* ư<6 'Hb%` 'F ILG}ak&KMԒYijJ8ܞr+1i7NwIMLКy+ mXzGIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_mixed_hover.png000066400000000000000000000011341347440174500304760ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8RAKTQ73錠3aD0 ~Dp'HѪMZ%nvU &PԱ4rfIw\gm;}9 f~_F"c8Ũt\Wm#_#. &ПnLJ$R=I㒅.y`=#ܟU(-nbEn/Iu , b9̪|J#u\)+|Ví~URTOBR]q1@rdz.bLPopO3WQ;!CiQ[IGbl<3kӉ?Yd]0ON}K00~꫊_i@-9e;sU">~1m*'"{?7{b0Ã*|/2u@;n+C!<]U{fUGp1=9O%^jB™L,R>1s<#X Q6xjo`t oǧ;^o68=DZ~)yTqL,-tIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_mixed_hover@2x.png000066400000000000000000000026341347440174500310560ustar00rootroot00000000000000PNG  IHDR szzgAMA aSIDATX V]k\U]$$L&1 I!jĀ"ID}"DЧ>hMED,1V҇6iFeL:I&=u3Lon9gnfּ6z\m5y]b7[ŵ]g7i݂m.@ߚā:y&>n-wqn3!qj ;qAU] ƄAmU85ōEi`y-n1 KaۂqV[\ER9-tImq\BP@4 8Yo7HHoQiI֩8 81i3[끖p-,%P"-GLF Dȟ둬0eW2\X~ hw#=Y8GF0A# rU`;MŸ3ԺGb.M'}N˕pEBӢfoXEo9?rb3E@N. ŋmzI؅%b--br=ٗuؿ+M#W9HV"+u $SPOlr]`yf5Y^ }藛4x+=cʫqRa>aK_TR@$r}" =_NwŪ RX/¾'яضp",~L&0"+Tp;1gg9Ë&fy(#:a$nf<]64 v1<܌/hb:@ƋEgzVM;ïL'9gh%11-"8&[L;m3Liwbs-!l>INPF)2.A Cq5$Wܝ5U+8̅:μ8 &%3Wʍآ"GC@.a29.# Y4( ήjUEW!B|QJ.(!3pD,߮]؈bIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_mixed_insensitive.png000066400000000000000000000006401347440174500317140ustar00rootroot00000000000000PNG  IHDRagAMA aWIDAT8SAjP)iЍBJEh7n[>ƍ;.r%J$* -q7@aoޛ9挾L49'ؾjcAx^|QDqDx&sT` IR ϝn=!*ϙٲ0 [:PqTS_.pl6\u{i xҴvt:=@˲y XO&Me+^BMg"ѿ0 S!IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_mixed_insensitive@2x.png000066400000000000000000000014541347440174500322720ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX WoA~%\9h8GpHLq?gz!h &ĤQZ) K%K^g|3 u7@_/pWkw:o0>ki3{#R>n"|>3H;^W4NhjM*ʷpHw JS$jx<KghۣcM85 /$2Z>xLbG2+Xdn¤*9d&LrCnInBuHRPH4 S?Ab\/g繋W!NcckߑK59Lg+V_"RXx[=~Ԫ aD<*O c06z^FA}߸TLp \X,,?=^Xy!!{XL$=pr] 4r^3pV 'VʥTWk.Y][ Lp=A. IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_mixed_press.png000066400000000000000000000010411347440174500305040ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8R=OTA=36nAH06|X #-\k5;DMtl@ :caavf8gfg٬νs9޷o\f^s+h:g::PDTg-pɌpIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_mixed_press@2x.png000066400000000000000000000026041347440174500310640ustar00rootroot00000000000000PNG  IHDR szzgAMA a;IDATX WMhU>w~^SVkE+.F VFwvw.*EP"EAp*ET Ň"$)67;sϼ=p{ϹLD!?dwμ|$t]=uWk)m9wr9 L dB=}rU5ovL{/O!C`g(c7ʾ_q|Mr߶ғS&5Ylo|Ȝ|RX?Z>{}} 2r)?K&Yl#.9 p@.mH宵`t"y `XL`Z$CM<21wړ51JL譕%W)`y$$Zlc1f7ڳ- +n+yޡ͂fm:t"/kyV_j}tPe+; ~9.j -!TCd:"|{!4MWo.?y+P+ ĺ(nPA.z_pYFa94Z^iJ[*C3c:ÍKƌ[c~]1FD{( Ok":(FS!Ȍgfx2Uk97Nf5,Q@1} 4j M"?ALʙ"*?N#(8D22E"-\k3d)g³Iᣅ؀Z!Wpm'hl_?—2d<ģ"̠7sxd>(;Cɝ=4v;1R' cYk"& G\be,b1m39|xrc|D0'` pĥ b=8zȪ7ǧRT" .`z:ǧ <@(nxԸˍTZ^N@p~1g!ngNdY]sgq 5L@Ȝ\9ybLE'sFwNd髷ڣoWv%`'sG9kxSDk_xgYXrPО1YWwmG<~ˎLt@+MPi2m {-\7X:C~Sa/ٸK8luRκˋ'{?›O_3&ƫ9Y2hRfz7dg\:64u Nbi'"1O{NIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_unchecked.png000066400000000000000000000005001347440174500301120ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8S1@Dk- c|F;J7H Q;MrԘH*GLHpe73ܠi'0#ga/Pygbaj3UUh Zo8><$EHm"sM!,8M,=9HU,65SE4MOHO4U Øz!.fI\Ȳ"|I&;VGmf]WUzb plD`[svES _lP&+."q*3TW$^w؞!vFT%ФG̐Q=lV _l#JFy gm3ɭ\.P_l tl6{*͔ZVQ :k6RFG:RNC[Gy9 4nγl!1'.cfDIHmNI$Δ03Aa!L ӏ_RL, 1\ZFJ@j0gLbť ]p e~Ft UF6Z`/Uݽ @jakkH qu|( G_ JPT"OLB:%!aMʠ4 *PRr))g`Nκf; ApWfIS5}VIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_unchecked_focus@2x.png000066400000000000000000000016641347440174500316770ustar00rootroot00000000000000PNG  IHDR szzgAMA akIDATX W[OAĠb$EhD" QGOF&hqQڥ9β--P3{v;ߜo ꅦN'*(N^d lS~&ޑzedk"P&iX 0(imPEE=qQv>Ȥ| fSG D\d| 3t4fuSBJH#j='KI1!;+tTg fb1Qgl# ٟ vlp"l×-%75w&Ӳqv ue/ժa;;Ѯ-` OND`.92x5/3i&SKU(rnS1v\h̗=\/ O XT nasjB?61Gl]r1 l0&,d $-,o¶Mr2j*rrpqZ٪oeI3_/| dx40] |6E }$mo!!b[5j? 5nPFM 2[bb[  E}8cn^͆yV`D6Rj0fOիxq((W  !#n AUQ1޻NIAyݒL0TQ*H$1l ^ mY.H`i&NԟfӐK&ic=A=*IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_unchecked_hover.png000066400000000000000000000011331347440174500313200ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8SAOSAfyڂmAbMDxЄx׋'E.^<Ћ!ƅMDH fRDcXhjyoj8vfwlgSybİ; ˝Gd7nWq[-d piJĶ.C|Nd@RhBryROBAY&!=6IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_unchecked_hover@2x.png000066400000000000000000000026561347440174500317050ustar00rootroot00000000000000PNG  IHDR szzgAMA aeIDATX VYlU,Rf:@i(-Y1BB! &#DA 1&Cb0&ꃚW5PhKM|(y`OAҖeweB/{r;bkcp♸ cMƢBgǻqNC&@b݂ ^Kx;> 6ԯքϬ3M 2I\[\N;|ׅ޿wY1$rpTF ?wYGĘ?~Ɨ7c<c'"U5euMTZK?%^Jn8xQVxr$VGRL"'@zMd\OHc.BFKHH-0.cZ&PX]X "  m F$YD$6HXQӁ$riWplfq}ֆ^"xUQoBbGƚ{|V'\kE,iER7Fl>p@~ࡍ%s,٘+^:eoF̨f9Y4 OrLR uVkr%=f e`LhhRI8ҍ A׀9`q,BJd4ljK0p'5Z'G l*4N/At XrM>R"DнC׀7oYkۗ8]_M׃P)ƭ5Y l>Z85% xᨃf|K -PJ&TKl&-WNB'+k-$nרdRfh8Xt_@'٬@! 8f"vF?\6/'x "^.Hi 6OzX1:9ODēоێvmv`k0E5P^ qw*i ~b1 ugxuŒb0R RR~h;upD-ٗ<}lMnPĊ9aaEnmەc("Ly#gh3q<yTh_ -|-Yތ[=CRFjp 9r[>8ev =y~މ$ZI$zGl}10'ԒIa:|E,z9<-0Hlt;b`C:CW+=G.rS1sgo= +6+ \2V= 4D\uc?mӮy\kBd|${"A"u{+Hd G2g$͒RѹIӾLIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_unchecked_insensitive.png000066400000000000000000000006111347440174500325350ustar00rootroot00000000000000PNG  IHDRagAMA a@IDAT8Sj@)i˒KJE^^zx<'॒ A ڠNA6 ~}?3+7 [ | rwkI^]&I7Ms0fxQm5ME"AG0vY%K˔xDkyqi@ V,5yl͹}(oF Nycg ޸\ 0K $7t&f: 5rӷ4jj|?üTe!Cugz,PM Ɵ>]yHLJIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_unchecked_insensitive@2x.png000066400000000000000000000014001347440174500331040ustar00rootroot00000000000000PNG  IHDR szzgAMA aIDATX =Q]TmHƠ5TTj~ %7!h &4&QW<י]@f?`'yso3}{=U79oDpwe _5"]A5_SwB@x_pC`q\._d2{XV$Qf9L>wi:qǎoZi qՊ_~8ύ^7)GE,͒K|>l6ph5LY*^qc^ D؛HEZ JZV{ V,̓` tž`*@cHB˗Cr'Ҋ3RTt4}mMrm-,m평-!k\2%ο IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_unchecked_press.png000066400000000000000000000010541347440174500313330ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8SJ\A=uM&A\I>@r$DBN,!D$ʅ32$0 $љ;:u*e*tW:9dbUT0TN̾Mr4QvqPZXESLɏ͢8C R%(~,s`eLU42;9CrBgU!`E[Uf{)5YBó=E< Ӣ̦L>DUfP$I8l{s}֘_|*/Et'q=ovA;kk283uv@jo6vI:çd579l-Ǿs<~&X,XNqvL y^nwh>%m* LFBfYlRC߬ѱaRՔ_.~1FnEx->oK1Bs"O ?\VIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/checkbox/radio_unchecked_press@2x.png000066400000000000000000000026321347440174500317100ustar00rootroot00000000000000PNG  IHDR szzgAMA aQIDATX WMhU>wfkbhB41e AW.\ nܴ]tEpcɦ]QWH S+BĘ[mkZ5i23;sϼDSns9̫uy'2V yxs2~62y񰻈~#7R?˖^FAAl7˗Mnho,"O3 &ԤucIz>~<䮙9s-rW[2Us,&5Of#oY{ɹMN\x՝da]Wdr#%ı:8]* >R7ȗFSjliPh4ae4bLb`|= u)o<.jHQ1"^J\ZP@  x2P ݗ3uN@) t)TEBfJ pyhdI&C`5!, z1&A^ڐEȯ$m|$$+Lj"#T[MA6{S!DmBŗH7IIK[I@8xR ]Y? XL1 |X6D,a˳ zy-I$Z9~E4;n $[`}r@j'(Z xVUf_"mǏ\0Quc:.q/tN{ "$1a5Ww~_2Ov"R3Wƶ{'&Cx8䧩ߏ^g$7FSN : C:#Qy=RCrXpӧFy01sܾ}Wt-w>t_ݎcD`VLODxdl2;XO]~`b51J=I!=c8Cg{z<#i2?\>xAҩEXB LAEp }`ϣ1fιADn[6YL'&CM΍%#ɉV!e}ȳ3.KhhVi@T:, XO8'y+ql#IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/header_arrow_down.png000066400000000000000000000002561347440174500267160ustar00rootroot00000000000000PNG  IHDR Vu\gAMA aeIDAT(c`FK 1L /(&eʁa @|ܹsK@|@iK5"+a MP`d " 0NIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/header_arrow_up.png000066400000000000000000000002721347440174500263710ustar00rootroot00000000000000PNG  IHDR Vu\gAMA aqIDAT(c`(y]RRR?~ Y bFF$ ҈ hRs- R $))yŋ7A61cbb dĠLx4 &OIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/000077500000000000000000000000001347440174500237765ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_handle_focus.svg000077500000000000000000000037131347440174500305220ustar00rootroot00000000000000 slider_handle_focus Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_handle_insensitive.svg000077500000000000000000000037171347440174500317470ustar00rootroot00000000000000 slider_handle_insensitive Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_handle_normal.svg000077500000000000000000000036741347440174500307010ustar00rootroot00000000000000 slider_handle_normal Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_handle_press.svg000077500000000000000000000036601347440174500305400ustar00rootroot00000000000000 slider_handle_press Created with Sketch. qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_point_handle.png000066400000000000000000000013471347440174500305170ustar00rootroot00000000000000PNG  IHDRw=sRGBIDATH U;Ql4Km$@ߡf !M( Vi B뢄`o䛽 &gΙ;/,n:w͛l;X,cpCdGm:kFNNsF@(nTѷFg|^t: ^ɤf?íwL@%_d%F] wOTz7 .srhDRl^aT.j-1Ձ]R(FkO\. =G*x{ノh^G-ohTWL ȗXD"n8~ r}V 'GTe-9]ҠP(gYIGkX2Ob:ekTw=H^.7J͡Ѭ@z%QE^7o;WpvF@JQ[~> 8UuLF(ɃuBL=ZE\\IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_point_handle@2x.png000066400000000000000000000034501347440174500310660ustar00rootroot00000000000000PNG  IHDR00WsRGBIDAThYIOdU@l%F;i;(alX1MoVv[ @#b"@hP3qrPē:{ޫ2eѐbE1^YT".-dMttԞ%[XX⃼`rbb`)Ya(<\XaUcn擉)cXy؆:^>>|ɓw>WQQq27ɔ&....899zff/-OE/: BCȱioo{%3U mkC'8VLX9&4zGTV"i!@1p͂} 6aKbu  Y$ g^J\LJ5`*0E9C*1w/SWc {|zi  zD7&Lig~W1I#DG|NF.V::E˅]g2 MQFҿ?cua:It+RP0v 3L]`Pr!q y>HkO19udXiB?v ŌIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_point_handle_focus.png000066400000000000000000000016231347440174500317130ustar00rootroot00000000000000PNG  IHDRw=sRGBMIDATH TKLQ'BcPBpKD++,tэĐ….pcDQnЅ,d݈"i;3:}36M{,D.٤PYӴǙ~dͶ-Ir\ޠ3^n1I4g? :9Ԁ&uV]:i,SX,-OupbWDsΫllt $ε:GM-0pJbޚ =e&jF64(aE)"U(6ő˄p_r!-sOP MCChz:Q@0l KBȉ"*$M1QSL7=@(r? ަZqWYwa `T}$"LKZÂp:Z`X aͿ+{o^_v#,Mo)!s6<1pV1eSˣ#\9J{aM͋\7i'usם u֊MRvѤ)ƀLġWbduis,tRda[_öC}ݯœ4Ȃ˖-3z? ]q1%>mK$ÐAh^*/,Gr q:UgϞ8qGA$CK>9 c#N#"Ur"6}",<~NM !B`8C݃i/$)ALJĒIBLd͕~~s(mܾz%w'`ۅ)H Yw-bF-"h ɛnx 9 #&8i]'=IVcL9Ot]atDXm([W30ҼR ͖ZXv 'H>$K>|M5?u~`Q1$u"I9וCk4-I8eO Oxz< xӎю"׽{#O6 KW^q~`n!JH\'-[S;]`(1BnaI@H B|)^ ]MKpHQL~d\'u$,.)"S "F"Fɹ}}N>XC.Tn/@JZ#o#q޳H^>N5ȅx-U$#9ͥ 3i5N ):!"FRD8$_+ 9Unƅ|*>(B=CN}]tYBM+-.iCS N`]Ns6EӼUv,<jA!d4[Nz.jMWjSJomƿO5i@wЍ>$?Ӕ"鵲<7 ֑znbM`m*^$g-u@IAdC`Zk8qA.Xmk:]pj*[-[!CDa pvqmy.[BPqܯiK򍨼108aTCZD{FFlF]}O_v#SS{4FMK̋ 5ԻeJ#a+{ iؘd*>8;X;簰QDy+֋jXc])|%8x x87d3*EgZ΋ 7K7+zx:G6{߃ M jinQ:kn0d`:`0oR~ ZHn}HҙF˂[֑7n.`)N|jNLs6.Lk;]~R9Jtvyâ{b7r7_D4϶zsqmP^7/\ovME̡ݗ>s]h/j(_dɯ3yM8xPɁf49azOv&@nw'y'` 4= ,P5qZR.Mm* KgDH6 YYF90`$f%4irٚaXF71Rļr^}$`^_C6Zַr ZTjRnt:[ 9Wrw d2i2fNtG L{DwVVVpu_iY6UO)7 fvAxM4"P5N|UzgY9ll󎭻)^U!`0\j1mH|h4~BAkC2EpB'-,k\8/?J rO$)% ~$;KֿTb&`bŋIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_point_handle_insensitive@2x.png000066400000000000000000000031701347440174500335050ustar00rootroot00000000000000PNG  IHDR00WsRGB2IDAThXJdGn[x 1B0!7gH$o$m//Qjw:NYUtk6T]{ڷmVcYb)}JW7O%եuW>̰2MTy.F,_=Py> PyuOy.k\a###_6۾z^NcCU%𤋮ǂ7WVV7@Z=,0y}aai:_l\vCNĂ-1v~ߚwwww= 3L\paI,#`y*N>2/Z3Nec"24dJC̃AvS,Lik\\f?bhu{8gD:R]`;E ſ}3::|̙3Unu:%q> D\s|¾jCe&A ٧t!l݋uLKrO٨r1Dcʉv1sӫ|k2h_W.Aiթ0!`ٌSE0NFuCc&TĪ7`yq_%V U Y|AiĠ0xi6Pʖb&un͍ & yЁTF<| G +szaA^"v͋GeSnK/lؙ=`@2/&<Y\F,[ @`H'N.//'Sި1̮Bz(r?6WǻɒC@n3MFtmZm=W;<<,#}>@ј%HBƐ[,M (!)\n<ËVDy 8q8.4 cb0Fn~&9:Voup|LN.ump-@7@7lfLiN}} &Ђ\]]= /Cg6:G>,W}tfgg1oColl|dF>n@;^ֵw$-[` mwtTV@ߪ"6QFhEy||| d$gE< 5:~pː.6JV;%P?n t &v7NYuՎ~fJ>}1( #D-?6J ?LktWEqSSS(mtfL'We챐Om`!#)OY)jƞ 7=!9@=ig@h*'$cv²8Su;br`Ę@jOtIENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_point_handle_press.png000066400000000000000000000015171347440174500317320ustar00rootroot00000000000000PNG  IHDRw=sRGB IDATH TKQ?Օ]ɯ"?0m§50 ^ W7SJ˰֯Zw{g;̮م;{~ܙ!=HvߑPLgA?D$jp$Q J7 nZx%Bn S%sb .%LÍ DyV^{ҕgcojN &""LVq5]{ug4PYV~G$y>۾CC :1N?;}ĹcESIk΂nܤĞ`#dĮwSa mxXD9Er1vf :5Xw*eG]"fHb\[#0?p| 5nаx9Vՠih9wӾʗg/cѯ{Wڜp hAT,~\@KA0{ćHc̴IƵSI퉷F+gZ.ow4 k4u55M⪖ $D=/δVElٟ^ծ:޼oszrGo) fݢ Ow` ;1~ `1z6~?qy{IFbqYXVVfy X,e*ean}]%r{Nf%O7g-_yə[WW"YPBw0v4^o*YAkR4\4Ag;#ƚ2.XVSa=/x4IENDB`qt5integration-5.0.0/dstyleplugin/assets/semilight/slider/slider_point_handle_press@2x.png000066400000000000000000000041531347440174500323030ustar00rootroot00000000000000PNG  IHDR00WsRGB%IDAThYoU?glExPD 1'F-! &}0x!T/%bȥ@mi;̷v:3ۢdw3V-]e, ,+7l"/-<^ccq|e(LӺ6ichѽspGu{n8P K\JDaTI$%39BB\ƼE#汓OG0N&V'D78y@d$Au@ڏCTeX( 84^|d*M'3WPJX})WrrM*$.iI1%G\CquN{cKNfgy !KZbh(&beD'!$>’ ݥ`>rv߹XR䑔cӿPAhYZ^*h2b'dn ZU|8 ii @vuf]J-R(O_O%NsЍl¶ҙEԠ{_  '< %5Ò1z&% fuJfeh JW!:4~C-s.>ig5-ix'M`<1W_ GЍNu=u2h6%ϴyƛj>Ҿ-q Aeֽ6[1ՙ$&|jcM6USCgzCPNAwKw,0=Yj}G+ׇ-ityF,/íUō&Ԡ[*&i8Lۛˏ}^C=?i:VsG(n٠ ƕd6`@b'i@&j|([ځ`VLSƘHC'γpK&nMԃ ԅh\7(q憣C7n.`B}g#A1/5|K咵 眰IENDB`qt5integration-5.0.0/dstyleplugin/assets_dark.qrc000066400000000000000000000163701347440174500222460ustar00rootroot00000000000000 assets/dark/check_disabled.png assets/dark/check_selected.png assets/dark/check_normal.png assets/dark/checkbox/checkbox_checked_insensitive.png assets/dark/checkbox/checkbox_checked_insensitive@2x.png assets/dark/checkbox/checkbox_checked_focus.png assets/dark/checkbox/checkbox_checked_focus@2x.png assets/dark/checkbox/checkbox_mixed_insensitive.png assets/dark/checkbox/checkbox_mixed_insensitive@2x.png assets/dark/checkbox/checkbox_mixed_focus.png assets/dark/checkbox/checkbox_mixed_focus@2x.png assets/dark/checkbox/checkbox_unchecked_insensitive.png assets/dark/checkbox/checkbox_unchecked_insensitive@2x.png assets/dark/checkbox/checkbox_checked.png assets/dark/checkbox/checkbox_checked@2x.png assets/dark/checkbox/checkbox_checked_hover.png assets/dark/checkbox/checkbox_checked_hover@2x.png assets/dark/checkbox/checkbox_checked_press.png assets/dark/checkbox/checkbox_checked_press@2x.png assets/dark/checkbox/checkbox_mixed.png assets/dark/checkbox/checkbox_mixed@2x.png assets/dark/checkbox/checkbox_mixed_hover.png assets/dark/checkbox/checkbox_mixed_hover@2x.png assets/dark/checkbox/checkbox_mixed_press.png assets/dark/checkbox/checkbox_mixed_press@2x.png assets/dark/checkbox/checkbox_unchecked.png assets/dark/checkbox/checkbox_unchecked@2x.png assets/dark/checkbox/checkbox_unchecked_focus.png assets/dark/checkbox/checkbox_unchecked_focus@2x.png assets/dark/checkbox/checkbox_unchecked_hover.png assets/dark/checkbox/checkbox_unchecked_hover@2x.png assets/dark/checkbox/checkbox_unchecked_press.png assets/dark/checkbox/checkbox_unchecked_press@2x.png assets/dark/checkbox/radio_checked_insensitive.png assets/dark/checkbox/radio_checked_insensitive@2x.png assets/dark/checkbox/radio_mixed_insensitive.png assets/dark/checkbox/radio_mixed_insensitive@2x.png assets/dark/checkbox/radio_unchecked_insensitive.png assets/dark/checkbox/radio_unchecked_insensitive@2x.png assets/dark/checkbox/radio_checked.png assets/dark/checkbox/radio_checked@2x.png assets/dark/checkbox/radio_checked_focus.png assets/dark/checkbox/radio_checked_focus@2x.png assets/dark/checkbox/radio_checked_hover.png assets/dark/checkbox/radio_checked_hover@2x.png assets/dark/checkbox/radio_checked_press.png assets/dark/checkbox/radio_checked_press@2x.png assets/dark/checkbox/radio_mixed.png assets/dark/checkbox/radio_mixed@2x.png assets/dark/checkbox/radio_mixed_focus.png assets/dark/checkbox/radio_mixed_focus@2x.png assets/dark/checkbox/radio_mixed_hover.png assets/dark/checkbox/radio_mixed_hover@2x.png assets/dark/checkbox/radio_mixed_press.png assets/dark/checkbox/radio_mixed_press@2x.png assets/dark/checkbox/radio_unchecked.png assets/dark/checkbox/radio_unchecked@2x.png assets/dark/checkbox/radio_unchecked_focus.png assets/dark/checkbox/radio_unchecked_focus@2x.png assets/dark/checkbox/radio_unchecked_hover_dark.png assets/dark/checkbox/radio_unchecked_hover_dark@2x.png assets/dark/checkbox/radio_unchecked_press_dark.png assets/dark/checkbox/radio_unchecked_press_dark@2x.png assets/dark/spinbox/spinbutton_minus_hover.png assets/dark/spinbox/spinbutton_minus_insensitive.png assets/dark/spinbox/spinbutton_minus_normal.png assets/dark/spinbox/spinbutton_minus_press.png assets/dark/spinbox/spinbutton_plus_hover.png assets/dark/spinbox/spinbutton_plus_insensitive.png assets/dark/spinbox/spinbutton_plus_normal.png assets/dark/spinbox/spinbutton_plus_press.png assets/dark/spinbox/spinbutton_down_hover.png assets/dark/spinbox/spinbutton_down_insensitive.png assets/dark/spinbox/spinbutton_down_normal.png assets/dark/spinbox/spinbutton_down_press.png assets/dark/spinbox/spinbutton_up_hover.png assets/dark/spinbox/spinbutton_up_insensitive.png assets/dark/spinbox/spinbutton_up_normal.png assets/dark/spinbox/spinbutton_up_press.png assets/dark/slider/slider_handle_focus.svg assets/dark/slider/slider_handle_insensitive.svg assets/dark/slider/slider_handle_normal.svg assets/dark/slider/slider_handle_press.svg assets/dark/slider/slider_point_handle_focus.png assets/dark/slider/slider_point_handle_focus@2x.png assets/dark/slider/slider_point_handle_insensitive.png assets/dark/slider/slider_point_handle_insensitive@2x.png assets/dark/slider/slider_point_handle_press.png assets/dark/slider/slider_point_handle_press@2x.png assets/dark/slider/slider_point_handle.png assets/dark/slider/slider_point_handle@2x.png assets/dark/tabbar/add_hover.svg assets/dark/tabbar/add_normal.svg assets/dark/tabbar/add_press.svg assets/dark/tabbar/pagedown_hover.svg assets/dark/tabbar/pagedown_insensitive.svg assets/dark/tabbar/pagedown_normal.svg assets/dark/tabbar/pagedown_press.svg assets/dark/tabbar/pageup_hover.svg assets/dark/tabbar/pageup_insensitive.svg assets/dark/tabbar/pageup_normal.svg assets/dark/tabbar/pageup_press.svg assets/dark/tabbar/tab_close_hover.svg assets/dark/tabbar/tab_close_normal.svg assets/dark/tabbar/tab_close_press.svg assets/dark/header_arrow_up.svg assets/dark/header_arrow_down.svg assets/dark/input/input_clear_hover.svg assets/dark/input/input_clear_normal.svg assets/dark/input/input_clear_press.svg qt5integration-5.0.0/dstyleplugin/assets_light.qrc000066400000000000000000000170011347440174500224240ustar00rootroot00000000000000 assets/light/arrow-right_disabled.svg assets/light/arrow-right_selected.svg assets/light/arrow-right_normal.svg assets/light/check_disabled.svg assets/light/check_selected.svg assets/light/check_normal.svg assets/light/checkbox/checkbox_checked_insensitive.png assets/light/checkbox/checkbox_checked_insensitive@2x.png assets/light/checkbox/checkbox_checked_focus.png assets/light/checkbox/checkbox_checked_focus@2x.png assets/light/checkbox/checkbox_mixed_insensitive.png assets/light/checkbox/checkbox_mixed_insensitive@2x.png assets/light/checkbox/checkbox_mixed_focus.png assets/light/checkbox/checkbox_mixed_focus@2x.png assets/light/checkbox/checkbox_unchecked_insensitive.png assets/light/checkbox/checkbox_unchecked_insensitive@2x.png assets/light/checkbox/checkbox_checked.png assets/light/checkbox/checkbox_checked@2x.png assets/light/checkbox/checkbox_checked_hover.png assets/light/checkbox/checkbox_checked_hover@2x.png assets/light/checkbox/checkbox_checked_press.png assets/light/checkbox/checkbox_checked_press@2x.png assets/light/checkbox/checkbox_mixed.png assets/light/checkbox/checkbox_mixed@2x.png assets/light/checkbox/checkbox_mixed_hover.png assets/light/checkbox/checkbox_mixed_hover@2x.png assets/light/checkbox/checkbox_mixed_press.png assets/light/checkbox/checkbox_mixed_press@2x.png assets/light/checkbox/checkbox_unchecked.png assets/light/checkbox/checkbox_unchecked@2x.png assets/light/checkbox/checkbox_unchecked_focus.png assets/light/checkbox/checkbox_unchecked_focus@2x.png assets/light/checkbox/checkbox_unchecked_hover.png assets/light/checkbox/checkbox_unchecked_hover@2x.png assets/light/checkbox/checkbox_unchecked_press.png assets/light/checkbox/checkbox_unchecked_press@2x.png assets/light/checkbox/radio_checked_insensitive.png assets/light/checkbox/radio_checked_insensitive@2x.png assets/light/checkbox/radio_mixed_insensitive.png assets/light/checkbox/radio_mixed_insensitive@2x.png assets/light/checkbox/radio_unchecked_insensitive.png assets/light/checkbox/radio_unchecked_insensitive@2x.png assets/light/checkbox/radio_checked.png assets/light/checkbox/radio_checked@2x.png assets/light/checkbox/radio_checked_focus.png assets/light/checkbox/radio_checked_focus@2x.png assets/light/checkbox/radio_checked_hover.png assets/light/checkbox/radio_checked_hover@2x.png assets/light/checkbox/radio_checked_press.png assets/light/checkbox/radio_checked_press@2x.png assets/light/checkbox/radio_mixed.png assets/light/checkbox/radio_mixed@2x.png assets/light/checkbox/radio_mixed_focus.png assets/light/checkbox/radio_mixed_focus@2x.png assets/light/checkbox/radio_mixed_hover.png assets/light/checkbox/radio_mixed_hover@2x.png assets/light/checkbox/radio_mixed_press.png assets/light/checkbox/radio_mixed_press@2x.png assets/light/checkbox/radio_unchecked.png assets/light/checkbox/radio_unchecked@2x.png assets/light/checkbox/radio_unchecked_focus.png assets/light/checkbox/radio_unchecked_focus@2x.png assets/light/checkbox/radio_unchecked_hover.png assets/light/checkbox/radio_unchecked_hover@2x.png assets/light/checkbox/radio_unchecked_press.png assets/light/checkbox/radio_unchecked_press@2x.png assets/light/header_arrow_down.png assets/light/header_arrow_up.png assets/light/spinbox/spinbutton_minus_hover.png assets/light/spinbox/spinbutton_minus_insensitive.png assets/light/spinbox/spinbutton_minus_normal.png assets/light/spinbox/spinbutton_minus_press.png assets/light/spinbox/spinbutton_plus_hover.png assets/light/spinbox/spinbutton_plus_insensitive.png assets/light/spinbox/spinbutton_plus_normal.png assets/light/spinbox/spinbutton_plus_press.png assets/light/spinbox/spinbutton_down_hover.png assets/light/spinbox/spinbutton_down_insensitive.png assets/light/spinbox/spinbutton_down_normal.png assets/light/spinbox/spinbutton_down_press.png assets/light/spinbox/spinbutton_up_hover.png assets/light/spinbox/spinbutton_up_insensitive.png assets/light/spinbox/spinbutton_up_normal.png assets/light/spinbox/spinbutton_up_press.png assets/light/slider/slider_handle_focus.svg assets/light/slider/slider_handle_insensitive.svg assets/light/slider/slider_handle_normal.svg assets/light/slider/slider_handle_press.svg assets/light/slider/slider_point_handle_focus.png assets/light/slider/slider_point_handle_focus@2x.png assets/light/slider/slider_point_handle_insensitive.png assets/light/slider/slider_point_handle_insensitive@2x.png assets/light/slider/slider_point_handle_press.png assets/light/slider/slider_point_handle_press@2x.png assets/light/slider/slider_point_handle.png assets/light/slider/slider_point_handle@2x.png assets/light/tabbar/add_hover.svg assets/light/tabbar/add_normal.svg assets/light/tabbar/add_press.svg assets/light/tabbar/pagedown_hover.svg assets/light/tabbar/pagedown_insensitive.svg assets/light/tabbar/pagedown_normal.svg assets/light/tabbar/pagedown_press.svg assets/light/tabbar/pageup_hover.svg assets/light/tabbar/pageup_insensitive.svg assets/light/tabbar/pageup_normal.svg assets/light/tabbar/pageup_press.svg assets/light/tabbar/tab_close_hover.svg assets/light/tabbar/tab_close_normal.svg assets/light/tabbar/tab_close_press.svg assets/light/input/input_clear_hover.svg assets/light/input/input_clear_normal.svg assets/light/input/input_clear_press.svg qt5integration-5.0.0/dstyleplugin/assets_semidark.qrc000066400000000000000000000127661347440174500231310ustar00rootroot00000000000000 assets/semidark/check_disabled.png assets/semidark/check_selected.png assets/semidark/check_normal.png assets/semidark/checkbox/checkbox_checked_insensitive.png assets/semidark/checkbox/checkbox_checked_insensitive@2x.png assets/semidark/checkbox/checkbox_checked_focus.png assets/semidark/checkbox/checkbox_checked_focus@2x.png assets/semidark/checkbox/checkbox_mixed_insensitive.png assets/semidark/checkbox/checkbox_mixed_insensitive@2x.png assets/semidark/checkbox/checkbox_mixed_focus.png assets/semidark/checkbox/checkbox_mixed_focus@2x.png assets/semidark/checkbox/checkbox_unchecked_insensitive.png assets/semidark/checkbox/checkbox_unchecked_insensitive@2x.png assets/semidark/checkbox/checkbox_checked.png assets/semidark/checkbox/checkbox_checked@2x.png assets/semidark/checkbox/checkbox_checked_hover.png assets/semidark/checkbox/checkbox_checked_hover@2x.png assets/semidark/checkbox/checkbox_checked_press.png assets/semidark/checkbox/checkbox_checked_press@2x.png assets/semidark/checkbox/checkbox_mixed.png assets/semidark/checkbox/checkbox_mixed@2x.png assets/semidark/checkbox/checkbox_mixed_hover.png assets/semidark/checkbox/checkbox_mixed_hover@2x.png assets/semidark/checkbox/checkbox_mixed_press.png assets/semidark/checkbox/checkbox_mixed_press@2x.png assets/semidark/checkbox/checkbox_unchecked.png assets/semidark/checkbox/checkbox_unchecked@2x.png assets/semidark/checkbox/checkbox_unchecked_focus.png assets/semidark/checkbox/checkbox_unchecked_focus@2x.png assets/semidark/checkbox/checkbox_unchecked_hover.png assets/semidark/checkbox/checkbox_unchecked_hover@2x.png assets/semidark/checkbox/checkbox_unchecked_press.png assets/semidark/checkbox/checkbox_unchecked_press@2x.png assets/semidark/checkbox/radio_checked_insensitive.png assets/semidark/checkbox/radio_checked_insensitive@2x.png assets/semidark/checkbox/radio_mixed_insensitive.png assets/semidark/checkbox/radio_mixed_insensitive@2x.png assets/semidark/checkbox/radio_unchecked_insensitive.png assets/semidark/checkbox/radio_unchecked_insensitive@2x.png assets/semidark/checkbox/radio_checked.png assets/semidark/checkbox/radio_checked@2x.png assets/semidark/checkbox/radio_checked_focus.png assets/semidark/checkbox/radio_checked_focus@2x.png assets/semidark/checkbox/radio_checked_hover.png assets/semidark/checkbox/radio_checked_hover@2x.png assets/semidark/checkbox/radio_checked_press.png assets/semidark/checkbox/radio_checked_press@2x.png assets/semidark/checkbox/radio_mixed.png assets/semidark/checkbox/radio_mixed@2x.png assets/semidark/checkbox/radio_mixed_focus.png assets/semidark/checkbox/radio_mixed_focus@2x.png assets/semidark/checkbox/radio_mixed_hover.png assets/semidark/checkbox/radio_mixed_hover@2x.png assets/semidark/checkbox/radio_mixed_press.png assets/semidark/checkbox/radio_mixed_press@2x.png assets/semidark/checkbox/radio_unchecked.png assets/semidark/checkbox/radio_unchecked@2x.png assets/semidark/checkbox/radio_unchecked_focus.png assets/semidark/checkbox/radio_unchecked_focus@2x.png assets/semidark/checkbox/radio_unchecked_hover_dark.png assets/semidark/checkbox/radio_unchecked_hover_dark@2x.png assets/semidark/checkbox/radio_unchecked_press_dark.png assets/semidark/checkbox/radio_unchecked_press_dark@2x.png assets/semidark/header_arrow_down.png assets/semidark/header_arrow_up.png assets/semidark/slider/slider_handle_focus.svg assets/semidark/slider/slider_handle_insensitive.svg assets/semidark/slider/slider_handle_normal.svg assets/semidark/slider/slider_handle_press.svg assets/semidark/slider/slider_point_handle_focus.png assets/semidark/slider/slider_point_handle_focus@2x.png assets/semidark/slider/slider_point_handle_insensitive.png assets/semidark/slider/slider_point_handle_insensitive@2x.png assets/semidark/slider/slider_point_handle_press.png assets/semidark/slider/slider_point_handle_press@2x.png assets/semidark/slider/slider_point_handle.png assets/semidark/slider/slider_point_handle@2x.png qt5integration-5.0.0/dstyleplugin/assets_semilight.qrc000066400000000000000000000133521347440174500233070ustar00rootroot00000000000000 assets/semilight/arrow-right_disabled.png assets/semilight/arrow-right_selected.png assets/semilight/arrow-right_normal.png assets/semilight/check_disabled.png assets/semilight/check_selected.png assets/semilight/check_normal.png assets/semilight/checkbox/checkbox_checked_insensitive.png assets/semilight/checkbox/checkbox_checked_insensitive@2x.png assets/semilight/checkbox/checkbox_checked_focus.png assets/semilight/checkbox/checkbox_checked_focus@2x.png assets/semilight/checkbox/checkbox_mixed_insensitive.png assets/semilight/checkbox/checkbox_mixed_insensitive@2x.png assets/semilight/checkbox/checkbox_mixed_focus.png assets/semilight/checkbox/checkbox_mixed_focus@2x.png assets/semilight/checkbox/checkbox_unchecked_insensitive.png assets/semilight/checkbox/checkbox_unchecked_insensitive@2x.png assets/semilight/checkbox/checkbox_checked.png assets/semilight/checkbox/checkbox_checked@2x.png assets/semilight/checkbox/checkbox_checked_hover.png assets/semilight/checkbox/checkbox_checked_hover@2x.png assets/semilight/checkbox/checkbox_checked_press.png assets/semilight/checkbox/checkbox_checked_press@2x.png assets/semilight/checkbox/checkbox_mixed.png assets/semilight/checkbox/checkbox_mixed@2x.png assets/semilight/checkbox/checkbox_mixed_hover.png assets/semilight/checkbox/checkbox_mixed_hover@2x.png assets/semilight/checkbox/checkbox_mixed_press.png assets/semilight/checkbox/checkbox_mixed_press@2x.png assets/semilight/checkbox/checkbox_unchecked.png assets/semilight/checkbox/checkbox_unchecked@2x.png assets/semilight/checkbox/checkbox_unchecked_focus.png assets/semilight/checkbox/checkbox_unchecked_focus@2x.png assets/semilight/checkbox/checkbox_unchecked_hover.png assets/semilight/checkbox/checkbox_unchecked_hover@2x.png assets/semilight/checkbox/checkbox_unchecked_press.png assets/semilight/checkbox/checkbox_unchecked_press@2x.png assets/semilight/checkbox/radio_checked_insensitive.png assets/semilight/checkbox/radio_checked_insensitive@2x.png assets/semilight/checkbox/radio_mixed_insensitive.png assets/semilight/checkbox/radio_mixed_insensitive@2x.png assets/semilight/checkbox/radio_unchecked_insensitive.png assets/semilight/checkbox/radio_unchecked_insensitive@2x.png assets/semilight/checkbox/radio_checked.png assets/semilight/checkbox/radio_checked@2x.png assets/semilight/checkbox/radio_checked_focus.png assets/semilight/checkbox/radio_checked_focus@2x.png assets/semilight/checkbox/radio_checked_hover.png assets/semilight/checkbox/radio_checked_hover@2x.png assets/semilight/checkbox/radio_checked_press.png assets/semilight/checkbox/radio_checked_press@2x.png assets/semilight/checkbox/radio_mixed.png assets/semilight/checkbox/radio_mixed@2x.png assets/semilight/checkbox/radio_mixed_focus.png assets/semilight/checkbox/radio_mixed_focus@2x.png assets/semilight/checkbox/radio_mixed_hover.png assets/semilight/checkbox/radio_mixed_hover@2x.png assets/semilight/checkbox/radio_mixed_press.png assets/semilight/checkbox/radio_mixed_press@2x.png assets/semilight/checkbox/radio_unchecked.png assets/semilight/checkbox/radio_unchecked@2x.png assets/semilight/checkbox/radio_unchecked_focus.png assets/semilight/checkbox/radio_unchecked_focus@2x.png assets/semilight/checkbox/radio_unchecked_hover.png assets/semilight/checkbox/radio_unchecked_hover@2x.png assets/semilight/checkbox/radio_unchecked_press.png assets/semilight/checkbox/radio_unchecked_press@2x.png assets/semilight/header_arrow_down.png assets/semilight/header_arrow_up.png assets/semilight/slider/slider_handle_focus.svg assets/semilight/slider/slider_handle_insensitive.svg assets/semilight/slider/slider_handle_normal.svg assets/semilight/slider/slider_handle_press.svg assets/semilight/slider/slider_point_handle_focus.png assets/semilight/slider/slider_point_handle_focus@2x.png assets/semilight/slider/slider_point_handle_insensitive.png assets/semilight/slider/slider_point_handle_insensitive@2x.png assets/semilight/slider/slider_point_handle_press.png assets/semilight/slider/slider_point_handle_press@2x.png assets/semilight/slider/slider_point_handle.png assets/semilight/slider/slider_point_handle@2x.png qt5integration-5.0.0/dstyleplugin/brushchemes.qrc000066400000000000000000000003631347440174500222460ustar00rootroot00000000000000 brushschemes/dlight.css brushschemes/ddark.css brushschemes/dsemidark.css brushschemes/dsemilight.css qt5integration-5.0.0/dstyleplugin/brushschemes/000077500000000000000000000000001347440174500217205ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/brushschemes/ddark.css000066400000000000000000000227021347440174500235220ustar00rootroot00000000000000QPalette { Base: transparent; Text: rgb(255,255,255); Window: "#202020"; WindowText: rgb(255,255,255); Highlight: "#61b5f8"; HighlightedText: rgb(255,255,255); Button: rgba(255, 255, 255, 0.15); ButtonText: "#dcdcdc"; } QPalette:disabled { Text: rgba(255, 255, 255, 0.4); WindowText: rgba(255, 255, 255, 0.4); Highlight: "#8ccfff"; HighlightedText: rgba(255,255,255, 0.4); } Slider { GrooveColor: rgba(255, 255, 255, 0.2); GrooveHighlightColor: "#2ca7f8"; HandleBrush: url(:/assets/dark/slider/slider_handle_normal.svg); VernierHandleBrush: url(:/assets/dark/slider/slider_point_handle.png); HandleBorderColor: transparent; TickmarkColor: rgba(255,255,255,0.6); } Slider:focus { HandleBrush: url(:/assets/dark/slider/slider_handle_focus.svg); VernierHandleBrush: url(:/assets/dark/slider/slider_point_handle_focus.png); HandleBorderColor: "#2ca7f8"; } Slider:disabled { GrooveColor: rgba(255, 255, 255, 0.08); GrooveHighlightColor: "#0d4265"; HandleBrush: url(:/assets/dark/slider/slider_handle_insensitive.svg); VernierHandleBrush: url(:/assets/dark/slider/slider_point_handle_insensitive.png); HandleBorderColor: rgba(0, 0, 0, 0.1); } Slider:pressed { HandleBrush: url(:/assets/dark/slider/slider_handle_press.svg); VernierHandleBrush: url(:/assets/dark/slider/slider_point_handle_press.png); } ProgressBar { GrooveBackground: rgba(255, 255, 255, 0.1); GrooveBorder: transparent; ContentBackground: "#2ca7f8"; ContentBorder: "#378cfa"; } PushButton { BackgroundBrush: rgba(255, 255, 255, 0.15); TextColor: "#dcdcdc"; SuggestTextColor: rgba(0, 132, 255, 1); BorderBrush: transparent; SuggestButtonColor: rgba(0, 132, 255, 0.4); } PushButton:disabled { BackgroundBrush: rgba(255, 255, 255, 0.06); TextColor: "#40dcdcdc"; SuggestTextColor: "#40dcdcdc"; BorderBrush: transparent; SuggestTextColor: transparent; } PushButton:hover { BackgroundBrush: rgba(255, 255, 255, 0.3); TextColor: white; SuggestTextColor: white; BorderBrush: transparent; SuggestTextColor: transparent; } PushButton:pressed { BackgroundBrush: rgba(255,255,255,0.1); TextColor: "#2ca7f8"; SuggestTextColor: "#2ca7f8"; BorderBrush: rgba(0, 0, 0, 0.05); SuggestTextColor: transparent; } PushButton:focus { BorderBrush: "#2ca7f8"; SuggestButtonColor: rgba(0, 132, 255, 0.4); } PushButton:flat { TextColor: "#0082fa"; SuggestTextColor: "#0082fa"; } PushButton:flat:disabled { TextColor: "#0060b9"; SuggestTextColor: "#0060b9"; } PushButton:flat:hover { TextColor: "#16b8ff"; SuggestTextColor: "#16b8ff"; } LineEdit { BackgroundBrush: rgba(255,255,255,0.15); BorderBrush: transparent; AlertBorderBrush: "#FF8F00"; } LineEdit:disabled { BackgroundBrush: rgba(255,255,255,0.04); } LineEdit:focus { BackgroundBrush: rgba(255,255,255,0.05); BorderBrush: rgba(43,167,248,0.6); } ScrollBar { HandleBrush: rgba(255, 255, 255, 0.2); HandleBroderBrush: rgba(255, 255, 255, 0.05); } ScrollBar:hover { HandleBrush: rgba(255, 255, 255, 0.4); HandleBroderBrush: rgba(255, 255, 255, 0.1); } ScrollBar:pressed { HandleBrush: rgba(96, 96, 96, 0.3); HandleBorderBrush: rgba(255, 255, 255, 0.05); } ScrollBar:focus { HandleBroderBrush: "#2ca7f8"; } Menu { BackgroundBrush: "#313131"; SeparatorColor: rgba(255, 255, 255, 0.1); BorderColor: rgba(0, 0, 0, 0.1); } CheckBox { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked.png); } CheckBox:disabled { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked_insensitive.png); } CheckBox:focus { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked_focus.png); } CheckBox:hover { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked_hover.png); } CheckBox:pressed { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked_press.png); } CheckBox:checked { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked.png); } CheckBox:checked:disabled { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked_insensitive.png); } CheckBox:checked:focus { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked_focus.png); } CheckBox:checked:hover { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked_hover.png); } CheckBox:checked:pressed { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked_press.png); } CheckBox:indeterminate { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed.png); } CheckBox:indeterminate:disabled { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed_insensitive.png); } CheckBox:indeterminate:focus { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed_focus.png); } CheckBox:indeterminate:hover { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed_hover.png); } CheckBox:indeterminate:pressed { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed_press.png); } RadioButton { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked.png); } RadioButton:disabled { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked_insensitive.png); } RadioButton:focus { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked_focus.png); } RadioButton:hover { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked_hover.png); } RadioButton:pressed { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked_press.png); } RadioButton:checked { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked.png); } RadioButton:checked:disabled { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked_insensitive.png); } RadioButton:checked:focus { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked_focus.png); } RadioButton:checked:hover { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked_hover.png); } RadioButton:checked:pressed { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked_press.png); } RadioButton:indeterminate { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed.png); } RadioButton:indeterminate:disabled { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed_insensitive.png); } RadioButton:indeterminate:focus { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed_focus.png); } RadioButton:indeterminate:hover { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed_hover.png); } RadioButton:indeterminate:pressed { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed_press.png); } RubberBand { BackgroundBrush: rgba(43, 167, 248, 0.3); BorderBrush: rgba(30, 126, 255, 0.2); } HeaderView { ArrowIndicatorUpIcon: url(:/assets/dark/header_arrow_up.svg); ArrowIndicatorDownIcon: url(:/assets/dark/header_arrow_down.svg); } SpinBox { MinusBrush: url(:/assets/dark/spinbox/spinbutton_minus_normal.png); PlusBrush: url(:/assets/dark/spinbox/spinbutton_plus_normal.png); DownBrush: url(:/assets/dark/spinbox/spinbutton_down_normal.png); UpBrush: url(:/assets/dark/spinbox/spinbutton_up_normal.png); BorderColor: black; } SpinBox:disabled { MinusBrush: url(:/assets/dark/spinbox/spinbutton_minus_insensitive.png); PlusBrush: url(:/assets/dark/spinbox/spinbutton_plus_insensitive.png); DownBrush: url(:/assets/dark/spinbox/spinbutton_down_insensitive.png); UpBrush: url(:/assets/dark/spinbox/spinbutton_up_insensitive.png); BorderColor: black; } SpinBox:focus { BorderColor: rgba(43,167,248,0.6); } SpinBox:pressed { MinusBrush: url(:/assets/dark/spinbox/spinbutton_minus_press.png); PlusBrush: url(:/assets/dark/spinbox/spinbutton_plus_press.png); DownBrush: url(:/assets/dark/spinbox/spinbutton_down_press.png); UpBrush: url(:/assets/dark/spinbox/spinbutton_up_press.png); } SpinBox:hover { MinusBrush: url(:/assets/dark/spinbox/spinbutton_minus_hover.png); PlusBrush: url(:/assets/dark/spinbox/spinbutton_plus_hover.png); DownBrush: url(:/assets/dark/spinbox/spinbutton_down_hover.png); UpBrush: url(:/assets/dark/spinbox/spinbutton_up_hover.png); } TabBarScrollButton { BackgroundBrush: transparent; UpIcon: url(:/assets/dark/tabbar/pageup_normal.svg); DownIcon: url(:/assets/dark/tabbar/pagedown_normal.svg); } TabBarScrollButton:disabled { UpIcon: url(:/assets/dark/tabbar/pageup_insensitive.svg); DownIcon: url(:/assets/dark/tabbar/pagedown_insensitive.svg); } TabBarScrollButton:pressed { UpIcon: url(:/assets/dark/tabbar/pageup_press.svg); DownIcon: url(:/assets/dark/tabbar/pagedown_press.svg); } TabBarScrollButton:hover { UpIcon: url(:/assets/dark/tabbar/pageup_hover.svg); DownIcon: url(:/assets/dark/tabbar/pagedown_hover.svg); } TabBarAddButton { BackgroundBrush: transparent; Icon: url(:/assets/dark/tabbar/add_normal.svg); } TabBarAddButton:pressed { Icon: url(:/assets/dark/tabbar/add_press.svg); } TabBarAddButton:hover { Icon: url(:/assets/dark/tabbar/add_hover.svg); } TabBarTab { TextColor: "#c0c0c0"; BackgroundBrush: transparent; BorderBrush: rgba(0,0,0,0.1); ActiveColor: "#2ca7f8"; CloseIcon: url(:/assets/dark/tabbar/tab_close_normal.svg); CloseIconBackground: "#2a2a2a"; } TabBarTab:disabled { TextColor: "#949494"; } TabBarTab:pressed { CloseIcon: url(:/assets/dark/tabbar/tab_close_press.svg); } TabBarTab:hover { BackgroundBrush: rgba(255, 255, 255, 0.05); CloseIcon: url(:/assets/dark/tabbar/tab_close_hover.svg); } TabBarTab:selected { TextColor: "#2ca7f8"; } qt5integration-5.0.0/dstyleplugin/brushschemes/dlight.css000066400000000000000000000234271347440174500237150ustar00rootroot00000000000000QPalette { Base: transparent; Text: rgb(25,25,25); Window: rgb(255,255,255); WindowText: rgb(25,25,25); Highlight: "#2ca7f8"; HighlightedText: rgb(255,255,255); Button: qlineargradient(x1:0, y1:0 x2:0, y2:1, stop:0 "#fff", stop:1 "#fdfdfd"); ButtonText: "#000"; } QPalette:disabled { Text: rgba(0, 0, 0, 0.4); WindowText: rgba(0, 0, 0, 0.4); Highlight: rgba(44, 167, 248, 0.4); HighlightedText: rgba(255,255,255, 0.4); } Slider { GrooveColor: "#a4a4a4"; GrooveHighlightColor: "#2ca7f8"; HandleBrush: url(:/assets/light/slider/slider_handle_normal.svg); VernierHandleBrush: url(:/assets/light/slider/slider_point_handle.png); HandleBorderColor: lightgray; TickmarkColor: rgba(0,0,0,0.6); } Slider:focus { HandleBrush: url(:/assets/light/slider/slider_handle_focus.svg); VernierHandleBrush: url(:/assets/light/slider/slider_point_handle_focus.png); HandleBorderColor: "#2ca7f8"; } Slider:disabled { GrooveColor: rgba(163, 163, 163, 0.4); GrooveHighlightColor: "#aedfff"; HandleBrush: url(:/assets/light/slider/slider_handle_insensitive.svg); VernierHandleBrush: url(:/assets/light/slider/slider_point_handle_insensitive.png); HandleBorderColor: rgba(0, 0, 0, 0.1); } Slider:pressed { HandleBrush: url(:/assets/light/slider/slider_handle_press.svg); VernierHandleBrush: url(:/assets/light/slider/slider_point_handle_press.png); } ProgressBar { GrooveBackground: rgba(0, 0, 0, 0.05); GrooveBorder: rgba(255, 255, 255, 0.05); ContentBackground: "#2ca7f8"; ContentBorder: "#378cfa"; } PushButton { BackgroundBrush: qlineargradient(x1:0, y1:0 x2:0, y2:1, stop:0 "#fff", stop:1 "#fdfdfd"); TextColor: "#000"; SuggestTextColor: rgba(0, 132, 255, 1); BorderBrush: rgba(0,0,0,0.1); SuggestButtonColor: rgba(0, 132, 255, 0.4); } PushButton:disabled { BackgroundBrush: qlineargradient(x1: 0, y1: 0 x2: 0, y2: 1, stop:0 rgba(255, 255, 255, 0.4), stop:1 rgba(253, 253, 253, 0.4)); TextColor: "#AEAEAE"; SuggestTextColor: "#AEAEAE"; BorderBrush: rgba(0,0,0,0.04); SuggestButtonColor: rgba(0,0,0,0.04); } PushButton:hover { BackgroundBrush: qlineargradient(x1: 0, y1: 0 x2: 0, y2: 1, stop:0 "#8ccfff", stop:1 "#4bb8ff"); TextColor: "#fff"; SuggestTextColor: "#fff"; BorderBrush: rgba(0, 117, 243, 0.2); SuggestButtonColor: rgba(0, 117, 243, 0.2); } PushButton:pressed { BackgroundBrush: qlineargradient(x1: 0, y1: 0 x2: 0, y2: 1, stop:0 "#0b8cff", stop:1 "#0aa1ff"); TextColor: "#fff"; SuggestTextColor: "#fff"; BorderBrush: rgba(0, 0, 0, 0.05); SuggestButtonColor: rgba(29, 129, 255, 0.3); } PushButton:focus { BorderBrush: "#2ca7f8"; SuggestButtonColor: rgba(0, 132, 255, 0.4); } PushButton:flat { TextColor: "#0082fa"; SuggestTextColor: "#0082fa"; } PushButton:flat:disabled { TextColor: "#0060b9"; SuggestTextColor: "#0060b9"; } PushButton:flat:hover { TextColor: "#16b8ff"; SuggestTextColor: "#16b8ff"; } PushButton:flat:pressed { TextColor: "#0082fa"; SuggestTextColor: "#0082fa"; } LineEdit { BackgroundBrush: rgb(255,255,255); BorderBrush: rgba(0,0,0,0.1); AlertBorderBrush: "#FF8F00"; } LineEdit:disabled { BackgroundBrush: rgb(255,255,255); BorderBrush: rgba(0,0,0,0.04); } LineEdit:focus { BackgroundBrush: rgb(255,255,255); BorderBrush: rgb(44,167,248); } ScrollBar { HandleBrush: rgba(16, 16, 16, 0.5); } ScrollBar:hover { HandleBrush: rgba(16, 16, 16, 0.5); } ScrollBar:pressed { HandleBrush: rgba(16, 16, 16, 0.55); } ScrollBar:focus { HandleBorderBrush: "#2ca7f8"; } Menu { SeparatorColor: rgba(0, 0, 0, 0.1); BorderColor: rgba(0, 0, 0, 0.1); BackgroundBrush: rgb(255,255,255); } CheckBox { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked.png); } CheckBox:disabled { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked_insensitive.png); } CheckBox:focus { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked_focus.png); } CheckBox:hover { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked_hover.png); } CheckBox:pressed { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked_press.png); } CheckBox:checked { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked.png); } CheckBox:checked:disabled { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked_insensitive.png); } CheckBox:checked:focus { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked_focus.png); } CheckBox:checked:hover { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked_hover.png); } CheckBox:checked:pressed { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked_press.png); } CheckBox:indeterminate { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed.png); } CheckBox:indeterminate:disabled { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed_insensitive.png); } CheckBox:indeterminate:focus { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed_focus.png); } CheckBox:indeterminate:hover { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed_hover.png); } CheckBox:indeterminate:pressed { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed_press.png); } RadioButton { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked.png); } RadioButton:disabled { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked_insensitive.png); } RadioButton:focus { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked_focus.png); } RadioButton:hover { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked_hover.png); } RadioButton:pressed { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked_press.png); } RadioButton:checked { BackgroundBrush: url(:/assets/light/checkbox/radio_checked.png); } RadioButton:checked:disabled { BackgroundBrush: url(:/assets/light/checkbox/radio_checked_insensitive.png); } RadioButton:checked:focus { BackgroundBrush: url(:/assets/light/checkbox/radio_checked_focus.png); } RadioButton:checked:hover { BackgroundBrush: url(:/assets/light/checkbox/radio_checked_hover.png); } RadioButton:checked:pressed { BackgroundBrush: url(:/assets/light/checkbox/radio_checked_press.png); } RadioButton:indeterminate { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed.png); } RadioButton:indeterminate:disabled { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed_insensitive.png); } RadioButton:indeterminate:focus { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed_focus.png); } RadioButton:indeterminate:hover { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed_hover.png); } RadioButton:indeterminate:pressed { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed_press.png); } RubberBand { BackgroundBrush: rgba(43, 167, 248, 0.3); BorderBrush: rgba(30, 126, 255, 0.2); } HeaderView { ArrowIndicatorUpIcon: url(:/assets/light/header_arrow_up.png); ArrowIndicatorDownIcon: url(:/assets/light/header_arrow_down.png); } SpinBox { MinusBrush: url(:/assets/light/spinbox/spinbutton_minus_normal.png); PlusBrush: url(:/assets/light/spinbox/spinbutton_plus_normal.png); DownBrush: url(:/assets/light/spinbox/spinbutton_down_normal.png); UpBrush: url(:/assets/light/spinbox/spinbutton_up_normal.png); BorderColor: rgba(0,0,0,0.1); } SpinBox:disabled { MinusBrush: url(:/assets/light/spinbox/spinbutton_minus_insensitive.png); PlusBrush: url(:/assets/light/spinbox/spinbutton_plus_insensitive.png); DownBrush: url(:/assets/light/spinbox/spinbutton_down_insensitive.png); UpBrush: url(:/assets/light/spinbox/spinbutton_up_insensitive.png); BorderColor: rgba(0,0,0,0.04); } SpinBox:focus { BorderColor: rgb(44,167,248); } SpinBox:pressed { MinusBrush: url(:/assets/light/spinbox/spinbutton_minus_press.png); PlusBrush: url(:/assets/light/spinbox/spinbutton_plus_press.png); DownBrush: url(:/assets/light/spinbox/spinbutton_down_press.png); UpBrush: url(:/assets/light/spinbox/spinbutton_up_press.png); } SpinBox:hover { MinusBrush: url(:/assets/light/spinbox/spinbutton_minus_hover.png); PlusBrush: url(:/assets/light/spinbox/spinbutton_plus_hover.png); DownBrush: url(:/assets/light/spinbox/spinbutton_down_hover.png); UpBrush: url(:/assets/light/spinbox/spinbutton_up_hover.png); } TabBarScrollButton { BackgroundBrush: transparent; UpIcon: url(:/assets/light/tabbar/pageup_normal.svg); DownIcon: url(:/assets/light/tabbar/pagedown_normal.svg); } TabBarScrollButton:disabled { UpIcon: url(:/assets/light/tabbar/pageup_insensitive.svg); DownIcon: url(:/assets/light/tabbar/pagedown_insensitive.svg); } TabBarScrollButton:pressed { UpIcon: url(:/assets/light/tabbar/pageup_press.svg); DownIcon: url(:/assets/light/tabbar/pagedown_press.svg); } TabBarScrollButton:hover { UpIcon: url(:/assets/light/tabbar/pageup_hover.svg); DownIcon: url(:/assets/light/tabbar/pagedown_hover.svg); } TabBarAddButton { BackgroundBrush: transparent; Icon: url(:/assets/light/tabbar/add_normal.svg); } TabBarAddButton:pressed { Icon: url(:/assets/light/tabbar/add_press.svg); } TabBarAddButton:hover { Icon: url(:/assets/light/tabbar/add_hover.svg); } TabBarTab { BackgroundBrush: transparent; BorderBrush: rgba(0,0,0,0.1); TextColor: black; ActiveColor: "#2ca7f8"; CloseIcon: url(:/assets/light/tabbar/tab_close_normal.svg); CloseIconBackground: "#f3f3f3"; } TabBarTab:disabled { TextColor: "#949494"; } TabBarTab:pressed { CloseIcon: url(:/assets/light/tabbar/tab_close_press.svg); } TabBarTab:hover { BackgroundBrush: rgba(0, 0, 0, 0.05); CloseIcon: url(:/assets/light/tabbar/tab_close_hover.svg); } TabBarTab:selected { TextColor: "#2ca7f8"; } qt5integration-5.0.0/dstyleplugin/brushschemes/dsemidark.css000066400000000000000000000226521347440174500244040ustar00rootroot00000000000000QPalette { Base: transparent; Text: rgb(255,255,255); Window: "#202020"; WindowText: rgb(255,255,255); Highlight: rgba(44, 167, 248, 0.8); HighlightedText: rgba(255,255,255, 0.8); Button: rgba(255, 255, 255, 0.15); ButtonText: "#dcdcdc"; } QPalette:disabled { Text: rgba(255,255,255, 0.4); WindowText: rgba(255,255,255, 0.4); Highlight: rgba(44, 167, 248, 0.4); HighlightedText: rgba(255,255,255, 0.4); } Slider { GrooveColor: rgba(255, 255, 255, 0.2); GrooveHighlightColor: white; HandleBrush: url(:/assets/semidark/slider/slider_handle_normal.svg); VernierHandleBrush: url(:/assets/semidark/slider/slider_point_handle.png); HandleBorderColor: transparent; TickmarkColor: rgba(255,255,255,0.6); } Slider:focus { HandleBrush: url(:/assets/semidark/slider/slider_handle_focus.svg); VernierHandleBrush: url(:/assets/semidark/slider/slider_point_handle_focus.png); HandleBorderColor: "#2ca7f8"; } Slider:disabled { GrooveColor: rgba(255, 255, 255, 0.08); GrooveHighlightColor: "#0d4265"; HandleBrush: url(:/assets/semidark/slider/slider_handle_insensitive.svg); VernierHandleBrush: url(:/assets/semidark/slider/slider_point_handle_insensitive.png); HandleBorderColor: rgba(0, 0, 0, 0.1); } Slider:pressed { HandleBrush: url(:/assets/semidark/slider/slider_handle_press.svg); VernierHandleBrush: url(:/assets/semidark/slider/slider_point_handle_press.png); } ProgressBar { GrooveBackground: rgba(255, 255, 255, 0.1); GrooveBorder: transparent; ContentBackground: "#2ca7f8"; ContentBorder: "#378cfa"; } PushButton { BackgroundBrush: rgba(255, 255, 255, 0.15); TextColor: "white"; SuggestTextColor: rgba(0, 132, 255, 1); BorderBrush: transparent; SuggestButtonColor: rgba(0, 132, 255, 0.4); } PushButton:disabled { BackgroundBrush: rgba(255, 255, 255, 0.06); TextColor: "#40dcdcdc"; SuggestTextColor: "#40dcdcdc"; BorderBrush: transparent; SuggestButtonColor: transparent; } PushButton:hover { BackgroundBrush: rgba(255, 255, 255, 0.3); TextColor: white; SuggestTextColor: white; BorderBrush: transparent; SuggestButtonColor: transparent; } PushButton:pressed { BackgroundBrush: rgba(255,255,255,0.1); TextColor: "#2ca7f8"; SuggestTextColor: "#2ca7f8"; BorderBrush: rgba(0, 0, 0, 0.05); SuggestButtonColor: transparent; } PushButton:focus { BorderBrush: "#2ca7f8"; SuggestButtonColor: rgba(0, 132, 255, 0.4); } PushButton:flat { TextColor: "#0082fa"; SuggestTextColor: "#0082fa"; } PushButton:flat:disabled { TextColor: "#0060b9"; SuggestTextColor: "#0060b9"; } PushButton:flat:hover { TextColor: "#16b8ff"; SuggestTextColor: "#16b8ff"; } LineEdit { BackgroundBrush: rgba(255,255,255,0.15); BorderBrush: transparent; AlertBorderBrush: "#FF8F00"; } LineEdit:disabled { BackgroundBrush: rgba(255,255,255,0.04); } LineEdit:focus { BackgroundBrush: rgba(255,255,255,0.05); BorderBrush: rgba(43,167,248,0.6); } ScrollBar { HandleBrush: rgba(255, 255, 255, 0.2); HandleBroderBrush: rgba(255, 255, 255, 0.05); } ScrollBar:hover { HandleBrush: rgba(255, 255, 255, 0.4); HandleBroderBrush: rgba(255, 255, 255, 0.1); } ScrollBar:pressed { HandleBrush: rgba(96, 96, 96, 0.3); HandleBorderBrush: rgba(255, 255, 255, 0.05); } ScrollBar:focus { HandleBroderBrush: "#2ca7f8"; } Menu { BackgroundBrush: "#313131"; SeparatorColor: rgba(255, 255, 255, 0.1); BorderColor: rgba(0, 0, 0, 0.1); } CheckBox { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked.png); } CheckBox:disabled { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked_insensitive.png); } CheckBox:focus { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked_focus.png); } CheckBox:hover { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked_hover.png); } CheckBox:pressed { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_unchecked_press.png); } CheckBox:checked { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked.png); } CheckBox:checked:disabled { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked_insensitive.png); } CheckBox:checked:focus { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked_focus.png); } CheckBox:checked:hover { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked_hover.png); } CheckBox:checked:pressed { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_checked_press.png); } CheckBox:indeterminate { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed.png); } CheckBox:indeterminate:disabled { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed_insensitive.png); } CheckBox:indeterminate:focus { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed_focus.png); } CheckBox:indeterminate:hover { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed_hover.png); } CheckBox:indeterminate:pressed { BackgroundBrush: url(:/assets/dark/checkbox/checkbox_mixed_press.png); } RadioButton { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked.png); } RadioButton:disabled { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked_insensitive.png); } RadioButton:focus { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked_focus.png); } RadioButton:hover { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked_hover.png); } RadioButton:pressed { BackgroundBrush: url(:/assets/dark/checkbox/radio_unchecked_press.png); } RadioButton:checked { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked.png); } RadioButton:checked:disabled { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked_insensitive.png); } RadioButton:checked:focus { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked_focus.png); } RadioButton:checked:hover { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked_hover.png); } RadioButton:checked:pressed { BackgroundBrush: url(:/assets/dark/checkbox/radio_checked_press.png); } RadioButton:indeterminate { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed.png); } RadioButton:indeterminate:disabled { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed_insensitive.png); } RadioButton:indeterminate:focus { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed_focus.png); } RadioButton:indeterminate:hover { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed_hover.png); } RadioButton:indeterminate:pressed { BackgroundBrush: url(:/assets/dark/checkbox/radio_mixed_press.png); } RubberBand { BackgroundBrush: rgba(43, 167, 248, 0.3); BorderBrush: rgba(30, 126, 255, 0.2); } HeaderView { ArrowIndicatorUpIcon: url(:/assets/dark/header_arrow_up.png); ArrowIndicatorDownIcon: url(:/assets/dark/header_arrow_down.png); } SpinBox { MinusBrush: url(:/assets/dark/spinbox/spinbutton_minus_normal.png); PlusBrush: url(:/assets/dark/spinbox/spinbutton_plus_normal.png); DownBrush: url(:/assets/dark/spinbox/spinbutton_down_normal.png); UpBrush: url(:/assets/dark/spinbox/spinbutton_up_normal.png); BorderColor: black; } SpinBox:disabled { MinusBrush: url(:/assets/dark/spinbox/spinbutton_minus_insensitive.png); PlusBrush: url(:/assets/dark/spinbox/spinbutton_plus_insensitive.png); DownBrush: url(:/assets/dark/spinbox/spinbutton_down_insensitive.png); UpBrush: url(:/assets/dark/spinbox/spinbutton_up_insensitive.png); BorderColor: black; } SpinBox:focus { BorderColor: rgba(43,167,248,0.6); } SpinBox:pressed { MinusBrush: url(:/assets/dark/spinbox/spinbutton_minus_press.png); PlusBrush: url(:/assets/dark/spinbox/spinbutton_plus_press.png); DownBrush: url(:/assets/dark/spinbox/spinbutton_down_press.png); UpBrush: url(:/assets/dark/spinbox/spinbutton_up_press.png); } SpinBox:hover { MinusBrush: url(:/assets/dark/spinbox/spinbutton_minus_hover.png); PlusBrush: url(:/assets/dark/spinbox/spinbutton_plus_hover.png); DownBrush: url(:/assets/dark/spinbox/spinbutton_down_hover.png); UpBrush: url(:/assets/dark/spinbox/spinbutton_up_hover.png); } TabBarScrollButton { BackgroundBrush: transparent; UpIcon: url(:/assets/dark/tabbar/pageup_normal.svg); DownIcon: url(:/assets/dark/tabbar/pagedown_normal.svg); } TabBarScrollButton:disabled { UpIcon: url(:/assets/dark/tabbar/pageup_insensitive.svg); DownIcon: url(:/assets/dark/tabbar/pagedown_insensitive.svg); } TabBarScrollButton:pressed { UpIcon: url(:/assets/dark/tabbar/pageup_press.svg); DownIcon: url(:/assets/dark/tabbar/pagedown_press.svg); } TabBarScrollButton:hover { UpIcon: url(:/assets/dark/tabbar/pageup_hover.svg); DownIcon: url(:/assets/dark/tabbar/pagedown_hover.svg); } TabBarAddButton { BackgroundBrush: transparent; Icon: url(:/assets/dark/tabbar/add_normal.svg); } TabBarAddButton:pressed { Icon: url(:/assets/dark/tabbar/add_press.svg); } TabBarAddButton:hover { Icon: url(:/assets/dark/tabbar/add_hover.svg); } TabBarTab { TextColor: "#c0c0c0"; BackgroundBrush: transparent; BorderBrush: rgba(0,0,0,0.1); ActiveColor: "#2ca7f8"; CloseIcon: url(:/assets/dark/tabbar/tab_close_normal.svg); } TabBarTab:disabled { TextColor: "#949494"; } TabBarTab:pressed { CloseIcon: url(:/assets/dark/tabbar/tab_close_press.svg); } TabBarTab:hover { BackgroundBrush: rgba(255, 255, 255, 0.05); CloseIcon: url(:/assets/dark/tabbar/tab_close_hover.svg); } qt5integration-5.0.0/dstyleplugin/brushschemes/dsemilight.css000066400000000000000000000233201347440174500245630ustar00rootroot00000000000000QPalette { Base: transparent; Text: rgb(25,25,25); Window: rgb(255,255,255); WindowText: rgb(25,25,25); Highlight: rgba(44, 167, 248, 0.8); HighlightedText: rgba(255,255,255, 0.8); Button: qlineargradient(x1:0, y1:0 x2:0, y2:1, stop:0 "#fff", stop:1 "#fdfdfd"); ButtonText: "#000"; } QPalette:disabled { Text: rgba(0, 0, 0, 0.4); WindowText: rgba(0, 0, 0, 0.4); Highlight: rgba(44, 167, 248, 0.4); HighlightedText: rgba(255, 255, 255, 0.4); } Slider { GrooveColor: "#a4a4a4"; GrooveHighlightColor: "#2ca7f8"; HandleBrush: url(:/assets/semilight/slider/slider_handle_normal.svg); VernierHandleBrush: url(:/assets/semilight/slider/slider_point_handle.png); HandleBorderColor: lightgray; TickmarkColor: rgba(0,0,0,0.6); } Slider:focus { HandleBrush: url(:/assets/semilight/slider/slider_handle_focus.svg); VernierHandleBrush: url(:/assets/semilight/slider/slider_point_handle_focus.png); HandleBorderColor: "#2ca7f8"; } Slider:disabled { GrooveColor: rgba(163, 163, 163, 0.4); GrooveHighlightColor: "#aedfff"; HandleBrush: url(:/assets/semilight/slider/slider_handle_insensitive.svg); VernierHandleBrush: url(:/assets/semilight/slider/slider_point_handle_insensitive.png); HandleBorderColor: rgba(0, 0, 0, 0.1); } Slider:pressed { HandleBrush: url(:/assets/semilight/slider/slider_handle_press.svg); VernierHandleBrush: url(:/assets/semilight/slider/slider_point_handle_press.png); } ProgressBar { GrooveBackground: rgba(0, 0, 0, 0.05); GrooveBorder: rgba(255, 255, 255, 0.05); ContentBackground: "#2ca7f8"; ContentBorder: "#378cfa"; } PushButton { BackgroundBrush: qlineargradient(x1:0, y1:0 x2:0, y2:1, stop:0 "#fff", stop:1 "#fdfdfd"); TextColor: "#000"; SuggestTextColor: rgba(0, 132, 255, 1); BorderBrush: rgba(0,0,0,0.1); SuggestButtonColor: rgba(0, 132, 255, 0.4); } PushButton:disabled { BackgroundBrush: qlineargradient(x1: 0, y1: 0 x2: 0, y2: 1, stop:0 rgba(255, 255, 255, 0.4), stop:1 rgba(253, 253, 253, 0.4)); TextColor: "#AEAEAE"; SuggestTextColor: "#AEAEAE"; BorderBrush: rgba(0,0,0,0.04); SuggestButtonColor: rgba(0,0,0,0.04); } PushButton:hover { BackgroundBrush: qlineargradient(x1: 0, y1: 0 x2: 0, y2: 1, stop:0 "#8ccfff", stop:1 "#4bb8ff"); TextColor: "#fff"; SuggestTextColor: "#fff"; BorderBrush: rgba(0, 117, 243, 0.2); SuggestButtonColor: rgba(0, 117, 243, 0.2); } PushButton:pressed { BackgroundBrush: qlineargradient(x1: 0, y1: 0 x2: 0, y2: 1, stop:0 "#0b8cff", stop:1 "#0aa1ff"); TextColor: "#fff"; SuggestTextColor: "#fff"; BorderBrush: rgba(0, 0, 0, 0.05); SuggestButtonColor: rgba(29, 129, 255, 0.3); } PushButton:focus { BorderBrush: "#2ca7f8"; SuggestButtonColor: rgba(0, 132, 255, 0.4); } PushButton:flat { TextColor: "#0082fa"; SuggestTextColor: "#0082fa"; } PushButton:flat:disabled { TextColor: "#0060b9"; SuggestTextColor: "#0060b9"; } PushButton:flat:hover { TextColor: "#16b8ff"; SuggestTextColor: "#16b8ff"; } PushButton:flat:pressed { TextColor: "#0082fa"; SuggestTextColor: "#0082fa"; } LineEdit { BackgroundBrush: rgb(255,255,255); BorderBrush: rgba(0,0,0,0.1); AlertBorderBrush: "#FF8F00"; } LineEdit:disabled { BackgroundBrush: rgb(255,255,255); BorderBrush: rgba(0,0,0,0.04); } LineEdit:focus { BackgroundBrush: rgb(255,255,255); BorderBrush: rgb(44,167,248); } ScrollBar { HandleBrush: rgba(16, 16, 16, 0.5); } ScrollBar:hover { HandleBrush: rgba(16, 16, 16, 0.5); } ScrollBar:pressed { HandleBrush: rgba(16, 16, 16, 0.55); } ScrollBar:focus { HandleBorderBrush: "#2ca7f8"; } Menu { SeparatorColor: rgba(0, 0, 0, 0.1); BorderColor: rgba(0, 0, 0, 0.1); } CheckBox { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked.png); } CheckBox:disabled { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked_insensitive.png); } CheckBox:focus { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked_focus.png); } CheckBox:hover { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked_hover.png); } CheckBox:pressed { BackgroundBrush: url(:/assets/light/checkbox/checkbox_unchecked_press.png); } CheckBox:checked { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked.png); } CheckBox:checked:disabled { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked_insensitive.png); } CheckBox:checked:focus { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked_focus.png); } CheckBox:checked:hover { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked_hover.png); } CheckBox:checked:pressed { BackgroundBrush: url(:/assets/light/checkbox/checkbox_checked_press.png); } CheckBox:indeterminate { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed.png); } CheckBox:indeterminate:disabled { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed_insensitive.png); } CheckBox:indeterminate:focus { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed_focus.png); } CheckBox:indeterminate:hover { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed_hover.png); } CheckBox:indeterminate:pressed { BackgroundBrush: url(:/assets/light/checkbox/checkbox_mixed_press.png); } RadioButton { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked.png); } RadioButton:disabled { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked_insensitive.png); } RadioButton:focus { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked_focus.png); } RadioButton:hover { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked_hover.png); } RadioButton:pressed { BackgroundBrush: url(:/assets/light/checkbox/radio_unchecked_press.png); } RadioButton:checked { BackgroundBrush: url(:/assets/light/checkbox/radio_checked.png); } RadioButton:checked:disabled { BackgroundBrush: url(:/assets/light/checkbox/radio_checked_insensitive.png); } RadioButton:checked:focus { BackgroundBrush: url(:/assets/light/checkbox/radio_checked_focus.png); } RadioButton:checked:hover { BackgroundBrush: url(:/assets/light/checkbox/radio_checked_hover.png); } RadioButton:checked:pressed { BackgroundBrush: url(:/assets/light/checkbox/radio_checked_press.png); } RadioButton:indeterminate { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed.png); } RadioButton:indeterminate:disabled { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed_insensitive.png); } RadioButton:indeterminate:focus { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed_focus.png); } RadioButton:indeterminate:hover { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed_hover.png); } RadioButton:indeterminate:pressed { BackgroundBrush: url(:/assets/light/checkbox/radio_mixed_press.png); } RubberBand { BackgroundBrush: rgba(43, 167, 248, 0.3); BorderBrush: rgba(30, 126, 255, 0.2); } HeaderView { ArrowIndicatorUpIcon: url(:/assets/light/header_arrow_up.png); ArrowIndicatorDownIcon: url(:/assets/light/header_arrow_down.png); } SpinBox { MinusBrush: url(:/assets/light/spinbox/spinbutton_minus_normal.png); PlusBrush: url(:/assets/light/spinbox/spinbutton_plus_normal.png); DownBrush: url(:/assets/light/spinbox/spinbutton_down_normal.png); UpBrush: url(:/assets/light/spinbox/spinbutton_up_normal.png); BorderColor: rgba(0,0,0,0.1); } SpinBox:disabled { MinusBrush: url(:/assets/light/spinbox/spinbutton_minus_insensitive.png); PlusBrush: url(:/assets/light/spinbox/spinbutton_plus_insensitive.png); DownBrush: url(:/assets/light/spinbox/spinbutton_down_insensitive.png); UpBrush: url(:/assets/light/spinbox/spinbutton_up_insensitive.png); BorderColor: rgba(0,0,0,0.04); } SpinBox:focus { BorderColor: rgb(44,167,248); } SpinBox:pressed { MinusBrush: url(:/assets/light/spinbox/spinbutton_minus_press.png); PlusBrush: url(:/assets/light/spinbox/spinbutton_plus_press.png); DownBrush: url(:/assets/light/spinbox/spinbutton_down_press.png); UpBrush: url(:/assets/light/spinbox/spinbutton_up_press.png); } SpinBox:hover { MinusBrush: url(:/assets/light/spinbox/spinbutton_minus_hover.png); PlusBrush: url(:/assets/light/spinbox/spinbutton_plus_hover.png); DownBrush: url(:/assets/light/spinbox/spinbutton_down_hover.png); UpBrush: url(:/assets/light/spinbox/spinbutton_up_hover.png); } TabBarScrollButton { BackgroundBrush: transparent; UpIcon: url(:/assets/light/tabbar/pageup_normal.svg); DownIcon: url(:/assets/light/tabbar/pagedown_normal.svg); } TabBarScrollButton:disabled { UpIcon: url(:/assets/light/tabbar/pageup_insensitive.svg); DownIcon: url(:/assets/light/tabbar/pagedown_insensitive.svg); } TabBarScrollButton:pressed { UpIcon: url(:/assets/light/tabbar/pageup_press.svg); DownIcon: url(:/assets/light/tabbar/pagedown_press.svg); } TabBarScrollButton:hover { UpIcon: url(:/assets/light/tabbar/pageup_hover.svg); DownIcon: url(:/assets/light/tabbar/pagedown_hover.svg); } TabBarAddButton { BackgroundBrush: transparent; Icon: url(:/assets/light/tabbar/add_normal.svg); } TabBarAddButton:pressed { Icon: url(:/assets/light/tabbar/add_press.svg); } TabBarAddButton:hover { Icon: url(:/assets/light/tabbar/add_hover.svg); } TabBarTab { BackgroundBrush: transparent; BorderBrush: rgba(0,0,0,0.1); TextColor: black; ActiveColor: "#2ca7f8"; CloseIcon: url(:/assets/light/tabbar/tab_close_normal.svg); } TabBarTab:disabled { TextColor: "#949494"; } TabBarTab:pressed { CloseIcon: url(:/assets/light/tabbar/tab_close_press.svg); } TabBarTab:hover { BackgroundBrush: rgba(0, 0, 0, 0.05); CloseIcon: url(:/assets/light/tabbar/tab_close_hover.svg); } qt5integration-5.0.0/dstyleplugin/checkboxhelper.cpp000066400000000000000000000020661347440174500227230ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "paletteextended.h" #include #include #include namespace dstyle { bool Style::drawIndicatorCheckBoxPrimitive(const QStyleOption *opt, QPainter *p, const QWidget *widget) const { Q_UNUSED(widget) fillBrush(p, opt->rect, m_palette->brush(PaletteExtended::CheckBox_BackgroundBrush, opt)); return true; } } qt5integration-5.0.0/dstyleplugin/colorutils.cpp000066400000000000000000000016571347440174500221410ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "colorutils.h" namespace dstyle { QColor ColorUtils::alphaColor(QColor color, qreal alpha) { if( alpha >= 0 && alpha < 1.0 ) { color.setAlphaF( alpha*color.alphaF() ); } return color; } } // end namespace dstyle. qt5integration-5.0.0/dstyleplugin/colorutils.h000066400000000000000000000016551347440174500216040ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef COLORUTILS_H #define COLORUTILS_H #include namespace dstyle { class ColorUtils { public: //* add alpha channel multiplier to color static QColor alphaColor( QColor color, qreal alpha ); }; } #endif // COLORUTILS_H qt5integration-5.0.0/dstyleplugin/comboboxhelper.cpp000066400000000000000000000215451347440174500227500ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include #include #include #include #include #include "paletteextended.h" #include "geometryutils.h" namespace dstyle { extern PaletteExtended::PseudoClassType lineEditStateToPseudoClassType(QStyle::State state); void Style::drawComboBoxPopupFramePrimitive(const QStyleOption *option, QPainter *painter) const { const QRect rect( option->rect ); painter->setRenderHints(painter->renderHints() | QPainter::Antialiasing); painter->setPen(m_palette->brush(PaletteExtended::Menu_BorderColor).color()); painter->setBrush(option->palette.brush(QPalette::Background)); painter->drawRoundedRect(rect, 4, 4); } bool Style::drawComboBox(const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const { // cast option and check const QStyleOptionComboBox* comboBoxOption( qstyleoption_cast( option ) ); if( !comboBoxOption ) return true; // rect and palette const QRect& rect( option->rect ); const QPalette& palette( option->palette ); // state const bool editable( comboBoxOption->editable ); bool flat( !comboBoxOption->frame ); // frame if( option->subControls & SC_ComboBoxFrame ) { if( editable ) { /*flat |= ( rect.height() <= 2*Metrics::Frame_FrameWidth + Metrics::MenuButton_IndicatorWidth ); if ( flat ) { const QColor background( palette.color( QPalette::Base ) ); painter->setBrush( background ); painter->setPen( Qt::NoPen ); painter->drawRect( rect ); } else*/ { proxy()->drawPrimitive( PE_FrameLineEdit, option, painter, widget ); } } else { if( flat ) { } else { // TODO(hualet): update button color from palette in case button is default const QColor shadow( Qt::transparent ); const QBrush outline(m_palette->brush(PaletteExtended::PushButton_BorderBrush, option)); const QBrush background(m_palette->brush(PaletteExtended::PushButton_BackgroundBrush, option)); // render drawPushButtonFrame(painter, rect, QBrush(background), QBrush(outline), shadow); } } } if (option->subControls & SC_ComboBoxArrow) { QBrush brush = m_palette->brush(PaletteExtended::HeaderView_ArrowIndicatorDownIcon); if (brush.style() != Qt::TexturePattern) return false; // arrow rect QRect arrowRect( proxy()->subControlRect( CC_ComboBox, option, SC_ComboBoxArrow, widget ) ); fillBrush(painter, arrowRect, brush); if (editable) { painter->setPen(QPen(m_palette->brush(PaletteExtended::LineEdit_BorderBrush, lineEditStateToPseudoClassType(option->state)), 1)); painter->drawLine(arrowRect.topLeft() - QPoint(1, 1), arrowRect.bottomLeft() + QPoint(-1, 1)); } } return option->subControls & (SC_ComboBoxFrame | SC_ComboBoxArrow); } QRect Style::comboBoxSubControlRect(const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget) const { Q_UNUSED(widget); if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { QRect ret; int x = cb->rect.x(), y = cb->rect.y(), wi = cb->rect.width(), he = cb->rect.height(); int xpos = x; int margin = cb->frame ? 3 : 0; int bmarg = cb->frame ? 2 : 0; xpos += wi - bmarg - 16; switch (sc) { case SC_ComboBoxFrame: ret = cb->rect; break; case SC_ComboBoxArrow: ret.setRect(xpos, y + bmarg, 16, he - 2*bmarg); break; case SC_ComboBoxEditField: ret.setRect(x + margin, y + margin, wi - 2 * margin - 16, he - 2 * margin); break; case SC_ComboBoxListBoxPopup: ret = cb->rect; break; default: break; } return visualRect(cb->direction, cb->rect, ret); } return opt->rect; } bool Style::drawComboBoxLabelControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { // cast option and check const QStyleOptionComboBox* cb( qstyleoption_cast( option ) ); if( !cb ) return false; // copy rect and palette const QRect& rect( option->rect.adjusted(0, 0, -20, 0) ); // state const QStyle::State& state( option->state ); const bool enabled( state & QStyle::State_Enabled ); const bool sunken( state & (QStyle::State_On | QStyle::State_Sunken) ); const bool mouseOver(option->state & QStyle::State_MouseOver); const bool hasFocus(option->state & QStyle::State_HasFocus); const bool flat(!cb->frame); const bool editable(cb->editable); // content const bool hasText( !cb->currentText.isEmpty() ); const bool hasIcon( !cb->currentIcon.isNull() ); // contents QRect contentsRect( rect ); if( sunken && !flat ) contentsRect.translate( 1, 1 ); contentsRect.adjust(Metrics::Layout_ChildMarginWidth, 0, -Metrics::Layout_ChildMarginWidth, 0); // icon size QSize iconSize; if( hasIcon ) { iconSize = cb->iconSize; if( !iconSize.isValid() ) { const int metric( widget->style()->pixelMetric( QStyle::PM_SmallIconSize, option, widget ) ); iconSize = QSize( metric, metric ); } } // text size int textFlags( Qt::AlignVCenter | Qt::AlignLeft ); const QSize textSize( option->fontMetrics.size( textFlags, cb->currentText ) ); if (styleHint(SH_UnderlineShortcut, cb, widget)) textFlags |= Qt::TextShowMnemonic; else textFlags |= Qt::TextHideMnemonic; // adjust text and icon rect based on options QRect iconRect; QRect textRect; if( hasText && !hasIcon ) textRect = contentsRect; else if( hasIcon && !hasText ) iconRect = contentsRect; else { const int contentsWidth( iconSize.width() + textSize.width() + Metrics::Button_ItemSpacing ); const int contentLeftPadding = flat ? (contentsRect.width() - contentsWidth )/2 : 0; iconRect = QRect( QPoint( contentsRect.left() + contentLeftPadding, contentsRect.top() + (contentsRect.height() - iconSize.height())/2 ), iconSize ); textRect = QRect( QPoint( iconRect.right() + Metrics::Button_ItemSpacing + 1, contentsRect.top() + (contentsRect.height() - textSize.height())/2 ), textSize ); } // handle right to left if( iconRect.isValid() ) iconRect = widget->style()->visualRect( option->direction, option->rect, iconRect ); if( textRect.isValid() ) textRect = widget->style()->visualRect( option->direction, option->rect, textRect ); // make sure there is enough room for icon if( iconRect.isValid() ) iconRect = GeometryUtils::centerRect( iconRect, iconSize ); // render icon if( hasIcon && iconRect.isValid() ) { // icon state and mode const QIcon::State iconState( sunken ? QIcon::On : QIcon::Off ); QIcon::Mode iconMode; if( !enabled ) iconMode = QIcon::Disabled; else if( !flat && hasFocus ) iconMode = QIcon::Selected; else if( mouseOver && flat ) iconMode = QIcon::Active; else iconMode = QIcon::Normal; const QPixmap pixmap = cb->currentIcon.pixmap( iconSize, iconMode, iconState ); widget->style()->drawItemPixmap( painter, iconRect, Qt::AlignCenter, pixmap ); } // render text if( hasText && textRect.isValid() && !editable) { painter->setPen(m_palette->brush(PaletteExtended::PushButton_TextColor, option).color()); painter->drawText(textRect, textFlags, cb->currentText); } return true; } bool Style::widgetIsComboBoxPopupFramePrimitive(const QWidget *w) { if (!w) return false; // combo box drop-list. // line edit completer drop-list return w->inherits("QComboBoxListView") || w->inherits("QComboBoxPrivateContainer") || (w->inherits("QAbstractItemView") && w->isTopLevel()); } } qt5integration-5.0.0/dstyleplugin/common.h000066400000000000000000000106721347440174500206740ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef COMMON_H #define COMMON_H #include namespace dstyle { enum StyleType { StyleDark, StyleLight, StyleSemiDark, StyleSemiLight }; enum Metrics { // painter Painter_PenWidth = 1, // frames Frame_FrameWidth = 2, Frame_FrameRadius = 4, // layout Layout_TopLevelMarginWidth = 10, Layout_ChildMarginWidth = 4, Layout_DefaultSpacing = 6, // line editors LineEdit_FrameWidth = 2, LineEdit_LeftMargin = 3, // combobox ComboBox_FrameWidth = 6, // spinbox SpinBox_FrameWidth = LineEdit_FrameWidth, SpinBox_ArrowButtonWidth = 20, // groupbox title margin GroupBox_TitleMarginWidth = 4, // buttons Button_MinWidth = 80, Button_MarginWidth = 6, Button_ItemSpacing = 4, // tool buttons ToolButton_MarginWidth = 6, ToolButton_ItemSpacing = 4, ToolButton_InlineIndicatorWidth = 12, // checkboxes and radio buttons CheckBox_Size = 20, CheckBox_FocusMarginWidth = 2, CheckBox_ItemSpacing = 4, // menu Menu_ItemHMargin = 0, Menu_ItemVMargin = -1, Menu_ArrowHMargin = 6, Menu_CheckMarkWidth = 12, Menu_RightBorder = 10, Menu_ItemFrameWidth = 2, Menu_ItemHTextMargin = 3, Menu_ItemVTextMargin = 8, Menu_FrameWidth = 0, Menu_HMargin = 0, Menu_VMargin = 4, Menu_SeparatorItemHMargin = 5, Menu_PanelRightPadding = 10, MenuItem_MarginWidth = 3, MenuItem_ItemSpacing = 4, MenuItem_AcceleratorSpace = 16, MenuButton_IndicatorWidth = 20, // menu bar MenuBar_ItemSpacing = 6, MenuBarItem_MarginWidth = 10, MenuBarItem_MarginHeight = 6, // scrollbars ScrollBar_Extend = 12, ScrollBar_SliderWidth = 15, ScrollBar_MinSliderHeight = 40, ScrollBar_NoButtonHeight = (ScrollBar_Extend-ScrollBar_SliderWidth)/2, ScrollBar_SingleButtonHeight = ScrollBar_Extend, ScrollBar_DoubleButtonHeight = 2*ScrollBar_Extend, // toolbars ToolBar_FrameWidth = 2, ToolBar_HandleExtent = 10, ToolBar_HandleWidth = 6, ToolBar_SeparatorWidth = 8, ToolBar_ExtensionWidth = 20, ToolBar_ItemSpacing = 0, // progressbars ProgressBar_BusyIndicatorSize = 14, ProgressBar_ItemSpacing = 4, // mdi title bar TitleBar_MarginWidth = 4, // sliders Slider_TickLength = 10, Slider_TickMarginWidth = 6, Slider_GrooveThickness = 2, Slider_ControlThickness = 24, // tabbar TabBar_TabMarginHeight = 4, TabBar_TabMarginWidth = 8, TabBar_TabMinWidth = 80, TabBar_TabMinHeight = 28, TabBar_TabItemSpacing = 8, TabBar_TabOverlap = 1, TabBar_BaseOverlap = 2, // tab widget TabWidget_MarginWidth = 4, // toolbox ToolBox_TabMinWidth = 80, ToolBox_TabItemSpacing = 4, ToolBox_TabMarginWidth = 8, // tooltips ToolTip_FrameWidth = 3, // list headers Header_MarginWidth = 6, Header_ItemSpacing = 4, Header_ArrowSize = 12, // tree view ItemView_ArrowSize = 10, ItemView_ItemMarginWidth = 3, SidePanel_ItemMarginWidth = 4, // splitter Splitter_SplitterWidth = 1, // shadow dimensions Shadow_Overlap = 2, // group box GroupBox_TopMargin = 3, // progress bar ProgressBar_BorderWidth = 1, ProgressBar_Radius = 4 }; //* corners enum Corner { CornerTopLeft = 0x1, CornerTopRight = 0x2, CornerBottomLeft = 0x4, CornerBottomRight = 0x8, CornersTop = CornerTopLeft|CornerTopRight, CornersBottom = CornerBottomLeft|CornerBottomRight, CornersLeft = CornerTopLeft|CornerBottomLeft, CornersRight = CornerTopRight|CornerBottomRight, AllCorners = CornerTopLeft|CornerTopRight|CornerBottomLeft|CornerBottomRight }; Q_DECLARE_FLAGS(Corners, Corner) } Q_DECLARE_OPERATORS_FOR_FLAGS(dstyle::Corners) #endif // COMMON_H qt5integration-5.0.0/dstyleplugin/commonhelper.cpp000066400000000000000000000053061347440174500224250ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include "style.h" #include "commonhelper.h" #include "geometryutils.h" namespace dstyle { void CommonHelper::renderFrame(QPainter *painter, const QRect &rect, const QBrush &brush, const QBrush &outline) { painter->setRenderHint( QPainter::Antialiasing ); QRectF frameRect( rect ); qreal radius( GeometryUtils::frameRadius() ); // set pen if( outline.style() != Qt::NoBrush ) { painter->setPen( QPen(outline, Metrics::Painter_PenWidth) ); } else { painter->setPen( Qt::NoPen ); } // set brush painter->setBrush( brush ); // render painter->drawRoundedRect( frameRect.adjusted(0.5, 0.5, -0.5, -0.5), radius, radius ); } Style *CommonHelper::widgetStyle(const QWidget *widget) { if (!widget) return Q_NULLPTR; Style *style (Q_NULLPTR); style = qobject_cast(widget->style()); if (!style) { // FIXME(hualet): why qobject_cast won't work and cause the whole plugin // to stop loading. if (widget->style()->metaObject()->className() != QLatin1String("QStyleSheetStyle")) return Q_NULLPTR; QStyleSheetStyle * sstyle = static_cast(widget->style()); // FIXME(hualet): don't know why QStyleSheetStyle::base can be empty sometime, // and also don't know why QStyleSheetStyle::baseStyle is not exported or something, // causing the program to crash if I use baseStyle() instead of base directly here. // Basically below 9 lines are copied from QStyleSheetStyle::baseStyle implementation. QStyle *base ( Q_NULLPTR ); if (sstyle->base) { base = sstyle->base; } else if (qApp->style()->metaObject()->className() == QLatin1String("QStyleSheetStyle")) { base = static_cast(qApp->style())->base; } else { base = qApp->style(); } style = qobject_cast(base); } return style; } } qt5integration-5.0.0/dstyleplugin/commonhelper.h000066400000000000000000000020021347440174500220600ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef COMMONHELPER_H #define COMMONHELPER_H #include namespace dstyle { class Style; class CommonHelper { public: static void renderFrame(QPainter* painter, const QRect& rect, const QBrush &brush, const QBrush &outline); static Style *widgetStyle(const QWidget *widget); }; } #endif // COMMONHELPER_H qt5integration-5.0.0/dstyleplugin/config.tests/000077500000000000000000000000001347440174500216335ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/config.tests/dtkwidget/000077500000000000000000000000001347440174500236215ustar00rootroot00000000000000qt5integration-5.0.0/dstyleplugin/config.tests/dtkwidget/dtkwidget.pro000066400000000000000000000001161347440174500263270ustar00rootroot00000000000000CONFIG += qt c++11 link_pkgconfig PKGCONFIG += dtkwidget SOURCES += main.cpp qt5integration-5.0.0/dstyleplugin/config.tests/dtkwidget/main.cpp000066400000000000000000000015731347440174500252570ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include int main() { QWindow *w = new QWindow(); DPlatformWindowHandle handle(w); handle.setEnableBlurWindow(true); return 0; } qt5integration-5.0.0/dstyleplugin/dstyleanimation.cpp000066400000000000000000000210131347440174500231320ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** As a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "dstyleanimation.h" #ifndef QT_NO_ANIMATION #include #include #include namespace dstyle { static const qreal ScrollBarFadeOutDuration = 200.0; static const qreal ScrollBarFadeOutDelay = 450.0; DStyleAnimation::DStyleAnimation(QObject *target) : QAbstractAnimation(target), _delay(0), _duration(-1), _startTime(QTime::currentTime()), _fps(ThirtyFps), _skip(0) { } DStyleAnimation::~DStyleAnimation() { } QObject *DStyleAnimation::target() const { return parent(); } int DStyleAnimation::duration() const { return _duration; } void DStyleAnimation::setDuration(int duration) { _duration = duration; } int DStyleAnimation::delay() const { return _delay; } void DStyleAnimation::setDelay(int delay) { _delay = delay; } QTime DStyleAnimation::startTime() const { return _startTime; } void DStyleAnimation::setStartTime(const QTime &time) { _startTime = time; } DStyleAnimation::FrameRate DStyleAnimation::frameRate() const { return _fps; } void DStyleAnimation::setFrameRate(FrameRate fps) { _fps = fps; } void DStyleAnimation::updateTarget() { QEvent event(QEvent::StyleAnimationUpdate); event.setAccepted(false); QCoreApplication::sendEvent(target(), &event); if (!event.isAccepted()) stop(); } void DStyleAnimation::start() { _skip = 0; QAbstractAnimation::start(DeleteWhenStopped); } bool DStyleAnimation::isUpdateNeeded() const { return currentTime() > _delay; } void DStyleAnimation::updateCurrentTime(int) { if (++_skip >= _fps) { _skip = 0; if (target() && isUpdateNeeded()) updateTarget(); } } DProgressStyleAnimation::DProgressStyleAnimation(int speed, QObject *target) : DStyleAnimation(target), _speed(speed), _step(-1) { } int DProgressStyleAnimation::animationStep() const { return currentTime() / (1000.0 / _speed); } int DProgressStyleAnimation::progressStep(int width) const { int step = animationStep(); int progress = (step * width / _speed) % width; if (((step * width / _speed) % (2 * width)) >= width) progress = width - progress; return progress; } int DProgressStyleAnimation::speed() const { return _speed; } void DProgressStyleAnimation::setSpeed(int speed) { _speed = speed; } bool DProgressStyleAnimation::isUpdateNeeded() const { if (DStyleAnimation::isUpdateNeeded()) { int current = animationStep(); if (_step == -1 || _step != current) { _step = current; return true; } } return false; } DNumberStyleAnimation::DNumberStyleAnimation(QObject *target) : DStyleAnimation(target), _start(0.0), _end(1.0), _prev(0.0) { setDuration(250); } qreal DNumberStyleAnimation::startValue() const { return _start; } void DNumberStyleAnimation::setStartValue(qreal value) { _start = value; } qreal DNumberStyleAnimation::endValue() const { return _end; } void DNumberStyleAnimation::setEndValue(qreal value) { _end = value; } qreal DNumberStyleAnimation::currentValue() const { qreal step = qreal(currentTime() - delay()) / (duration() - delay()); return _start + qMax(qreal(0), step) * (_end - _start); } bool DNumberStyleAnimation::isUpdateNeeded() const { if (DStyleAnimation::isUpdateNeeded()) { qreal current = currentValue(); if (!qFuzzyCompare(_prev, current)) { _prev = current; return true; } } return false; } DBlendStyleAnimation::DBlendStyleAnimation(Type type, QObject *target) : DStyleAnimation(target), _type(type) { setDuration(250); } QImage DBlendStyleAnimation::startImage() const { return _start; } void DBlendStyleAnimation::setStartImage(const QImage& image) { _start = image; } QImage DBlendStyleAnimation::endImage() const { return _end; } void DBlendStyleAnimation::setEndImage(const QImage& image) { _end = image; } QImage DBlendStyleAnimation::currentImage() const { return _current; } /*! \internal A helper function to blend two images. The result consists of ((alpha)*startImage) + ((1-alpha)*endImage) */ static QImage blendedImage(const QImage &start, const QImage &end, float alpha) { if (start.isNull() || end.isNull()) return QImage(); QImage blended; const int a = qRound(alpha*256); const int ia = 256 - a; const int sw = start.width(); const int sh = start.height(); const int bpl = start.bytesPerLine(); switch (start.depth()) { case 32: { blended = QImage(sw, sh, start.format()); blended.setDevicePixelRatio(start.devicePixelRatio()); uchar *mixed_data = blended.bits(); const uchar *back_data = start.bits(); const uchar *front_data = end.bits(); for (int sy = 0; sy < sh; sy++) { quint32* mixed = (quint32*)mixed_data; const quint32* back = (const quint32*)back_data; const quint32* front = (const quint32*)front_data; for (int sx = 0; sx < sw; sx++) { quint32 bp = back[sx]; quint32 fp = front[sx]; mixed[sx] = qRgba ((qRed(bp)*ia + qRed(fp)*a)>>8, (qGreen(bp)*ia + qGreen(fp)*a)>>8, (qBlue(bp)*ia + qBlue(fp)*a)>>8, (qAlpha(bp)*ia + qAlpha(fp)*a)>>8); } mixed_data += bpl; back_data += bpl; front_data += bpl; } } default: break; } return blended; } void DBlendStyleAnimation::updateCurrentTime(int time) { DStyleAnimation::updateCurrentTime(time); float alpha = 1.0; if (duration() > 0) { if (_type == Pulse) { time = time % duration() * 2; if (time > duration()) time = duration() * 2 - time; } alpha = time / static_cast(duration()); if (_type == Transition && time > duration()) { alpha = 1.0; stop(); } } else if (time > 0) { stop(); } _current = blendedImage(_start, _end, alpha); } DScrollbarStyleAnimation::DScrollbarStyleAnimation(Mode mode, QObject *target) : DNumberStyleAnimation(target), _mode(mode), _active(false) { switch (mode) { case Activating: setDuration(ScrollBarFadeOutDuration); setStartValue(0.0); setEndValue(1.0); break; case Deactivating: setDuration(ScrollBarFadeOutDelay + ScrollBarFadeOutDuration); setDelay(ScrollBarFadeOutDelay); setStartValue(1.0); setEndValue(0.0); break; } } DScrollbarStyleAnimation::Mode DScrollbarStyleAnimation::mode() const { return _mode; } bool DScrollbarStyleAnimation::wasActive() const { return _active; } void DScrollbarStyleAnimation::setActive(bool active) { _active = active; } } // end namespace dstyle #endif //QT_NO_ANIMATION qt5integration-5.0.0/dstyleplugin/dstyleanimation.h000066400000000000000000000107121347440174500226030ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** As a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QSTYLEANIMATION #define QSTYLEANIMATION #include "qabstractanimation.h" #include "qdatetime.h" #include "qimage.h" namespace dstyle { #ifndef QT_NO_ANIMATION // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists for the convenience of // qcommonstyle.cpp. This header file may change from version to version // without notice, or even be removed. // // We mean it. // class DStyleAnimation : public QAbstractAnimation { Q_OBJECT public: DStyleAnimation(QObject *target); virtual ~DStyleAnimation(); QObject *target() const; int duration() const Q_DECL_OVERRIDE; void setDuration(int duration); int delay() const; void setDelay(int delay); QTime startTime() const; void setStartTime(const QTime &time); enum FrameRate { DefaultFps, SixtyFps, ThirtyFps, TwentyFps }; FrameRate frameRate() const; void setFrameRate(FrameRate fps); void updateTarget(); public Q_SLOTS: void start(); protected: virtual bool isUpdateNeeded() const; virtual void updateCurrentTime(int time) Q_DECL_OVERRIDE; private: int _delay; int _duration; QTime _startTime; FrameRate _fps; int _skip; }; class DProgressStyleAnimation : public DStyleAnimation { Q_OBJECT public: DProgressStyleAnimation(int speed, QObject *target); int animationStep() const; int progressStep(int width) const; int speed() const; void setSpeed(int speed); protected: bool isUpdateNeeded() const Q_DECL_OVERRIDE; private: int _speed; mutable int _step; }; class DNumberStyleAnimation : public DStyleAnimation { Q_OBJECT public: DNumberStyleAnimation(QObject *target); qreal startValue() const; void setStartValue(qreal value); qreal endValue() const; void setEndValue(qreal value); qreal currentValue() const; protected: bool isUpdateNeeded() const Q_DECL_OVERRIDE; private: qreal _start; qreal _end; mutable qreal _prev; }; class DBlendStyleAnimation : public DStyleAnimation { Q_OBJECT public: enum Type { Transition, Pulse }; DBlendStyleAnimation(Type type, QObject *target); QImage startImage() const; void setStartImage(const QImage& image); QImage endImage() const; void setEndImage(const QImage& image); QImage currentImage() const; protected: virtual void updateCurrentTime(int time) Q_DECL_OVERRIDE; private: Type _type; QImage _start; QImage _end; QImage _current; }; class DScrollbarStyleAnimation : public DNumberStyleAnimation { Q_OBJECT public: enum Mode { Activating, Deactivating }; DScrollbarStyleAnimation(Mode mode, QObject *target); Mode mode() const; bool wasActive() const; void setActive(bool active); private: Mode _mode; bool _active; }; #endif // QT_NO_ANIMATION } // end namespace dstyle #endif // QSTYLEANIMATION_P qt5integration-5.0.0/dstyleplugin/dstyleplugin.cpp000066400000000000000000000025201347440174500224530ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "dstyleplugin.h" #include "style.h" DStylePlugin::DStylePlugin(QObject *parent) : QStylePlugin(parent) { } QStyle *DStylePlugin::create(const QString &key) { if (key == "ddark") { return new dstyle::Style(dstyle::StyleDark); } else if (key == "dlight") { return new dstyle::Style(dstyle::StyleLight); } else if (key == "dsemidark") { return new dstyle::Style(dstyle::StyleSemiDark); } else if (key == "dsemilight") { return new dstyle::Style(dstyle::StyleSemiLight); } return nullptr; } #if QT_VERSION < 0x050000 Q_EXPORT_PLUGIN2(DStylePlugin, DStylePlugin) #endif // QT_VERSION < 0x050000 qt5integration-5.0.0/dstyleplugin/dstyleplugin.h000066400000000000000000000021331347440174500221200ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef DStylePlugin_H #define DStylePlugin_H #include class DStylePlugin : public QStylePlugin { Q_OBJECT #if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QStyleFactoryInterface" FILE "dstyleplugin.json") #endif // QT_VERSION >= 0x050000 public: DStylePlugin(QObject *parent = 0); QStyle* create(const QString &key) Q_DECL_OVERRIDE; }; #endif // DStylePlugin_H qt5integration-5.0.0/dstyleplugin/dstyleplugin.json000066400000000000000000000001001347440174500226320ustar00rootroot00000000000000{ "Keys" : ["ddark", "dlight", "dsemidark", "dsemilight"] } qt5integration-5.0.0/dstyleplugin/dstyleplugin.pro000066400000000000000000000031661347440174500225000ustar00rootroot00000000000000#------------------------------------------------- # # Project created by QtCreator 2016-10-18T17:21:21 # #------------------------------------------------- QT += core gui widgets widgets-private core-private gui-private CONFIG += link_pkgconfig c++11 PKGCONFIG += dtkwidget TARGET = dstyleplugin TEMPLATE = lib CONFIG += plugin SOURCES += dstyleplugin.cpp \ style.cpp \ sliderhelper.cpp \ colorutils.cpp \ geometryutils.cpp \ paletteextended.cpp \ pushbuttonhelper.cpp \ framehelper.cpp \ lineedithelper.cpp \ commonhelper.cpp \ scrollbarhelper.cpp \ painterhelper.cpp \ menuhelper.cpp \ dstyleanimation.cpp \ progressbarhelper.cpp \ checkboxhelper.cpp \ rubberbandhelper.cpp \ headerviewhelper.cpp \ comboboxhelper.cpp \ toolbuttonhelper.cpp \ tabwidgethelper.cpp \ spinboxhelper.cpp \ hidpihelper.cpp \ tabbarhelper.cpp HEADERS += dstyleplugin.h \ style.h \ common.h \ colorutils.h \ geometryutils.h \ paletteextended.h \ commonhelper.h \ painterhelper.h \ dstyleanimation.h \ hidpihelper.h DISTFILES += dstyleplugin.json DESTDIR = $$_PRO_FILE_PWD_/../bin/plugins/styles/ unix { target.path = $$[QT_INSTALL_PLUGINS]/styles/ INSTALLS += target } RESOURCES += \ brushchemes.qrc \ assets_light.qrc \ assets_dark.qrc \ assets_semidark.qrc \ assets_semilight.qrc \ assets.qrc load(configure) qtCompileTest(dtkwidget) { DEFINES += DTK_SUPPORT_BLUR_WINDOW message(The libdtkwidget support blur window) } else { warning(The libdtkwidget can not support blur window) } qt5integration-5.0.0/dstyleplugin/framehelper.cpp000066400000000000000000000030241347440174500222220ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include #include #include namespace dstyle { bool Style::drawFramePrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { // combo box drop-list. // line edit completer drop-list if (widgetIsComboBoxPopupFramePrimitive(widget)) { drawComboBoxPopupFramePrimitive(option, painter); return true; } return true; } bool Style::drawFrameFocusRectPrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { Q_UNUSED(option) Q_UNUSED(painter) Q_UNUSED(widget) // draw nothing return true; } bool Style::drawShapedFrameControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { Q_UNUSED(option) Q_UNUSED(painter) Q_UNUSED(widget) return false; } } qt5integration-5.0.0/dstyleplugin/geometryutils.cpp000066400000000000000000000025601347440174500226500ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "geometryutils.h" namespace dstyle { QRect GeometryUtils::centerRect(const QRect &rect, const QSize &size) { return centerRect( rect, size.width(), size.height() ); } QRect GeometryUtils::centerRect(const QRect &rect, int width, int height) { QRect newRect = rect; newRect.setWidth(width); newRect.setHeight(height); newRect.moveCenter(rect.center()); return newRect; } QRect GeometryUtils::insideMargin(const QRect &r, int margin) { return insideMargin( r, margin, margin ); } QRect GeometryUtils::insideMargin(const QRect &r, int marginWidth, int marginHeight) { return r.adjusted( marginWidth, marginHeight, -marginWidth, -marginHeight ); } } qt5integration-5.0.0/dstyleplugin/geometryutils.h000066400000000000000000000025771347440174500223250ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef GEOMETRYUTILS_H #define GEOMETRYUTILS_H #include #include "common.h" namespace dstyle { class GeometryUtils { public: static QRect centerRect(const QRect &rect, const QSize& size ); static QRect centerRect(const QRect &rect, int width, int height); static QRect insideMargin( const QRect& r, int margin ); static QRect insideMargin( const QRect& r, int marginWidth, int marginHeight ); static qreal frameRadius( qreal bias = 0 ) { return qMax( qreal( Metrics::Frame_FrameRadius ) - 0.5 + bias, 0.0 ); } static QRectF shadowRect( const QRectF& rect ) { return rect.adjusted( 0.5, 0.5, -0.5, -0.5 ).translated( 0.5, 0.5 ); } }; } #endif // GEOMETRYUTILS_H qt5integration-5.0.0/dstyleplugin/headerviewhelper.cpp000066400000000000000000000043461347440174500232630ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "paletteextended.h" namespace dstyle { bool Style::drawIndicatorHeaderArrowPrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { Q_UNUSED(widget) if (const QStyleOptionHeader *header = qstyleoption_cast(option)) { QBrush brush; if (header->sortIndicator & QStyleOptionHeader::SortUp) { brush = m_palette->brush(PaletteExtended::HeaderView_ArrowIndicatorDownIcon); } else if (header->sortIndicator & QStyleOptionHeader::SortDown) { brush = m_palette->brush(PaletteExtended::HeaderView_ArrowIndicatorUpIcon); } if (brush.style() != Qt::TexturePattern) return false; fillBrush(painter, option->rect, brush); } return true; } QRect Style::headerArrowRect(const QStyleOption *opt, const QWidget *widget) const { QRect r; int h = opt->rect.height(); int w = opt->rect.width(); int x = opt->rect.x(); int y = opt->rect.y(); int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt, widget); if (opt->state & State_Horizontal) { int horiz_size = Metrics::Header_ArrowSize; r.setRect(x + w - margin * 2 - horiz_size, y + (h - horiz_size) / 2, horiz_size, horiz_size); } else { int vert_size = Metrics::Header_ArrowSize; r.setRect(x + (w - vert_size) / 2, y + h - margin * 2 - vert_size, vert_size, vert_size); } r = visualRect(opt->direction, opt->rect, r); return r; } } qt5integration-5.0.0/dstyleplugin/hidpihelper.cpp000066400000000000000000000015571347440174500222360ustar00rootroot00000000000000#include "hidpihelper.h" #include #include #include namespace dstyle { QPixmap HiDPIHelper::loadPixmap(const QString &fileName, qreal devicePixelRatio) { if (qFuzzyCompare(devicePixelRatio, 0)) devicePixelRatio = qGuiApp->devicePixelRatio(); qreal sourceDevicePixelRatio = 1.0; QPixmap pixmap; if (!qFuzzyCompare(sourceDevicePixelRatio, devicePixelRatio)) { QImageReader reader; reader.setFileName(qt_findAtNxFile(fileName, devicePixelRatio, &sourceDevicePixelRatio)); if (reader.canRead()) { reader.setScaledSize(reader.size() * (devicePixelRatio / sourceDevicePixelRatio)); pixmap = QPixmap::fromImage(reader.read()); pixmap.setDevicePixelRatio(devicePixelRatio); } } else { pixmap.load(fileName); } return pixmap; } } qt5integration-5.0.0/dstyleplugin/hidpihelper.h000066400000000000000000000003441347440174500216740ustar00rootroot00000000000000#ifndef HIDPIHELPER_H #define HIDPIHELPER_H #include namespace dstyle { class HiDPIHelper { public: static QPixmap loadPixmap(const QString &fileName, qreal devicePixelRatio = 0); }; } #endif // HIDPIHELPER_H qt5integration-5.0.0/dstyleplugin/lineedithelper.cpp000066400000000000000000000056001347440174500227270ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "commonhelper.h" #include "common.h" #include "style.h" #include "paletteextended.h" #include #ifdef DTKWIDGET_CLASS_DStyleOptionLineEdit #include #include DWIDGET_USE_NAMESPACE #endif #include namespace dstyle { PaletteExtended::PseudoClassType lineEditStateToPseudoClassType(QStyle::State state) { if (!state.testFlag(QStyle::State_Enabled)) { return PaletteExtended::PseudoClass_Disabled; } if (state.testFlag(QStyle::State_ReadOnly)) { return PaletteExtended::PseudoClass_ReadOnly; } if (state.testFlag(QStyle::State_HasFocus)) { return PaletteExtended::PseudoClass_Focus; } return PaletteExtended::PseudoClass_Unspecified; } bool Style::drawFrameLineEditPrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { Q_UNUSED(widget) const QRect& rect( option->rect ); // render const QBrush background(m_palette->brush(PaletteExtended::LineEdit_BackgroundBrush, lineEditStateToPseudoClassType(option->state)) ); QBrush outline(m_palette->brush(PaletteExtended::LineEdit_BorderBrush, lineEditStateToPseudoClassType(option->state)) ); #ifdef DTKWIDGET_CLASS_DLineEdit if (const DLineEdit *edit = qobject_cast(widget)) { DStyleOptionLineEdit edit_option; edit_option.init(const_cast(edit)); if (edit_option.features.testFlag(DStyleOptionLineEdit::Alert)) outline = m_palette->brush(PaletteExtended::LineEdit_AlertBorderBrush, option, PaletteExtended::PseudoClass_Unknown, outline); CommonHelper::renderFrame( painter, rect, background, outline ); if (edit_option.features.testFlag(DStyleOptionLineEdit::IconButton)) { painter->save(); painter->setPen(QPen(outline, Metrics::Painter_PenWidth)); painter->drawLine(QPointF(edit_option.iconButtonRect.topLeft()) - QPointF(0.5, 0), QPointF(edit_option.iconButtonRect.bottomLeft()) + QPoint(-0.5, 1)); painter->restore(); } } else #endif { CommonHelper::renderFrame( painter, rect, background, outline ); } return true; } }// end namespace dstyle qt5integration-5.0.0/dstyleplugin/menuhelper.cpp000066400000000000000000000347001347440174500221010ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "commonhelper.h" #include "paletteextended.h" #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE namespace dstyle { bool Style::isVisibleMenuShortText() const { DApplication *app = qobject_cast(qApp); if (!app) { return true; } const QVariant propertyValue = app->property("visibleMenuShortcutText").toBool(); return propertyValue.isValid() ? propertyValue.toBool() : false; } bool Style::isVisibleMenuCheckBox() const { DApplication *app = qobject_cast(qApp); if (!app) { return true; } const QVariant propertyValue = app->property("visibleMenuCheckboxWidget").toBool(); return propertyValue.isValid() ? propertyValue.toBool() : false; } bool Style::isVisibleMenuIcon() const { DApplication *app = qobject_cast(qApp); if (!app) { return true; } const QVariant propertyValue = app->property("visibleMenuIcon").toBool(); return propertyValue.isValid() ? propertyValue.toBool() : false; } bool isEdit(const QWidget *widget) { return qobject_cast(widget) || qobject_cast(widget) || qobject_cast(widget); } bool Style::drawMenuItemControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { Q_D(const Style); painter->save(); // Draws one item in a popup menu. if (const QStyleOptionMenuItem *menuItem = qstyleoption_cast(option)) { // QColor highlightOutline = d->highlightedOutline(option->palette); QColor highlight = option->palette.highlight().color(); if (menuItem->menuItemType == QStyleOptionMenuItem::Separator) { int w = 0; if (!menuItem->text.isEmpty()) { painter->setFont(menuItem->font); proxy()->drawItemText(painter, menuItem->rect.adjusted(Menu_SeparatorItemHMargin, 0, -Menu_SeparatorItemHMargin, 0), Qt::AlignLeft | Qt::AlignVCenter, menuItem->palette, menuItem->state & State_Enabled, menuItem->text, QPalette::Text); w = menuItem->fontMetrics.width(menuItem->text) + Menu_SeparatorItemHMargin; } painter->setPen(m_palette->brush(PaletteExtended::Menu_SeparatorColor, option).color()); bool reverse = menuItem->direction == Qt::RightToLeft; painter->drawLine(menuItem->rect.left() + Menu_SeparatorItemHMargin + (reverse ? 0 : w), menuItem->rect.center().y(), menuItem->rect.right() - Menu_SeparatorItemHMargin - (reverse ? w : 0), menuItem->rect.center().y()); painter->restore(); return true; } bool selected = menuItem->state & State_Selected && menuItem->state & State_Enabled; if (selected) { QRect r = option->rect; painter->fillRect(r, highlight); // painter->setPen(QPen(highlightOutline)); // painter->drawRect(QRectF(r)); } bool checkable = menuItem->checkType != QStyleOptionMenuItem::NotCheckable; bool checked = menuItem->checked; // bool sunken = menuItem->state & State_Sunken; // bool enabled = menuItem->state & State_Enabled; bool ignoreCheckMark = false; int checkcol = qMax(menuItem->maxIconWidth, 20); QRect iconRect; if (qobject_cast(widget) || (option->styleObject && option->styleObject->property("_q_isComboBoxPopupItem").toBool())) ignoreCheckMark = true; //ignore the checkmarks provided by the QComboMenuDelegate if (!ignoreCheckMark) { // Check QRect checkRect(option->rect.left() + 10, option->rect.center().y() - 4, 14, 14); checkRect = visualRect(menuItem->direction, menuItem->rect, checkRect); if (checkable) { if (!isVisibleMenuCheckBox() || (menuItem->checkType & QStyleOptionMenuItem::Exclusive)) { // Radio button if (checked/* || sunken*/) { QStyleOptionMenuItem newMI = *menuItem; newMI.rect = checkRect; drawDeepinStyleIcon("check", &newMI, painter, widget); } } else { // Check box if (menuItem->icon.isNull()) { QStyleOptionButton box; box.QStyleOption::operator=(*option); box.rect = checkRect; if (checked) box.state |= State_On; proxy()->drawPrimitive(PE_IndicatorCheckBox, &box, painter, widget); } } } // draw check label if (checkable) { if (!menuItem->icon.isNull()) { checkcol = qMax(menuItem->maxIconWidth * 2, 20); } else { checkcol = qMax(menuItem->maxIconWidth, 20); } QRect vCheckRect = visualRect(option->direction, menuItem->rect, QRect(menuItem->rect.x() + 4, menuItem->rect.y(), checkcol, menuItem->rect.height())); iconRect = QRect(vCheckRect.x() + vCheckRect.width() / 2, vCheckRect.y(), vCheckRect.width() / 2, vCheckRect.height()); } else { checkcol = qMax(menuItem->maxIconWidth, 20); iconRect = visualRect(option->direction, menuItem->rect, QRect(menuItem->rect.x() + 4, menuItem->rect.y(), checkcol, menuItem->rect.height())); } } else { //ignore checkmark if (menuItem->icon.isNull()) checkcol = 0; else checkcol = menuItem->maxIconWidth; } // Text and icon, ripped from windows style bool dis = !(menuItem->state & State_Enabled); bool act = menuItem->state & State_Selected; const QStyleOption *opt = option; const QStyleOptionMenuItem *menuitem = menuItem; QPainter *p = painter; // NOTE: If widget is QLineEdit and qApp is DApplication, will hide menu icon if (!menuItem->icon.isNull() && (!isEdit(widget) || isVisibleMenuIcon())) { QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; if (act && !dis) mode = QIcon::Active; QPixmap pixmap; int smallIconSize = proxy()->pixelMetric(PM_SmallIconSize, option, widget); QSize iconSize(smallIconSize, smallIconSize); if (const QComboBox *combo = qobject_cast(widget)) iconSize = combo->iconSize(); if (checked) pixmap = menuItem->icon.pixmap(iconSize, mode, QIcon::On); else pixmap = menuItem->icon.pixmap(iconSize, mode); const int pixw = pixmap.width() / pixmap.devicePixelRatio(); const int pixh = pixmap.height() / pixmap.devicePixelRatio(); QRect pmr(0, 0, pixw, pixh); pmr.moveCenter(iconRect.center()); painter->setPen(menuItem->palette.text().color()); // if (!ignoreCheckMark && checkable && checked) { // QStyleOption opt = *option; // if (act) { // QColor activeColor = mergedColors(option->palette.background().color(), // option->palette.highlight().color()); // opt.palette.setBrush(QPalette::Button, activeColor); // } // opt.state |= State_Sunken; // opt.rect = vCheckRect; // proxy()->drawPrimitive(PE_PanelButtonCommand, &opt, painter, widget); // } painter->drawPixmap(pmr.topLeft(), pixmap); } if (selected) { painter->setPen(menuItem->palette.highlightedText().color()); } else { painter->setPen(menuItem->palette.text().color()); } int x, y, w, h; menuitem->rect.getRect(&x, &y, &w, &h); int tab = menuitem->tabWidth; QColor discol; if (dis) { discol = menuitem->palette.brush(QPalette::Disabled, QPalette::Text).color(); p->setPen(discol); } int xm = Menu_ItemFrameWidth + checkcol + Menu_ItemHTextMargin + 2; int xpos = menuitem->rect.x() + xm; QRect textRect(xpos, y + Menu_ItemVTextMargin, w - xm - Menu_PanelRightPadding - tab + 1, h - 2 * Menu_ItemVTextMargin); QRect vTextRect = visualRect(opt->direction, menuitem->rect, textRect); QString s = menuitem->text; if (!s.isEmpty()) { // draw text p->save(); QFont font = menuitem->font; // font may not have any "hard" flags set. We override // the point size so that when it is resolved against the device, this font will win. // This is mainly to handle cases where someone sets the font on the window // and then the combo inherits it and passes it onward. At that point the resolve mask // is very, very weak. This makes it stonger. font.setPointSizeF(QFontInfo(menuItem->font).pointSizeF()); if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) font.setBold(true); p->setFont(font); int t = s.indexOf(QLatin1Char('\t')); int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; if (!styleHint(SH_UnderlineShortcut, menuitem, widget)) text_flags |= Qt::TextHideMnemonic; text_flags |= Qt::AlignLeft; // NOTE: hide short text if (t >= 0 && isVisibleMenuShortText()) { QRect vShortcutRect = visualRect(opt->direction, menuitem->rect, QRect(textRect.topRight(), QPoint(menuitem->rect.right(), textRect.bottom()))); if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) { p->setPen(menuitem->palette.light().color()); p->drawText(vShortcutRect.adjusted(1, 1, 1, 1), text_flags, s.mid(t + 1)); p->setPen(discol); } p->drawText(vShortcutRect, text_flags, s.mid(t + 1)); s = s.left(t); } if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) { p->setPen(menuitem->palette.light().color()); p->drawText(vTextRect.adjusted(1, 1, 1, 1), text_flags, s.left(t)); p->setPen(discol); } p->drawText(vTextRect, text_flags, s.left(t)); p->restore(); } // Arrow if (menuItem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow int dim = (menuItem->rect.height() - 4) / 2; // PrimitiveElement arrow; // arrow = option->direction == Qt::RightToLeft ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight; int xpos = menuItem->rect.left() + menuItem->rect.width() - 3 - dim; QRect vSubMenuRect = visualRect(option->direction, menuItem->rect, QRect(xpos, menuItem->rect.top() + menuItem->rect.height() / 2 - dim / 2, dim, dim)); QStyleOptionMenuItem newMI = *menuItem; newMI.rect = vSubMenuRect; if (selected) newMI.palette.setColor(QPalette::Foreground, newMI.palette.highlightedText().color()); drawDeepinStyleIcon("arrow-right", &newMI, painter, widget); } } painter->restore(); return true; } bool Style::drawMenuBarItemControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { Style *style = CommonHelper::widgetStyle(widget); if (!style) return false; const bool enabled(option->state & QStyle::State_Enabled); const bool mouseOver(option->state & QStyle::State_MouseOver); const bool sunken((option->state | QStyle::State_Sunken) == option->state); if (mouseOver || sunken) { const QColor shadow( Qt::transparent ); const QBrush outline(style->m_palette->brush(PaletteExtended::PushButton_BorderBrush, option)); const QBrush background(style->m_palette->brush(PaletteExtended::PushButton_BackgroundBrush, option)); // render drawPushButtonFrame(painter, option->rect, background, outline, shadow ); } if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(option)) { uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget)) alignment |= Qt::TextHideMnemonic; int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); QPixmap pix = mbi->icon.pixmap(qt_getWindow(widget), QSize(iconExtent, iconExtent), (enabled) ? (mouseOver ? QIcon::Active : QIcon::Normal) : QIcon::Disabled); if (!pix.isNull()) proxy()->drawItemPixmap(painter, mbi->rect, alignment, pix); else proxy()->drawItemText(painter, mbi->rect, alignment, mbi->palette, enabled, mbi->text, QPalette::ButtonText); } return true; } } // end namespace dstyle qt5integration-5.0.0/dstyleplugin/painterhelper.cpp000066400000000000000000000101411347440174500225700ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "painterhelper.h" #include #include namespace dstyle { namespace PainterHelper { void drawRect(QPainter *painter, const QRectF &rect, const QBrush &background, qreal borderWidth, const QBrush &border) { painter->fillRect(rect, background); if (qFuzzyIsNull(borderWidth) || background == border) return; painter->save(); painter->setBrush(background); painter->setPen(QPen(border, borderWidth)); painter->drawRect(rect.adjusted(0, 0, -1, -1)); painter->restore(); } void drawRoundedRect(QPainter *painter, const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode, const QBrush &background, qreal borderWidth, const QBrush &border) { QPainterPath path; path.addRoundedRect(rect, xRadius, yRadius, mode); drawPath(painter, path, background, borderWidth, border); } void drawEllipse(QPainter *painter, const QRectF &rect, const QBrush &background, qreal borderWidth, const QBrush &border) { QPainterPath path; path.addEllipse(rect); drawPath(painter, path, background, borderWidth, border); } void drawPath(QPainter *painter, const QPainterPath &path, const QBrush &background, qreal borderWidth, const QBrush &border) { painter->fillPath(path, background); if (qFuzzyIsNull(borderWidth) || border == Qt::transparent) return; painter->save(); painter->setPen(QPen(border, borderWidth)); painter->drawPath(path); painter->restore(); } QPainterPath roundedPath(const QRectF &rect, Corners corners, qreal radius) { QPainterPath path; // simple cases if( corners == 0 ) { path.addRect( rect ); return path; } if( corners == AllCorners ) { path.addRoundedRect( rect, radius, radius ); return path; } const QSizeF cornerSize( 2*radius, 2*radius ); // rotate counterclockwise // top left corner if( corners & CornerTopLeft ) { path.moveTo( rect.topLeft() + QPointF( radius, 0 ) ); path.arcTo( QRectF( rect.topLeft(), cornerSize ), 90, 90 ); } else path.moveTo( rect.topLeft() ); // bottom left corner if( corners & CornerBottomLeft ) { path.lineTo( rect.bottomLeft() - QPointF( 0, radius ) ); path.arcTo( QRectF( rect.bottomLeft() - QPointF( 0, 2*radius ), cornerSize ), 180, 90 ); } else path.lineTo( rect.bottomLeft() ); // bottom right corner if( corners & CornerBottomRight ) { path.lineTo( rect.bottomRight() - QPointF( radius, 0 ) ); path.arcTo( QRectF( rect.bottomRight() - QPointF( 2*radius, 2*radius ), cornerSize ), 270, 90 ); } else path.lineTo( rect.bottomRight() ); // top right corner if( corners & CornerTopRight ) { path.lineTo( rect.topRight() + QPointF( 0, radius ) ); path.arcTo( QRectF( rect.topRight() - QPointF( 2*radius, 0 ), cornerSize ), 0, 90 ); } else path.lineTo( rect.topRight() ); path.closeSubpath(); return path; } QColor colorBlend(const QColor &color1, const QColor &color2) { QColor c2 = color2.toRgb(); if (c2.alpha() >= 255) return c2; QColor c1 = color1.toRgb(); qreal c1_weight = 1 - c2.alphaF(); int r = c1_weight * c1.red() + c2.alphaF() * c2.red(); int g = c1_weight * c1.green() + c2.alphaF() * c2.green(); int b = c1_weight * c1.blue() + c2.alphaF() * c2.blue(); return QColor(r, g, b); } } // end namespace PainterHelper } // end namespace dtyle qt5integration-5.0.0/dstyleplugin/painterhelper.h000066400000000000000000000034111347440174500222370ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef PAINTERHELPER_H #define PAINTERHELPER_H #include #include "common.h" QT_BEGIN_NAMESPACE class QPainter; class QPainterPath; QT_END_NAMESPACE namespace dstyle { namespace PainterHelper { void drawRect(QPainter *painter, const QRectF &rect, const QBrush &background, qreal borderWidth = 0, const QBrush &border = Qt::NoBrush); void drawRoundedRect(QPainter *painter, const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode, const QBrush &background, qreal borderWidth = 0, const QBrush &border = Qt::NoBrush); void drawEllipse(QPainter *painter, const QRectF &rect, const QBrush &background, qreal borderWidth = 0, const QBrush &border = Qt::NoBrush); void drawPath(QPainter *painter, const QPainterPath &path, const QBrush &background, qreal borderWidth = 0, const QBrush &border = Qt::NoBrush); QPainterPath roundedPath( const QRectF& rect, Corners corners, qreal radius ); QColor colorBlend(const QColor &color1, const QColor &color2); } // end namespace PainterHelper } // end namespace dtyle #endif // PAINTERHELPER_H qt5integration-5.0.0/dstyleplugin/paletteextended.cpp000066400000000000000000000246241347440174500231200ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "paletteextended.h" #include #include #include #include #include #include #include #include #include #include #include "hidpihelper.h" QT_BEGIN_NAMESPACE QDebug operator<<(QDebug deg, const QCss::Value &value) { deg << value.toString(); return deg; } QDebug operator<<(QDebug deg, const QCss::Selector &selector) { deg << "specificity:" << selector.specificity() << ", pseudoClass:"<< selector.pseudoClass() << ", pseudoElement:" << selector.pseudoElement(); return deg; } QT_END_NAMESPACE namespace dstyle { QList PaletteExtended::styleTypeToPaletteList; PaletteExtended::PaletteExtended(StyleType type, QObject *parent) : QObject(parent) , m_brushScheme(new QCss::StyleSheet) { init(type); } PaletteExtended *PaletteExtended::instance(StyleType type) { foreach (PaletteExtended *p, styleTypeToPaletteList) { if (p->m_type == type) return p; } PaletteExtended *p = new PaletteExtended(type); styleTypeToPaletteList << p; return p; } PaletteExtended::~PaletteExtended() { delete m_brushScheme; styleTypeToPaletteList.removeOne(this); } static quint64 preprocessClass(qint64 classs) { if (classs & PaletteExtended::PseudoClass_On) classs |= PaletteExtended::PseudoClass_Checked; if (classs & PaletteExtended::PseudoClass_Checked) classs |= PaletteExtended::PseudoClass_On; if (classs & PaletteExtended::PseudoClass_Off) classs |= PaletteExtended::PseudoClass_Unchecked; if (classs & PaletteExtended::PseudoClass_Unchecked) classs |= PaletteExtended::PseudoClass_Off; if (!(classs & PaletteExtended::PseudoClass_Horizontal)) classs |= PaletteExtended::PseudoClass_Vertical; // if (!(classs & PaletteExtended::PseudoClass_Open)) // classs |= PaletteExtended::PseudoClass_Closed; if (!(classs & PaletteExtended::PseudoClass_Disabled)) classs |= PaletteExtended::PseudoClass_Enabled; return classs; } QBrush PaletteExtended::brush(const QWidget *widget, PaletteExtended::BrushName name, quint64 type, const QBrush &defaultBrush) const { const QPair &key = qMakePair(name, type); if (m_brushCache.contains(key)) return m_brushCache.value(key); #if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) QMetaEnum metaEnum = metaObject()->enumerator(0); #else QMetaEnum metaEnum = QMetaEnum::fromType(); #endif QString colorName = metaEnum.valueToKey(name); const QStringList &path = colorName.split("_"); foreach (const QCss::StyleRule &rule, m_brushScheme->nameIndex.values(path.first())) { bool eligible = false; QList pseudoClassList; for (int i = 0; i < rule.selectors.count(); ++i) { const QCss::Selector &selector = rule.selectors.at(i); quint64 pseudoClass = selector.pseudoClass(); pseudoClassList.append(pseudoClass); if (preprocessClass(pseudoClass) == type || pseudoClass == type) { eligible = true; break; } } if (!eligible) { for (int i = pseudoClassList.count() - 1; i >= 0; --i) { quint64 pseudoClass = pseudoClassList.at(i); if ((pseudoClass | type) == type) { eligible = true; break; } } } if (!eligible) continue; foreach (const QCss::Declaration &declaration, rule.declarations) { if (declaration.d->property == path.last()) { QBrush brush = declaration.brushValue(); if (brush.style() == Qt::NoBrush) { const QString &uri = declaration.uriValue(); if (!uri.isEmpty()) { brush.setTexture(HiDPIHelper::loadPixmap(uri, widget ? widget->devicePixelRatioF() : 0)); } } m_brushCache[key] = brush; return brush; } } } m_brushCache[key] = defaultBrush; return defaultBrush; } static quint64 pseudoClass(QStyle::State state) { quint64 pc = 0; if (state & QStyle::State_Enabled) { pc |= PaletteExtended::PseudoClass_Enabled; } // if (state & QStyle::State_Active) // pc |= PaletteExtended::PseudoClass_Active; if (state & QStyle::State_Window) pc |= PaletteExtended::PseudoClass_Window; if (state & QStyle::State_On) pc |= (PaletteExtended::PseudoClass_On | PaletteExtended::PseudoClass_Checked); if (state & QStyle::State_Off) pc |= (PaletteExtended::PseudoClass_Off | PaletteExtended::PseudoClass_Unchecked); if (state & QStyle::State_NoChange) pc |= PaletteExtended::PseudoClass_Indeterminate; if (state & QStyle::State_Selected) pc |= PaletteExtended::PseudoClass_Selected; if (state & QStyle::State_Horizontal) pc |= PaletteExtended::PseudoClass_Horizontal; else pc |= PaletteExtended::PseudoClass_Vertical; // if (state & (QStyle::State_Open | QStyle::State_On | QStyle::State_Sunken)) // pc |= PaletteExtended::PseudoClass_Open; // else // pc |= PaletteExtended::PseudoClass_Closed; if (state & QStyle::State_Children) pc |= PaletteExtended::PseudoClass_Children; if (state & QStyle::State_Sibling) pc |= PaletteExtended::PseudoClass_Sibling; if (state & QStyle::State_ReadOnly) pc |= PaletteExtended::PseudoClass_ReadOnly; if (state & QStyle::State_Item) pc |= PaletteExtended::PseudoClass_Item; #ifdef QT_KEYPAD_NAVIGATION if (state & QStyle::State_HasEditFocus) pc |= PaletteExtended::PseudoClass_EditFocus; #endif return pc; } #define RETURN_BRUSH(Type) {\ const QBrush &d = brush(widget, name, PseudoClass_##Type, normal);\ return extraTypes ? brush(widget, name, PseudoClass_##Type | extraTypes, d) : d;\ } QBrush PaletteExtended::brush(const QWidget *widget, PaletteExtended::BrushName name, const QStyleOption *option, quint64 extraTypes, const QBrush &defaultBrush) const { QBrush normal = brush(widget, name, PseudoClass_Unspecified, defaultBrush); if (extraTypes) normal = brush(widget, name, extraTypes, normal); extraTypes |= pseudoClass(option->state); if (const QStyleOptionButton* buttonOption = qstyleoption_cast(option)) { if (buttonOption->features & QStyleOptionButton::Flat) extraTypes |= PseudoClass_Flat; if (buttonOption->features & QStyleOptionButton::DefaultButton) extraTypes |= PseudoClass_Default; } if (extraTypes) normal = brush(widget, name, extraTypes, normal); if (!(option->state & QStyle::State_Enabled)) RETURN_BRUSH(Disabled) else if (option->state & QStyle::State_Sunken) RETURN_BRUSH(Pressed) else if (option->state & QStyle::State_MouseOver) RETURN_BRUSH(Hover) else if (option->state & QStyle::State_HasFocus) RETURN_BRUSH(Focus) return normal; } QBrush PaletteExtended::brush(PaletteExtended::BrushName name, quint64 type, const QBrush &defaultBrush) const { return brush(0, name, type, defaultBrush); } QBrush PaletteExtended::brush(PaletteExtended::BrushName name, const QStyleOption *option, quint64 extraTypes, const QBrush &defaultBrush) const { return brush(0, name, option, extraTypes, defaultBrush); } void PaletteExtended::polish(QPalette &p) { p.setBrush(QPalette::Base, brush(QPalette_Base)); p.setBrush(QPalette::Text, brush(QPalette_Text)); p.setBrush(QPalette::Window, brush(QPalette_Window)); p.setBrush(QPalette::WindowText, brush(QPalette_WindowText)); p.setBrush(QPalette::Highlight, brush(QPalette_Highlight)); p.setBrush(QPalette::HighlightedText, brush(QPalette_HighlightedText)); p.setBrush(QPalette::Button, brush(QPalette_Button)); p.setBrush(QPalette::ButtonText, brush(QPalette_ButtonText)); p.setBrush(QPalette::Disabled, QPalette::Base, brush(QPalette_Base, PseudoClass_Disabled, p.brush(QPalette::Base))); p.setBrush(QPalette::Disabled, QPalette::Text, brush(QPalette_Text, PseudoClass_Disabled, p.brush(QPalette::Text))); p.setBrush(QPalette::Disabled, QPalette::Window, brush(QPalette_Window, PseudoClass_Disabled, p.brush(QPalette::Window))); p.setBrush(QPalette::Disabled, QPalette::WindowText, brush(QPalette_WindowText, PseudoClass_Disabled, p.brush(QPalette::WindowText))); p.setBrush(QPalette::Disabled, QPalette::Highlight, brush(QPalette_Highlight, PseudoClass_Disabled, p.brush(QPalette::Highlight))); p.setBrush(QPalette::Disabled, QPalette::HighlightedText, brush(QPalette_HighlightedText, PseudoClass_Disabled, p.brush(QPalette::HighlightedText))); p.setBrush(QPalette::Disabled, QPalette::Button, brush(QPalette_Button, PseudoClass_Disabled, p.brush(QPalette::Button))); p.setBrush(QPalette::Disabled, QPalette::ButtonText, brush(QPalette_ButtonText, PseudoClass_Disabled, p.brush(QPalette::ButtonText))); } void PaletteExtended::init(StyleType type) { m_type = type; QFile file; if (type == StyleType::StyleDark) { file.setFileName(":/brushschemes/ddark.css"); } else if (type == StyleType::StyleLight) { file.setFileName(":/brushschemes/dlight.css"); } else if (type == StyleType::StyleSemiDark) { file.setFileName(":/brushschemes/dsemidark.css"); } else if (type == StyleType::StyleSemiLight) { file.setFileName(":/brushschemes/dsemilight.css"); } if (!file.open(QIODevice::ReadOnly)) return; QCss::Parser parser(QString::fromLocal8Bit(file.readAll())); parser.parse(m_brushScheme); } } qt5integration-5.0.0/dstyleplugin/paletteextended.h000066400000000000000000000164701347440174500225650ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef PALETTEEXTENDED_H #define PALETTEEXTENDED_H #include #include #include #include #include "common.h" QT_BEGIN_NAMESPACE class QStyleOption; QT_END_NAMESPACE namespace QCss { struct StyleSheet; } namespace dstyle { class PaletteExtended : public QObject { Q_OBJECT public: static PaletteExtended *instance(StyleType type); ~PaletteExtended(); enum BrushName { //TODO(hualet): Color Group support. QPalette_Base, QPalette_Text, QPalette_Window, QPalette_WindowText, QPalette_Highlight, QPalette_HighlightedText, QPalette_Button, QPalette_ButtonText, ScrollBar_HandleBrush, ScrollBar_HandleBorderBrush, Slider_GrooveColor, Slider_GrooveHighlightColor, Slider_HandleBrush, Slider_VernierHandleBrush, Slider_HandleBorderColor, Slider_TickmarkColor, ProgressBar_GrooveBackground, ProgressBar_GrooveBorder, ProgressBar_ContentBackground, ProgressBar_ContentBorder, PushButton_BackgroundBrush, PushButton_TextColor, PushButton_BorderBrush, PushButton_SuggestButtonColor, PushButton_SuggestTextColor, LineEdit_BorderBrush, LineEdit_AlertBorderBrush, LineEdit_BackgroundBrush, Menu_SeparatorColor, Menu_BorderColor, Menu_BackgroundBrush, CheckBox_BackgroundBrush, RadioButton_BackgroundBrush, RubberBand_BackgroundBrush, RubberBand_BorderBrush, HeaderView_ArrowIndicatorUpIcon, HeaderView_ArrowIndicatorDownIcon, SpinBox_MinusBrush, SpinBox_PlusBrush, SpinBox_DownBrush, SpinBox_UpBrush, SpinBox_BorderColor, TabBar_BackgroundBrush, TabBar_BorderBrush, TabBarTab_BackgroundBrush, TabBarTab_BorderBrush, TabBarTab_TextColor, TabBarTab_ActiveColor, TabBarTab_CloseIcon, TabBarTab_CloseIconBackground, TabBarScrollButton_BackgroundBrush, TabBarScrollButton_UpIcon, TabBarScrollButton_DownIcon, TabBarAddButton_BackgroundBrush, TabBarAddButton_Icon }; #if QT_VERSION < QT_VERSION_CHECK(5, 5, 0) Q_ENUMS(BrushName) #else Q_ENUM(BrushName) #endif enum PseudoClassType { PseudoClass_Unknown = Q_UINT64_C(0x0000000000000000), PseudoClass_Enabled = Q_UINT64_C(0x0000000000000001), PseudoClass_Disabled = Q_UINT64_C(0x0000000000000002), PseudoClass_Pressed = Q_UINT64_C(0x0000000000000004), PseudoClass_Focus = Q_UINT64_C(0x0000000000000008), PseudoClass_Hover = Q_UINT64_C(0x0000000000000010), PseudoClass_Checked = Q_UINT64_C(0x0000000000000020), PseudoClass_Unchecked = Q_UINT64_C(0x0000000000000040), PseudoClass_Indeterminate = Q_UINT64_C(0x0000000000000080), PseudoClass_Unspecified = Q_UINT64_C(0x0000000000000100), PseudoClass_Selected = Q_UINT64_C(0x0000000000000200), PseudoClass_Horizontal = Q_UINT64_C(0x0000000000000400), PseudoClass_Vertical = Q_UINT64_C(0x0000000000000800), PseudoClass_Window = Q_UINT64_C(0x0000000000001000), PseudoClass_Children = Q_UINT64_C(0x0000000000002000), PseudoClass_Sibling = Q_UINT64_C(0x0000000000004000), PseudoClass_Default = Q_UINT64_C(0x0000000000008000), PseudoClass_First = Q_UINT64_C(0x0000000000010000), PseudoClass_Last = Q_UINT64_C(0x0000000000020000), PseudoClass_Middle = Q_UINT64_C(0x0000000000040000), PseudoClass_OnlyOne = Q_UINT64_C(0x0000000000080000), PseudoClass_PreviousSelected = Q_UINT64_C(0x0000000000100000), PseudoClass_NextSelected = Q_UINT64_C(0x0000000000200000), PseudoClass_Flat = Q_UINT64_C(0x0000000000400000), PseudoClass_Left = Q_UINT64_C(0x0000000000800000), PseudoClass_Right = Q_UINT64_C(0x0000000001000000), PseudoClass_Top = Q_UINT64_C(0x0000000002000000), PseudoClass_Bottom = Q_UINT64_C(0x0000000004000000), PseudoClass_Exclusive = Q_UINT64_C(0x0000000008000000), PseudoClass_NonExclusive = Q_UINT64_C(0x0000000010000000), PseudoClass_Frameless = Q_UINT64_C(0x0000000020000000), PseudoClass_ReadOnly = Q_UINT64_C(0x0000000040000000), PseudoClass_Active = Q_UINT64_C(0x0000000080000000), PseudoClass_Closable = Q_UINT64_C(0x0000000100000000), PseudoClass_Movable = Q_UINT64_C(0x0000000200000000), PseudoClass_Floatable = Q_UINT64_C(0x0000000400000000), PseudoClass_Minimized = Q_UINT64_C(0x0000000800000000), PseudoClass_Maximized = Q_UINT64_C(0x0000001000000000), PseudoClass_On = Q_UINT64_C(0x0000002000000000), PseudoClass_Off = Q_UINT64_C(0x0000004000000000), PseudoClass_Editable = Q_UINT64_C(0x0000008000000000), PseudoClass_Item = Q_UINT64_C(0x0000010000000000), PseudoClass_Closed = Q_UINT64_C(0x0000020000000000), PseudoClass_Open = Q_UINT64_C(0x0000040000000000), PseudoClass_EditFocus = Q_UINT64_C(0x0000080000000000), PseudoClass_Alternate = Q_UINT64_C(0x0000100000000000), // The Any specifier is never generated, but can be used as a wildcard in searches. PseudoClass_Any = Q_UINT64_C(0x0000ffffffffffff) }; QBrush brush(const QWidget *widget, BrushName name, quint64 type = PseudoClass_Unspecified, const QBrush &defaultBrush = Qt::NoBrush) const; QBrush brush(const QWidget *widget, BrushName name, const QStyleOption *option, quint64 extraTypes = PseudoClass_Unknown, const QBrush &defaultBrush = Qt::NoBrush) const; QBrush brush(BrushName name, quint64 type = PseudoClass_Unspecified, const QBrush &defaultBrush = Qt::NoBrush) const; QBrush brush(BrushName name, const QStyleOption *option, quint64 extraTypes = PseudoClass_Unknown, const QBrush &defaultBrush = Qt::NoBrush) const; void polish(QPalette &p); private: void init(StyleType type); PaletteExtended(StyleType type, QObject *parent = 0); StyleType m_type; QCss::StyleSheet *m_brushScheme; mutable QHash, QBrush> m_brushCache; static QList styleTypeToPaletteList; }; } #endif // PALETTEEXTENDED_H qt5integration-5.0.0/dstyleplugin/progressbarhelper.cpp000066400000000000000000000235471347440174500234750ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include #include #include #include #include #include "geometryutils.h" #include "paletteextended.h" namespace dstyle { bool Style::drawProgressBarControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast( option ) ); if( !progressBarOption ) return false; // render groove QStyleOptionProgressBarV2 progressBarOption2 = *progressBarOption; progressBarOption2.rect = subElementRect( SE_ProgressBarGroove, progressBarOption, widget ); drawControl( CE_ProgressBarGroove, &progressBarOption2, painter, widget ); // render contents progressBarOption2.rect = subElementRect( SE_ProgressBarContents, progressBarOption, widget ); drawControl( CE_ProgressBarContents, &progressBarOption2, painter, widget ); // render text const bool textVisible( progressBarOption->textVisible ); const bool busy( progressBarOption->minimum == 0 && progressBarOption->maximum == 0 ); if( textVisible && !busy ) { progressBarOption2.rect = subElementRect( SE_ProgressBarLabel, progressBarOption, widget ); drawControl( CE_ProgressBarLabel, &progressBarOption2, painter, widget ); } return true; } bool Style::drawProgressBarContentsControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { // QStyleSheetStyle won't draw progress bar groove which is necessary for us. if (widget && widget->style() && widget->style()->metaObject() && widget->style()->metaObject()->className() == QLatin1String("QStyleSheetStyle")) { drawProgressBarGrooveControl(option, painter, widget); } const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast( option ) ); if( !progressBarOption ) return false; const bool horizontal( !progressBarOption || progressBarOption->orientation == Qt::Horizontal ); // copy rect and palette const qreal radius( ProgressBar_Radius ); // get progress and steps const qreal progress( progressBarOption->progress - progressBarOption->minimum ); const int steps( qMax( progressBarOption->maximum - progressBarOption->minimum, 1 ) ); //Calculate width fraction const qreal widthFrac = qMin( qreal(1), progress/steps ); QRect rect( option->rect); // convert the pixel width const int indicatorSize( widthFrac*( horizontal ? rect.width():rect.height() ) ); rect.setWidth(indicatorSize); QPainterPath path; path.addRoundedRect(rect, radius, radius); painter->save(); painter->setRenderHints(painter->renderHints() | QPainter::Antialiasing); painter->setClipPath(path); painter->fillRect(rect, m_palette->brush(PaletteExtended::ProgressBar_ContentBackground, option)); painter->strokePath(path, QPen(m_palette->brush(PaletteExtended::ProgressBar_ContentBorder), ProgressBar_BorderWidth)); painter->restore(); return true; } bool Style::drawProgressBarGrooveControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { Q_UNUSED(widget) const QRect rect( option->rect ); const PaletteExtended *plExt = m_palette; const QBrush brush( plExt->brush(PaletteExtended::ProgressBar_GrooveBackground, option) ); QPainterPath path; path.addRoundedRect(rect, ProgressBar_Radius, ProgressBar_Radius); painter->save(); painter->setRenderHints(painter->renderHints() | QPainter::Antialiasing); painter->setClipPath(path); painter->fillRect(rect, brush); painter->strokePath(path, QPen(plExt->brush(PaletteExtended::ProgressBar_GrooveBorder), ProgressBar_BorderWidth)); painter->restore(); return true; } bool Style::drawProgressBarLabelControl(const QStyleOption *option, QPainter *painter, const QWidget *) const { // cast option and check const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast( option ) ); if( !progressBarOption ) return true; // get direction and check const QStyleOptionProgressBarV2* progressBarOption2( qstyleoption_cast( option ) ); const bool horizontal = !progressBarOption2 || progressBarOption2->orientation == Qt::Horizontal; if( !horizontal ) return true; // store rect and palette const QRect& rect( option->rect ); const QPalette& palette( option->palette ); // store state and direction const State& state( option->state ); const bool enabled( state & State_Enabled ); // define text rect Qt::Alignment hAlign( ( progressBarOption->textAlignment == Qt::AlignLeft ) ? Qt::AlignHCenter : progressBarOption->textAlignment ); drawItemText( painter, rect, Qt::AlignVCenter | hAlign, palette, enabled, progressBarOption->text, QPalette::WindowText ); return true; } QRect Style::progressBarGrooveRect(const QStyleOption *option, const QWidget *widget) const { // cast option and check const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast( option ) ); if( !progressBarOption ) return option->rect; // get flags and orientation const bool textVisible( progressBarOption->textVisible ); const bool busy( progressBarOption->minimum == 0 && progressBarOption->maximum == 0 ); const QStyleOptionProgressBarV2* progressBarOption2( qstyleoption_cast( option ) ); const bool horizontal( !progressBarOption2 || progressBarOption2->orientation == Qt::Horizontal ); // copy rectangle and adjust QRect rect( option->rect ); const int frameWidth( pixelMetric( PM_DefaultFrameWidth, option, widget ) ); if( horizontal ) rect = GeometryUtils::insideMargin( rect, frameWidth, 0 ); else rect = GeometryUtils::insideMargin( rect, 0, frameWidth ); if( textVisible && !busy && horizontal ) { QRect textRect( subElementRect( SE_ProgressBarLabel, option, widget ) ); textRect = visualRect( option->direction, option->rect, textRect ); rect = visualRect( option->direction, option->rect, rect ); } return rect; } QRect Style::progressBarContentsRect(const QStyleOption *option, const QWidget *widget) const { // cast option and check const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast( option ) ); if( !progressBarOption ) return QRect(); // get groove rect const QRect rect( progressBarGrooveRect( option, widget ) ); // in busy mode, grooveRect is used const bool busy( progressBarOption->minimum == 0 && progressBarOption->maximum == 0 ); if( busy ) return rect; // get orientation const QStyleOptionProgressBarV2* progressBarOption2( qstyleoption_cast( option ) ); const bool horizontal( !progressBarOption2 || progressBarOption2->orientation == Qt::Horizontal ); // check inverted appearance const bool inverted( progressBarOption2 ? progressBarOption2->invertedAppearance : false ); // get progress and steps const qreal progress( progressBarOption->progress - progressBarOption->minimum ); const int steps( qMax( progressBarOption->maximum - progressBarOption->minimum, 1 ) ); //Calculate width fraction const qreal widthFrac = qMin( qreal(1), progress/steps ); // convert the pixel width const int indicatorSize( widthFrac*( horizontal ? rect.width():rect.height() ) ); QRect indicatorRect; if( horizontal ) { indicatorRect = QRect( inverted ? ( rect.right() - indicatorSize + 1):rect.left(), rect.y(), indicatorSize, rect.height() ); indicatorRect = visualRect( option->direction, rect, indicatorRect ); } else indicatorRect = QRect( rect.x(), inverted ? rect.top() : (rect.bottom() - indicatorSize + 1), rect.width(), indicatorSize ); return indicatorRect; } QRect Style::progressBarLabelRect(const QStyleOption *option, const QWidget *) const { // cast option and check const QStyleOptionProgressBar* progressBarOption( qstyleoption_cast( option ) ); if( !progressBarOption ) return QRect(); // get flags and check const bool textVisible( progressBarOption->textVisible ); const bool busy( progressBarOption->minimum == 0 && progressBarOption->maximum == 0 ); if( !textVisible || busy ) return QRect(); // get direction and check const QStyleOptionProgressBarV2* progressBarOption2( qstyleoption_cast( option ) ); const bool horizontal( !progressBarOption2 || progressBarOption2->orientation == Qt::Horizontal ); if( !horizontal ) return QRect(); int textWidth = qMax( option->fontMetrics.size( Qt::TextHideMnemonic, progressBarOption->text ).width(), option->fontMetrics.size( Qt::TextHideMnemonic, QStringLiteral( "100%" ) ).width() ); int textHeight = option->fontMetrics.size( Qt::TextHideMnemonic, QStringLiteral( "100%" ) ).height(); QRect rect( GeometryUtils::insideMargin( option->rect, Metrics::Frame_FrameWidth, 0 ) ); return GeometryUtils::centerRect(rect, QSize(textWidth, textHeight)); } } qt5integration-5.0.0/dstyleplugin/pushbuttonhelper.cpp000066400000000000000000000221531347440174500233470ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "common.h" #include "geometryutils.h" #include "style.h" #include "commonhelper.h" #include "painterhelper.h" #include "paletteextended.h" #include #ifdef DTKWIDGET_CLASS_DSuggestButton #include #include #endif #include #include DWIDGET_USE_NAMESPACE namespace dstyle { bool Style::drawPushButtonBevel(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { // cast option and check const QStyleOptionButton* buttonOption( qstyleoption_cast< const QStyleOptionButton* >( option ) ); if( !buttonOption ) return true; // rect and palette const QRect& rect( option->rect ); // button state const bool flat( buttonOption->features & QStyleOptionButton::Flat ); // update animation state // mouse over takes precedence over focus if( flat ) { // just draw text on flat button. // const QColor color( getFlatButtonColor(enabled, mouseOver, hasFocus, sunken) ); // drawFlatButtonFrame( painter, rect, color, sunken ); } else { // TODO(hualet): update button color from palette in case button is default const QColor shadow( Qt::transparent ); const QBrush outline( #ifdef DTKWIDGET_CLASS_DSuggestButton (buttonOption->features & DStyleOptionSuggestButton::SuggestButton) ? m_palette->brush(PaletteExtended::PushButton_SuggestButtonColor, option) : m_palette->brush(PaletteExtended::PushButton_BorderBrush, option) #else m_palette->brush(PaletteExtended::PushButton_BorderBrush, option) #endif ); const QBrush background(m_palette->brush(PaletteExtended::PushButton_BackgroundBrush, option)); // render drawPushButtonFrame(painter, rect, background, outline, shadow, widget); } if (buttonOption->features & QStyleOptionButton::HasMenu) { int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, buttonOption, widget); QRect ir = buttonOption->rect; QStyleOptionButton newBtn = *buttonOption; newBtn.rect = QRect(ir.right() - mbi + 2, ir.height()/2 - mbi/2 + 3, mbi - 6, mbi - 6); proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, painter, widget); } return true; } bool Style::drawPushButtonLabel(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { // cast option and check const QStyleOptionButton* buttonOption( qstyleoption_cast( option ) ); if( !buttonOption ) return true; // copy rect and palette const QRect& rect( option->rect ); // state const QStyle::State& state( option->state ); const bool enabled( state & QStyle::State_Enabled ); const bool sunken( state & (QStyle::State_On | QStyle::State_Sunken) ); const bool mouseOver(option->state & QStyle::State_MouseOver); const bool hasFocus(option->state & QStyle::State_HasFocus); const bool flat( buttonOption->features & QStyleOptionButton::Flat ); const bool suggest( #ifdef DTKWIDGET_CLASS_DSuggestButton buttonOption->features & DStyleOptionSuggestButton::SuggestButton #else false #endif ); // content const bool hasText( !buttonOption->text.isEmpty() ); const bool hasIcon( ( flat || !hasText ) && !buttonOption->icon.isNull() ); // contents QRect contentsRect( rect ); // menu arrow /* if( buttonOption->features & QStyleOptionButton::HasMenu ) { // define rect QRect arrowRect( contentsRect ); arrowRect.setLeft( contentsRect.right() - Metrics::MenuButton_IndicatorWidth + 1 ); arrowRect = GeometryUtils::centerRect( arrowRect, Metrics::MenuButton_IndicatorWidth, Metrics::MenuButton_IndicatorWidth ); contentsRect.setRight( arrowRect.left() - Metrics::Button_ItemSpacing - 1 ); contentsRect.adjust( Metrics::Button_MarginWidth, 0, 0, 0 ); arrowRect = widget->style()->visualRect( option->direction, option->rect, arrowRect ); // define color const QColor arrowColor( _helper->arrowColor( palette, textRole ) ); _helper->renderArrow( painter, arrowRect, arrowColor, ArrowDown ); } */ // icon size QSize iconSize; if( hasIcon ) { iconSize = buttonOption->iconSize; if( !iconSize.isValid() ) { const int metric( proxy()->pixelMetric( QStyle::PM_SmallIconSize, option, widget ) ); iconSize = QSize( metric, metric ); } } // text size int textFlags( Qt::AlignCenter ); const QSize textSize( option->fontMetrics.size( textFlags, buttonOption->text ) ); if (styleHint(SH_UnderlineShortcut, buttonOption, widget)) textFlags |= Qt::TextShowMnemonic; else textFlags |= Qt::TextHideMnemonic; // adjust text and icon rect based on options QRect iconRect; QRect textRect; if( hasText && !hasIcon ) textRect = contentsRect; else if( hasIcon && !hasText ) iconRect = contentsRect; else { const int contentsWidth( iconSize.width() + textSize.width() + Metrics::Button_ItemSpacing ); iconRect = QRect( QPoint( contentsRect.left() + (contentsRect.width() - contentsWidth )/2, contentsRect.top() + (contentsRect.height() - iconSize.height())/2 ), iconSize ); textRect = QRect( QPoint( iconRect.right() + Metrics::ToolButton_ItemSpacing + 1, contentsRect.top() + (contentsRect.height() - textSize.height())/2 ), textSize ); } // handle right to left if( iconRect.isValid() ) iconRect = proxy()->visualRect( option->direction, option->rect, iconRect ); if( textRect.isValid() ) textRect = proxy()->visualRect( option->direction, option->rect, textRect ); // make sure there is enough room for icon if( iconRect.isValid() ) iconRect = GeometryUtils::centerRect( iconRect, iconSize ); // render icon if( hasIcon && iconRect.isValid() ) { // icon state and mode const QIcon::State iconState( sunken ? QIcon::On : QIcon::Off ); QIcon::Mode iconMode; if( !enabled ) iconMode = QIcon::Disabled; else if( !flat && hasFocus ) iconMode = QIcon::Selected; else if( mouseOver && flat ) iconMode = QIcon::Active; else iconMode = QIcon::Normal; buttonOption->icon.paint(painter, iconRect, Qt::AlignCenter, iconMode, iconState); } // render text if( hasText && textRect.isValid() ) { if (suggest) { painter->setPen(m_palette->brush(PaletteExtended::PushButton_SuggestTextColor, option).color()); } else { painter->setPen(m_palette->brush(PaletteExtended::PushButton_TextColor, option).color()); } if (buttonOption->features & QStyleOptionButton::HasMenu) textRect = textRect.adjusted(0, 0, -proxy()->pixelMetric(PM_MenuButtonIndicator, buttonOption, widget), 0); painter->drawText(textRect, textFlags, buttonOption->text); } return true; } bool Style::drawPushButtonFrame(QPainter* painter, const QRect& rect, const QBrush& brush, const QBrush& outline, const QColor& shadow, const QWidget *widget) const { Q_UNUSED(shadow) // setup painter painter->setRenderHint( QPainter::Antialiasing, true ); const qreal radius( GeometryUtils::frameRadius() ); const QMarginsF margins(0.5, 0.5, 0.5, 0.5); QPainterPath path; path.addRoundedRect(QRectF(rect).marginsRemoved(margins), radius, radius); // ButtonTuples are QPushButton groups that needs to be taken care of, // the right corners of the LeftButton are not rounded, and the left // corners of the RightButton are not rounded either. if (widget) { const QString className = widget->metaObject()->className(); const QRectF rf = QRectF(rect); if (className == "dcc::widgets::LeftButton") { QPainterPath rightHalf; rightHalf.addRect(rf.right() - radius, rf.y() + margins.top(), radius, rf.height() - margins.top() - margins.bottom()); path = path.united(rightHalf); } else if (className == "dcc::widgets::RightButton") { QPainterPath leftHalf; leftHalf.addRect(rf.left(), rf.y() + margins.top(), radius, rf.height() - margins.top() - margins.bottom()); path = path.united(leftHalf); } } PainterHelper::drawPath(painter, path, brush, Metrics::Painter_PenWidth, outline); return true; } }// end namespace dstyle qt5integration-5.0.0/dstyleplugin/rubberbandhelper.cpp000066400000000000000000000024671347440174500232500ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "painterhelper.h" #include "paletteextended.h" #include "common.h" namespace dstyle { bool Style::drawRubberBandControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { Q_UNUSED(widget) const QBrush &backgroundBrush = m_palette->brush(PaletteExtended::RubberBand_BackgroundBrush, option); const QBrush &borderBrush = m_palette->brush(PaletteExtended::RubberBand_BorderBrush, option); PainterHelper::drawRect(painter, option->rect.adjusted(1, 1, -1, -1), backgroundBrush, Metrics::Painter_PenWidth, borderBrush); return true; } } qt5integration-5.0.0/dstyleplugin/scrollbarhelper.cpp000066400000000000000000000242751347440174500231260ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "commonhelper.h" #include "paletteextended.h" #include "style.h" #include "painterhelper.h" #include "geometryutils.h" #include "dstyleanimation.h" #include #include #include #include namespace dstyle { QRect Style::scrollbarSubControlRect(const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget) const { QRect ret(0, 0, 0, 0); if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { const bool enabled(opt->state & QStyle::State_Enabled); const bool mouseOver(opt->state & QStyle::State_MouseOver); const QRect scrollBarRect = scrollbar->rect; int sbextent = 0; if (!proxy()->styleHint(SH_ScrollBar_Transient, scrollbar, widget)) sbextent = proxy()->pixelMetric(PM_ScrollBarExtent, scrollbar, widget); int maxlen = ((scrollbar->orientation == Qt::Horizontal) ? scrollBarRect.width() : scrollBarRect.height()); int sliderlen; // calculate slider length if (scrollbar->maximum != scrollbar->minimum) { uint range = scrollbar->maximum - scrollbar->minimum; sliderlen = (qint64(scrollbar->pageStep) * maxlen) / (range + scrollbar->pageStep); int slidermin = proxy()->pixelMetric(PM_ScrollBarSliderMin, scrollbar, widget); if (sliderlen < slidermin || range > INT_MAX / 2) sliderlen = slidermin; if (sliderlen > maxlen) sliderlen = maxlen; } else { sliderlen = maxlen; } int sliderstart = sliderPositionFromValue(scrollbar->minimum, scrollbar->maximum, scrollbar->sliderPosition, maxlen - sliderlen, scrollbar->upsideDown); switch (sc) { case SC_ScrollBarSubLine: // top/left button if (scrollbar->orientation == Qt::Horizontal) { int buttonWidth = qMin(scrollBarRect.width() / 2, sbextent); ret.setRect(0, 0, buttonWidth, scrollBarRect.height()); } else { int buttonHeight = qMin(scrollBarRect.height() / 2, sbextent); ret.setRect(0, 0, scrollBarRect.width(), buttonHeight); } break; case SC_ScrollBarAddLine: // bottom/right button if (scrollbar->orientation == Qt::Horizontal) { int buttonWidth = qMin(scrollBarRect.width()/2, sbextent); ret.setRect(scrollBarRect.width() - buttonWidth, 0, buttonWidth, scrollBarRect.height()); } else { int buttonHeight = qMin(scrollBarRect.height()/2, sbextent); ret.setRect(0, scrollBarRect.height() - buttonHeight, scrollBarRect.width(), buttonHeight); } break; case SC_ScrollBarSubPage: // between top/left button and slider if (scrollbar->orientation == Qt::Horizontal) ret.setRect(sbextent, 0, sliderstart - sbextent, scrollBarRect.height()); else ret.setRect(0, sbextent, scrollBarRect.width(), sliderstart - sbextent); break; case SC_ScrollBarAddPage: // between bottom/right button and slider if (scrollbar->orientation == Qt::Horizontal) ret.setRect(sliderstart + sliderlen, 0, maxlen - sliderstart - sliderlen + sbextent, scrollBarRect.height()); else ret.setRect(0, sliderstart + sliderlen, scrollBarRect.width(), maxlen - sliderstart - sliderlen + sbextent); break; case SC_ScrollBarGroove: if (scrollbar->orientation == Qt::Horizontal) ret.setRect(sbextent, 0, scrollBarRect.width() - sbextent * 2, scrollBarRect.height()); else ret.setRect(0, sbextent, scrollBarRect.width(), scrollBarRect.height() - sbextent * 2); break; case SC_ScrollBarSlider: if (scrollbar->orientation == Qt::Horizontal) { if (mouseOver && enabled) ret.setRect(sliderstart, 2, sliderlen, scrollBarRect.height() - 4); else ret.setRect(sliderstart, scrollBarRect.height() / 3, sliderlen, scrollBarRect.height() / 3); } else { if (mouseOver && enabled) ret.setRect(2, sliderstart, scrollBarRect.width() - 4, sliderlen); else ret.setRect(scrollBarRect.width() / 3, sliderstart, scrollBarRect.width() / 3, sliderlen); } break; default: break; } ret = visualRect(scrollbar->direction, scrollBarRect, ret); } return ret; } bool Style::drawScrollBarSliderControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { const QStyleOptionSlider *scrollBar = qstyleoption_cast(option); QObject *styleObject = option->styleObject; bool wasActive = false; if (styleObject && styleObject && proxy()->styleHint(SH_ScrollBar_Transient, option, widget)) { Q_D(const Style); qreal opacity = 0.0; bool shouldExpand = false; int oldPos = styleObject->property("_q_stylepos").toInt(); int oldMin = styleObject->property("_q_stylemin").toInt(); int oldMax = styleObject->property("_q_stylemax").toInt(); QRect oldRect = styleObject->property("_q_stylerect").toRect(); int oldState = styleObject->property("_q_stylestate").toInt(); uint oldActiveControls = styleObject->property("_q_stylecontrols").toUInt(); // a scrollbar is transient when the the scrollbar itself and // its sibling are both inactive (ie. not pressed/hovered/moved) bool transient = !scrollBar->activeSubControls && !(option->state & State_On); if (!transient || oldPos != scrollBar->sliderPosition || oldMin != scrollBar->minimum || oldMax != scrollBar->maximum || oldRect != scrollBar->rect || oldState != scrollBar->state || oldActiveControls != scrollBar->activeSubControls) { // if the scrollbar is transient or its attributes, geometry or // state has changed, the opacity is reset back to 100% opaque opacity = 1.0; styleObject->setProperty("_q_stylepos", scrollBar->sliderPosition); styleObject->setProperty("_q_stylemin", scrollBar->minimum); styleObject->setProperty("_q_stylemax", scrollBar->maximum); styleObject->setProperty("_q_stylerect", scrollBar->rect); styleObject->setProperty("_q_stylestate", static_cast(scrollBar->state)); styleObject->setProperty("_q_stylecontrols", static_cast(scrollBar->activeSubControls)); #ifndef QT_NO_ANIMATION DScrollbarStyleAnimation *anim = qobject_cast(d->animation(styleObject)); if (transient) { if (!anim) { anim = new DScrollbarStyleAnimation(DScrollbarStyleAnimation::Deactivating, styleObject); d->startAnimation(anim); } else if (anim->mode() == DScrollbarStyleAnimation::Deactivating) { // the scrollbar was already fading out while the // state changed -> restart the fade out animation anim->setCurrentTime(0); } } else if (anim && anim->mode() == DScrollbarStyleAnimation::Deactivating) { d->stopAnimation(styleObject); } #endif // !QT_NO_ANIMATION } #ifndef QT_NO_ANIMATION DScrollbarStyleAnimation *anim = qobject_cast(d->animation(styleObject)); if (anim && anim->mode() == DScrollbarStyleAnimation::Deactivating) { // once a scrollbar was active (hovered/pressed), it retains // the active look even if it's no longer active while fading out if (oldActiveControls) anim->setActive(true); wasActive = anim->wasActive(); opacity = anim->currentValue(); } shouldExpand = (scrollBar->activeSubControls || wasActive); if (shouldExpand) { if (!anim && !oldActiveControls) { // Start expand animation only once and when entering anim = new DScrollbarStyleAnimation(DScrollbarStyleAnimation::Activating, styleObject); d->startAnimation(anim); } } painter->setOpacity(opacity); #endif // !QT_NO_ANIMATION } if (qFuzzyIsNull(painter->opacity())) return true; painter->setRenderHint(QPainter::Antialiasing); QRectF rect = option->rect; const QBrush &background = m_palette->brush(PaletteExtended::ScrollBar_HandleBrush, option, 0, Qt::lightGray); const QBrush &border = m_palette->brush(PaletteExtended::ScrollBar_HandleBorderBrush, option, 0, Qt::transparent); qreal radius = scrollBar->orientation == Qt::Horizontal ? rect.height() / 2.0 : rect.width() / 2.0; PainterHelper::drawRoundedRect(painter, rect, radius, radius, Qt::AbsoluteSize, background, Metrics::Painter_PenWidth, border); return true; } }// end namespace dstyle qt5integration-5.0.0/dstyleplugin/sliderhelper.cpp000066400000000000000000000271421347440174500224210ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "common.h" #include "colorutils.h" #include "geometryutils.h" #include "paletteextended.h" #include "commonhelper.h" #include "painterhelper.h" #include #include #include namespace dstyle { static const char *SliderTickmarkPositionsProp = "tickmarkPositions"; #define SliderHandleTypeNormal "Normal" #define SliderHandleTypeVernier "Vernier" #define SliderHandleTypeNone "None" QRect Style::sliderSubControlRect(const QStyleOptionComplex *option, QStyle::SubControl subControl, const QWidget *widget) const { // cast option and check const QStyleOptionSlider* sliderOption( qstyleoption_cast( option ) ); if( !sliderOption ) return QCommonStyle::subControlRect( CC_Slider, option, subControl, widget ); switch( subControl ) { case SC_SliderGroove: { // direction const bool horizontal( sliderOption->orientation == Qt::Horizontal ); // get base class rect QRect grooveRect( QCommonStyle::subControlRect( CC_Slider, option, subControl, widget ) ); grooveRect = GeometryUtils::insideMargin( grooveRect, pixelMetric( PM_DefaultFrameWidth, option, widget ) ); // centering if( horizontal ) { grooveRect = GeometryUtils::centerRect( grooveRect, grooveRect.width(), Metrics::Slider_GrooveThickness ); } else { grooveRect = GeometryUtils::centerRect( grooveRect, Metrics::Slider_GrooveThickness, grooveRect.height() ); } return grooveRect; } default: return QCommonStyle::subControlRect( CC_Slider, option, subControl, widget ); } } bool Style::drawSlider(const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const { // cast option and check const QStyleOptionSlider *sliderOption( qstyleoption_cast( option ) ); if( !sliderOption ) return true; const PaletteExtended *plExt = m_palette; // copy rect and palette const QRect& rect( option->rect ); // const QPalette& palette( option->palette ); // copy state const QStyle::State& state( option->state ); const bool enabled( state & QStyle::State_Enabled ); // const bool mouseOver( enabled && ( state & QStyle::State_MouseOver ) ); // const bool hasFocus( enabled && ( state & QStyle::State_HasFocus ) ); // direction const bool horizontal( sliderOption->orientation == Qt::Horizontal ); // tickmarks if( sliderOption->subControls & QStyle::SC_SliderTickmarks ) { const bool upsideDown( sliderOption->upsideDown ); const int tickPosition( sliderOption->tickPosition ); const int available( pixelMetric( QStyle::PM_SliderSpaceAvailable, option, widget ) ); int interval = sliderOption->tickInterval; if( interval < 1 ) interval = sliderOption->pageStep; if( interval >= 1 ) { const int fudge( pixelMetric( QStyle::PM_SliderLength, option, widget ) / 2 ); int current( sliderOption->minimum ); // store tick lines const QRect grooveRect( subControlRect( QStyle::CC_Slider, sliderOption, QStyle::SC_SliderGroove, widget ) ); QList tickLines; if( horizontal ) { if( tickPosition & QSlider::TicksAbove ) tickLines.append( QLine( rect.left(), grooveRect.top() - Metrics::Slider_TickMarginWidth, rect.left(), grooveRect.top() - Metrics::Slider_TickMarginWidth - Metrics::Slider_TickLength ) ); if( tickPosition & QSlider::TicksBelow ) tickLines.append( QLine( rect.left(), grooveRect.bottom() + Metrics::Slider_TickMarginWidth, rect.left(), grooveRect.bottom() + Metrics::Slider_TickMarginWidth + Metrics::Slider_TickLength ) ); } else { if( tickPosition & QSlider::TicksAbove ) tickLines.append( QLine( grooveRect.left() - Metrics::Slider_TickMarginWidth, rect.top(), grooveRect.left() - Metrics::Slider_TickMarginWidth - Metrics::Slider_TickLength, rect.top() ) ); if( tickPosition & QSlider::TicksBelow ) tickLines.append( QLine( grooveRect.right() + Metrics::Slider_TickMarginWidth, rect.top(), grooveRect.right() + Metrics::Slider_TickMarginWidth + Metrics::Slider_TickLength, rect.top() ) ); } QList tickmarkPositions; while( current <= sliderOption->maximum ) { // adjust pen painter->setPen( QPen(plExt->brush(PaletteExtended::Slider_TickmarkColor), Metrics::Painter_PenWidth) ); // calculate positions and draw lines int position( sliderPositionFromValue( sliderOption->minimum, sliderOption->maximum, current, available ) + fudge ); tickmarkPositions.append(position); foreach( const QLine& tickLine, tickLines ) { if( horizontal ) painter->drawLine( tickLine.translated( upsideDown ? (rect.width() - position) : position, 0 ) ); else painter->drawLine( tickLine.translated( 0, upsideDown ? (rect.height() - position):position ) ); } // go to next position current += interval; } QWidget *volatileWidget = const_cast(widget); // Tickmark positions are valuable to both drawing annotations and tickmark magnetic, // so we record it here to its properties. volatileWidget->setProperty(SliderTickmarkPositionsProp, tickmarkPositions); } } // groove if( sliderOption->subControls & QStyle::SC_SliderGroove ) { // retrieve groove rect QRect grooveRect( subControlRect( QStyle::CC_Slider, sliderOption, QStyle::SC_SliderGroove, widget ) ); // NOTE(hualet): adjust(cut) the grooveRect here, so later groove drawing will not // result in groove both ends are extended too far from the minimum tickmark and the maximum tickmark. const float adjustSize = pixelMetric(PM_SliderLength) / 2.0 * 0.5; if (sliderOption->orientation == Qt::Horizontal) grooveRect.adjust(adjustSize, 0, -adjustSize, 0); else grooveRect.adjust(0, adjustSize, 0, -adjustSize); // base brush const QBrush grooveBrush( plExt->brush(PaletteExtended::Slider_GrooveColor) ); if( !enabled ) drawSliderGroove( painter, grooveRect, grooveBrush ); else { const bool upsideDown( sliderOption->upsideDown ); // handle rect QRect handleRect( subControlRect( QStyle::CC_Slider, sliderOption, QStyle::SC_SliderHandle, widget ) ); // highlight brush const QBrush highlight( plExt->brush(PaletteExtended::Slider_GrooveHighlightColor) ); if( sliderOption->orientation == Qt::Horizontal ) { QRect leftRect( grooveRect ); leftRect.setRight( handleRect.right() - Metrics::Slider_ControlThickness/2 ); drawSliderGroove( painter, leftRect, upsideDown ? grooveBrush:highlight ); QRect rightRect( grooveRect ); rightRect.setLeft( handleRect.left() + Metrics::Slider_ControlThickness/2 ); drawSliderGroove( painter, rightRect, upsideDown ? highlight:grooveBrush ); } else { QRect topRect( grooveRect ); topRect.setBottom( handleRect.bottom() - Metrics::Slider_ControlThickness/2 ); drawSliderGroove( painter, topRect, upsideDown ? grooveBrush:highlight ); QRect bottomRect( grooveRect ); bottomRect.setTop( handleRect.top() + Metrics::Slider_ControlThickness/2 ); drawSliderGroove( painter, bottomRect, upsideDown ? highlight:grooveBrush ); } } } // handle if( sliderOption->subControls & QStyle::SC_SliderHandle ) { // get rect and center QRect handleRect( subControlRect( QStyle::CC_Slider, sliderOption, QStyle::SC_SliderHandle, widget ) ); // render const QString handleType = widget->property("handleType").toString(); drawSliderHandle( painter, sliderOption, handleRect, handleType); } return true; } void Style::drawSliderGroove(QPainter *painter, const QRect &rect, const QBrush &brush) const { // setup painter painter->setRenderHint( QPainter::Antialiasing, true ); const QRectF baseRect( rect ); const qreal radius( 0.5*Metrics::Slider_GrooveThickness ); // content if( brush.style() != Qt::NoBrush ) { painter->setPen( Qt::NoPen ); painter->setBrush( brush ); painter->drawRoundedRect( baseRect, radius, radius ); } return; } void Style::drawSliderHandle(QPainter* painter, const QStyleOptionSlider *option, const QRect& rect, const QString &type) const { // setup painter painter->setRenderHint( QPainter::Antialiasing, true ); // copy rect // QRectF frameRect( rect ); // frameRect.adjust( 1, 1, -1, -1 ); // shadow // if( shadow.isValid() && !sunken ) // { // painter->setPen( QPen( shadow, 2 ) ); // painter->setBrush( Qt::NoBrush ); // painter->drawEllipse( frameRect ); // } if (type == SliderHandleTypeNone) { return; // draw no handle } else if (type == SliderHandleTypeVernier) { // draw vernier handle fillBrush(painter, rect, m_palette->brush(PaletteExtended::Slider_VernierHandleBrush, option)); } else { // draw circle handle fillBrush(painter, rect, m_palette->brush(PaletteExtended::Slider_HandleBrush, option)); } } bool Style::drawSliderTickmarkLabels(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { QRect rect( option->rect ); QVariantList labels = widget->property("tickmarkLabels").toList(); if (labels.length() == 0) return false; QWidget *parent = widget->parentWidget(); if (parent && parent->inherits("dcc::widgets::DCCSliderAnnotated")) { QSlider *slider = parent->findChild(); if (slider) { QList positions = slider->property(SliderTickmarkPositionsProp).toList(); PaletteExtended *plExt = m_palette; painter->setPen(QPen(plExt->brush(PaletteExtended::Slider_TickmarkColor), Metrics::Painter_PenWidth)); for (int i = 0; i < positions.length() && i < labels.length(); i++) { const QString text = labels.at(i).toString(); const int rWidth = option->fontMetrics.width(text); const int deltaX = slider->x() - widget->x(); const int x = positions.at(i).toInt() + deltaX; const int rX = qMax(0.0, qMin(rect.width() - rWidth / 1.0, x - rWidth / 2.0)); QRect r ( rX, rect.y(), rWidth, rect.height() ); painter->drawText(r, Qt::AlignTop, text); } } } return true; } } // end namespace dstyle qt5integration-5.0.0/dstyleplugin/spinboxhelper.cpp000066400000000000000000000142201347440174500226120ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "paletteextended.h" #include #include #include namespace dstyle { extern PaletteExtended::PseudoClassType lineEditStateToPseudoClassType(QStyle::State state); bool Style::drawSpinBoxComplexControl( const QStyleOptionComplex* option, QPainter* painter, const QWidget* widget ) const { const QStyleOptionSpinBox *sb( qstyleoption_cast( option ) ); if( !sb ) return true; // store palette and rect const QPalette& palette( option->palette ); const QRect& rect( option->rect ); if( option->subControls & SC_SpinBoxFrame ) { // detect flat spinboxes bool flat( !sb->frame ); flat |= ( rect.height() < 2*Metrics::Frame_FrameWidth + Metrics::SpinBox_ArrowButtonWidth ); if( flat ) { const QColor background( palette.color( QPalette::Base ) ); painter->setBrush( background ); painter->setPen( Qt::NoPen ); painter->drawRect( rect ); } else { drawPrimitive( PE_FrameLineEdit, option, painter, widget ); } } QStyleOptionSpinBox copy = *sb; PrimitiveElement pe; // int fw = -Metrics::Painter_PenWidth; if (sb->subControls & SC_SpinBoxUp) { copy.subControls = SC_SpinBoxUp; if (!(sb->stepEnabled & QAbstractSpinBox::StepUpEnabled)) { copy.state &= ~State_Enabled; } if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken)) { copy.state |= State_On; copy.state |= State_Sunken; } else { copy.state |= State_Raised; copy.state &= ~State_Sunken; } pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinPlus : PE_IndicatorSpinUp); copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget); // copy.rect.adjust(0, -fw, 0, fw); // fillBrush(painter, copy.rect, m_palette->brush(PaletteExtended::SpinBox_PlusBrush, ©)); // painter->setPen(QPen(m_palette->brush(PaletteExtended::SpinBox_BorderColor, option), Metrics::Painter_PenWidth)); // painter->drawLine(copy.rect.topLeft(), copy.rect.bottomLeft()); proxy()->drawPrimitive(pe, ©, painter, widget); } if (sb->subControls & SC_SpinBoxDown) { copy.subControls = SC_SpinBoxDown; copy.state = sb->state; QPalette pal2 = sb->palette; if (!(sb->stepEnabled & QAbstractSpinBox::StepDownEnabled)) { pal2.setCurrentColorGroup(QPalette::Disabled); copy.state &= ~State_Enabled; } copy.palette = pal2; if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken)) { copy.state |= State_On; copy.state |= State_Sunken; } else { copy.state |= State_Raised; copy.state &= ~State_Sunken; } pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinMinus : PE_IndicatorSpinDown); copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); // copy.rect.adjust(0, -fw, 0, fw); // fillBrush(painter, copy.rect, m_palette->brush(PaletteExtended::SpinBox_MinusBrush, ©)); // painter->setPen(QPen(m_palette->brush(PaletteExtended::SpinBox_BorderColor, option), Metrics::Painter_PenWidth)); // painter->drawLine(copy.rect.topLeft(), copy.rect.bottomLeft()); proxy()->drawPrimitive(pe, ©, painter, widget); } painter->setPen(QPen(m_palette->brush(PaletteExtended::SpinBox_BorderColor, lineEditStateToPseudoClassType(option->state)), Metrics::Painter_PenWidth)); QRect lineEditRect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxEditField, widget).adjusted(0, -1, 0, 1); painter->drawLine(lineEditRect.topRight(), lineEditRect.bottomRight()); return true; } QRect Style::spinboxSubControlRect(const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget) const { Q_UNUSED(widget) QRect ret; if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(opt)) { QSize bs; int fw = 0; bs.setHeight(spinbox->rect.height() - 2 * fw); // 1.6 -approximate golden mean bs.setWidth(bs.height()); bs = bs.expandedTo(QApplication::globalStrut()); int y = fw; int x, lx, rx; x = spinbox->rect.right() - fw - bs.width(); lx = fw; rx = x - fw - bs.width(); switch (sc) { case SC_SpinBoxUp: if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons) return QRect(); ret = QRect(x, y, bs.width(), bs.height()); break; case SC_SpinBoxDown: if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons) return QRect(); ret = QRect(x - bs.width(), y, bs.width(), bs.height()); break; case SC_SpinBoxEditField: if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons) { ret = QRect(lx, fw, spinbox->rect.width() - 2*fw, spinbox->rect.height() - 2*fw); } else { ret = QRect(lx, fw, rx, spinbox->rect.height() - 2*fw); } break; case SC_SpinBoxFrame: ret = spinbox->rect; default: break; } ret = visualRect(spinbox->direction, spinbox->rect, ret); } return ret; } } qt5integration-5.0.0/dstyleplugin/style.cpp000066400000000000000000001530741347440174500211030ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "common.h" #include "geometryutils.h" #include "paletteextended.h" #include "commonhelper.h" #include "dstyleanimation.h" #include "hidpihelper.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef DTKWIDGET_CLASS_DTabBar #include #endif DWIDGET_USE_NAMESPACE namespace dstyle { QColor StylePrivate::outline(const QPalette &pal) const { if (pal.window().style() == Qt::TexturePattern) return QColor(0, 0, 0, 160); return pal.background().color().darker(140); } QColor StylePrivate::buttonColor(const QPalette &pal) const { QColor buttonColor = pal.button().color(); int val = qGray(buttonColor.rgb()); buttonColor = buttonColor.lighter(100 + qMax(1, (180 - val)/6)); buttonColor.setHsv(buttonColor.hue(), buttonColor.saturation() * 0.75, buttonColor.value()); return buttonColor; } QColor StylePrivate::highlight(const QPalette &pal) const { return pal.color(QPalette::Highlight); } QColor StylePrivate::highlightedOutline(const QPalette &pal) const { QColor highlightedOutline = highlight(pal).darker(125); if (highlightedOutline.value() > 160) highlightedOutline.setHsl(highlightedOutline.hue(), highlightedOutline.saturation(), 160); return highlightedOutline; } QColor StylePrivate::backgroundColor(const QPalette &pal, const QWidget *widget) const { if (qobject_cast(widget) && widget->parent() && qobject_cast(widget->parent()->parent())) return widget->parentWidget()->parentWidget()->palette().color(QPalette::Base); return pal.color(QPalette::Base); } #ifndef QT_NO_ANIMATION DStyleAnimation *StylePrivate::animation(const QObject *target) const { return animations.value(target); } void StylePrivate::startAnimation(DStyleAnimation *animation) const { Q_Q(const Style); stopAnimation(animation->target()); q->connect(animation, SIGNAL(destroyed()), SLOT(_q_removeAnimation()), Qt::UniqueConnection); animations.insert(animation->target(), animation); animation->start(); } void dstyle::StylePrivate::stopAnimation(const QObject *target) const { DStyleAnimation *animation = animations.take(target); if (animation) { animation->stop(); delete animation; } } void StylePrivate::_q_removeAnimation() { Q_Q(Style); QObject *animation = q->sender(); if (animation) animations.remove(animation->parent()); } #endif void StylePrivate::_q_updateAppFont() { if (qApp->desktopSettingsAware()) { qApp->setFont(QGuiApplication::font()); for (QWidget *w : qApp->allWidgets()) { if (!w->isWindow() && w->testAttribute(Qt::WA_StyleSheet)) { QEvent e(QEvent::ApplicationFontChange); qApp->sendEvent(w, &e); } } } } Style::Style(StyleType style) : QCommonStyle(*new StylePrivate()) , m_type(style) { m_palette = PaletteExtended::instance(style); } Style::~Style() { } void Style::polish(QPalette &p) { QCommonStyle::polish(p); m_palette->polish(p); } void Style::polish(QWidget *w) { QCommonStyle::polish(w); if (qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || isTabBarToolButton(w)) w->setAttribute(Qt::WA_Hover, true); if (qobject_cast(w)) { w->setAttribute(Qt::WA_OpaquePaintEvent, false); } if (w->inherits("dcc::widgets::SliderAnnotation")) { QFont font = w->font(); font.setPointSizeF(qApp->font().pointSizeF() - 1); w->setFont(font); } if (DApplication::isDXcbPlatform()) { bool is_menu = qobject_cast(w); bool is_tip = w->inherits("QTipLabel"); // 当窗口已经创建对应的native窗口,要判断当前是否已经设置了窗口背景透明 // Bug: https://github.com/linuxdeepin/internal-discussion/issues/323 if ((is_menu || is_tip) && w->windowHandle()) { if (const QPlatformWindow *handle = w->windowHandle()->handle()) { if (!w->testAttribute(Qt::WA_TranslucentBackground) && !handle->isExposed()) { // 销毁现有的native窗口,否则设置Qt::WA_TranslucentBackground不会生效 class DQWidget : public QWidget {public: using QWidget::destroy;}; reinterpret_cast(w)->destroy(true, false); } } } if (is_menu) { DPlatformWindowHandle handle(w); if (DPlatformWindowHandle::isEnabledDXcb(w)) { const QColor &color = m_palette->brush(PaletteExtended::Menu_BorderColor).color(); if (color.isValid()) handle.setBorderColor(color); handle.setShadowOffset(QPoint(0, 4)); handle.setShadowRadius(15); handle.setShadowColor(QColor(0, 0, 0, 100)); #ifdef DTK_SUPPORT_BLUR_WINDOW handle.setEnableBlurWindow(true); #endif handle.setTranslucentBackground(true); w->setAttribute(Qt::WA_TranslucentBackground); } } else if (is_tip) { DPlatformWindowHandle handle(w); if (DPlatformWindowHandle::isEnabledDXcb(w)) { handle.setShadowOffset(QPoint(0, 2)); handle.setShadowRadius(4); w->setAttribute(Qt::WA_TranslucentBackground); } } } // NOTE(lxz): QLineEdit not refresh style after theme changed if (QLineEdit *edit = qobject_cast(w)) { bool clear_button_visible = edit->isClearButtonEnabled(); if (clear_button_visible) { const QList &actions = edit->findChildren("_q_qlineeditclearaction"); if (!actions.isEmpty()) { actions.first()->setIcon(standardIcon(QStyle::SP_LineEditClearButton, nullptr, w)); } } } QPalette palette = w->palette(); if (w->testAttribute(Qt::WA_SetStyle)) { polish(palette); } // combo box drop-list. // line edit completer drop-list if (widgetIsComboBoxPopupFramePrimitive(w)) { polish(palette); palette.setBrush(QPalette::Background, m_palette->brush(PaletteExtended::Menu_BackgroundBrush, PaletteExtended::PseudoClass_Unspecified, palette.brush(QPalette::Background))); } // TODO(zccrs): 临时解决方案,用于支持应用程序中自定义DTabBar的被选中Tab的文本颜色 DTabBar *tabBar = qobject_cast(w); if (tabBar) { if (!tabBar->testAttribute(Qt::WA_SetPalette)) palette.setBrush(QPalette::Active, QPalette::Text, m_palette->brush(PaletteExtended::TabBarTab_TextColor, PaletteExtended::PseudoClass_Selected)); } w->setPalette(palette); } static QObject *themeSettings() { return reinterpret_cast(qvariant_cast(qApp->property("_d_theme_settings_object"))); } void Style::polish(QApplication *app) { if (QObject *obj = themeSettings()) { connect(obj, SIGNAL(systemFontChanged(QString)), this, SLOT(_q_updateAppFont())); connect(obj, SIGNAL(systemFontPointSizeChanged(qreal)), this, SLOT(_q_updateAppFont())); } QCommonStyle::polish(app); } void Style::unpolish(QWidget *w) { if (qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || qobject_cast(w) || isTabBarToolButton(w)) w->setAttribute(Qt::WA_Hover, false); if (qobject_cast(w)) { w->setAttribute(Qt::WA_OpaquePaintEvent, true); } if (w->inherits("dcc::widgets::SliderAnnotation")) { QFont font = w->font(); font.setPointSizeF(qApp->font().pointSizeF()); w->setFont(font); w->setAttribute(Qt::WA_SetFont, false); } } void Style::unpolish(QApplication *app) { if (QObject *obj = themeSettings()) { disconnect(obj, SIGNAL(systemFontChanged(QString)), this, SLOT(_q_updateAppFont())); disconnect(obj, SIGNAL(systemFontPointSizeChanged(qreal)), this, SLOT(_q_updateAppFont())); } QCommonStyle::unpolish(app); } int Style::pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option, const QWidget *widget) const { // handle special cases switch( metric ) { // frame width case PM_DefaultFrameWidth: { if( qobject_cast( widget ) ) return Metrics::Menu_FrameWidth; if( qobject_cast( widget ) ) return Metrics::LineEdit_FrameWidth; // fallback return Metrics::Frame_FrameWidth; } case PM_ComboBoxFrameWidth: { const QStyleOptionComboBox* comboBoxOption( qstyleoption_cast< const QStyleOptionComboBox*>( option ) ); return comboBoxOption && comboBoxOption->editable ? Metrics::LineEdit_FrameWidth : Metrics::ComboBox_FrameWidth; } case PM_SpinBoxFrameWidth: return Metrics::SpinBox_FrameWidth; case PM_ToolBarFrameWidth: return Metrics::ToolBar_FrameWidth; case PM_ToolTipLabelFrameWidth: return Metrics::ToolTip_FrameWidth; case PM_LayoutHorizontalSpacing: return Metrics::Layout_DefaultSpacing; case PM_LayoutVerticalSpacing: return Metrics::Layout_DefaultSpacing; // buttons case PM_ButtonMargin: { // needs special case for kcalc buttons, to prevent the application to set too small margins if( widget && widget->inherits( "KCalcButton" ) ) return Metrics::Button_MarginWidth + 4; else return Metrics::Button_MarginWidth; } case PM_ButtonDefaultIndicator: return 0; case PM_ButtonShiftHorizontal: return 0; case PM_ButtonShiftVertical: return 0; //menu case PM_MenuHMargin: return Menu_HMargin; case PM_MenuVMargin: return Menu_VMargin; // menubars case PM_MenuBarPanelWidth: return 0; case PM_MenuBarHMargin: return 0; case PM_MenuBarVMargin: return 0; case PM_MenuBarItemSpacing: return Metrics::MenuBar_ItemSpacing; case PM_MenuDesktopFrameWidth: return 0; // menu buttons case PM_MenuButtonIndicator: return Metrics::MenuButton_IndicatorWidth; // toolbars case PM_ToolBarHandleExtent: return Metrics::ToolBar_HandleExtent; case PM_ToolBarSeparatorExtent: return Metrics::ToolBar_SeparatorWidth; case PM_ToolBarExtensionExtent: return pixelMetric( PM_SmallIconSize, option, widget ) + 2*Metrics::ToolButton_MarginWidth; case PM_ToolBarItemMargin: return 0; case PM_ToolBarItemSpacing: return Metrics::ToolBar_ItemSpacing; // tabbars case PM_TabBarTabShiftVertical: return 0; case PM_TabBarTabShiftHorizontal: return 0; case PM_TabBarTabOverlap: return Metrics::TabBar_TabOverlap; case PM_TabBarBaseOverlap: return Metrics::TabBar_BaseOverlap; case PM_TabBarTabHSpace: return 2*Metrics::TabBar_TabMarginWidth; case PM_TabBarTabVSpace: return 2*Metrics::TabBar_TabMarginHeight; case PM_TabCloseIndicatorWidth: case PM_TabCloseIndicatorHeight: return pixelMetric( PM_SmallIconSize, option, widget ); // scrollbars case PM_ScrollBarExtent: return Metrics::ScrollBar_Extend; case PM_ScrollBarSliderMin: return Metrics::ScrollBar_MinSliderHeight; // title bar case PM_TitleBarHeight: return 2*Metrics::TitleBar_MarginWidth + pixelMetric( PM_SmallIconSize, option, widget ); // sliders case PM_SliderThickness: return Metrics::Slider_ControlThickness; case PM_SliderControlThickness: return Metrics::Slider_ControlThickness; case PM_SliderLength: return Metrics::Slider_ControlThickness; // checkboxes and radio buttons case PM_IndicatorWidth: return Metrics::CheckBox_Size; case PM_IndicatorHeight: return Metrics::CheckBox_Size; case PM_ExclusiveIndicatorWidth: return Metrics::CheckBox_Size; case PM_ExclusiveIndicatorHeight: return Metrics::CheckBox_Size; // list heaaders case PM_HeaderMarkSize: return Metrics::Header_ArrowSize; case PM_HeaderMargin: return Metrics::Header_MarginWidth; // dock widget // return 0 here, since frame is handled directly in polish case PM_DockWidgetFrameWidth: return 0; case PM_DockWidgetTitleMargin: return Metrics::Frame_FrameWidth; case PM_DockWidgetTitleBarButtonMargin: return Metrics::ToolButton_MarginWidth; case PM_SplitterWidth: return Metrics::Splitter_SplitterWidth; case PM_DockWidgetSeparatorExtent: return Metrics::Splitter_SplitterWidth; #ifdef DTKWIDGET_CLASS_DTabBar case PM_TabBarScrollButtonWidth: { if (qobject_cast(widget->parent())) { return 0; } } #endif // fallback default: return QCommonStyle::pixelMetric( metric, option, widget ); } } QRect Style::subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *w) const { // SubControlRectFunc fn = nullptr; switch (cc) { case CC_Slider: return sliderSubControlRect(opt, sc, w); case CC_ScrollBar: return scrollbarSubControlRect(opt, sc, w); #ifndef QT_NO_COMBOBOX case CC_ComboBox: return comboBoxSubControlRect(opt, sc, w); #endif // case CC_SpinBox: return spinboxSubControlRect(opt, sc, w); default: break; } // if (fn) { // QRect rect = fn(opt, sc, w); // if (!rect.isEmpty()) { // return rect; // } // } return QCommonStyle::subControlRect(cc, opt, sc, w); } QRect Style::subElementRect(QStyle::SubElement r, const QStyleOption *opt, const QWidget *widget) const { switch (r) { case SE_ProgressBarGroove: // deliberate case SE_ProgressBarContents: return progressBarGrooveRect( opt, widget ); case SE_ProgressBarLabel: return progressBarLabelRect( opt, widget ); case SE_HeaderArrow: return headerArrowRect( opt, widget ); case SE_LineEditContents: return QCommonStyle::subElementRect(r, opt, widget).adjusted(LineEdit_LeftMargin, 0, 0, 0); default: break; } return QCommonStyle::subElementRect(r, opt, widget); } void Style::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { DrawControlFunc fcn(Q_NULLPTR); switch( element ) { case CE_PushButtonBevel: fcn = &Style::drawPushButtonBevel; break; case CE_PushButtonLabel: fcn = &Style::drawPushButtonLabel; break; // case CE_CheckBoxLabel: fcn = &Style::drawCheckBoxLabelControl; break; // case CE_RadioButtonLabel: fcn = &Style::drawCheckBoxLabelControl; break; case CE_ToolButtonLabel: fcn = &Style::drawToolButtonLabelControl; break; case CE_ComboBoxLabel: fcn = &Style::drawComboBoxLabelControl; break; case CE_MenuBarEmptyArea: return; case CE_MenuBarItem: fcn = &Style::drawMenuBarItemControl; break; case CE_MenuItem: fcn = &Style::drawMenuItemControl; break; // case CE_ToolBar: fcn = &Style::emptyControl; break; case CE_ProgressBar: fcn = &Style::drawProgressBarControl; break; case CE_ProgressBarContents: fcn = &Style::drawProgressBarContentsControl; break; case CE_ProgressBarGroove: fcn = &Style::drawProgressBarGrooveControl; break; case CE_ProgressBarLabel: fcn = &Style::drawProgressBarLabelControl; break; case CE_ScrollBarSlider: fcn = &Style::drawScrollBarSliderControl; break; // case CE_ScrollBarAddLine: fcn = &Style::drawScrollBarAddLineControl; break; // case CE_ScrollBarSubLine: fcn = &Style::drawScrollBarSubLineControl; break; // case CE_ScrollBarAddPage: fcn = &Style::emptyControl; break; // case CE_ScrollBarSubPage: fcn = &Style::emptyControl; break; case CE_ShapedFrame: fcn = &Style::drawShapedFrameControl; break; case CE_RubberBand: fcn = &Style::drawRubberBandControl; break; // case CE_SizeGrip: fcn = &Style::emptyControl; break; // case CE_HeaderSection: fcn = &Style::drawHeaderSectionControl; break; // case CE_HeaderEmptyArea: fcn = &Style::drawHeaderEmptyAreaControl; break; case CE_TabBarTabLabel: fcn = &Style::drawTabBarTabLabelControl; break; case CE_TabBarTabShape: fcn = &Style::drawTabBarTabShapeControl; break; case CE_CustomBase + 1: fcn = &Style::drawTabBarAddButtonControl; break; // case CE_ToolBoxTabLabel: fcn = &Style::drawToolBoxTabLabelControl; break; // case CE_ToolBoxTabShape: fcn = &Style::drawToolBoxTabShapeControl; break; // case CE_DockWidgetTitle: fcn = &Style::drawDockWidgetTitleControl; break; // case CE_CapacityBar: fcn = &Style::drawProgressBarControl; break; // fallback default: { // TODO: move this bare number comparison to some more human friendly form. if ((unsigned int)(element) == QStyle::CE_CustomBase + 1024) { fcn = &Style::drawSliderTickmarkLabels; } } } painter->save(); // call function if implemented if( !( fcn && (this->*fcn)( option, painter, widget ) ) ) { QCommonStyle::drawControl( element, option, painter, widget ); } painter->restore(); } void Style::drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *w) const { DrawComplexControlFunc fn = nullptr; switch (cc) { case CC_Slider: fn = &Style::drawSlider; break; #ifndef QT_NO_COMBOBOX case CC_ComboBox: fn = &Style::drawComboBox; break; #endif case CC_SpinBox: fn = &Style::drawSpinBoxComplexControl; break; default: break; } if (fn && (this->*fn)(opt, p, w)) { return; } return QCommonStyle::drawComplexControl(cc, opt, p, w); } void Style::drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { DrawPrimitiveFunc fcn( nullptr ); switch( element ) { // case PE_PanelButtonCommand: fcn = &Style::drawPanelButtonCommandPrimitive; break; case PE_PanelButtonTool: fcn = &Style::drawPanelButtonToolPrimitive; break; // case PE_PanelScrollAreaCorner: fcn = &Style::drawPanelScrollAreaCornerPrimitive; break; case PE_PanelMenu: { QBrush menu_background_brush = m_palette->brush(PaletteExtended::Menu_BackgroundBrush, PaletteExtended::PseudoClass_Unspecified, option->palette.brush(QPalette::Background)); #ifdef DTK_SUPPORT_BLUR_WINDOW QColor menu_background_color = menu_background_brush.color(); if (DPlatformWindowHandle::isEnabledDXcb(widget) && menu_background_color.isValid()) { DPlatformWindowHandle handle(const_cast(widget)); if (handle.enableBlurWindow()) { menu_background_color.setAlphaF(DWindowManagerHelper::instance()->hasBlurWindow() ? 0.6 : menu_background_color.alphaF()); } menu_background_brush.setColor(menu_background_color); } #endif return painter->fillRect(option->rect, menu_background_brush); } case PE_PanelTipLabel: /*fcn = &Style::drawPanelTipLabelPrimitive; break;*/ { painter->fillRect(option->rect, Qt::white); return; } // case PE_PanelItemViewItem: fcn = &Style::drawPanelItemViewItemPrimitive; break; case PE_IndicatorCheckBox: fcn = &Style::drawIndicatorCheckBoxPrimitive; break; case PE_IndicatorRadioButton: fillBrush(painter, option->rect, m_palette->brush(PaletteExtended::RadioButton_BackgroundBrush, option)); return; // case PE_IndicatorButtonDropDown: fcn = &Style::drawIndicatorButtonDropDownPrimitive; break; case PE_IndicatorTabClose: fcn = &Style::drawIndicatorTabClosePrimitive; break; // case PE_IndicatorTabTear: fcn = &Style::drawIndicatorTabTearPrimitive; break; case PE_IndicatorArrowDown: if (isTabBarToolButton(widget)) { QStyleOptionToolButton sotb; sotb.QStyleOption::operator =(*option); sotb.arrowType = Qt::DownArrow; if (Q_LIKELY(drawScrollButtonLabelControl(&sotb, painter, widget))) return; } return drawStandardIcon(QStyle::SP_ArrowDown, option, painter, widget); case PE_IndicatorArrowLeft: if (isTabBarToolButton(widget)) { QStyleOptionToolButton sotb; sotb.QStyleOption::operator =(*option); sotb.arrowType = Qt::LeftArrow; if (Q_LIKELY(drawScrollButtonLabelControl(&sotb, painter, widget))) return; } return drawStandardIcon(QStyle::SP_ArrowLeft, option, painter, widget); case PE_IndicatorArrowRight: if (isTabBarToolButton(widget)) { QStyleOptionToolButton sotb; sotb.QStyleOption::operator =(*option); sotb.arrowType = Qt::RightArrow; if (Q_LIKELY(drawScrollButtonLabelControl(&sotb, painter, widget))) return; } return drawStandardIcon(QStyle::SP_ArrowRight, option, painter, widget); case PE_IndicatorArrowUp: if (isTabBarToolButton(widget)) { QStyleOptionToolButton sotb; sotb.QStyleOption::operator =(*option); sotb.arrowType = Qt::UpArrow; if (Q_LIKELY(drawScrollButtonLabelControl(&sotb, painter, widget))) return; } return drawStandardIcon(QStyle::SP_ArrowUp, option, painter, widget); case PE_IndicatorHeaderArrow: fcn = &Style::drawIndicatorHeaderArrowPrimitive; break; case PE_IndicatorSpinDown: case PE_IndicatorSpinMinus: fillBrush(painter, option->rect, m_palette->brush(PaletteExtended::SpinBox_DownBrush, option)); return; case PE_IndicatorSpinPlus: case PE_IndicatorSpinUp: fillBrush(painter, option->rect, m_palette->brush(PaletteExtended::SpinBox_UpBrush, option)); return; // case PE_IndicatorToolBarHandle: fcn = &Style::drawIndicatorToolBarHandlePrimitive; break; // case PE_IndicatorToolBarSeparator: fcn = &Style::drawIndicatorToolBarSeparatorPrimitive; break; // case PE_IndicatorBranch: fcn = &Style::drawIndicatorBranchPrimitive; break; // case PE_FrameStatusBar: fcn = &Style::emptyPrimitive; break; case PE_Frame: fcn = &Style::drawFramePrimitive; break; // case PE_FrameMenu: fcn = &Style::drawFrameMenuPrimitive; break; case PE_FrameLineEdit: fcn = &Style::drawFrameLineEditPrimitive; break; // case PE_FrameGroupBox: fcn = &Style::drawFrameGroupBoxPrimitive; break; case PE_FrameTabWidget: fcn = &Style::drawFrameTabWidgetPrimitive; break; case PE_FrameTabBarBase: fcn = &Style::drawFrameTabBarBasePrimitive; break; // case PE_FrameWindow: fcn = &Style::drawFrameWindowPrimitive; break; case PE_FrameFocusRect: fcn = &Style::drawFrameFocusRectPrimitive; break; // fallback default: break; } painter->save(); // call function if implemented if( !( fcn && (this->*fcn)( option, painter, widget ) ) ) { QCommonStyle::drawPrimitive( element, option, painter, widget ); } painter->restore(); } int Style::styleHint(QStyle::StyleHint sh, const QStyleOption *opt, const QWidget *w, QStyleHintReturn *shret) const { switch (sh) { case SH_ScrollBar_Transient: return true; case SH_ComboBox_ListMouseTracking: return true; case SH_MenuBar_MouseTracking: return true; case SH_Menu_MouseTracking: return true; case SH_Menu_SubMenuPopupDelay: return 100; case QStyle::SH_Menu_Scrollable: return true; case SH_Menu_SloppySubMenus: return true; #if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) case SH_Menu_SubMenuUniDirection: return 1000; #endif case SH_Slider_AbsoluteSetButtons: return Qt::LeftButton; case SH_Slider_PageSetButtons: return Qt::MidButton; #if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) case SH_Widget_Animate: return true; #endif case QStyle::SH_ItemView_ShowDecorationSelected: return true; case SH_RubberBand_Mask: return 0; case SH_ComboBox_Popup: return true; default: break; } return QCommonStyle::styleHint(sh, opt, w, shret); } QSize Style::sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const { QSize newSize = QCommonStyle::sizeFromContents(type, option, size, widget); switch (type) { case CT_PushButton: if (const QStyleOptionButton *btn = qstyleoption_cast(option)) { const bool flat = btn->features & QStyleOptionButton::Flat; const bool semiTransparent = m_type == StyleSemiDark || m_type == StyleSemiLight; if (!btn->text.isEmpty() && !flat) { if (newSize.width() < 80) newSize.setWidth(80); // QPushButton should be set a minimum height 36 in d-semi-transparent style. if (semiTransparent && newSize.height() < 36) newSize.setHeight(36); } if (!btn->icon.isNull() && btn->iconSize.height() > 16) newSize -= QSize(0, 2); } break; case CT_GroupBox: if (option) { int topMargin = qMax(pixelMetric(PM_ExclusiveIndicatorHeight), option->fontMetrics.height()) + GroupBox_TopMargin; newSize += QSize(10, topMargin); // Add some space below the groupbox } break; case CT_RadioButton: case CT_CheckBox: newSize += QSize(0, 1); break; case CT_ToolButton: newSize += QSize(2, 2); break; case CT_SpinBox: newSize += QSize(0, -3); break; case CT_ComboBox: newSize += QSize(0, -6); break; case CT_LineEdit: newSize += QSize(0, 4); break; case CT_MenuBarItem: newSize += QSize(8, 5); break; case CT_MenuItem: if (const QStyleOptionMenuItem *menuItem = qstyleoption_cast(option)) { int w = newSize.width(); bool hideShortcutText = !isVisibleMenuShortText(); if (hideShortcutText) { w -= menuItem->tabWidth; int t = menuItem->text.indexOf(QLatin1Char('\t')); if (t != -1) { int textWidth = option->fontMetrics.width(menuItem->text.mid(t + 1)); if (menuItem->tabWidth == 0) w -= textWidth; } } int maxpmw = menuItem->maxIconWidth; int tabSpacing = 20; if (menuItem->text.contains(QLatin1Char('\t'))) { if (!hideShortcutText) w += tabSpacing; } else { if (menuItem->menuItemType == QStyleOptionMenuItem::SubMenu) { w += 2 * Menu_ArrowHMargin; } else if (menuItem->menuItemType == QStyleOptionMenuItem::DefaultItem) { QFontMetrics fm(menuItem->font); QFont fontBold = menuItem->font; fontBold.setBold(true); QFontMetrics fmBold(fontBold); w += fmBold.width(menuItem->text) - fm.width(menuItem->text); } } int checkcol = qMax(maxpmw, Menu_CheckMarkWidth); // Windows always shows a check column w += checkcol; w += Menu_RightBorder + 10; newSize.setWidth(w); if (menuItem->menuItemType == QStyleOptionMenuItem::Separator) { if (!menuItem->text.isEmpty()) { newSize.setHeight(menuItem->fontMetrics.height()); } else { newSize.setHeight(newSize.height() + 4); } } else if (!menuItem->icon.isNull()) { if (const QComboBox *combo = qobject_cast(widget)) { newSize.setHeight(qMax(combo->iconSize().height() + 2, newSize.height())); } } newSize.setWidth(newSize.width() + 12); newSize.setWidth(qMax(newSize.width(), 100)); } newSize.setWidth(newSize.width() + Menu_ItemHMargin * 2); newSize.setHeight(newSize.height() + Menu_ItemVMargin * 2 + 1); break; case CT_SizeGrip: newSize += QSize(4, 4); break; case CT_MdiControls: if (const QStyleOptionComplex *styleOpt = qstyleoption_cast(option)) { int width = 0; if (styleOpt->subControls & SC_MdiMinButton) width += 19 + 1; if (styleOpt->subControls & SC_MdiNormalButton) width += 19 + 1; if (styleOpt->subControls & SC_MdiCloseButton) width += 19 + 1; newSize = QSize(width, 19); } else { newSize = QSize(60, 19); } break; default: break; } return newSize; } QIcon Style::standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *opt, const QWidget *widget) const { QIcon icon; const bool rtl = (opt && opt->direction == Qt::RightToLeft) || (!opt && QApplication::isRightToLeft()); QString themeType = m_type == StyleLight ? "light" : "dark"; if (QApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty() && false) { switch (standardIcon) { case SP_DirHomeIcon: icon = QIcon::fromTheme(QLatin1String("user-home")); break; case SP_MessageBoxInformation: icon = QIcon::fromTheme(QLatin1String("dialog-information")); break; case SP_MessageBoxWarning: icon = QIcon::fromTheme(QLatin1String("dialog-warning")); break; case SP_MessageBoxCritical: icon = QIcon::fromTheme(QLatin1String("dialog-error")); break; case SP_MessageBoxQuestion: icon = QIcon::fromTheme(QLatin1String("dialog-question")); break; case SP_DialogOpenButton: case SP_DirOpenIcon: icon = QIcon::fromTheme(QLatin1String("folder-open")); break; case SP_DialogSaveButton: icon = QIcon::fromTheme(QLatin1String("document-save")); break; case SP_DialogApplyButton: icon = QIcon::fromTheme(QLatin1String("dialog-ok-apply")); break; case SP_DialogYesButton: case SP_DialogOkButton: icon = QIcon::fromTheme(QLatin1String("dialog-ok")); break; case SP_DialogDiscardButton: icon = QIcon::fromTheme(QLatin1String("edit-delete")); break; case SP_DialogResetButton: icon = QIcon::fromTheme(QLatin1String("edit-clear")); break; case SP_DialogHelpButton: icon = QIcon::fromTheme(QLatin1String("help-contents")); break; case SP_FileIcon: icon = QIcon::fromTheme(QLatin1String("text-x-generic")); break; case SP_DirClosedIcon: case SP_DirIcon: icon = QIcon::fromTheme(QLatin1String("folder")); break; case SP_DriveFDIcon: icon = QIcon::fromTheme(QLatin1String("floppy_unmount")); break; case SP_ComputerIcon: icon = QIcon::fromTheme(QLatin1String("computer"), QIcon::fromTheme(QLatin1String("system"))); break; case SP_DesktopIcon: icon = QIcon::fromTheme(QLatin1String("user-desktop")); break; case SP_TrashIcon: icon = QIcon::fromTheme(QLatin1String("user-trash")); break; case SP_DriveCDIcon: case SP_DriveDVDIcon: icon = QIcon::fromTheme(QLatin1String("media-optical")); break; case SP_DriveHDIcon: icon = QIcon::fromTheme(QLatin1String("drive-harddisk")); break; case SP_FileDialogToParent: icon = QIcon::fromTheme(QLatin1String("go-up")); break; case SP_FileDialogNewFolder: icon = QIcon::fromTheme(QLatin1String("folder-new")); break; case SP_ArrowUp: icon = QIcon::fromTheme(QLatin1String("go-up")); break; case SP_ArrowDown: icon = QIcon::fromTheme(QLatin1String("go-down")); break; case SP_ArrowRight: icon = QIcon::fromTheme(QLatin1String("go-next")); break; case SP_ArrowLeft: icon = QIcon::fromTheme(QLatin1String("go-previous")); break; case SP_DialogCancelButton: icon = QIcon::fromTheme(QLatin1String("dialog-cancel"), QIcon::fromTheme(QLatin1String("process-stop"))); break; case SP_DialogCloseButton: icon = QIcon::fromTheme(QLatin1String("window-close")); break; case SP_FileDialogDetailedView: icon = QIcon::fromTheme(QLatin1String("view-list-details")); break; case SP_FileDialogListView: icon = QIcon::fromTheme(QLatin1String("view-list-icons")); break; case SP_BrowserReload: icon = QIcon::fromTheme(QLatin1String("view-refresh")); break; case SP_BrowserStop: icon = QIcon::fromTheme(QLatin1String("process-stop")); break; case SP_MediaPlay: icon = QIcon::fromTheme(QLatin1String("media-playback-start")); break; case SP_MediaPause: icon = QIcon::fromTheme(QLatin1String("media-playback-pause")); break; case SP_MediaStop: icon = QIcon::fromTheme(QLatin1String("media-playback-stop")); break; case SP_MediaSeekForward: icon = QIcon::fromTheme(QLatin1String("media-seek-forward")); break; case SP_MediaSeekBackward: icon = QIcon::fromTheme(QLatin1String("media-seek-backward")); break; case SP_MediaSkipForward: icon = QIcon::fromTheme(QLatin1String("media-skip-forward")); break; case SP_MediaSkipBackward: icon = QIcon::fromTheme(QLatin1String("media-skip-backward")); break; case SP_MediaVolume: icon = QIcon::fromTheme(QLatin1String("audio-volume-medium")); break; case SP_MediaVolumeMuted: icon = QIcon::fromTheme(QLatin1String("audio-volume-muted")); break; case SP_ArrowForward: if (rtl) return Style::standardIcon(SP_ArrowLeft, opt, widget); return Style::standardIcon(SP_ArrowRight, opt, widget); case SP_ArrowBack: if (rtl) return Style::standardIcon(SP_ArrowRight, opt, widget); return Style::standardIcon(SP_ArrowLeft, opt, widget); case SP_FileLinkIcon: { QIcon linkIcon = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")); if (!linkIcon.isNull()) { QIcon baseIcon = Style::standardIcon(SP_FileIcon, opt, widget); const QList sizes = baseIcon.availableSizes(QIcon::Normal, QIcon::Off); for (int i = 0 ; i < sizes.size() ; ++i) { int size = sizes[i].width(); QPixmap basePixmap = baseIcon.pixmap(qt_getWindow(widget), QSize(size, size)); QPixmap linkPixmap = linkIcon.pixmap(qt_getWindow(widget), QSize(size / 2, size / 2)); QPainter painter(&basePixmap); painter.drawPixmap(size/2, size/2, linkPixmap); icon.addPixmap(basePixmap); } } } break; case SP_DirLinkIcon: { QIcon linkIcon = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")); if (!linkIcon.isNull()) { QIcon baseIcon = Style::standardIcon(SP_DirIcon, opt, widget); const QList sizes = baseIcon.availableSizes(QIcon::Normal, QIcon::Off); for (int i = 0 ; i < sizes.size() ; ++i) { int size = sizes[i].width(); QPixmap basePixmap = baseIcon.pixmap(qt_getWindow(widget), QSize(size, size)); QPixmap linkPixmap = linkIcon.pixmap(qt_getWindow(widget), QSize(size / 2, size / 2)); QPainter painter(&basePixmap); painter.drawPixmap(size/2, size/2, linkPixmap); icon.addPixmap(basePixmap); } } } break; default: break; } } // if (QApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty()) if (!icon.isNull()) return icon; switch (standardIcon) { case SP_FileDialogNewFolder: break; case SP_FileDialogBack: return Style::standardIcon(SP_ArrowBack, opt, widget); case SP_FileDialogToParent: return Style::standardIcon(SP_ArrowUp, opt, widget); case SP_FileDialogDetailedView: break; case SP_FileDialogInfoView: break; case SP_FileDialogContentsView: break; case SP_FileDialogListView: break; case SP_DialogOkButton: case SP_DialogYesButton: icon.addFile(QLatin1String(":/assets/icons/dialog-apply.png")); break; case SP_DialogCancelButton: case SP_DialogNoButton: icon.addFile(QLatin1String(":/assets/icons/button-cancel.png")); break; case SP_DialogHelpButton: icon.addFile(QLatin1String(":/assets/icons/help-faq.png")); break; case SP_DialogOpenButton: break; case SP_DialogSaveButton: break; case SP_DialogCloseButton: return Style::standardIcon(SP_TitleBarCloseButton, opt, widget); case SP_DialogApplyButton: icon.addFile(QLatin1String(":/assets/icons/dialog-apply.png")); break; case SP_DialogResetButton: break; case SP_DialogDiscardButton: break; case SP_ArrowForward: if (rtl) return Style::standardIcon(SP_ArrowLeft, opt, widget); return Style::standardIcon(SP_ArrowRight, opt, widget); case SP_ArrowBack: if (rtl) return Style::standardIcon(SP_ArrowRight, opt, widget); return Style::standardIcon(SP_ArrowLeft, opt, widget); case SP_ArrowLeft: icon.addFile(QLatin1String(":/assets/icons/arrow-left.png")); break; case SP_ArrowRight: icon.addFile(QLatin1String(":/assets/icons/arrow-right.png")); break; case SP_ArrowUp: icon.addFile(QLatin1String(":/assets/icons/arrow-up.png")); break; case SP_ArrowDown: icon.addFile(QLatin1String(":/assets/icons/arrow-down.png")); break; case SP_DirHomeIcon: icon.addFile(QLatin1String(":/assets/icons/user-home.svg")); break; case SP_DirIcon: icon.addFile(QLatin1String(":/assets/icons/folder.svg")); break; case SP_DirOpenIcon: icon.addFile(QLatin1String(":/assets/icons/folder-open.svg")); break; case SP_DirLinkIcon: { QIcon linkIcon(":/assets/icons/emblem-symbolic-link.png"); QIcon baseIcon = Style::standardIcon(SP_DirIcon, opt, widget); QList sizes; sizes << QSize(128, 128); for (int i = 0 ; i < sizes.size() ; ++i) { int size = sizes[i].width(); QPixmap basePixmap = baseIcon.pixmap(qt_getWindow(widget), QSize(size, size)); QPixmap linkPixmap = linkIcon.pixmap(qt_getWindow(widget), QSize(size / 2, size / 2)); QPainter painter(&basePixmap); painter.drawPixmap(size/1.5, size/1.5, linkPixmap); icon.addPixmap(basePixmap); } break; } case SP_DirLinkOpenIcon: { QIcon linkIcon(":/assets/icons/emblem-symbolic-link.png"); QIcon baseIcon = Style::standardIcon(SP_DirOpenIcon, opt, widget); QList sizes; sizes << QSize(128, 128); for (int i = 0 ; i < sizes.size() ; ++i) { int size = sizes[i].width(); QPixmap basePixmap = baseIcon.pixmap(qt_getWindow(widget), QSize(size, size)); QPixmap linkPixmap = linkIcon.pixmap(qt_getWindow(widget), QSize(size / 2, size / 2)); QPainter painter(&basePixmap); painter.drawPixmap(size/1.5, size/1.5, linkPixmap); icon.addPixmap(basePixmap); } break; } case SP_DriveCDIcon: case SP_DriveDVDIcon: icon.addFile(QLatin1String(":/assets/icons/media-optical.png")); break; case SP_DriveHDIcon: icon.addFile(QLatin1String(":/assets/icons/drive-harddisk.png")); break; case SP_FileIcon: icon.addFile(QLatin1String(":/assets/icons/text-x-generic.svg")); break; case SP_FileLinkIcon: { QIcon linkIcon(":/assets/icons/emblem-symbolic-link.png"); QIcon baseIcon = Style::standardIcon(SP_FileIcon, opt, widget); QList sizes; sizes << QSize(128, 128); for (int i = 0 ; i < sizes.size() ; ++i) { int size = sizes[i].width(); QPixmap basePixmap = baseIcon.pixmap(qt_getWindow(widget), QSize(size, size)); QPixmap linkPixmap = linkIcon.pixmap(qt_getWindow(widget), QSize(size / 2, size / 2)); QPainter painter(&basePixmap); painter.drawPixmap(size/1.5, size/1.5, linkPixmap); icon.addPixmap(basePixmap); } break; } case SP_TrashIcon: icon.addFile(QLatin1String(":/assets/icons/user-trash.svg")); break; case SP_BrowserReload: icon.addFile(QLatin1String(":/assets/icons/view-refresh.png")); break; case SP_BrowserStop: icon.addFile(QLatin1String(":/assets/icons/process-stop.png")); break; case SP_MediaPlay: break; case SP_MediaPause: break; case SP_MediaStop: break; case SP_MediaSeekForward: break; case SP_MediaSeekBackward: break; case SP_MediaSkipForward: break; case SP_MediaSkipBackward: break; case SP_MediaVolume: break; case SP_MediaVolumeMuted: break; case SP_DockWidgetCloseButton: case SP_TitleBarCloseButton: icon.addFile(QString(":/assets/icons/window_close_normal_%1.png").arg(themeType)); icon.addFile(QString(":/assets/icons/window_close_hover_%1.png").arg(themeType), QSize(), QIcon::Active); icon.addFile(QString(":/assets/icons/window_close_press_%1.png").arg(themeType), QSize(), QIcon::Active, QIcon::On); break; case SP_TitleBarMaxButton: icon.addFile(QString(":/assets/icons/window_max_normal_%1.png").arg(themeType)); icon.addFile(QString(":/assets/icons/window_max_hover_%1.png").arg(themeType), QSize(), QIcon::Active); icon.addFile(QString(":/assets/icons/window_max_press_%1.png").arg(themeType), QSize(), QIcon::Active, QIcon::On); break; case SP_TitleBarNormalButton: icon.addFile(QString(":/assets/icons/window_unmax_normal_%1.png").arg(themeType)); icon.addFile(QString(":/assets/icons/window_unmax_hover_%1.png").arg(themeType), QSize(), QIcon::Active); icon.addFile(QString(":/assets/icons/window_unmax_press_%1.png").arg(themeType), QSize(), QIcon::Active, QIcon::On); break; case SP_TitleBarMinButton: icon.addFile(QString(":/assets/icons/window_min_normal_%1.png").arg(themeType)); icon.addFile(QString(":/assets/icons/window_min_hover_%1.png").arg(themeType), QSize(), QIcon::Active); icon.addFile(QString(":/assets/icons/window_min_press_%1.png").arg(themeType), QSize(), QIcon::Active, QIcon::On); break; case SP_TitleBarMenuButton: icon.addFile(QString(":/assets/icons/window_option_normal_%1.png").arg(themeType)); icon.addFile(QString(":/assets/icons/window_option_hover_%1.png").arg(themeType), QSize(), QIcon::Active); icon.addFile(QString(":/assets/icons/window_option_press_%1.png").arg(themeType), QSize(), QIcon::Active, QIcon::On); break; case SP_LineEditClearButton: icon.addFile(QString(":/assets/%1/input/input_clear_normal.svg").arg(themeType), QSize(), QIcon::Normal); icon.addFile(QString(":/assets/%1/input/input_clear_hover.svg").arg(themeType), QSize(), QIcon::Active); icon.addFile(QString(":/assets/%1/input/input_clear_press.svg").arg(themeType), QSize(), QIcon::Selected); break; default: break; } if (!icon.isNull()) return icon; return QCommonStyle::standardIcon(standardIcon, opt, widget); } void Style::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const { if (!qFuzzyCompare(pixmap.devicePixelRatio(), 1.0)) { if (!painter->testRenderHint(QPainter::SmoothPixmapTransform)) { painter->setRenderHint(QPainter::SmoothPixmapTransform); QCommonStyle::drawItemPixmap(painter, rect, alignment, pixmap); painter->setRenderHint(QPainter::SmoothPixmapTransform, false); return; } } QCommonStyle::drawItemPixmap(painter, rect, alignment, pixmap); } bool Style::isTabBarToolButton(const QWidget *button) const { if (Q_UNLIKELY(!button)) return false; if (Q_UNLIKELY(qobject_cast(button->parent()) #ifdef DTKWIDGET_CLASS_DTabBar || qobject_cast(button->parent()) #endif )) { if (auto *b = qobject_cast(button)) { if (b->arrowType() != Qt::NoArrow && b->icon().isNull()) return true; #ifdef DTKWIDGET_CLASS_DTabBar if (qobject_cast(button->parent()) && button->objectName() == "AddButton") return true; #endif } } return false; } void Style::drawStandardIcon(QStyle::StandardPixmap sp, const QStyleOption *opt, QPainter *p, const QWidget *widget) const { if (opt->rect.width() <= 1 || opt->rect.height() <= 1) return; QRect r = opt->rect; int size = qMin(r.height(), r.width()); const bool enabled(opt->state & QStyle::State_Enabled); const bool mouseOver(opt->state & QStyle::State_MouseOver); const bool hasFocus((opt->state & QStyle::State_HasFocus ) && !( widget && widget->focusProxy())); const bool sunken((opt->state | QStyle::State_Sunken) == opt->state); QIcon::Mode mode = QIcon::Normal; if (!enabled) mode = QIcon::Disabled; else if (mouseOver) mode = QIcon::Active; else if (hasFocus) mode = QIcon::Selected; QPixmap pixmap = standardIcon(sp, opt, widget).pixmap(widget ? widget->window()->windowHandle() : 0, QSize(size, size), mode, sunken ? QIcon::On : QIcon::Off); int xOffset = r.x() + (r.width() - size)/2; int yOffset = r.y() + (r.height() - size)/2; p->drawPixmap(xOffset, yOffset, pixmap); } void Style::drawDeepinStyleIcon(const QString &name, const QStyleOption *opt, QPainter *p, const QWidget *widget) const { if (opt->rect.width() <= 1 || opt->rect.height() <= 1) return; QRect r = opt->rect; int size = qMin(r.height(), r.width()); const bool enabled(opt->state & QStyle::State_Enabled); const bool mouseOver(opt->state & QStyle::State_MouseOver); const bool hasFocus((opt->state & QStyle::State_HasFocus ) && !( widget && widget->focusProxy())); const bool selected(opt->state & QStyle::State_Selected); QString icon_state = "_normal"; if (!enabled) icon_state = "_disabled"; else if (mouseOver) icon_state = "_hover"; else if (selected) icon_state = "_selected"; else if (hasFocus) icon_state = "_active"; QString style_name = "light"; if (m_type == StyleDark) style_name = "dark"; else if (m_type == StyleSemiDark) style_name = "semidark"; else if (m_type == StyleSemiLight) style_name = "semilight"; const QStringList formatList = QStringList() << "png" << "svg"; QPixmap pixmap; foreach (const QString &format, formatList) { pixmap = HiDPIHelper::loadPixmap(":/assets/" + style_name + "/" + name + icon_state + "." + format); if (!pixmap.isNull()) break; pixmap = HiDPIHelper::loadPixmap(":/assets/" + style_name + "/" + name + "_normal." + format); if (!pixmap.isNull()) break; } if (pixmap.isNull()) return; int xOffset = r.x() + (r.width() - size)/2; int yOffset = r.y() + (r.height() - size)/2; p->drawPixmap(xOffset, yOffset, pixmap); } QWindow *Style::qt_getWindow(const QWidget *widget) { return widget ? widget->window()->windowHandle() : 0; } QColor Style::mergedColors(const QColor &colorA, const QColor &colorB, int factor) { const int maxFactor = 100; QColor tmp = colorA; tmp.setRed((tmp.red() * factor) / maxFactor + (colorB.red() * (maxFactor - factor)) / maxFactor); tmp.setGreen((tmp.green() * factor) / maxFactor + (colorB.green() * (maxFactor - factor)) / maxFactor); tmp.setBlue((tmp.blue() * factor) / maxFactor + (colorB.blue() * (maxFactor - factor)) / maxFactor); return tmp; } QPixmap Style::colorizedImage(const QString &fileName, const QColor &color, int rotation) { QString pixmapName = QLatin1String("$qt_ia-") % fileName % HexString(color.rgba()) % QString::number(rotation); QPixmap pixmap; if (!QPixmapCache::find(pixmapName, pixmap)) { QImage image(fileName); if (image.format() != QImage::Format_ARGB32_Premultiplied) image = image.convertToFormat( QImage::Format_ARGB32_Premultiplied); int width = image.width(); int height = image.height(); int source = color.rgba(); unsigned char sourceRed = qRed(source); unsigned char sourceGreen = qGreen(source); unsigned char sourceBlue = qBlue(source); for (int y = 0; y < height; ++y) { QRgb *data = (QRgb*) image.scanLine(y); for (int x = 0 ; x < width ; x++) { QRgb col = data[x]; unsigned int colorDiff = (qBlue(col) - qRed(col)); unsigned char gray = qGreen(col); unsigned char red = gray + qt_div_255(sourceRed * colorDiff); unsigned char green = gray + qt_div_255(sourceGreen * colorDiff); unsigned char blue = gray + qt_div_255(sourceBlue * colorDiff); unsigned char alpha = qt_div_255(qAlpha(col) * qAlpha(source)); data[x] = qRgba(std::min(alpha, red), std::min(alpha, green), std::min(alpha, blue), alpha); } } if (rotation != 0) { QTransform transform; transform.translate(-image.width()/2, -image.height()/2); transform.rotate(rotation); transform.translate(image.width()/2, image.height()/2); image = image.transformed(transform); } pixmap = QPixmap::fromImage(image); QPixmapCache::insert(pixmapName, pixmap); } return pixmap; } void Style::fillBrush(QPainter *p, const QRect &rect, const QBrush &brush, qreal rotate) { if (brush.style() == Qt::TexturePattern) { QPixmap pixmap = brush.texture(); qreal device_ratio = pixmap.devicePixelRatio(); if (!qFuzzyCompare(rotate, 0)) { pixmap = pixmap.transformed(QTransform().rotate(rotate)); pixmap.setDevicePixelRatio(device_ratio); } QRectF r = rect; QSizeF pixmap_size = QSizeF(pixmap.size()); if (pixmap_size.width() > rect.width() * device_ratio || pixmap_size.height() > rect.height() * device_ratio) { p->setRenderHint(QPainter::SmoothPixmapTransform); pixmap_size.scale(rect.size() * device_ratio, Qt::KeepAspectRatio); } r.setSize(pixmap_size / device_ratio); r.moveCenter(QRectF(rect).center()); p->drawPixmap(r, pixmap, QRectF(QPointF(0, 0), pixmap.size())); } else { p->fillRect(rect, brush); } } #include "moc_style.cpp" } qt5integration-5.0.0/dstyleplugin/style.h000066400000000000000000000237531347440174500205500ustar00rootroot00000000000000/* * Copyright (C) 2016 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef STYLE_H #define STYLE_H #include #include #include "common.h" namespace dstyle { class PaletteExtended; class StylePrivate; class Style : public QCommonStyle { Q_OBJECT public: explicit Style(StyleType type); ~Style(); void polish(QPalette &p) Q_DECL_OVERRIDE; void polish(QWidget *w) Q_DECL_OVERRIDE; void polish(QApplication *app) Q_DECL_OVERRIDE; void unpolish(QWidget *w) Q_DECL_OVERRIDE; void unpolish(QApplication *app) Q_DECL_OVERRIDE; int pixelMetric(PixelMetric m, const QStyleOption *opt = Q_NULLPTR, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE; QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *w) const Q_DECL_OVERRIDE; QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget) const Q_DECL_OVERRIDE; void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE; void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE; void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE; int styleHint(StyleHint sh, const QStyleOption *opt = Q_NULLPTR, const QWidget *w = Q_NULLPTR, QStyleHintReturn *shret = Q_NULLPTR) const Q_DECL_OVERRIDE; QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const Q_DECL_OVERRIDE; QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt, const QWidget *widget) const Q_DECL_OVERRIDE; void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const Q_DECL_OVERRIDE; // some function type alias. // using SubControlRectFunc = QRect(*)(const QStyleOptionComplex *opt, SubControl sc, const QWidget *w); using DrawComplexControlFunc = bool(Style::*)(const QStyleOptionComplex *, QPainter *, const QWidget *) const; using DrawPrimitiveFunc = bool(Style::*)(const QStyleOption*, QPainter*, const QWidget* ) const; using DrawControlFunc = bool(Style::*)(const QStyleOption*, QPainter*, const QWidget*) const; private: bool isTabBarToolButton(const QWidget *button) const; // frame bool drawFramePrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; bool drawFrameFocusRectPrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; bool drawShapedFrameControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; // push button bool drawPushButtonBevel(const QStyleOption*, QPainter*, const QWidget*) const; bool drawPushButtonLabel(const QStyleOption *, QPainter *, const QWidget *) const; bool drawPushButtonFrame(QPainter* painter, const QRect& rect, const QBrush &color, const QBrush &outline, const QColor& shadow, const QWidget *widget = nullptr) const; // scroll bar QRect scrollbarSubControlRect(const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget ) const; bool drawScrollBarSliderControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; // menu bool drawMenuItemControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; bool isVisibleMenuShortText() const; bool isVisibleMenuIcon() const; bool isVisibleMenuCheckBox() const; // menu bar bool drawMenuBarItemControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; // slider QRect sliderSubControlRect(const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget ) const; bool drawSlider(const QStyleOptionComplex *opt, QPainter *p, const QWidget *w) const; void drawSliderGroove(QPainter*, const QRect&, const QBrush & brush) const; void drawSliderHandle(QPainter* painter, const QStyleOptionSlider *option, const QRect& rect, const QString &type) const; bool drawSliderTickmarkLabels(const QStyleOption*, QPainter*, const QWidget*) const; // check box bool drawIndicatorCheckBoxPrimitive(const QStyleOption*, QPainter*, const QWidget*widget) const; // line edit bool drawFrameLineEditPrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; // indicator void drawStandardIcon(QStyle::StandardPixmap sp, const QStyleOption *opt, QPainter *p, const QWidget *widget) const; void drawDeepinStyleIcon(const QString &name, const QStyleOption *opt, QPainter *p, const QWidget *widget) const; static QWindow *qt_getWindow(const QWidget *widget); static QColor mergedColors(const QColor &colorA, const QColor &colorB, int factor = 50); static QPixmap colorizedImage(const QString &fileName, const QColor &color, int rotation = 0); static void fillBrush(QPainter *p, const QRect &rect, const QBrush &brush, qreal rotate = 0); // progress bar bool drawProgressBarControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; bool drawProgressBarContentsControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; bool drawProgressBarGrooveControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; bool drawProgressBarLabelControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; QRect progressBarLabelRect(const QStyleOption *opt, const QWidget *widget) const; QRect progressBarGrooveRect(const QStyleOption *opt, const QWidget *widget) const; QRect progressBarContentsRect(const QStyleOption *opt, const QWidget *widget) const; // rubber band bool drawRubberBandControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; // header view bool drawIndicatorHeaderArrowPrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const; QRect headerArrowRect(const QStyleOption *opt, const QWidget *widget) const; // combobox void drawComboBoxPopupFramePrimitive(const QStyleOption *option, QPainter *painter) const; bool drawComboBox(const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const; QRect comboBoxSubControlRect(const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget ) const; bool drawComboBoxLabelControl(const QStyleOption *option, QPainter *painter, const QWidget *) const; static bool widgetIsComboBoxPopupFramePrimitive(const QWidget *w); // tool button bool drawToolButtonLabelControl( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const; bool drawPanelButtonToolPrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const; // tab widget bool drawFrameTabWidgetPrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const; // tab bar bool drawFrameTabBarBasePrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const; bool drawTabBarTabLabelControl(const QStyleOption* option, QPainter* p, const QWidget* widget) const; bool drawTabBarTabShapeControl(const QStyleOption* option, QPainter* painter, const QWidget* widget) const; bool drawTabBarAddButtonControl(const QStyleOption* option, QPainter* painter, const QWidget* widget) const; bool drawIndicatorTabClosePrimitive(const QStyleOption *opt, QPainter *p, const QWidget *widget) const; bool drawScrollButtonPrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const; bool drawScrollButtonLabelControl( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const; // spin box bool drawSpinBoxComplexControl( const QStyleOptionComplex* option, QPainter* painter, const QWidget* widget ) const; QRect spinboxSubControlRect(const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const; StyleType m_type; PaletteExtended *m_palette = Q_NULLPTR; friend class SliderHelper; friend class PushButtonHelper; friend class LineEditHelper; friend class FrameHelper; friend class ScrollBarHelper; Q_PRIVATE_SLOT(d_func(), void _q_removeAnimation()) Q_PRIVATE_SLOT(d_func(), void _q_updateAppFont()) Q_DECLARE_PRIVATE(Style) }; class DStyleAnimation; class StylePrivate : public QCommonStylePrivate { public: QColor outline(const QPalette &pal) const; QColor buttonColor(const QPalette &pal) const; QColor highlight(const QPalette &pal) const; QColor highlightedOutline(const QPalette &pal) const; QColor backgroundColor(const QPalette &pal, const QWidget* widget) const; inline QColor innerContrastLine() const { return QColor(255, 255, 255, 30); } inline QColor lightShade() const { return QColor(255, 255, 255, 90); } inline QColor darkShade() const { return QColor(0, 0, 0, 60); } #ifndef QT_NO_ANIMATION DStyleAnimation *animation(const QObject *target) const; void startAnimation(DStyleAnimation *animation) const; void stopAnimation(const QObject *target) const; void _q_removeAnimation(); #endif void _q_updateAppFont(); Q_DECLARE_PUBLIC(Style) private: mutable QHash animations; }; } #endif // STYLE_H qt5integration-5.0.0/dstyleplugin/tabbarhelper.cpp000066400000000000000000000460041347440174500223700ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: zccrs * * Maintainer: zccrs * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "paletteextended.h" #include "painterhelper.h" #include #ifdef DTKWIDGET_CLASS_DTabBar #include DWIDGET_USE_NAMESPACE #endif #include #include #include #include #include #include #include namespace dstyle { static void tabLayout(const QStyle *proxyStyle, const QStyleOptionTab *opt, const QWidget *widget, QRect *textRect, QRect *iconRect) { Q_ASSERT(textRect); Q_ASSERT(iconRect); QRect tr = opt->rect; bool verticalTabs = opt->shape == QTabBar::RoundedEast || opt->shape == QTabBar::RoundedWest || opt->shape == QTabBar::TriangularEast || opt->shape == QTabBar::TriangularWest; if (verticalTabs) tr.setRect(0, 0, tr.height(), tr.width()); //0, 0 as we will have a translate transform int verticalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftVertical, opt, widget); int horizontalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, opt, widget); int hpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabHSpace, opt, widget) / 2; int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt, widget) / 2; if (opt->shape == QTabBar::RoundedSouth || opt->shape == QTabBar::TriangularSouth) verticalShift = -verticalShift; tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding); bool selected = opt->state & QStyle::State_Selected; if (selected) { tr.setTop(tr.top() - verticalShift); tr.setRight(tr.right() - horizontalShift); } // left widget if (!opt->leftButtonSize.isEmpty()) { tr.setLeft(tr.left() + 4 + (verticalTabs ? opt->leftButtonSize.height() : opt->leftButtonSize.width())); } // right widget if (!opt->rightButtonSize.isEmpty()) { tr.setRight(tr.right() - 4 - (verticalTabs ? opt->rightButtonSize.height() : opt->rightButtonSize.width())); } // icon if (!opt->icon.isNull()) { QSize iconSize = opt->iconSize; if (!iconSize.isValid()) { int iconExtent = proxyStyle->pixelMetric(QStyle::PM_SmallIconSize); iconSize = QSize(iconExtent, iconExtent); } QSize tabIconSize = opt->icon.actualSize(iconSize, (opt->state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled, (opt->state & QStyle::State_Selected) ? QIcon::On : QIcon::Off ); // High-dpi icons do not need adjustmet; make sure tabIconSize is not larger than iconSize tabIconSize = QSize(qMin(tabIconSize.width(), iconSize.width()), qMin(tabIconSize.height(), iconSize.height())); *iconRect = QRect(tr.left(), tr.center().y() - tabIconSize.height() / 2, tabIconSize.width(), tabIconSize .height()); if (!verticalTabs) *iconRect = proxyStyle->visualRect(opt->direction, opt->rect, *iconRect); tr.setLeft(tr.left() + tabIconSize.width() + 4); } if (!verticalTabs) tr = proxyStyle->visualRect(opt->direction, opt->rect, tr); *textRect = tr; } bool Style::drawFrameTabBarBasePrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const { Q_UNUSED(widget) auto opt = static_cast(option); PainterHelper::drawRect(painter, opt->tabBarRect, m_palette->brush(PaletteExtended::TabBar_BackgroundBrush, option), 1, m_palette->brush(PaletteExtended::TabBar_BorderBrush, option)); return true; } const QWidget *findDTabBar(const QWidget *widget) { do { if (qobject_cast(widget)) return widget; widget = widget->parentWidget(); } while(widget); return nullptr; } bool Style::drawTabBarTabLabelControl(const QStyleOption *opt, QPainter *p, const QWidget *widget) const { auto tab = static_cast(opt); QRect tr = tab->rect; bool verticalTabs = tab->shape == QTabBar::RoundedEast || tab->shape == QTabBar::RoundedWest || tab->shape == QTabBar::TriangularEast || tab->shape == QTabBar::TriangularWest; int alignment = Qt::AlignCenter | Qt::TextShowMnemonic; if (!proxy()->styleHint(SH_UnderlineShortcut, opt, widget)) alignment |= Qt::TextHideMnemonic; if (verticalTabs) { p->save(); int newX, newY, newRot; if (tab->shape == QTabBar::RoundedEast || tab->shape == QTabBar::TriangularEast) { newX = tr.width() + tr.x(); newY = tr.y(); newRot = 90; } else { newX = tr.x(); newY = tr.y() + tr.height(); newRot = -90; } QTransform m = QTransform::fromTranslate(newX, newY); m.rotate(newRot); p->setTransform(m, true); } QRect iconRect; tabLayout(proxy(), tab, widget, &tr, &iconRect); tr = proxy()->subElementRect(SE_TabBarTabText, opt, widget); //we compute tr twice because the style may override subElementRect if (!tab->icon.isNull()) { QPixmap tabIcon = tab->icon.pixmap(qt_getWindow(widget), tab->iconSize, (tab->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled, (tab->state & State_Selected) ? QIcon::On : QIcon::Off); p->drawPixmap(iconRect.x(), iconRect.y(), tabIcon); } bool visible_close_button = false; if (const QTabBar *tb = qobject_cast(widget)) { visible_close_button = tb->tabsClosable(); } #ifdef DTKWIDGET_CLASS_DTabBar if (const DTabBar *tb = qobject_cast(widget)) { visible_close_button = tb->tabsClosable(); } visible_close_button = visible_close_button && (opt->state & QStyle::State_MouseOver); #endif QBrush text_brush; // TODO(zccrs): 临时解决方案,用于支持应用程序中自定义DTabBar的被选中Tab的文本颜色 const QWidget *tab_bar = findDTabBar(widget); if (opt->state.testFlag(QStyle::State_Selected) && tab_bar) { text_brush = tab_bar->palette().brush(QPalette::Active, QPalette::Text); } else { text_brush = m_palette->brush(PaletteExtended::TabBarTab_TextColor, opt); } if (visible_close_button) { QRect text_rect = opt->fontMetrics.boundingRect(tr, alignment, tab->text); const QBrush &brush = text_brush; QLinearGradient lg(0, 0, 1, 0); QGradientStops stops; qreal stop = qreal(tr.right() - 35 - text_rect.x()) / text_rect.width(); stops << QGradientStop{0, brush.color()}; stops << QGradientStop{stop, brush.color()}; stops << QGradientStop{stop, QColor(brush.color().red(), brush.color().green(), brush.color().blue(), 200)}; stops << QGradientStop{1, Qt::transparent}; lg.setCoordinateMode(QLinearGradient::ObjectBoundingMode); lg.setStops(stops); p->setPen(QPen(QBrush(lg), 1)); } else { p->setPen(QPen(text_brush, 1)); } p->drawText(tr, alignment, tab->text); if (verticalTabs) p->restore(); if (tab->state & State_HasFocus) { const int OFFSET = 1 + pixelMetric(PM_DefaultFrameWidth); int x1, x2; x1 = tab->rect.left(); x2 = tab->rect.right() - 1; QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*tab); fropt.rect.setRect(x1 + 1 + OFFSET, tab->rect.y() + OFFSET, x2 - x1 - 2*OFFSET, tab->rect.height() - 2*OFFSET); drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); } return true; } bool Style::drawTabBarTabShapeControl(const QStyleOption *opt, QPainter *p, const QWidget *widget) const { auto tab = static_cast(opt); p->save(); QRect rect(tab->rect); bool selected = tab->state & State_Selected; bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab; int tabOverlap = onlyOne ? 0 : proxy()->pixelMetric(PM_TabBarTabOverlap, opt, widget); if (!selected) { switch (tab->shape) { case QTabBar::TriangularNorth: rect.adjust(0, 0, 0, -tabOverlap); if(!selected) rect.adjust(1, 1, -1, 0); break; case QTabBar::TriangularSouth: rect.adjust(0, tabOverlap, 0, 0); if(!selected) rect.adjust(1, 0, -1, -1); break; case QTabBar::TriangularEast: rect.adjust(tabOverlap, 0, 0, 0); if(!selected) rect.adjust(0, 1, -1, -1); break; case QTabBar::TriangularWest: rect.adjust(0, 0, -tabOverlap, 0); if(!selected) rect.adjust(1, 1, 0, -1); break; default: break; } } p->setPen(QPen(m_palette->brush(PaletteExtended::TabBarTab_BorderBrush, opt), 0)); p->setBrush(m_palette->brush(PaletteExtended::TabBarTab_BackgroundBrush, opt)); // if (selected) { // p->setBrush(tab->palette.base()); // } else { // if (widget && widget->parentWidget()) // p->setBrush(widget->parentWidget()->palette().background()); // else // p->setBrush(tab->palette.background()); // } int y; int x; QPolygon a(10); switch (tab->shape) { case QTabBar::TriangularNorth: case QTabBar::TriangularSouth: { a.setPoint(0, 0, -1); a.setPoint(1, 0, 0); y = rect.height() - 2; x = y / 3; a.setPoint(2, x++, y - 1); ++x; a.setPoint(3, x++, y++); a.setPoint(4, x, y); int i; int right = rect.width() - 1; for (i = 0; i < 5; ++i) a.setPoint(9 - i, right - a.point(i).x(), a.point(i).y()); if (tab->shape == QTabBar::TriangularNorth) for (i = 0; i < 10; ++i) a.setPoint(i, a.point(i).x(), rect.height() - 1 - a.point(i).y()); a.translate(rect.left(), rect.top()); p->setRenderHint(QPainter::Antialiasing); p->translate(0, 0.5); QPainterPath path; path.addPolygon(a); p->drawPath(path); break; } case QTabBar::TriangularEast: case QTabBar::TriangularWest: { a.setPoint(0, -1, 0); a.setPoint(1, 0, 0); x = rect.width() - 2; y = x / 3; a.setPoint(2, x - 1, y++); ++y; a.setPoint(3, x++, y++); a.setPoint(4, x, y); int i; int bottom = rect.height() - 1; for (i = 0; i < 5; ++i) a.setPoint(9 - i, a.point(i).x(), bottom - a.point(i).y()); if (tab->shape == QTabBar::TriangularWest) for (i = 0; i < 10; ++i) a.setPoint(i, rect.width() - 1 - a.point(i).x(), a.point(i).y()); a.translate(rect.left(), rect.top()); p->setRenderHint(QPainter::Antialiasing); p->translate(0.5, 0); QPainterPath path; path.addPolygon(a); p->drawPath(path); break; } case QTabBar::RoundedNorth: case QTabBar::RoundedSouth: { const QRect &border_rect = tab->rect.adjusted(0, 0, 1, 1); p->fillRect(tab->rect, p->brush()); if (tab->position != QStyleOptionTab::Beginning && tab->position != QStyleOptionTab::OnlyOneTab) { p->drawLine(border_rect.topLeft(), border_rect.bottomLeft()); } if (Q_UNLIKELY(selected)) { QRect active_rect = tab->rect; if (Q_LIKELY(tab->shape == QTabBar::RoundedNorth)) { active_rect.setTop(active_rect.bottom() - qMin(3, active_rect.height() / 10) + 1); } else { active_rect.setBottom(active_rect.top() + qMin(3, active_rect.height() / 10) + 1); } // TODO(zccrs): 临时解决方案,用于支持应用程序中自定义DTabBar的被选中Tab的文本颜色 if (const QWidget *tab_bar = findDTabBar(widget)) p->fillRect(active_rect, tab_bar->palette().brush(QPalette::Active, QPalette::Text)); else p->fillRect(active_rect, m_palette->brush(PaletteExtended::TabBarTab_ActiveColor, opt)); } break; } case QTabBar::RoundedEast: case QTabBar::RoundedWest: { const QRect &border_rect = tab->rect.adjusted(0, 0, 1, 1); p->fillRect(tab->rect, p->brush()); if (tab->position != QStyleOptionTab::Beginning && tab->position != QStyleOptionTab::OnlyOneTab) { p->drawLine(border_rect.topLeft(), border_rect.topRight()); } if (Q_UNLIKELY(selected)) { QRect active_rect = tab->rect; if (Q_LIKELY(tab->shape == QTabBar::RoundedWest)) { active_rect.setLeft(active_rect.right() - qMin(3, active_rect.width() / 10) + 1); } else { active_rect.setRight(active_rect.left() + qMin(3, active_rect.width() / 10) + 1); } // TODO(zccrs): 临时解决方案,用于支持应用程序中自定义DTabBar的被选中Tab的文本颜色 if (const QWidget *tab_bar = findDTabBar(widget)) p->fillRect(active_rect, tab_bar->palette().brush(QPalette::Active, QPalette::Text)); else p->fillRect(active_rect, m_palette->brush(PaletteExtended::TabBarTab_ActiveColor, opt)); } break; } } p->restore(); return true; } bool Style::drawTabBarAddButtonControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { painter->fillRect(option->rect, m_palette->brush(PaletteExtended::TabBarAddButton_BackgroundBrush, option)); fillBrush(painter, option->rect, m_palette->brush(widget, PaletteExtended::TabBarAddButton_Icon, option)); #ifdef DTKWIDGET_CLASS_DTabBar if (const DTabBar *tb = qobject_cast(widget->parent())) { painter->setPen(QPen(m_palette->brush(PaletteExtended::TabBarTab_BorderBrush, option), 1)); QRectF rect = QRectF(option->rect).adjusted(0.5, 0.5, 1, 1); switch (tb->shape()) { case QTabBar::RoundedNorth: case QTabBar::RoundedSouth: painter->drawLine(rect.topLeft(), rect.bottomLeft()); break; case QTabBar::RoundedEast: case QTabBar::RoundedWest: painter->drawLine(rect.topLeft(), rect.topRight()); break; default: break; } } #endif return true; } class DQTabBar : public QTabBar { friend class Style; }; bool Style::drawIndicatorTabClosePrimitive(const QStyleOption *opt, QPainter *p, const QWidget *widget) const { const QTabBar *tb = qobject_cast(widget->parent()); if (!tb) { if (const QWidget *w = dynamic_cast(p->device())) widget = w; tb = qobject_cast(widget->parent()); } if (Q_UNLIKELY(!tb)) return false; int index = -1; for (int i = 0; i < tb->count(); ++i) { if (Q_LIKELY(tb->tabButton(i, QTabBar::LeftSide) != widget && tb->tabButton(i, QTabBar::RightSide) != widget)) { continue; } index = i; break; } if (Q_UNLIKELY(index < 0)) return true; QStyleOptionTab tab; static_cast(tb)->initStyleOption(&tab, index); if (Q_LIKELY((tab.state | QStyle::State_MouseOver) != tab.state // 关闭标签时标签栏会重新布局,此时鼠标没有移动,但是标签item相对于鼠标的位置发生了变化 // 如果鼠标落在了标签页关闭按钮右边位置,则这个标签页的state中不会包含MouseOver状态 && !tb->tabRect(index).contains(tb->mapFromGlobal(QCursor::pos())))) { return true; } fillBrush(p, opt->rect, m_palette->brush(PaletteExtended::TabBarTab_CloseIcon, opt)); return true; } bool Style::drawScrollButtonPrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { fillBrush(painter, option->rect, m_palette->brush(PaletteExtended::TabBarScrollButton_BackgroundBrush, option)); #ifdef DTKWIDGET_CLASS_DTabBar if (const DTabBar *tb = qobject_cast(widget->parent())) { if (const QToolButton *button = qobject_cast(widget)) { if (button->arrowType() == Qt::LeftArrow || button->arrowType() == Qt::UpArrow) return true; } else { return true; } painter->setPen(QPen(m_palette->brush(PaletteExtended::TabBarTab_BorderBrush, option), 1)); QRectF rect = QRectF(option->rect).adjusted(0.5, 0.5, 0, 0); switch (tb->shape()) { case QTabBar::RoundedNorth: case QTabBar::RoundedSouth: painter->drawLine(rect.topRight(), rect.bottomRight()); break; case QTabBar::RoundedEast: case QTabBar::RoundedWest: painter->drawLine(rect.bottomLeft(), rect.bottomRight()); break; default: break; } } #endif return true; } bool Style::drawScrollButtonLabelControl(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { const QStyleOptionToolButton* toolButtonOption( qstyleoption_cast(option) ); switch( toolButtonOption->arrowType ) { case Qt::LeftArrow: fillBrush(painter, option->rect, m_palette->brush(widget, PaletteExtended::TabBarScrollButton_UpIcon, option)); break; case Qt::RightArrow: fillBrush(painter, option->rect, m_palette->brush(widget, PaletteExtended::TabBarScrollButton_DownIcon, option)); break; case Qt::UpArrow: fillBrush(painter, option->rect, m_palette->brush(widget, PaletteExtended::TabBarScrollButton_UpIcon, option), 90); break; case Qt::DownArrow: fillBrush(painter, option->rect, m_palette->brush(widget, PaletteExtended::TabBarScrollButton_DownIcon, option), 90); break; default: break; } return true; } } qt5integration-5.0.0/dstyleplugin/tabwidgethelper.cpp000066400000000000000000000127701347440174500231120ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "geometryutils.h" #include "painterhelper.h" #include #include #include namespace dstyle { bool Style::drawFrameTabWidgetPrimitive( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const { Q_UNUSED(widget) // cast option and check const QStyleOptionTabWidgetFrameV2* tabOption( qstyleoption_cast( option ) ); if( !tabOption ) return true; // do nothing if tabbar is hidden const bool isQtQuickControl( false ); if( tabOption->tabBarSize.isEmpty() && !isQtQuickControl ) return true; // adjust rect to handle overlaps QRect rect( option->rect ); const QRect tabBarRect( tabOption->tabBarRect ); const QSize tabBarSize( tabOption->tabBarSize ); Corners corners = AllCorners; // adjust corners to deal with oversized tabbars switch( tabOption->shape ) { case QTabBar::RoundedNorth: case QTabBar::TriangularNorth: if( isQtQuickControl ) rect.adjust( -1, -1, 1, 0 ); if( tabBarSize.width() >= rect.width() - 2*Metrics::Frame_FrameRadius ) corners &= ~CornersTop; if( tabBarRect.left() < rect.left() + Metrics::Frame_FrameRadius ) corners &= ~CornerTopLeft; if( tabBarRect.right() > rect.right() - Metrics::Frame_FrameRadius ) corners &= ~CornerTopRight; break; case QTabBar::RoundedSouth: case QTabBar::TriangularSouth: if( isQtQuickControl ) rect.adjust( -1, 0, 1, 1 ); if( tabBarSize.width() >= rect.width()-2*Metrics::Frame_FrameRadius ) corners &= ~CornersBottom; if( tabBarRect.left() < rect.left() + Metrics::Frame_FrameRadius ) corners &= ~CornerBottomLeft; if( tabBarRect.right() > rect.right() - Metrics::Frame_FrameRadius ) corners &= ~CornerBottomRight; break; case QTabBar::RoundedWest: case QTabBar::TriangularWest: if( isQtQuickControl ) rect.adjust( -1, 0, 0, 0 ); if( tabBarSize.height() >= rect.height()-2*Metrics::Frame_FrameRadius ) corners &= ~CornersLeft; if( tabBarRect.top() < rect.top() + Metrics::Frame_FrameRadius ) corners &= ~CornerTopLeft; if( tabBarRect.bottom() > rect.bottom() - Metrics::Frame_FrameRadius ) corners &= ~CornerBottomLeft; break; case QTabBar::RoundedEast: case QTabBar::TriangularEast: if( isQtQuickControl ) rect.adjust( 0, 0, 1, 0 ); if( tabBarSize.height() >= rect.height()-2*Metrics::Frame_FrameRadius ) corners &= ~CornersRight; if( tabBarRect.top() < rect.top() + Metrics::Frame_FrameRadius ) corners &= ~CornerTopRight; if( tabBarRect.bottom() > rect.bottom() - Metrics::Frame_FrameRadius ) corners &= ~CornerBottomRight; break; default: break; } // define colors // const QPalette& palette( option->palette ); const QColor background; const QColor outline( Qt::gray ); painter->setRenderHint( QPainter::Antialiasing ); QRectF frameRect( rect.adjusted( 1, 1, -1, -1 ) ); qreal radius( GeometryUtils::frameRadius() ); // set pen if( outline.isValid() ) { painter->setPen( outline ); frameRect.adjust( 0.5, 0.5, -0.5, -0.5 ); radius = qMax( radius-1, qreal( 0.0 ) ); } else painter->setPen( Qt::NoPen ); // set brush if( background.isValid() ) painter->setBrush( background ); else painter->setBrush( Qt::NoBrush ); // render QPainterPath path( PainterHelper::roundedPath( frameRect, corners, radius ) ); QWidget *current_widget = qobject_cast(widget)->currentWidget(); QColor fill_color = painter->pen().color(); fill_color.setAlphaF(0.2); fill_color = PainterHelper::colorBlend(option->palette.color(QPalette::Window), fill_color); if (current_widget) { painter->fillPath(path, fill_color); QPainterPath inside_path; QRectF rect = current_widget->parentWidget()->geometry(); inside_path.addRoundedRect(rect.adjusted(5.5, 5.5, -5.5, -5.5), radius, radius); painter->fillPath(inside_path, option->palette.color(QPalette::Window)); painter->drawPath(inside_path); } QRectF selectedTabRect = QRectF(tabOption->selectedTabRect).adjusted(1.5, 0.5, -0.5, -0.5); QPainterPath selectedtabBarButtonPath(PainterHelper::roundedPath(selectedTabRect, CornerTopLeft | CornerTopRight, radius)); QPainterPath tabBarButtonPath; tabBarButtonPath.addRoundedRect(tabOption->tabBarRect.adjusted(1, 0, -1, 0), radius, radius); painter->fillPath(tabBarButtonPath, Qt::gray); painter->drawPath( path ); painter->fillPath(selectedtabBarButtonPath, fill_color); painter->drawPath(selectedtabBarButtonPath); painter->setPen(fill_color); selectedTabRect.adjust(1, 0, -1, 0); painter->drawLine(selectedTabRect.bottomLeft(), selectedTabRect.bottomRight()); return true; } } qt5integration-5.0.0/dstyleplugin/toolbuttonhelper.cpp000066400000000000000000000166771347440174500233630ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "style.h" #include "paletteextended.h" #include #include namespace dstyle { //* centering QRect centerRect(const QRect &rect, int width, int height) { return QRect(rect.left() + (rect.width() - width)/2, rect.top() + (rect.height() - height)/2, width, height); } QRect centerRect(const QRect &rect, const QSize& size ) { return centerRect( rect, size.width(), size.height() ); } bool Style::drawToolButtonLabelControl( const QStyleOption* option, QPainter* painter, const QWidget* widget ) const { if (isTabBarToolButton(widget)) { return drawScrollButtonLabelControl(option, painter, widget); } // cast option and check const QStyleOptionToolButton* toolButtonOption( qstyleoption_cast(option) ); // copy rect and palette const QRect& rect = option->rect; const QPalette& palette = option->palette; // state const State& state( option->state ); const bool enabled( state & State_Enabled ); const bool sunken( state & (State_On | State_Sunken) ); const bool mouseOver( enabled && (option->state & State_MouseOver) ); const bool flat( state & State_AutoRaise ); // focus flag is set to match the background color in either renderButtonFrame or renderToolButtonFrame bool hasFocus( false ); if( flat ) hasFocus = enabled && !mouseOver && (option->state & State_HasFocus); else hasFocus = enabled && !mouseOver && (option->state & (State_HasFocus|State_Sunken) ); const bool hasArrow( toolButtonOption->features & QStyleOptionToolButton::Arrow ); const bool hasIcon( !( hasArrow || toolButtonOption->icon.isNull() ) ); const bool hasText( !toolButtonOption->text.isEmpty() ); // contents QRect contentsRect( rect ); if( sunken && !flat ) contentsRect.translate( 1, 1 ); // icon size const QSize iconSize( toolButtonOption->iconSize ); // text size int textFlags( Qt::TextHideMnemonic ); const QSize textSize( option->fontMetrics.size( textFlags, toolButtonOption->text ) ); // adjust text and icon rect based on options QRect iconRect; QRect textRect; if( hasText && ( !(hasArrow||hasIcon) || toolButtonOption->toolButtonStyle == Qt::ToolButtonTextOnly ) ) { // text only textRect = contentsRect; textFlags |= Qt::AlignCenter; } else if( (hasArrow||hasIcon) && (!hasText || toolButtonOption->toolButtonStyle == Qt::ToolButtonIconOnly ) ) { // icon only iconRect = contentsRect; } else if( toolButtonOption->toolButtonStyle == Qt::ToolButtonTextUnderIcon ) { const int contentsHeight( iconSize.height() + textSize.height() + Metrics::ToolButton_ItemSpacing ); iconRect = QRect( QPoint( contentsRect.left() + (contentsRect.width() - iconSize.width())/2, contentsRect.top() + (contentsRect.height() - contentsHeight)/2 ), iconSize ); textRect = QRect( QPoint( contentsRect.left() + (contentsRect.width() - textSize.width())/2, iconRect.bottom() + Metrics::ToolButton_ItemSpacing + 1 ), textSize ); textFlags |= Qt::AlignCenter; } else { const int contentsWidth( iconSize.width() + textSize.width() + Metrics::ToolButton_ItemSpacing ); iconRect = QRect( QPoint( contentsRect.left() + (contentsRect.width() - contentsWidth )/2, contentsRect.top() + (contentsRect.height() - iconSize.height())/2 ), iconSize ); textRect = QRect( QPoint( iconRect.right() + Metrics::ToolButton_ItemSpacing + 1, contentsRect.top() + (contentsRect.height() - textSize.height())/2 ), textSize ); // handle right to left layouts iconRect = visualRect( option->direction, option->rect, iconRect ); textRect = visualRect( option->direction, option->rect, textRect ); textFlags |= Qt::AlignLeft | Qt::AlignVCenter; } // make sure there is enough room for icon if( iconRect.isValid() ) iconRect = centerRect( iconRect, iconSize ); // render arrow or icon if( hasArrow && iconRect.isValid() ) { QStyleOptionToolButton copy( *toolButtonOption ); copy.rect = iconRect; switch( toolButtonOption->arrowType ) { case Qt::LeftArrow: drawPrimitive( PE_IndicatorArrowLeft, ©, painter, widget ); break; case Qt::RightArrow: drawPrimitive( PE_IndicatorArrowRight, ©, painter, widget ); break; case Qt::UpArrow: drawPrimitive( PE_IndicatorArrowUp, ©, painter, widget ); break; case Qt::DownArrow: drawPrimitive( PE_IndicatorArrowDown, ©, painter, widget ); break; default: break; } } else if( hasIcon && iconRect.isValid() ) { // icon state and mode const QIcon::State iconState( sunken ? QIcon::On : QIcon::Off ); QIcon::Mode iconMode; if( !enabled ) iconMode = QIcon::Disabled; else if( !flat && hasFocus ) iconMode = QIcon::Selected; else if( mouseOver && flat ) iconMode = QIcon::Active; else iconMode = QIcon::Normal; const QPixmap pixmap = toolButtonOption->icon.pixmap( iconSize, iconMode, iconState ); drawItemPixmap( painter, iconRect, Qt::AlignCenter, pixmap ); } // render text if( hasText && textRect.isValid() ) { QPalette::ColorRole textRole( QPalette::ButtonText ); if( flat ) textRole = (hasFocus&&sunken&&!mouseOver) ? QPalette::HighlightedText: QPalette::WindowText; else if( mouseOver ) textRole = QPalette::HighlightedText; painter->setFont(toolButtonOption->font); drawItemText( painter, textRect, textFlags, palette, enabled, toolButtonOption->text, textRole ); } return true; } bool Style::drawPanelButtonToolPrimitive(const QStyleOption *option, QPainter *painter, const QWidget *widget) const { if (isTabBarToolButton(widget)) { return drawScrollButtonPrimitive(option, painter, widget); } // rect and palette const QRect& rect( option->rect ); // update animation state // mouse over takes precedence over focus // TODO(hualet): update button color from palette in case button is default const QColor shadow( Qt::transparent ); const QBrush outline(m_palette->brush(PaletteExtended::PushButton_BorderBrush, option)); const QBrush background(m_palette->brush(PaletteExtended::PushButton_BackgroundBrush, option)); // render drawPushButtonFrame(painter, rect, background, outline, shadow, widget); // if (buttonOption->features & QStyleOptionButton::HasMenu) { // int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, buttonOption, widget); // QRect ir = buttonOption->rect; // QStyleOption newBtn = *option; // newBtn.rect = QRect(ir.right() - mbi + 2, ir.height()/2 - mbi/2 + 3, mbi - 6, mbi - 6); // proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, painter, widget); // } return true; } } qt5integration-5.0.0/iconengineplugins/000077500000000000000000000000001347440174500202225ustar00rootroot00000000000000qt5integration-5.0.0/iconengineplugins/iconengines.pro000066400000000000000000000000551347440174500232450ustar00rootroot00000000000000TEMPLATE = subdirs SUBDIRS += svgiconengine qt5integration-5.0.0/iconengineplugins/svgiconengine/000077500000000000000000000000001347440174500230605ustar00rootroot00000000000000qt5integration-5.0.0/iconengineplugins/svgiconengine/main.cpp000066400000000000000000000054011347440174500245100ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include "qsvgiconengine.h" #include #include #include QT_BEGIN_NAMESPACE class QSvgIconPlugin : public QIconEnginePlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QIconEngineFactoryInterface" FILE "qsvgiconengine.json") public: QStringList keys() const; QIconEngine *create(const QString &filename = QString()); }; QStringList QSvgIconPlugin::keys() const { QStringList keys(QLatin1String("svg")); #ifndef QT_NO_COMPRESS keys << QLatin1String("svgz") << QLatin1String("svg.gz"); #endif return keys; } QIconEngine *QSvgIconPlugin::create(const QString &file) { QSvgIconEngine *engine = new QSvgIconEngine; if (!file.isNull()) engine->addFile(file, QSize(), QIcon::Normal, QIcon::Off); return engine; } QT_END_NAMESPACE #include "main.moc" qt5integration-5.0.0/iconengineplugins/svgiconengine/qsvgiconengine.cpp000066400000000000000000000271011347440174500266040ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qsvgiconengine.h" #ifndef QT_NO_SVGRENDERER #include "qpainter.h" #include "qpixmap.h" #include "qpixmapcache.h" #include "qfileinfo.h" #include #include #include #include "qdebug.h" #include #include DWIDGET_USE_NAMESPACE QT_BEGIN_NAMESPACE class QSvgIconEnginePrivate : public QSharedData { public: QSvgIconEnginePrivate() : svgBuffers(0), addedPixmaps(0) { stepSerialNum(); } ~QSvgIconEnginePrivate() { delete addedPixmaps; delete svgBuffers; } static int hashKey(QIcon::Mode mode, QIcon::State state) { return (((mode)<<4)|state); } QString pmcKey(const QSize &size, QIcon::Mode mode, QIcon::State state) { return QLatin1String("$qt_svgicon_") + QString::number(serialNum, 16).append(QLatin1Char('_')) + QString::number((((((qint64(size.width()) << 11) | size.height()) << 11) | mode) << 4) | state, 16); } void stepSerialNum() { serialNum = lastSerialNum.fetchAndAddRelaxed(1); } void loadDataForModeAndState(DSvgRenderer *renderer, QIcon::Mode mode, QIcon::State state); QHash svgFiles; QHash *svgBuffers; QHash *addedPixmaps; int serialNum; static QAtomicInt lastSerialNum; }; QAtomicInt QSvgIconEnginePrivate::lastSerialNum; QSvgIconEngine::QSvgIconEngine() : d(new QSvgIconEnginePrivate) { } QSvgIconEngine::QSvgIconEngine(const QSvgIconEngine &other) : QIconEngine(other), d(new QSvgIconEnginePrivate) { d->svgFiles = other.d->svgFiles; if (other.d->svgBuffers) d->svgBuffers = new QHash(*other.d->svgBuffers); if (other.d->addedPixmaps) d->addedPixmaps = new QHash(*other.d->addedPixmaps); } QSvgIconEngine::~QSvgIconEngine() { } QSize QSvgIconEngine::actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) { if (d->addedPixmaps) { QPixmap pm = d->addedPixmaps->value(d->hashKey(mode, state)); if (!pm.isNull() && pm.size() == size) return size; } QPixmap pm = pixmap(size, mode, state); if (pm.isNull()) return QSize(); return pm.size(); } void QSvgIconEnginePrivate::loadDataForModeAndState(DSvgRenderer *renderer, QIcon::Mode mode, QIcon::State state) { QByteArray buf; const QIcon::State oppositeState = state == QIcon::Off ? QIcon::On : QIcon::Off; if (svgBuffers) { buf = svgBuffers->value(hashKey(mode, state)); if (buf.isEmpty()) buf = svgBuffers->value(hashKey(QIcon::Normal, state)); if (buf.isEmpty()) buf = svgBuffers->value(hashKey(QIcon::Normal, oppositeState)); } if (!buf.isEmpty()) { #ifndef QT_NO_COMPRESS buf = qUncompress(buf); #endif renderer->load(buf); } else { QString svgFile = svgFiles.value(hashKey(mode, state)); if (svgFile.isEmpty()) svgFile = svgFiles.value(hashKey(QIcon::Normal, state)); if (svgFile.isEmpty()) svgFile = svgFiles.value(hashKey(QIcon::Normal, oppositeState)); if (!svgFile.isEmpty()) renderer->load(svgFile); } } QPixmap QSvgIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) { QPixmap pm; QString pmckey(d->pmcKey(size, mode, state)); if (QPixmapCache::find(pmckey, pm)) return pm; if (d->addedPixmaps) { pm = d->addedPixmaps->value(d->hashKey(mode, state)); if (!pm.isNull() && pm.size() == size) return pm; } DSvgRenderer renderer; d->loadDataForModeAndState(&renderer, mode, state); if (!renderer.isValid()) return pm; QSize actualSize = renderer.defaultSize(); if (!actualSize.isNull()) actualSize.scale(size, Qt::KeepAspectRatio); if (actualSize.isEmpty()) return QPixmap(); pm = QPixmap::fromImage(renderer.toImage(actualSize)); if (qobject_cast(QCoreApplication::instance())) { const QPixmap generated = QGuiApplicationPrivate::instance()->applyQIconStyleHelper(mode, pm); if (!generated.isNull()) pm = generated; } if (!pm.isNull()) QPixmapCache::insert(pmckey, pm); return pm; } void QSvgIconEngine::addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state) { if (!d->addedPixmaps) d->addedPixmaps = new QHash; d->stepSerialNum(); d->addedPixmaps->insert(d->hashKey(mode, state), pixmap); } enum FileType { OtherFile, SvgFile, CompressedSvgFile }; static FileType fileType(const QFileInfo &fi) { const QString &abs = fi.absoluteFilePath(); if (abs.endsWith(QLatin1String(".svg"), Qt::CaseInsensitive)) return SvgFile; if (abs.endsWith(QLatin1String(".svgz"), Qt::CaseInsensitive) || abs.endsWith(QLatin1String(".svg.gz"), Qt::CaseInsensitive)) { return CompressedSvgFile; } #ifndef QT_NO_MIMETYPE const QString &mimeTypeName = QMimeDatabase().mimeTypeForFile(fi).name(); if (mimeTypeName == QLatin1String("image/svg+xml")) return SvgFile; if (mimeTypeName == QLatin1String("image/svg+xml-compressed")) return CompressedSvgFile; #endif // !QT_NO_MIMETYPE return OtherFile; } void QSvgIconEngine::addFile(const QString &fileName, const QSize &, QIcon::Mode mode, QIcon::State state) { if (!fileName.isEmpty()) { const QFileInfo fi(fileName); const QString abs = fi.absoluteFilePath(); const FileType type = fileType(fi); #ifndef QT_NO_COMPRESS if (type == SvgFile || type == CompressedSvgFile) { #else if (type == SvgFile) { #endif DSvgRenderer renderer(abs); if (renderer.isValid()) { d->stepSerialNum(); d->svgFiles.insert(d->hashKey(mode, state), abs); } } else if (type == OtherFile) { QPixmap pm(abs); if (!pm.isNull()) addPixmap(pm, mode, state); } } } void QSvgIconEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) { QSize pixmapSize = rect.size(); if (painter->device()) pixmapSize *= painter->device()->devicePixelRatioF(); painter->drawPixmap(rect, pixmap(pixmapSize, mode, state)); } QString QSvgIconEngine::key() const { return QLatin1String("svg"); } QIconEngine *QSvgIconEngine::clone() const { return new QSvgIconEngine(*this); } bool QSvgIconEngine::read(QDataStream &in) { d = new QSvgIconEnginePrivate; d->svgBuffers = new QHash; if (in.version() >= QDataStream::Qt_4_4) { int isCompressed; QHash fileNames; // For memoryoptimization later in >> fileNames >> isCompressed >> *d->svgBuffers; #ifndef QT_NO_COMPRESS if (!isCompressed) { for (auto it = d->svgBuffers->begin(), end = d->svgBuffers->end(); it != end; ++it) it.value() = qCompress(it.value()); } #else if (isCompressed) { qWarning("QSvgIconEngine: Can not decompress SVG data"); d->svgBuffers->clear(); } #endif int hasAddedPixmaps; in >> hasAddedPixmaps; if (hasAddedPixmaps) { d->addedPixmaps = new QHash; in >> *d->addedPixmaps; } } else { QPixmap pixmap; QByteArray data; uint mode; uint state; int num_entries; in >> data; if (!data.isEmpty()) { #ifndef QT_NO_COMPRESS data = qUncompress(data); #endif if (!data.isEmpty()) d->svgBuffers->insert(d->hashKey(QIcon::Normal, QIcon::Off), data); } in >> num_entries; for (int i=0; i> pixmap; in >> mode; in >> state; // The pm list written by 4.3 is buggy and/or useless, so ignore. //addPixmap(pixmap, QIcon::Mode(mode), QIcon::State(state)); } } return true; } bool QSvgIconEngine::write(QDataStream &out) const { if (out.version() >= QDataStream::Qt_4_4) { int isCompressed = 0; #ifndef QT_NO_COMPRESS isCompressed = 1; #endif QHash svgBuffers; if (d->svgBuffers) svgBuffers = *d->svgBuffers; for (auto it = d->svgFiles.cbegin(), end = d->svgFiles.cend(); it != end; ++it) { QByteArray buf; QFile f(it.value()); if (f.open(QIODevice::ReadOnly)) buf = f.readAll(); #ifndef QT_NO_COMPRESS buf = qCompress(buf); #endif svgBuffers.insert(it.key(), buf); } out << d->svgFiles << isCompressed << svgBuffers; if (d->addedPixmaps) out << (int)1 << *d->addedPixmaps; else out << (int)0; } else { QByteArray buf; if (d->svgBuffers) buf = d->svgBuffers->value(d->hashKey(QIcon::Normal, QIcon::Off)); if (buf.isEmpty()) { QString svgFile = d->svgFiles.value(d->hashKey(QIcon::Normal, QIcon::Off)); if (!svgFile.isEmpty()) { QFile f(svgFile); if (f.open(QIODevice::ReadOnly)) buf = f.readAll(); } } #ifndef QT_NO_COMPRESS buf = qCompress(buf); #endif out << buf; // 4.3 has buggy handling of added pixmaps, so don't write any out << (int)0; } return true; } QT_END_NAMESPACE #endif // QT_NO_SVGRENDERER qt5integration-5.0.0/iconengineplugins/svgiconengine/qsvgiconengine.h000066400000000000000000000056251347440174500262600ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QSVGICONENGINE_H #define QSVGICONENGINE_H #include #include QT_BEGIN_NAMESPACE class QSvgIconEnginePrivate; class QSvgIconEngine : public QIconEngine { public: QSvgIconEngine(); QSvgIconEngine(const QSvgIconEngine &other); ~QSvgIconEngine(); void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state); QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state); QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state); void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state); void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state); QString key() const; QIconEngine *clone() const; bool read(QDataStream &in); bool write(QDataStream &out) const; private: QSharedDataPointer d; }; QT_END_NAMESPACE #endif qt5integration-5.0.0/iconengineplugins/svgiconengine/qsvgiconengine.json000066400000000000000000000000541347440174500267710ustar00rootroot00000000000000{ "Keys": [ "svg", "svgz", "svg.gz" ] } qt5integration-5.0.0/iconengineplugins/svgiconengine/svgiconengine.pro000066400000000000000000000006021347440174500264360ustar00rootroot00000000000000TARGET = dsvgicon TEMPLATE = lib CONFIG += plugin HEADERS += qsvgiconengine.h SOURCES += main.cpp \ qsvgiconengine.cpp OTHER_FILES += qsvgiconengine.json CONFIG += c++11 link_pkgconfig PKGCONFIG += dtkwidget QT += gui-private DESTDIR = $$_PRO_FILE_PWD_/../../bin/plugins/iconengines/ unix { target.path = $$[QT_INSTALL_PLUGINS]/iconengines/ INSTALLS += target } qt5integration-5.0.0/imageformatplugins/000077500000000000000000000000001347440174500203775ustar00rootroot00000000000000qt5integration-5.0.0/imageformatplugins/imageformats.pro000066400000000000000000000000431347440174500235740ustar00rootroot00000000000000TEMPLATE = subdirs SUBDIRS += svg qt5integration-5.0.0/imageformatplugins/svg/000077500000000000000000000000001347440174500211765ustar00rootroot00000000000000qt5integration-5.0.0/imageformatplugins/svg/main.cpp000066400000000000000000000062741347440174500226370ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #if !defined(QT_NO_SVGRENDERER) #include "qsvgiohandler.h" #include #include #include QT_BEGIN_NAMESPACE class QSvgPlugin : public QImageIOPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "svg.json") public: QStringList keys() const; Capabilities capabilities(QIODevice *device, const QByteArray &format) const; QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const; }; QStringList QSvgPlugin::keys() const { return QStringList() << QLatin1String("svg") << QLatin1String("svgz"); } QImageIOPlugin::Capabilities QSvgPlugin::capabilities(QIODevice *device, const QByteArray &format) const { if (format == "svg" || format == "svgz") return Capabilities(CanRead); if (!format.isEmpty()) return 0; Capabilities cap; if (device->isReadable() && QSvgIOHandler::canRead(device)) cap |= CanRead; return cap; } QImageIOHandler *QSvgPlugin::create(QIODevice *device, const QByteArray &format) const { QSvgIOHandler *hand = new QSvgIOHandler(); hand->setDevice(device); hand->setFormat(format); return hand; } QT_END_NAMESPACE #include "main.moc" #endif // !QT_NO_IMAGEFORMATPLUGIN qt5integration-5.0.0/imageformatplugins/svg/qsvgiohandler.cpp000066400000000000000000000164421347440174500245570ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qsvgiohandler.h" #ifndef QT_NO_SVGRENDERER #include "qimage.h" #include "qpixmap.h" #include "qpainter.h" #include "qvariant.h" #include "qbuffer.h" #include "qdebug.h" #include DWIDGET_USE_NAMESPACE QT_BEGIN_NAMESPACE class QSvgIOHandlerPrivate { public: QSvgIOHandlerPrivate(QSvgIOHandler *qq) : q(qq), loaded(false), readDone(false), backColor(Qt::transparent) {} bool load(QIODevice *device); QSvgIOHandler *q; DSvgRenderer r; QSize defaultSize; QRect clipRect; QSize scaledSize; QRect scaledClipRect; bool loaded; bool readDone; QColor backColor; }; bool QSvgIOHandlerPrivate::load(QIODevice *device) { if (loaded) return true; if (q->format().isEmpty()) q->canRead(); // # The SVG renderer doesn't handle trailing, unrelated data, so we must // assume that all available data in the device is to be read. bool res = false; QBuffer *buf = qobject_cast(device); if (buf) { const QByteArray &ba = buf->data(); res = r.load(QByteArray::fromRawData(ba.constData() + buf->pos(), ba.size() - buf->pos())); buf->seek(ba.size()); } else if (q->format() == "svgz") { res = r.load(device->readAll()); } else { res = r.load(device->readAll()); } if (res) { defaultSize = QSize(r.viewBox().width(), r.viewBox().height()); loaded = true; } return loaded; } QSvgIOHandler::QSvgIOHandler() : d(new QSvgIOHandlerPrivate(this)) { } QSvgIOHandler::~QSvgIOHandler() { delete d; } bool QSvgIOHandler::canRead() const { if (!device()) return false; if (d->loaded && !d->readDone) return true; // Will happen if we have been asked for the size QByteArray buf = device()->peek(8); if (buf.startsWith("\x1f\x8b")) { setFormat("svgz"); return true; } else if (buf.contains("readDone || d->load(device())) { bool xform = (d->clipRect.isValid() || d->scaledSize.isValid() || d->scaledClipRect.isValid()); QSize finalSize = d->defaultSize; QRectF bounds; if (xform && !d->defaultSize.isEmpty()) { bounds = QRectF(QPointF(0,0), QSizeF(d->defaultSize)); QPoint tr1, tr2; QSizeF sc(1, 1); if (d->clipRect.isValid()) { tr1 = -d->clipRect.topLeft(); finalSize = d->clipRect.size(); } if (d->scaledSize.isValid()) { sc = QSizeF(qreal(d->scaledSize.width()) / finalSize.width(), qreal(d->scaledSize.height()) / finalSize.height()); finalSize = d->scaledSize; } if (d->scaledClipRect.isValid()) { tr2 = -d->scaledClipRect.topLeft(); finalSize = d->scaledClipRect.size(); } QTransform t; t.translate(tr2.x(), tr2.y()); t.scale(sc.width(), sc.height()); t.translate(tr1.x(), tr1.y()); bounds = t.mapRect(bounds); } if (!finalSize.isEmpty()) { if (bounds.isEmpty() && d->backColor.alpha() == 0) { *image = d->r.toImage(finalSize); } else { *image = QImage(finalSize, QImage::Format_ARGB32_Premultiplied); image->fill(d->backColor.rgba()); QPainter p(image); d->r.render(&p, bounds); p.end(); } } d->readDone = true; return true; } return false; } QVariant QSvgIOHandler::option(ImageOption option) const { switch(option) { case ImageFormat: return QImage::Format_ARGB32_Premultiplied; break; case Size: d->load(device()); return d->defaultSize; break; case ClipRect: return d->clipRect; break; case ScaledSize: return d->scaledSize; break; case ScaledClipRect: return d->scaledClipRect; break; case BackgroundColor: return d->backColor; break; default: break; } return QVariant(); } void QSvgIOHandler::setOption(ImageOption option, const QVariant & value) { switch(option) { case ClipRect: d->clipRect = value.toRect(); break; case ScaledSize: d->scaledSize = value.toSize(); break; case ScaledClipRect: d->scaledClipRect = value.toRect(); break; case BackgroundColor: d->backColor = value.value(); break; default: break; } } bool QSvgIOHandler::supportsOption(ImageOption option) const { switch(option) { case ImageFormat: case Size: case ClipRect: case ScaledSize: case ScaledClipRect: case BackgroundColor: return true; default: break; } return false; } bool QSvgIOHandler::canRead(QIODevice *device) { QByteArray buf = device->peek(8); return buf.startsWith("\x1f\x8b") || buf.contains(" #ifndef QT_NO_SVGRENDERER QT_BEGIN_NAMESPACE class QImage; class QByteArray; class QIODevice; class QVariant; class QSvgIOHandlerPrivate; class QSvgIOHandler : public QImageIOHandler { public: QSvgIOHandler(); ~QSvgIOHandler(); virtual bool canRead() const; virtual QByteArray name() const; virtual bool read(QImage *image); static bool canRead(QIODevice *device); virtual QVariant option(ImageOption option) const; virtual void setOption(ImageOption option, const QVariant & value); virtual bool supportsOption(ImageOption option) const; private: QSvgIOHandlerPrivate *d; }; QT_END_NAMESPACE #endif // QT_NO_SVGRENDERER #endif // QSVGIOHANDLER_H qt5integration-5.0.0/imageformatplugins/svg/svg.json000066400000000000000000000001101347440174500226600ustar00rootroot00000000000000{ "Keys": [ "svg", "svgz" ], "MimeTypes": [ "image/svg+xml" ] } qt5integration-5.0.0/imageformatplugins/svg/svg.pro000066400000000000000000000005411347440174500225170ustar00rootroot00000000000000TARGET = dsvg TEMPLATE = lib CONFIG += plugin HEADERS += qsvgiohandler.h SOURCES += main.cpp \ qsvgiohandler.cpp OTHER_FILES += svg.json CONFIG += c++11 link_pkgconfig PKGCONFIG += dtkwidget DESTDIR = $$_PRO_FILE_PWD_/../../bin/plugins/imageformats/ unix { target.path = $$[QT_INSTALL_PLUGINS]/imageformats/ INSTALLS += target } qt5integration-5.0.0/platformthemeplugin/000077500000000000000000000000001347440174500205705ustar00rootroot00000000000000qt5integration-5.0.0/platformthemeplugin/config.tests/000077500000000000000000000000001347440174500231765ustar00rootroot00000000000000qt5integration-5.0.0/platformthemeplugin/config.tests/dthemed_icon_lookup/000077500000000000000000000000001347440174500272115ustar00rootroot00000000000000qt5integration-5.0.0/platformthemeplugin/config.tests/dthemed_icon_lookup/dthemed_icon_lookup.pro000066400000000000000000000003241347440174500337450ustar00rootroot00000000000000QT += core QT -= gui CONFIG += c++11 TARGET = dthemed_icon_lookup CONFIG += console link_pkgconfig CONFIG -= app_bundle PKGCONFIG += til TEMPLATE = app SOURCES += main.cpp DEFINES += QT_DEPRECATED_WARNINGS qt5integration-5.0.0/platformthemeplugin/config.tests/dthemed_icon_lookup/main.cpp000066400000000000000000000002711347440174500306410ustar00rootroot00000000000000#include using namespace themed_icon_lookup; int main() { auto *r = find_icon("TestIcon", 32, 1); free_cstring(const_cast(r)); return 0; } qt5integration-5.0.0/platformthemeplugin/deepin.json000066400000000000000000000000361347440174500227260ustar00rootroot00000000000000{ "Keys" : [ "deepin" ] } qt5integration-5.0.0/platformthemeplugin/diconengine.cpp000066400000000000000000000030221347440174500235530ustar00rootroot00000000000000#include "diconengine.h" #include #include #include #include DWIDGET_USE_NAMESPACE using namespace themed_icon_lookup; DIconEngine::DIconEngine(const QString &iconName) : QIconEngine() , m_iconName(iconName) { } DIconEngine::~DIconEngine() { } void DIconEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) { const QSize &pixSize = rect.size(); painter->drawPixmap(rect, pixmap(pixSize, mode, state)); } QIconEngine *DIconEngine::clone() const { return nullptr; } QSize DIconEngine::actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) { Q_UNUSED(mode); Q_UNUSED(state); return size; } QString DIconEngine::key() const { return QString(); } QList DIconEngine::availableSizes(QIcon::Mode mode, QIcon::State state) const { Q_UNUSED(mode); Q_UNUSED(state); // just return a invalid size return QList({ QSize() }); } QPixmap DIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) { Q_UNUSED(mode); Q_UNUSED(state); const char *szFilePath = find_icon_with_theme_name("Sea", m_iconName.toStdString().c_str(), size.width(), 1); const QString fpath(szFilePath); free_cstring(const_cast(szFilePath)); if (fpath.isEmpty()) { qWarning() << m_iconName << size; return QPixmap(); } if (fpath.endsWith(".svg")) return DSvgRenderer::render(fpath, size); return QPixmap(fpath); } qt5integration-5.0.0/platformthemeplugin/diconengine.h000066400000000000000000000013241347440174500232230ustar00rootroot00000000000000#ifndef DICONENGINE_H #define DICONENGINE_H #include class DIconEngine : public QIconEngine { public: explicit DIconEngine(const QString &iconName); ~DIconEngine(); void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state); QString key() const; QString iconName() const { return m_iconName; } QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state); QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state); QList availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const; QIconEngine *clone() const; private: const QString m_iconName; }; #endif // DICONENGINE_H qt5integration-5.0.0/platformthemeplugin/diconproxyengine.cpp000066400000000000000000000031031347440174500246550ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "diconproxyengine.h" DIconProxyEngine::DIconProxyEngine(const QIcon &proxyIcon) : QIconEngine() , m_proxyIcon(proxyIcon) { } void DIconProxyEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) { m_proxyIcon.paint(painter, rect, Qt::AlignCenter, mode, state); } QPixmap DIconProxyEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) { return m_proxyIcon.pixmap(size, mode, state); } QSize DIconProxyEngine::actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) { return m_proxyIcon.actualSize(size, mode, state); } QIconEngine *DIconProxyEngine::clone() const { return new DIconProxyEngine(m_proxyIcon); } bool DIconProxyEngine::read(QDataStream &in) { in << m_proxyIcon.name(); return true; } bool DIconProxyEngine::write(QDataStream &out) const { Q_UNUSED(out) return false; } qt5integration-5.0.0/platformthemeplugin/diconproxyengine.h000066400000000000000000000025701347440174500243310ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef DICONPROXYENGINE_H #define DICONPROXYENGINE_H #include class DIconProxyEngine : public QIconEngine { public: explicit DIconProxyEngine(const QIcon &proxyIcon); void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE; QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE; QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE; QIconEngine *clone() const Q_DECL_OVERRIDE; bool read(QDataStream &in) Q_DECL_OVERRIDE; bool write(QDataStream &out) const Q_DECL_OVERRIDE; private: QIcon m_proxyIcon; }; #endif // DICONPROXYENGINE_H qt5integration-5.0.0/platformthemeplugin/dthemesettings.cpp000066400000000000000000000212201347440174500243200ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: zccrs * * Maintainer: zccrs * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "dthemesettings.h" #include #include #include #include #define ICON_THEME_NAME QStringLiteral("IconThemeName") #define F_ICON_THEME_NAME QStringLiteral("FallBackIconThemeName") #define STYLE_NAMES QStringLiteral("StyleNames") #define SYSTEM_FONT QStringLiteral("Font") #define SYSTEM_FIXED_FONT QStringLiteral("MonoFont") #define SYSTEM_FONT_POINT_SIZE QStringLiteral("FontSize") // 在某些情况下,触摸滚动视图的操作可能和其它的touch move行为冲突(例如文件管理器的视图滚动和文件内容多选) // 只能在时间上控制让两个冲突的逻辑错开。此处定义此时间(单位:ms),表示从touch begin到touch move比较在 // 此时间段内完成,否则不应该认为这个一个触摸滚动操作 #define TOUCH_FLICK_BEGIN_MOVE_DELAY QStringLiteral("TouchFlickBeginMoveDelay") #define SCREEN_SCALE_FACTORS QStringLiteral("ScreenScaleFactors") #define SCALE_FACTOR QStringLiteral("ScaleFactor") #define SCALE_LOGICAL_DPI QStringLiteral("ScaleLogicalDpi") // 当窗口从一个屏幕移动到另一个屏幕后,自动根据新的屏幕缩放比例更新窗口实际大小 #define AUTO_SCALE_WINDOW QStringLiteral("AutoScaleWindow") DCORE_USE_NAMESPACE DThemeSettings::DThemeSettings(bool watchFile, QObject *parent) : QObject(parent) , settings(makeSettings()) { if (!watchFile) return; QStringList list; list << settings->fileName(); list << QSettings(QSettings::IniFormat, QSettings::SystemScope, "deepin", "qt-theme").fileName(); DFileWatcherManager *watcher = new DFileWatcherManager(this); for (const QString &path : list) { QFile file(path); if (!file.exists()) { file.open(QFile::WriteOnly); file.close(); } if (QFile::exists(path)) watcher->add(path); } connect(watcher, &DFileWatcherManager::fileModified, this, &DThemeSettings::onConfigChanged); } QSettings * DThemeSettings::makeSettings() { QString saveConfigPath; do { // 需要自定义读取主题相关配置的存储路径,未定义时默认为 ~/.config // 适用于这样的情况:一个使用pkexec使用root权限启动的UI应用,需要跟随启动时的普通 // 用户的字体、缩放等设置,可通过在QCoreApplication构造之前设置此环境变量指定使用 // 某用户的主题配置文件。 static QByteArray theme_config_path = qgetenv("D_QT_THEME_CONFIG_PATH"); if (theme_config_path.isEmpty()) { break; } const QString suffix("/deepin/qt-theme.ini"); QFileInfo info(theme_config_path + suffix); // 忽略不存在的文件或软连接 if (!info.exists() || info.isSymLink()) { break; } // 先创建一个对象,用于获取默认配置文件的路径 QSettings s(QSettings::IniFormat, QSettings::UserScope, "deepin", "qt-theme"); QString file_path = s.fileName(); // 必须以此路径结尾,去除此路径的剩余部分为配置文件路径 if (!file_path.endsWith(suffix)) { break; } saveConfigPath = file_path.left(file_path.size() - suffix.size()); if (saveConfigPath.isEmpty()) { break; } // 设置自定义的主题配置文件存储目录 QSettings::setPath(s.format(), s.scope(), QString::fromLocal8Bit(theme_config_path)); } while (false); QSettings *s = new QSettings(QSettings::IniFormat, QSettings::UserScope, "deepin", "qt-theme"); // 恢复原本的配置目录 if (!saveConfigPath.isEmpty()) { QSettings::setPath(s->format(), s->scope(), saveConfigPath); } s->setIniCodec("utf-8"); s->beginGroup("Theme"); return s; } bool DThemeSettings::contains(const QString &key) const { return settings->contains(key); } QVariant DThemeSettings::value(const QString &key, const QVariant &defaultValue) const { return settings->value(key, defaultValue); } bool DThemeSettings::isSetIconThemeName() const { return contains(ICON_THEME_NAME); } QString DThemeSettings::iconThemeName() const { return value(ICON_THEME_NAME).toString(); } bool DThemeSettings::isSetFallbackIconThemeName() const { return contains(F_ICON_THEME_NAME); } QString DThemeSettings::fallbackIconThemeName() const { return value(F_ICON_THEME_NAME).toString(); } bool DThemeSettings::isSetSystemFont() const { return contains(SYSTEM_FONT); } QString DThemeSettings::systemFont() const { return value(SYSTEM_FONT).toString(); } bool DThemeSettings::isSetStyleNames() const { return contains(STYLE_NAMES); } QStringList DThemeSettings::styleNames() const { return value(STYLE_NAMES).toStringList(); } bool DThemeSettings::isSetSystemFontPixelSize() const { return contains(SYSTEM_FONT_POINT_SIZE); } qreal DThemeSettings::systemFontPointSize() const { return value(SYSTEM_FONT_POINT_SIZE, 9.0).toDouble(); } bool DThemeSettings::isSetSystemFixedFont() const { return contains(SYSTEM_FIXED_FONT); } QString DThemeSettings::systemFixedFont() const { return value(SYSTEM_FIXED_FONT).toString(); } int DThemeSettings::touchFlickBeginMoveDelay() const { return value(TOUCH_FLICK_BEGIN_MOVE_DELAY, 300).toInt(); } qreal DThemeSettings::scaleFactor() const { return value(SCALE_FACTOR).toReal(); } QByteArray DThemeSettings::screenScaleFactors() const { return value(SCREEN_SCALE_FACTORS).toByteArray(); } // 从配置文件中获取dpi相关数据,文件中存储的格式为 ScaleLogicalDpi=x,y // 会被QSettings解析为QStringList,此处需要将其转换为QPair static QPair takePair(const QVariant &value) { if (!value.isValid()) { return qMakePair(0.0, 0.0); } const QStringList &l = value.toStringList(); if (l.count() < 2) { return qMakePair(0.0, 0.0); } QPair ret; ret.first = l.first().toDouble(); ret.second = l.at(1).toDouble(); return ret; } QPair DThemeSettings::scaleLogicalDpi() const { return takePair(value(SCALE_LOGICAL_DPI)); } bool DThemeSettings::autoScaleWindow() const { return value(AUTO_SCALE_WINDOW, true).toBool(); } void DThemeSettings::onConfigChanged() { QVariantMap config; for (const QString &v : settings->allKeys()) { config[v] = settings->value(v); } settings->sync(); for (const QString &v : settings->allKeys()) { const QVariant &old_value = config.value(v); const QVariant &new_value = settings->value(v); if (old_value != new_value) { if (v == ICON_THEME_NAME) emit iconThemeNameChanged(new_value.toString()); else if (v == F_ICON_THEME_NAME) emit fallbackIconThemeNameChanged(new_value.toString()); else if (v == SYSTEM_FONT) emit systemFontChanged(new_value.toString()); else if (v == STYLE_NAMES) emit styleNamesChanged(new_value.toStringList()); else if (v == SYSTEM_FIXED_FONT) emit systemFixedFontChanged(new_value.toString()); else if (v == SYSTEM_FONT_POINT_SIZE) emit systemFontPointSizeChanged(new_value.toInt()); else if (v == TOUCH_FLICK_BEGIN_MOVE_DELAY) emit touchFlickBeginMoveDelayChanged(new_value.toInt()); else if (v == SCREEN_SCALE_FACTORS) emit screenScaleFactorsChanged(new_value.toByteArray()); else if (v == SCALE_FACTOR) emit scaleFactorChanged(new_value.toReal()); else if (v == SCALE_LOGICAL_DPI) emit scaleLogicalDpiChanged(takePair(new_value)); emit valueChanged(v, old_value, new_value); } } } qt5integration-5.0.0/platformthemeplugin/dthemesettings.h000066400000000000000000000072411347440174500237740ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Author: zccrs * * Maintainer: zccrs * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef DTHEMESETTINGS_H #define DTHEMESETTINGS_H #include #include class DThemeSettings : public QObject { Q_OBJECT Q_PROPERTY(QString iconThemeName READ iconThemeName NOTIFY iconThemeNameChanged) Q_PROPERTY(QString fallbackIconThemeName READ fallbackIconThemeName NOTIFY fallbackIconThemeNameChanged) Q_PROPERTY(QString systemFont READ systemFont NOTIFY systemFontChanged) Q_PROPERTY(QString systemFixedFont READ systemFixedFont NOTIFY systemFixedFontChanged) Q_PROPERTY(qreal systemFontPointSize READ systemFontPointSize NOTIFY systemFontPointSizeChanged) Q_PROPERTY(QStringList styleNames READ styleNames NOTIFY styleNamesChanged) Q_PROPERTY(int touchFlickBeginMoveDelay READ touchFlickBeginMoveDelay NOTIFY touchFlickBeginMoveDelayChanged) Q_PROPERTY(qreal scaleFactor READ scaleFactor NOTIFY scaleFactorChanged) Q_PROPERTY(QByteArray screenScaleFactors READ screenScaleFactors NOTIFY screenScaleFactorsChanged) Q_PROPERTY(QPair scaleLogicalDpi READ scaleLogicalDpi NOTIFY scaleLogicalDpiChanged) Q_PROPERTY(bool autoScaleWindow READ autoScaleWindow NOTIFY autoScaleWindowChanged) public: explicit DThemeSettings(bool watchFile = true, QObject *parent = 0); static QSettings *makeSettings(); bool contains(const QString &key) const; QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const; bool isSetIconThemeName() const; QString iconThemeName() const; bool isSetFallbackIconThemeName() const; QString fallbackIconThemeName() const; bool isSetSystemFont() const; QString systemFont() const; bool isSetStyleNames() const; QStringList styleNames() const; bool isSetSystemFontPixelSize() const; qreal systemFontPointSize() const; bool isSetSystemFixedFont() const; QString systemFixedFont() const; int touchFlickBeginMoveDelay() const; qreal scaleFactor() const; QByteArray screenScaleFactors() const; QPair scaleLogicalDpi() const; bool autoScaleWindow() const; signals: void valueChanged(const QString &key, const QVariant &oldValue, const QVariant &newValue); void iconThemeNameChanged(QString iconThemeName); void fallbackIconThemeNameChanged(QString fallbackIconThemeName); void systemFontChanged(QString systemFont); void styleNamesChanged(QStringList styleNames); void systemFixedFontChanged(QString systemFixedFont); void systemFontPointSizeChanged(qreal systemFontPointSize); void touchFlickBeginMoveDelayChanged(int touchFlickBeginMoveDelay); void scaleFactorChanged(const qreal &scaleFactor); void screenScaleFactorsChanged(const QByteArray &screenScaleFactors); void scaleLogicalDpiChanged(const QPair scaleLogicalDpi); void autoScaleWindowChanged(bool autoScaleWindow); private: QSettings *settings; void onConfigChanged(); }; #endif // DTHEMESETTINGS_H qt5integration-5.0.0/platformthemeplugin/images/000077500000000000000000000000001347440174500220355ustar00rootroot00000000000000qt5integration-5.0.0/platformthemeplugin/images/README000066400000000000000000000002131347440174500227110ustar00rootroot00000000000000All images under this directory are made by Wuhan Deepin Technology Co., Ltd. Licensed under GNU GENERAL PUBLIC LICENSE Version 3 or later.qt5integration-5.0.0/platformthemeplugin/images/arrow-light-hover.png000066400000000000000000000002461347440174500261250ustar00rootroot00000000000000PNG  IHDR /3gAMA a]IDATc`hdw@"C'Q,0파k:@ܥ &?@,ro@\M Y@al 7NKIENDB`qt5integration-5.0.0/platformthemeplugin/images/arrow-light-inactive.png000066400000000000000000000003321347440174500266000ustar00rootroot00000000000000PNG  IHDR /3gAMA aIDATc`Pf xXccc  FFk, 6ٳgeee?^ZZ0"k755U33&d &&_ ann./w3ϟ@v?\a*Ap@?IfIENDB`qt5integration-5.0.0/platformthemeplugin/images/arrow-light.png000066400000000000000000000003011347440174500247740ustar00rootroot00000000000000PNG  IHDR /3gAMA axIDATc`P6 n߾ Y%%%JHHs  ȹd%$@0􉑑/c066v344tD ~As*?ia4e.}IENDB`qt5integration-5.0.0/platformthemeplugin/images/check_dark_hover.png000066400000000000000000000003151347440174500260230ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`Ċx@Z3T _@lO2P{ .+rxX&dsE ^ @i@|y@@z1_ኁ@|q1budPBo1#a dC*t/IENDB`qt5integration-5.0.0/platformthemeplugin/images/check_dark_inactive.png000066400000000000000000000003321347440174500265010ustar00rootroot00000000000000PNG  IHDR  gAMA aIDAT} @w@`!SY "R Z`Xvw3$谖2V[huȲF1)"U!T (()Gx!5StNjѫ4L=mo/:-)=.Hj:+h[55QIENDB`qt5integration-5.0.0/platformthemeplugin/images/check_dark_normal.png000066400000000000000000000003251347440174500261710ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`" %Lxԁ8:>Ob5|D & L @ ـL ȸ&;sA1@$S@\@V1@ m@^iTT M@<Pex@@& .H"xIENDB`qt5integration-5.0.0/platformthemeplugin/images/check_light_hover.png000066400000000000000000000003151347440174500262110ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`Ċx@Z3T _@lO2P{ .+rxX&dsE ^ @i@|y@@z1_ኁ@|q1budPBo1#a dC*t/IENDB`qt5integration-5.0.0/platformthemeplugin/images/check_light_inactive.png000066400000000000000000000004171347440174500266730ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATc`hnnRˆG)##* &233o={s&l&*rdbb:RRä/7OΝ;w &asOcccVO4 Lf:ׯ_5lIII [ϟ? H3?ʺ*@顋m@Xu~IENDB`qt5integration-5.0.0/platformthemeplugin/images/check_light_normal.png000066400000000000000000000004101347440174500263520ustar00rootroot00000000000000PNG  IHDR  gAMA aIDATcf}x1022hTgddkhh p*266Vښh<ˑ#Gރw7.\Srl/_;88;H$hF>M 4̙37Q8@2ՁCΟ?Y \EGBjSaIENDB`qt5integration-5.0.0/platformthemeplugin/main.cpp000066400000000000000000000026611347440174500222250ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include "qdeepintheme.h" #include QT_BEGIN_NAMESPACE void updateXdgIconSystemTheme() { XdgIconLoader::instance()->updateSystemTheme(); } class QDeepinThemePlugin : public QPlatformThemePlugin { Q_OBJECT Q_PLUGIN_METADATA(IID QPlatformThemeFactoryInterface_iid FILE "deepin.json") public: QPlatformTheme *create(const QString &key, const QStringList ¶ms) Q_DECL_OVERRIDE; }; QPlatformTheme *QDeepinThemePlugin::create(const QString &key, const QStringList ¶ms) { Q_UNUSED(params); if (!key.compare(QLatin1String(QDeepinTheme::name), Qt::CaseInsensitive)) return new QDeepinTheme; return 0; } QT_END_NAMESPACE #include "main.moc" qt5integration-5.0.0/platformthemeplugin/menu.qss000066400000000000000000000032671347440174500222740ustar00rootroot00000000000000QMenu { background-color: white; padding-top: 4px; padding-bottom: 4px; border-radius: 4px; } QMenu::item { padding: 2px 25px 2px 20px; border: none; /* reserve space for selection border */ } QMenu::item:selected { background: #2CA7F8; color: white; } QMenu::icon { margin-left: 5px; width: 13px; height: 13px; } QMenu::icon:checked { /* appearance of a 'checked' icon */ background: gray; border: 1px inset gray; position: absolute; top: 1px; right: 1px; bottom: 1px; left: 1px; } QMenu::separator { height: 1px; background: rgba(0, 0, 0, 0.1); margin: 2px 6px 2px 6px; } QMenu::indicator { margin-left: 5px; width: 13px; height: 13px; } /* non-exclusive indicator = check box style indicator (see QActionGroup::setExclusive) */ QMenu::indicator:non-exclusive:unchecked { image: url(:/images/check_light_normal.png); } QMenu::indicator:non-exclusive:unchecked:selected { image: url(:/images/check_light_hover.png); } QMenu::indicator:non-exclusive:checked { image: url(:/images/check_light_inactive.png); } QMenu::indicator:non-exclusive:checked:selected { image: url(:/images/check_light_hover.png); } /* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive) */ /*QMenu::indicator:exclusive:unchecked { image: url(:/images/radiobutton_unchecked.png); } QMenu::indicator:exclusive:unchecked:selected { image: url(:/images/radiobutton_unchecked_hover.png); } QMenu::indicator:exclusive:checked { image: url(:/images/radiobutton_checked.png); } QMenu::indicator:exclusive:checked:selected { image: url(:/images/radiobutton_checked_hover.png); }*/ qt5integration-5.0.0/platformthemeplugin/qdeepinfiledialoghelper.cpp000066400000000000000000000350711347440174500261470ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "qdeepinfiledialoghelper.h" #include "qdeepintheme.h" #include "filedialogmanager_interface.h" #include "filedialog_interface.h" #include #include #include #include #include #include #include #if QT_VERSION < QT_VERSION_CHECK(5, 4, 0) #include #else #include #endif #include #include QT_BEGIN_NAMESPACE #define DIALOG_SERVICE "com.deepin.filemanager.filedialog" #define DIALOG_CALL(Fun) ({if(nativeDialog) nativeDialog->Fun; else qtDialog->Fun;}) QList stringList2UrlList(const QStringList &list) { QList urlList; for (const QString str : list) urlList << str; return urlList; } QStringList urlList2StringList(const QList &list) { QStringList stringList; for (const QUrl &url : list) stringList << url.toString(); return stringList; } DFileDialogManager *QDeepinFileDialogHelper::manager = Q_NULLPTR; QDeepinFileDialogHelper::QDeepinFileDialogHelper() { connect(this, &QDeepinFileDialogHelper::accept, this, [this] { if (sourceDialog && nativeDialog) { const QMap &map_lineedit = nativeDialog->allCustomWidgetsValue(LineEditType); const QMap &map_combobox = nativeDialog->allCustomWidgetsValue(ComboBoxType); auto map_eidt_begin = map_lineedit.constBegin(); while (map_eidt_begin != map_lineedit.constEnd()) { sourceDialog->setProperty(QString("_dtk_widget_lineedit_%1_value").arg(map_eidt_begin.key()).toUtf8(), map_eidt_begin.value()); ++map_eidt_begin; } auto map_combobox_begion = map_combobox.constBegin(); while (map_combobox_begion != map_combobox.constEnd()) { sourceDialog->setProperty(QString("_dtk_widget_combobox_%1_value").arg(map_combobox_begion.key()).toUtf8(), map_combobox_begion.value()); ++map_combobox_begion; } } }); } QDeepinFileDialogHelper::~QDeepinFileDialogHelper() { DIALOG_CALL(deleteLater()); if (auxiliaryWindow) auxiliaryWindow->deleteLater(); if (nativeDialog) nativeDialog->deleteLater(); } bool QDeepinFileDialogHelper::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) { ensureDialog(); applyOptions(); if (nativeDialog) { if (parent) activeWindow = parent; else activeWindow = QGuiApplication::focusWindow(); nativeDialog->setParent(parent); Qt::WindowFlags nd_flags = static_cast(nativeDialog->windowFlags()); Qt::WindowFlags need_flags = Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowContextHelpButtonHint | Qt::WindowStaysOnTopHint | Qt::WindowTransparentForInput | Qt::WindowDoesNotAcceptFocus | Qt::WindowStaysOnBottomHint | Qt::WindowCloseButtonHint | Qt::BypassWindowManagerHint; if (flags & need_flags) nativeDialog->setWindowFlags(nd_flags | (flags & need_flags)); static bool i_am_dbus_server = iAmFileDialogDBusServer(); if (i_am_dbus_server) { WId native_dialog_winId = nativeDialog->winId(); QWindow *real_native_dialog = nullptr; for (QWindow *window : qGuiApp->topLevelWindows()) { if (window->winId() == native_dialog_winId) { real_native_dialog = window; break; } } if (real_native_dialog) { real_native_dialog->setTransientParent(parent); real_native_dialog->setModality(modality); // call later QMetaObject::invokeMethod(nativeDialog.data(), "show", Qt::QueuedConnection); return true; } } auxiliaryWindow->setParent(parent); auxiliaryWindow->setFlags(flags); auxiliaryWindow->setModality(modality); if (modality != Qt::NonModal) { QGuiApplicationPrivate::showModalWindow(auxiliaryWindow); if (modality == Qt::ApplicationModal) { connect(qApp, &QGuiApplication::applicationStateChanged, this, [this] (Qt::ApplicationState state) { if (state == Qt::ApplicationActive) nativeDialog->activateWindow(); }); connect(nativeDialog, &DFileDialogHandle::windowActiveChanged, this, [this] { if (qApp->platformName() != "dxcb" && !qApp->property("_d_isDxcb").toBool()) return; QWindow *focus_window = qApp->focusWindow(); if (!focus_window) return; if (focus_window->type() != Qt::Widget && focus_window->type() != Qt::Window && focus_window->type() != Qt::Dialog) { return; } if (!nativeDialog->windowActive() && qApp->applicationState() == Qt::ApplicationActive) { nativeDialog->activateWindow(); } }); } } } else { qtDialog->setAttribute(Qt::WA_NativeWindow); if (parent) { if (parent->inherits("QWidgetWindow")) { qtDialog->setParent(static_cast(parent)->widget()); } else { qtDialog->windowHandle()->setParent(parent); } } qtDialog->setWindowModality(modality); qtDialog->setWindowFlags(flags | qtDialog->windowFlags()); } DIALOG_CALL(show()); if (nativeDialog && parent) { XSetTransientForHint(QX11Info::display(), nativeDialog->winId(), parent->winId()); } return true; } void QDeepinFileDialogHelper::exec() { qDebug() << "exec"; ensureDialog(); applyOptions(); if (nativeDialog) { // block input to the window, allow input to other GTK dialogs QEventLoop loop; connect(this, SIGNAL(accept()), &loop, SLOT(quit())); connect(this, SIGNAL(reject()), &loop, SLOT(quit())); loop.exec(); } else { QWindow *modalWindow = qApp->modalWindow(); if (Q_LIKELY(modalWindow->inherits("QWidgetWindow") && qobject_cast(static_cast(modalWindow)->widget()))) { QGuiApplicationPrivate::hideModalWindow(modalWindow); } qtDialog->exec(); } } void QDeepinFileDialogHelper::hide() { qDebug() << "hide"; ensureDialog(); DIALOG_CALL(hide()); if (auxiliaryWindow) { QGuiApplicationPrivate::hideModalWindow(auxiliaryWindow); if (activeWindow) { activeWindow->requestActivate(); activeWindow.clear(); } } } bool QDeepinFileDialogHelper::defaultNameFilterDisables() const { qDebug() << __FUNCTION__; return true; } void QDeepinFileDialogHelper::setDirectory(const QUrl &directory) { qDebug() << __FUNCTION__ << directory; ensureDialog(); DIALOG_CALL(setDirectoryUrl(directory.toString())); } QUrl QDeepinFileDialogHelper::directory() const { qDebug() << __FUNCTION__; ensureDialog(); if (nativeDialog) return QUrl(nativeDialog->directoryUrl()); return qtDialog->directoryUrl(); } void QDeepinFileDialogHelper::selectFile(const QUrl &fileUrl) { qDebug() << __FUNCTION__ << fileUrl; ensureDialog(); if (nativeDialog) nativeDialog->selectUrl(fileUrl.toString()); else qtDialog->selectUrl(fileUrl); } QList QDeepinFileDialogHelper::selectedFiles() const { qDebug() << __FUNCTION__; ensureDialog(); if (nativeDialog) return stringList2UrlList(nativeDialog->selectedUrls()); return qtDialog->selectedUrls(); } void QDeepinFileDialogHelper::setFilter() { qDebug() << __FUNCTION__; ensureDialog(); DIALOG_CALL(setFilter(options()->filter())); } void QDeepinFileDialogHelper::selectNameFilter(const QString &filter) { qDebug() << __FUNCTION__ << filter; ensureDialog(); DIALOG_CALL(selectNameFilter(filter)); } QString QDeepinFileDialogHelper::selectedNameFilter() const { qDebug() << __FUNCTION__; ensureDialog(); if (nativeDialog) return nativeDialog->selectedNameFilter(); return qtDialog->selectedNameFilter(); } void QDeepinFileDialogHelper::initDBusFileDialogManager() { if (manager) return; if (QDBusConnection::sessionBus().interface()->isServiceRegistered(DIALOG_SERVICE).value() || QFile::exists("/usr/bin/dde-file-manager")) { manager = new DFileDialogManager(DIALOG_SERVICE, "/com/deepin/filemanager/filedialogmanager", QDBusConnection::sessionBus()); } } bool QDeepinFileDialogHelper::iAmFileDialogDBusServer() { static bool _value = manager->connection().interface()->servicePid(manager->service()) == static_cast(getpid()); return _value; } void QDeepinFileDialogHelper::ensureDialog() const { if (nativeDialog || qtDialog) return; if (manager) { QDBusPendingReply reply = manager->createDialog(QString()); reply.waitForFinished(); const QString &path = reply.value().path(); if (path.isEmpty()) { qWarning("Can not create native dialog, Will be use QFileDialog"); } else { nativeDialog = new DFileDialogHandle(DIALOG_SERVICE, path, QDBusConnection::sessionBus()); auxiliaryWindow = new QWindow(); connect(nativeDialog, &QObject::destroyed, auxiliaryWindow, &QWindow::deleteLater); connect(nativeDialog, &QObject::destroyed, nativeDialog, &DFileDialogHandle::deleteLater); connect(nativeDialog, &DFileDialogHandle::destroyed, nativeDialog, &QObject::deleteLater); connect(nativeDialog, &DFileDialogHandle::accepted, this, &QDeepinFileDialogHelper::accept); connect(nativeDialog, &DFileDialogHandle::rejected, this, &QDeepinFileDialogHelper::reject); connect(nativeDialog, &DFileDialogHandle::destroyed, this, &QDeepinFileDialogHelper::reject); QTimer *heartbeatTimer = new QTimer(nativeDialog); connect(heartbeatTimer, &QTimer::timeout, this, [this, heartbeatTimer] { QDBusPendingReply<> reply = nativeDialog->makeHeartbeat(); reply.waitForFinished(); if (reply.isError()) { qWarning() << "Make heartbeat is failed:" << reply.error(); if (reply.error().type() == QDBusError::UnknownMethod) { qWarning() << "Make heartbeat is't support for current dbus file dialog, Will be stop heartbeat timer."; heartbeatTimer->stop(); return; } nativeDialog->QObject::deleteLater(); const_cast(this)->reject(); } }); int heartbeatInterval = nativeDialog->heartbeatInterval(); heartbeatTimer->setInterval(qMax(1 * 1000, qMin(int(heartbeatInterval / 1.5), heartbeatInterval - 5 * 1000))); heartbeatTimer->start(); } } if (!nativeDialog) { QDeepinTheme::m_usePlatformNativeDialog = false; qtDialog = new QFileDialog(); QDeepinTheme::m_usePlatformNativeDialog = true; connect(qtDialog, &QFileDialog::accepted, this, &QDeepinFileDialogHelper::accept); connect(qtDialog, &QFileDialog::rejected, this, &QDeepinFileDialogHelper::reject); } } void QDeepinFileDialogHelper::applyOptions() { QFileDialogOptions *options = this->options().data(); for (int i = 0; i < QFileDialogOptions::DialogLabelCount; ++i) { if (options->isLabelExplicitlySet((QFileDialogOptions::DialogLabel)i)) { if (nativeDialog) nativeDialog->setLabelText(i, options->labelText((QFileDialogOptions::DialogLabel)i)); else qtDialog->setLabelText((QFileDialog::DialogLabel)i, options->labelText((QFileDialogOptions::DialogLabel)i)); } } DIALOG_CALL(setFilter(options->filter())); DIALOG_CALL(setWindowTitle(options->windowTitle())); DIALOG_CALL(setViewMode((QFileDialog::ViewMode)options->viewMode())); DIALOG_CALL(setFileMode((QFileDialog::FileMode)options->fileMode())); DIALOG_CALL(setAcceptMode((QFileDialog::AcceptMode)options->acceptMode())); DIALOG_CALL(setNameFilters(options->nameFilters())); DIALOG_CALL(setOptions((QFileDialog::Options)(int)options->options())); setDirectory(options->initialDirectory()); foreach (const QUrl &filename, options->initiallySelectedFiles()) selectFile(filename); selectNameFilter(options->initiallySelectedNameFilter()); if (!sourceDialog) { sourceDialog = reinterpret_cast(qvariant_cast(property("_dtk_widget_QFileDialog"))); if (sourceDialog && nativeDialog) { const QStringList lineedit_list = sourceDialog->property("_dtk_widget_custom_lineedit_list").toStringList(); const QStringList combobox_list = sourceDialog->property("_dtk_widget_custom_combobox_list").toStringList(); nativeDialog->beginAddCustomWidget(); for (const QString &i : lineedit_list) nativeDialog->addCustomWidget(LineEditType, i); for (const QString &i : combobox_list) nativeDialog->addCustomWidget(ComboBoxType, i); nativeDialog->endAddCustomWidget(); } } } QT_END_NAMESPACE qt5integration-5.0.0/platformthemeplugin/qdeepinfiledialoghelper.h000066400000000000000000000046211347440174500256110ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef QDEEPINFILEDIALOGHELPER_H #define QDEEPINFILEDIALOGHELPER_H #include #include QT_BEGIN_NAMESPACE class QFileDialog; class ComDeepinFilemanagerFiledialogInterface; typedef ComDeepinFilemanagerFiledialogInterface DFileDialogHandle; class ComDeepinFilemanagerFiledialogmanagerInterface; typedef ComDeepinFilemanagerFiledialogmanagerInterface DFileDialogManager; class QDeepinFileDialogHelper : public QPlatformFileDialogHelper { public: enum CustomWidgetType { LineEditType = 0, ComboBoxType = 1 }; QDeepinFileDialogHelper(); ~QDeepinFileDialogHelper(); bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) Q_DECL_OVERRIDE; void exec() Q_DECL_OVERRIDE; void hide() Q_DECL_OVERRIDE; bool defaultNameFilterDisables() const Q_DECL_OVERRIDE; void setDirectory(const QUrl &directory) Q_DECL_OVERRIDE; QUrl directory() const Q_DECL_OVERRIDE; void selectFile(const QUrl &filename) Q_DECL_OVERRIDE; QList selectedFiles() const Q_DECL_OVERRIDE; void setFilter() Q_DECL_OVERRIDE; void selectNameFilter(const QString &filter) Q_DECL_OVERRIDE; QString selectedNameFilter() const Q_DECL_OVERRIDE; static void initDBusFileDialogManager(); static bool iAmFileDialogDBusServer(); private: mutable QPointer nativeDialog; mutable QPointer auxiliaryWindow; mutable QPointer qtDialog; QPointer activeWindow; QPointer sourceDialog; static DFileDialogManager *manager; void ensureDialog() const; void applyOptions(); friend class QDeepinTheme; }; QT_END_NAMESPACE #endif // QDEEPINFILEDIALOGHELPER_H qt5integration-5.0.0/platformthemeplugin/qdeepintheme.cpp000066400000000000000000000760711347440174500237570ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "qdeepintheme.h" #include "qdeepinfiledialoghelper.h" #include "diconproxyengine.h" #include "filedialogmanager_interface.h" #include "dthemesettings.h" #include "diconengine.h" #include #include #include #include #include #include #if XDG_ICON_VERSION_MAR >= 3 #define private public #include #undef private #elif XDG_ICON_VERSION_MAR == 2 //这个版本中的xdgiconloader_p.h定义和qiconloader_p.h有冲突 //只能通过此方式提供创建XdgIconLoaderEngine对象的接口 #include "xdgiconenginecreator.h" #endif #include #include #define private public #include #undef private #include #include #include #include #include #undef signals #include #include #if XDG_ICON_VERSION_MAR >= 3 namespace DEEPIN_QT_THEME { QThreadStorage colorScheme; void(*setFollowColorScheme)(bool); bool(*followColorScheme)(); } #endif #define DISABLE_UPDATE_WINDOW_GEOMETRY "D_DISABLE_UPDATE_WINDOW_GEOMETRY_FOR_SCALE" #define DNOT_UPDATE_WINDOW_GEOMETRY "_d_disable_update_geometry_for_scale" #define HOOK_UPDATE_WINDOW_GEOMETRY_OBJECT "_d_hookUpdateGeometryForScaleObject" #define UPDATE_WINDOW_GEOMETRY_ENTRY "_d_updateGeometryForScaleEntry" #define UPDATE_WINDOW_GEOMETRY_GEOMETRY "_d_updateGeometryForScaleGeometry" #define UPDATE_WINDOW_GEOMETRY_EXIT "_d_updateGeometryForScaleExit" QT_BEGIN_NAMESPACE #if XDG_ICON_VERSION_MAR >= 3 class XdgIconProxyEngine : public QIconEngine { public: XdgIconProxyEngine(XdgIconLoaderEngine *proxy) : engine(proxy) {} ~XdgIconProxyEngine() { delete engine; } static quint64 entryCacheKey(const ScalableEntry *color_entry, const QIcon::Mode mode, const QIcon::State state) { return quint64(color_entry) ^ (quint64(mode) << 56) ^ (quint64(state) << 48); } QPixmap followColorPixmap(ScalableEntry *color_entry, const QSize &size, QIcon::Mode mode, QIcon::State state) { const QString &color_scheme = DEEPIN_QT_THEME::colorScheme.localData(); quint64 cache_key = entryCacheKey(color_entry, mode, state); const QString &cache_color_scheme = entryToColorScheme.value(cache_key); QPixmap pm = color_scheme == cache_color_scheme ? color_entry->svgIcon.pixmap(size, mode, state) : QPixmap(); // Note: not checking the QIcon::isNull(), because in Qt5.10 the isNull() is not reliable // for svg icons desierialized from stream (see https://codereview.qt-project.org/#/c/216086/) if (pm.isNull()) { // The following lines are adapted and updated from KDE's "kiconloader.cpp" -> // KIconLoaderPrivate::processSvg() and KIconLoaderPrivate::createIconImage(). // They read the SVG color scheme of SVG icons and give images based on the icon mode. QHash svg_buffers; QFile device{color_entry->filename}; if (device.open(QIODevice::ReadOnly)) { // Note: indexes are assembled as in qtsvg (QSvgIconEnginePrivate::hashKey()) QMap style_sheets; style_sheets[(mode<<4)|state] = QStringLiteral(".ColorScheme-Text{color:%1;}").arg(color_scheme); QMap > writers; for (auto i = style_sheets.cbegin(); i != style_sheets.cend(); ++i) { writers[i.key()].reset(new QXmlStreamWriter{&svg_buffers[i.key()]}); } QXmlStreamReader xmlReader(&device); while (!xmlReader.atEnd()) { if (xmlReader.readNext() == QXmlStreamReader::StartElement && xmlReader.qualifiedName() == QLatin1String("style") && xmlReader.attributes().value(QLatin1String("id")) == QLatin1String("current-color-scheme")) { for (auto i = style_sheets.cbegin(); i != style_sheets.cend(); ++i) { QXmlStreamWriter & writer = *writers[i.key()]; writer.writeStartElement(QLatin1String("style")); writer.writeAttributes(xmlReader.attributes()); writer.writeCharacters(*i); writer.writeEndElement(); } while (xmlReader.tokenType() != QXmlStreamReader::EndElement) xmlReader.readNext(); } else if (xmlReader.tokenType() != QXmlStreamReader::Invalid) { for (auto i = style_sheets.cbegin(); i != style_sheets.cend(); ++i) { writers[i.key()]->writeCurrentToken(xmlReader); } } } // duplicate the contets also for opposite state // svg_buffers[(QIcon::Normal<<4)|QIcon::On] = svg_buffers[(QIcon::Normal<<4)|QIcon::Off]; // svg_buffers[(QIcon::Selected<<4)|QIcon::On] = svg_buffers[(QIcon::Selected<<4)|QIcon::Off]; } // use the QSvgIconEngine // - assemble the content as it is done by the operator <<(QDataStream &s, const QIcon &icon) // (the QSvgIconEngine::key() + QSvgIconEngine::write()) // - create the QIcon from the content by usage of the QIcon::operator >>(QDataStream &s, const QIcon &icon) // (icon with the (QSvgIconEngine) will be used) QByteArray icon_arr; QDataStream str{&icon_arr, QIODevice::WriteOnly}; str.setVersion(QDataStream::Qt_4_4); QHash filenames; filenames[0] = color_entry->filename; // Note: filenames are ignored in the QSvgIconEngine::read() str << QStringLiteral("svg") << filenames << static_cast(0)/*isCompressed*/ << svg_buffers << static_cast(0)/*hasAddedPimaps*/; QDataStream str_read{&icon_arr, QIODevice::ReadOnly}; str_read.setVersion(QDataStream::Qt_4_4); str_read >> color_entry->svgIcon; pm = color_entry->svgIcon.pixmap(size, mode, state); // load the icon directly from file, if still null if (pm.isNull()) { color_entry->svgIcon = QIcon(color_entry->filename); pm = color_entry->svgIcon.pixmap(size, mode, state); } entryToColorScheme[cache_key] = color_scheme; } return pm; } QPixmap pixmapByEntry(QIconLoaderEngineEntry *entry, const QSize &size, QIcon::Mode mode, QIcon::State state) { if (!XdgIcon::followColorScheme()) { DEEPIN_QT_THEME::colorScheme.setLocalData(QString()); return entry->pixmap(size, mode, state); } QPixmap pixmap; char *type_name = abi::__cxa_demangle(typeid(*entry).name(), 0, 0, 0); if (type_name == QByteArrayLiteral("ScalableFollowsColorEntry")) { if (DEEPIN_QT_THEME::colorScheme.localData().isEmpty()) { const QPalette &pal = qApp->palette(); DEEPIN_QT_THEME::colorScheme.setLocalData(mode == QIcon::Selected ? pal.highlightedText().color().name() : pal.windowText().color().name()); } pixmap = followColorPixmap(static_cast(entry), size, mode, state); } else { pixmap = entry->pixmap(size, mode, state); } free(type_name); DEEPIN_QT_THEME::colorScheme.setLocalData(QString()); return pixmap; } void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) override { if (painter->device()->devType() == QInternal::Widget && XdgIcon::followColorScheme() && DEEPIN_QT_THEME::colorScheme.localData().isEmpty()) { const QPalette &pal = qvariant_cast(dynamic_cast(painter->device())->property("palette")); DEEPIN_QT_THEME::colorScheme.setLocalData(mode == QIcon::Selected ? pal.highlightedText().color().name() : pal.windowText().color().name()); } const QPixmap pix = pixmap(rect.size(), mode, state); if (pix.isNull()) return; painter->drawPixmap(rect, pix); } QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) override { engine->ensureLoaded(); QIconLoaderEngineEntry *entry = engine->entryForSize(size); if (!entry) { DEEPIN_QT_THEME::colorScheme.setLocalData(QString()); return QPixmap(); } return pixmapByEntry(entry, size, mode, state); } void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state) override { return engine->addPixmap(pixmap, mode, state); } void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state) override { return engine->addFile(fileName, size, mode, state); } QString key() const override { return engine->key(); } QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) override { return engine->actualSize(size, mode, state); } QIconEngine *clone() const override { return new XdgIconProxyEngine(static_cast(engine->clone())); } bool read(QDataStream &in) override { return engine->read(in); } bool write(QDataStream &out) const override { return engine->write(out); } void virtual_hook(int id, void *data) override { #if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) if (id == QIconEngine::ScaledPixmapHook) { engine->ensureLoaded(); QIconEngine::ScaledPixmapArgument &arg = *reinterpret_cast(data); // QIcon::pixmap() multiplies size by the device pixel ratio. const int integerScale = qCeil(arg.scale); QIconLoaderEngineEntry *entry = engine->entryForSize(arg.size / integerScale, integerScale); arg.pixmap = entry ? pixmapByEntry(entry, arg.size, arg.mode, arg.state) : QPixmap(); DEEPIN_QT_THEME::colorScheme.setLocalData(QString()); return; } #endif return engine->virtual_hook(id, data); } XdgIconLoaderEngine *engine; QHash entryToColorScheme; }; #endif const char *QDeepinTheme::name = "deepin"; bool QDeepinTheme::m_usePlatformNativeDialog = true; QMimeDatabase QDeepinTheme::m_mimeDatabase; DThemeSettings *QDeepinTheme::m_settings = 0; extern void updateXdgIconSystemTheme(); static void onIconThemeSetCallback() { QIconLoader::instance()->updateSystemTheme(); updateXdgIconSystemTheme(); if (qApp->inherits("Dtk::Widget::DApplication")) { // emit the signal: DApplication::iconThemeChanged qApp->metaObject()->invokeMethod(qApp, QT_STRINGIFY(iconThemeChanged)); } } static void updateWindowGeometry(QWindow *w) { if (w->type() == Qt::ForeignWindow || w->type() == Qt::Desktop) { return; } if (!w->handle() || !w->isTopLevel()) return; if (w->property(DNOT_UPDATE_WINDOW_GEOMETRY).toBool()) { QWindowSystemInterfacePrivate::GeometryChangeEvent gce(w, QHighDpi::fromNativePixels(w->handle()->geometry(), w) #if QT_VERSION < QT_VERSION_CHECK(5, 10, 0) , QRect() #endif ); QGuiApplicationPrivate::processGeometryChangeEvent(&gce); } else {// 通知窗口大小发送改变 const QRect currentGeo = QWindowPrivate::get(w)->geometry; if (!currentGeo.isValid()) return; // 对外提供能hook自动更新窗口大小的方法 QObject *hook_obj = qvariant_cast(w->property(HOOK_UPDATE_WINDOW_GEOMETRY_OBJECT)); if (!hook_obj) { hook_obj = w; } bool accept = true; // 通知窗口即将开始更新其geometry if (hook_obj->metaObject()->indexOfMethod(UPDATE_WINDOW_GEOMETRY_ENTRY "()") >= 0) { QMetaObject::invokeMethod(hook_obj, UPDATE_WINDOW_GEOMETRY_ENTRY, Qt::DirectConnection, Q_RETURN_ARG(bool, accept)); } if (!accept) { // 中断操作 return; } QRect nativeGeo; // 尝试从窗口对象获取新的geometry if (hook_obj->metaObject()->indexOfMethod(UPDATE_WINDOW_GEOMETRY_GEOMETRY "()") >= 0) { QMetaObject::invokeMethod(hook_obj, UPDATE_WINDOW_GEOMETRY_GEOMETRY, Qt::DirectConnection, Q_RETURN_ARG(QRect, nativeGeo)); } if (!nativeGeo.isValid()) { nativeGeo = w->handle()->geometry(); qreal scale = QHighDpiScaling::factor(w); const QPoint &cursor_pos = w->screen()->handle()->cursor()->pos(); // 如果窗口是active的,且鼠标处于窗口内,应当移动窗口位置以保持鼠标相对窗口的位置 if (w->isActive()) { const QMargins &frame_margins = w->handle()->frameMargins(); const QRect &frame_rect = nativeGeo.marginsAdded(frame_margins); if (frame_rect.contains(cursor_pos)) { nativeGeo.moveTopLeft(cursor_pos + (nativeGeo.topLeft() - cursor_pos) * currentGeo.width() * scale / nativeGeo.width()); } } nativeGeo.setSize(currentGeo.size() * scale); } bool positionAutomaticSave = QWindowPrivate::get(w)->positionAutomatic; QWindowPrivate::get(w)->positionAutomatic = false; w->handle()->setGeometry(nativeGeo); QWindowPrivate::get(w)->positionAutomatic = positionAutomaticSave; // 请求重绘 QGuiApplication::sendEvent(w, new QEvent(QEvent::UpdateRequest)); // 通知窗口geometry更新结束 if (hook_obj->metaObject()->indexOfMethod(UPDATE_WINDOW_GEOMETRY_EXIT "()") >= 0) { QMetaObject::invokeMethod(hook_obj, UPDATE_WINDOW_GEOMETRY_EXIT); } } } static void updateAllWindowGeometry() { for (QWindow *w : qGuiApp->allWindows()) { updateWindowGeometry(w); } } // 延迟一段时间更新窗口geometry,防止屏幕缩放比在短时间内连续变化时导致窗口闪动 static void updateAllWindowGeometryDelay(int interval = 500) { static QTimer *t = new QTimer(); t->setSingleShot(true); t->setInterval(interval); t->connect(t, &QTimer::timeout, t, updateAllWindowGeometry, Qt::UniqueConnection); t->start(); } static void notifyScreenScaleUpdated() { for (QScreen *s : qGuiApp->screens()) { Q_EMIT s->geometryChanged(s->geometry()); // 发射信号通知屏幕缩放比发生变化,DApplication中会定义此信号 if (qGuiApp->metaObject()->indexOfSignal("screenDevicePixelRatioChanged(QScreen*)")) { qGuiApp->metaObject()->invokeMethod(qGuiApp, "screenDevicePixelRatioChanged", Q_ARG(QScreen*, s)); } } } static bool updateScaleFactor(qreal value) { if (qIsNull(value)) { value = 1.0; } if (qFuzzyCompare(QHighDpiScaling::m_factor, value)) { return false; } QHighDpiScaling::setGlobalFactor(value); return true; } static void onScaleFactorChanged(qreal value) { if (updateScaleFactor(value)) { notifyScreenScaleUpdated(); updateAllWindowGeometryDelay(); } } // 用于窗口屏幕改变时更新窗口大小 class AutoScaleWindowObject : public QObject { Q_OBJECT public: explicit AutoScaleWindowObject(QObject *parent = nullptr) : QObject(parent) { qGuiApp->installEventFilter(this); } void onScreenChanged(QScreen *s) { Q_UNUSED(s); if (QWindow *w = qobject_cast(sender())) { updateWindowGeometry(w); } } private: bool eventFilter(QObject *watched, QEvent *event) override { if (event->type() != QEvent::PlatformSurface) return false; if (QWindow *w = qobject_cast(watched)) { QPlatformSurfaceEvent *se = static_cast(event); if (se->surfaceEventType() == QPlatformSurfaceEvent::SurfaceCreated) { // 监听窗口屏幕变化信号,自动根据新的屏幕缩放比更新窗口大小 connect(w, &QWindow::screenChanged, this, &AutoScaleWindowObject::onScreenChanged, Qt::DirectConnection); } else { disconnect(w, &QWindow::screenChanged, this, &AutoScaleWindowObject::onScreenChanged); } } return false; } }; // 判断ScreenScaleFactor的值是否应该应用于所有屏幕 static bool isGenericScreenScaleFactors(const QByteArray &value) { for (char ch : value) { if (ch == '=' || ch == ';') return false; } return true; } static void onAutoScaleWindowChanged() { bool on = QDeepinTheme::getSettings()->autoScaleWindow(); if (on) { const QByteArray &multi_scale = QDeepinTheme::getSettings()->screenScaleFactors(); // 只在针对多个屏幕分别设置了缩放比时开启此功能 if (isGenericScreenScaleFactors(multi_scale)) { on = false; } } static AutoScaleWindowObject *event_fileter = nullptr; if (on) { if (event_fileter) return; event_fileter = new AutoScaleWindowObject(qGuiApp); } else { if (!event_fileter) return; event_fileter->deleteLater(); event_fileter = nullptr; } } // 使用 QT_SCREEN_SCALE_FACTORS 为每个屏幕设置不同的缩放比之后,Qt会自动将 dpi 除以主屏的 // 缩放倍数,以此来避免字体被放大。font dpi会影响未设置pixel size的QFont,默认情况下, // QGuiApplication::font() 不会设置pixel size,因此,使用分屏幕设置不同缩放比后,字体却还 // 是缩放前的大小。 // 此处,如果设置了 ScreenScaleFactors,但未指定 ScaleLogcailDpi 时,默认将其重设回主屏 // 的 logicalDpi。 static bool updateScaleLogcailDpi(const QPair &dpi) { bool ok = dpi.first >= 0 && dpi.second >= 0; if (dpi.first > 0) { QHighDpiScaling::m_logicalDpi.first = dpi.first; } else if (qIsNull(dpi.first)) { QHighDpiScaling::m_logicalDpi.first = qGuiApp->primaryScreen()->handle()->logicalDpi().first; } if (dpi.second > 0) { QHighDpiScaling::m_logicalDpi.second = dpi.second; } else if (qIsNull(dpi.second)) { QHighDpiScaling::m_logicalDpi.second = qGuiApp->primaryScreen()->handle()->logicalDpi().second; } return ok; } static QByteArray getEnvValueByScreenScaleFactors(const QByteArray &data) { QByteArray envValue; if (!isGenericScreenScaleFactors(data)) { envValue = data; } else if (!data.isEmpty()) { // 这种情况下,在Qt的实现中,只会将值应用给第一个屏幕,因此此处需要给所有屏幕都设置通用的值 int screen_count = qApp->screens().count(); // 为除了最后一个屏幕的其它屏幕添加缩放比 while (--screen_count) { envValue.append(data).append(';'); } // 为最后一个屏幕添加缩放比 envValue.append(data); } return envValue; } static bool updateScreenScaleFactors(DThemeSettings *s, const QByteArray &value, bool unsetenv = false) { const QByteArray &envValue = getEnvValueByScreenScaleFactors(value); if (qgetenv("QT_SCREEN_SCALE_FACTORS") == envValue) return false; if (envValue.isEmpty()) { if (!unsetenv) return false; qunsetenv("QT_SCREEN_SCALE_FACTORS"); } else { qputenv("QT_SCREEN_SCALE_FACTORS", envValue); } QHighDpiScaling::updateHighDpiScaling(); qDebug() << QHighDpiScaling::logicalDpi(); updateScaleLogcailDpi(s->scaleLogicalDpi()); qDebug() << QHighDpiScaling::logicalDpi(); return true; } static void onScreenScaleFactorsChanged(const QByteArray &value) { if (updateScreenScaleFactors(QDeepinTheme::getSettings(), value, true)) { notifyScreenScaleUpdated(); updateAllWindowGeometryDelay(); } } static bool enabledRTScreenScale() { // 应用中设置了和屏幕缩放相关的环境变量或启动相关属性后后不开启自动缩放功能 static bool enable = !qEnvironmentVariableIsSet("D_DISABLE_RT_SCREEN_SCALE") && !qEnvironmentVariableIsSet("QT_DEVICE_PIXEL_RATIO") && !qEnvironmentVariableIsSet("QT_SCALE_FACTOR") && !qEnvironmentVariableIsSet("QT_AUTO_SCREEN_SCALE_FACTOR") && !qEnvironmentVariableIsSet("QT_SCREEN_SCALE_FACTORS") && !QCoreApplication::testAttribute(Qt::AA_DisableHighDpiScaling) && !QCoreApplication::testAttribute(Qt::AA_EnableHighDpiScaling); return enable; } QDeepinTheme::QDeepinTheme() { #if XDG_ICON_VERSION_MAR >= 3 // 注意!!!, 此处还没有开始启动事件循环, 很多Qt类无法使用, 例如QTimer DEEPIN_QT_THEME::setFollowColorScheme = XdgIcon::setFollowColorScheme; DEEPIN_QT_THEME::followColorScheme = XdgIcon::followColorScheme; #endif if (enabledRTScreenScale()) { QScopedPointer setting(new DThemeSettings(false)); // 程序启动时初始设置屏幕缩放比 updateScaleFactor(setting->scaleFactor()); if (!updateScreenScaleFactors(setting.data(), setting->screenScaleFactors())) { updateScaleLogcailDpi(setting->scaleLogicalDpi()); } } } QDeepinTheme::~QDeepinTheme() { if (QDeepinFileDialogHelper::manager) { QDeepinFileDialogHelper::manager->deleteLater(); QDeepinFileDialogHelper::manager = Q_NULLPTR; } } bool QDeepinTheme::usePlatformNativeDialog(DialogType type) const { if (type == FileDialog) { if (qgetenv("_d_disableDBusFileDialog") == "true") return false; static bool dbusDialogManagerInitialized = false; if (!dbusDialogManagerInitialized) { dbusDialogManagerInitialized = true; QDeepinFileDialogHelper::initDBusFileDialogManager(); } return m_usePlatformNativeDialog && QDeepinFileDialogHelper::manager && QDeepinFileDialogHelper::manager->isUseFileChooserDialog(); } return QGenericUnixTheme::usePlatformNativeDialog(type); } QPlatformDialogHelper *QDeepinTheme::createPlatformDialogHelper(DialogType type) const { if (type == FileDialog && usePlatformNativeDialog(type)) return new QDeepinFileDialogHelper(); return QGenericUnixTheme::createPlatformDialogHelper(type); } QIconEngine *QDeepinTheme::createIconEngine(const QString &iconName) const { #ifdef DTHEMED_ICON_LOOKUP if (iconName.contains("/")) // handle Qt-standard paths. return QGenericUnixTheme::createIconEngine(iconName); else return new DIconEngine(iconName); #elif XDG_ICON_VERSION_MAR < 3 return XdgIconEngineCreator::create(iconName); #else return new XdgIconProxyEngine(new XdgIconLoaderEngine(iconName)); #endif } QPixmap QDeepinTheme::standardPixmap(QPlatformTheme::StandardPixmap sp, const QSizeF &size) const { switch (sp) { case ArrowRight: return QPixmap(":/images/arrow-light.png"); default: break; } return QGenericUnixTheme::standardPixmap(sp, size); } #if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) QIcon QDeepinTheme::fileIcon(const QFileInfo &fileInfo, QPlatformTheme::IconOptions iconOptions) const { Q_UNUSED(iconOptions); return XdgIcon::fromTheme(m_mimeDatabase.mimeTypeForFile(fileInfo).iconName()); } #else QPixmap QDeepinTheme::fileIconPixmap(const QFileInfo &fileInfo, const QSizeF &size, QPlatformTheme::IconOptions iconOptions) const { Q_UNUSED(iconOptions); return XdgIcon::fromTheme(m_mimeDatabase.mimeTypeForFile(fileInfo).iconName()).pixmap(size.toSize()); } #endif QVariant QDeepinTheme::themeHint(QPlatformTheme::ThemeHint hint) const { switch (hint) { case QPlatformTheme::StyleNames: { if (settings()->isSetStyleNames() && !settings()->styleNames().isEmpty()) return settings()->styleNames(); break; } case QPlatformTheme::SystemIconThemeName: if (settings()->isSetIconThemeName()) return settings()->iconThemeName(); return QVariant(); case QPlatformTheme::SystemIconFallbackThemeName: if (settings()->isSetFallbackIconThemeName()) return settings()->fallbackIconThemeName(); return QVariant("deepin"); case QPlatformTheme::IconThemeSearchPaths: return QVariant(QGenericUnixTheme::xdgIconThemePaths() << QDir::homePath() + "/.local/share/icons"); case UseFullScreenForPopupMenu: return true; default: break; } return QGenericUnixTheme::themeHint(hint); } const QFont *QDeepinTheme::font(QPlatformTheme::Font type) const { if (!qApp->desktopSettingsAware()) return QGenericUnixTheme::font(type); switch (type) { case SystemFont: if (settings()->isSetSystemFont()) { static QFont *system_font = new QFont(""); if (!settings()->systemFont().isEmpty()) { system_font->setFamily(settings()->systemFont()); system_font->setPointSizeF(settings()->systemFontPointSize()); } return system_font; } break; case FixedFont: if (settings()->isSetSystemFixedFont()) { static QFont *fixed_font = new QFont(""); if (!settings()->systemFixedFont().isEmpty()) { fixed_font->setFamily(settings()->systemFixedFont()); fixed_font->setPointSizeF(settings()->systemFontPointSize()); } return fixed_font; } break; default: break; } return QGenericUnixTheme::font(type); } static void compelledUpdateScaleLogcailDpi() { updateScaleLogcailDpi(QDeepinTheme::getSettings()->scaleLogicalDpi()); } static void onScreenAdded(QScreen *s) { if (QHighDpiScaling::m_screenFactorSet) { auto setting = QDeepinTheme::getSettings(); auto value = setting->screenScaleFactors(); if (!value.isEmpty() && isGenericScreenScaleFactors(value)) { const QByteArray &envValue = getEnvValueByScreenScaleFactors(value); qputenv("QT_SCREEN_SCALE_FACTORS", envValue); bool ok = false; qreal scale = value.toDouble(&ok); // 为新的屏幕设置缩放比 if (ok) QHighDpiScaling::setScreenFactor(s, scale); } } compelledUpdateScaleLogcailDpi(); } DThemeSettings *QDeepinTheme::settings() const { if (!m_settings) { m_settings = new DThemeSettings(); qApp->setProperty("_d_theme_settings_object", (quintptr)m_settings); if (qApp->inherits("Dtk::Widget::DApplication")) { QObject::connect(m_settings, SIGNAL(iconThemeNameChanged(QString)), qApp, SLOT(iconThemeChanged()), Qt::UniqueConnection); } auto updateSystemFont = [this] { qApp->setFont(*font(QPlatformTheme::SystemFont)); }; QObject::connect(m_settings, &DThemeSettings::systemFontChanged, m_settings, updateSystemFont, Qt::UniqueConnection); QObject::connect(m_settings, &DThemeSettings::systemFontPointSizeChanged, m_settings, updateSystemFont, Qt::UniqueConnection); QObject::connect(m_settings, &DThemeSettings::iconThemeNameChanged, m_settings, &onIconThemeSetCallback, Qt::UniqueConnection); if (enabledRTScreenScale()) { #ifdef QT_NO_DEBUG if (!qEnvironmentVariableIsSet("D_ENABLE_RT_SCALE")) return m_settings; #endif QObject::connect(m_settings, &DThemeSettings::scaleFactorChanged, m_settings, onScaleFactorChanged, Qt::UniqueConnection); QObject::connect(m_settings, &DThemeSettings::screenScaleFactorsChanged, m_settings, onScreenScaleFactorsChanged, Qt::UniqueConnection); QObject::connect(m_settings, &DThemeSettings::scaleLogicalDpiChanged, m_settings, updateScaleLogcailDpi, Qt::UniqueConnection); // 当屏幕connected时,Qt库中会更新缩放值,导致dpi的设置被覆盖,此处应该再重新设置dpi值。 // TODO(zccrs): 当最后一个屏幕disconnectd时,Qt不会移除它,在这种状态下,插入一个新的 // 屏幕时,Qt只会更新遗留的screen对象的信息,因此不会有screenAdded信号, // 而且同样会更新dpi的值,因为目前无法通过Qt api检测到此状态,所以这种情 // 况下无法自动更新dpi值,将导致应用字体显示大小不受缩放比控制。 // !!! // 针对 dtk 应用,将在dxcb插件中通知应用更新dpi值。 qApp->setProperty("_d_updateScaleLogcailDpi", (quintptr)&compelledUpdateScaleLogcailDpi); QObject::connect(qApp, &QGuiApplication::screenAdded, m_settings, onScreenAdded, Qt::ConnectionType(Qt::QueuedConnection | Qt::UniqueConnection)); if (!qEnvironmentVariableIsSet(DISABLE_UPDATE_WINDOW_GEOMETRY)) { QObject::connect(m_settings, &DThemeSettings::autoScaleWindowChanged, m_settings, onAutoScaleWindowChanged, Qt::UniqueConnection); QObject::connect(m_settings, &DThemeSettings::screenScaleFactorsChanged, m_settings, onAutoScaleWindowChanged, Qt::UniqueConnection); onAutoScaleWindowChanged(); } } } return m_settings; } DThemeSettings *QDeepinTheme::getSettings() { return m_settings; } QT_END_NAMESPACE #include "qdeepintheme.moc" qt5integration-5.0.0/platformthemeplugin/qdeepintheme.h000066400000000000000000000042021347440174500234070ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef QDEEPINTHEME_H #define QDEEPINTHEME_H #include #include #include #include class DThemeSettings; class QDeepinTheme : public QGenericUnixTheme { public: QDeepinTheme(); ~QDeepinTheme(); bool usePlatformNativeDialog(DialogType type) const Q_DECL_OVERRIDE; QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const Q_DECL_OVERRIDE; QIconEngine *createIconEngine(const QString &iconName) const Q_DECL_OVERRIDE; QPixmap standardPixmap(StandardPixmap sp, const QSizeF &size) const Q_DECL_OVERRIDE; #if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) QIcon fileIcon(const QFileInfo &fileInfo, QPlatformTheme::IconOptions iconOptions = 0) const Q_DECL_OVERRIDE; #else QPixmap fileIconPixmap(const QFileInfo &fileInfo, const QSizeF &size, QPlatformTheme::IconOptions iconOptions = 0) const Q_DECL_OVERRIDE; #endif QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE; const QFont *font(Font type) const Q_DECL_OVERRIDE; DThemeSettings *settings() const; static DThemeSettings *getSettings(); static const char *name; private: static bool m_usePlatformNativeDialog; static QMimeDatabase m_mimeDatabase; static DThemeSettings *m_settings; friend class QDeepinFileDialogHelper; friend class QDeepinPlatformMenu; }; #endif // QDEEPINTHEME_H qt5integration-5.0.0/platformthemeplugin/qt5deepintheme-plugin.pro000066400000000000000000000045461347440174500255400ustar00rootroot00000000000000 QT += dbus x11extras QT += core-private gui-private greaterThan(QT_MAJOR_VERSION, 4) { QT += widgets widgets-private # Qt >= 5.8 greaterThan(QT_MAJOR_VERSION, 5)|greaterThan(QT_MINOR_VERSION, 7): QT += theme_support-private else: QT += platformsupport-private } TARGET = qdeepin TEMPLATE = lib CONFIG += plugin link_pkgconfig c++11 # Test using dthemed_icon_lookup load(configure) qtCompileTest(dthemed_icon_lookup) { DEFINES += DTHEMED_ICON_LOOKUP PKGCONFIG += dtkwidget til SOURCES += diconengine.cpp HEADERS += diconengine.h } PKGCONFIG += mtdev Qt5Xdg x11 Qt5XdgIconLoader dtkcore PKG_CONFIG = $$pkgConfigExecutable() XDG_ICON_VERSION = $$system($$PKG_CONFIG --modversion Qt5XdgIconLoader) XDG_ICON_VERSION_LIST = $$split(XDG_ICON_VERSION, .) INCLUDEPATH += $$system($$PKG_CONFIG --variable includedir Qt5XdgIconLoader)/qt5xdgiconloader/$$XDG_ICON_VERSION DEFINES += "XDG_ICON_VERSION_MAR=$$first(XDG_ICON_VERSION_LIST)" PLUGIN_TYPE = platformthemes PLUGIN_EXTENDS = - PLUGIN_CLASS_NAME = QDeepinTheme DESTDIR = $$_PRO_FILE_PWD_/../bin/plugins/platformthemes SOURCES += qdeepintheme.cpp \ main.cpp \ qdeepinfiledialoghelper.cpp \ diconproxyengine.cpp \ dthemesettings.cpp \ xdgiconenginecreator.cpp HEADERS += qdeepintheme.h \ qdeepinfiledialoghelper.h \ diconproxyengine.h \ dthemesettings.h \ xdgiconenginecreator.h DISTFILES += \ deepin.json unix { target.path = $$[QT_INSTALL_PLUGINS]/platformthemes INSTALLS += target } RESOURCES += \ theme.qrc CONFIG(release, debug|release) { DEFINES += QT_NO_DEBUG_OUTPUT } #dbus_interface_filedialogmanager = /usr/share/dbus-1/interfaces/com.deepin.filemanager.filedialogmanager.xml #dbus_interface_filedialog = /usr/share/dbus-1/interfaces/com.deepin.filemanager.filedialog.xml #!exists($$dbus_interface_filedialogmanager) { # warning(Not found $$dbus_interface_filedialogmanager) dbus_interface_filedialogmanager = $$PWD/xmls/com.deepin.filemanager.filedialogmanager.xml #} #message(Will be use $$dbus_interface_filedialogmanager) #!exists($$dbus_interface_filedialog) { # warning(Not found $$dbus_interface_filedialog) dbus_interface_filedialog = $$PWD/xmls/com.deepin.filemanager.filedialog.xml #} #message(Will be use $$dbus_interface_filedialog) DBUS_INTERFACES += $$dbus_interface_filedialogmanager $$dbus_interface_filedialog qt5integration-5.0.0/platformthemeplugin/theme.qrc000066400000000000000000000010331347440174500223760ustar00rootroot00000000000000 menu.qss images/arrow-light-hover.png images/arrow-light.png images/check_dark_hover.png images/check_light_hover.png images/check_dark_normal.png images/arrow-light-inactive.png images/check_dark_inactive.png images/check_light_normal.png images/check_light_inactive.png qt5integration-5.0.0/platformthemeplugin/xdgiconenginecreator.cpp000066400000000000000000000017251347440174500255020ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd. * * Author: zccrs * * Maintainer: zccrs * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "xdgiconenginecreator.h" #include QIconEngine * XdgIconEngineCreator::create(const QString &name) { return new XdgIconLoaderEngine(name); } qt5integration-5.0.0/platformthemeplugin/xdgiconenginecreator.h000066400000000000000000000017461347440174500251520ustar00rootroot00000000000000/* * Copyright (C) 2017 ~ 2019 Deepin Technology Co., Ltd. * * Author: zccrs * * Maintainer: zccrs * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef XDGICONENGINECREATOR_H #define XDGICONENGINECREATOR_H #include class XdgIconEngineCreator { public: static QIconEngine *create(const QString &name); }; #endif // XDGICONENGINECREATOR_H qt5integration-5.0.0/platformthemeplugin/xmls/000077500000000000000000000000001347440174500215535ustar00rootroot00000000000000qt5integration-5.0.0/platformthemeplugin/xmls/com.deepin.filemanager.filedialog.xml000066400000000000000000000072251347440174500306730ustar00rootroot00000000000000 qt5integration-5.0.0/platformthemeplugin/xmls/com.deepin.filemanager.filedialogmanager.xml000066400000000000000000000014341347440174500322220ustar00rootroot00000000000000 qt5integration-5.0.0/qt5integration.pro000066400000000000000000000004211347440174500201760ustar00rootroot00000000000000TEMPLATE = subdirs SUBDIRS += \ dstyleplugin\ platformthemeplugin/qt5deepintheme-plugin.pro \ iconengineplugins/iconengines.pro \ imageformatplugins/imageformats.pro CONFIG(debug, debug|release) { SUBDIRS += styles styles.depends += dstyleplugin } qt5integration-5.0.0/styles/000077500000000000000000000000001347440174500160255ustar00rootroot00000000000000qt5integration-5.0.0/styles/images/000077500000000000000000000000001347440174500172725ustar00rootroot00000000000000qt5integration-5.0.0/styles/images/woodbackground.png000066400000000000000000000170131347440174500230120ustar00rootroot00000000000000PNG  IHDR``F pHYsHHFk>PLTEVDbDfdaKfLgdhZJ4P\Z8_Ob@gLhWjŸGtlߴC7Lɡ*rKEwmI3Ȳr J6]f;i{^BO*"]T v^*g$L,imJmfbi0!?ǰ a^߬ =!+$1a2:pQw6M QAqY`:u=o8 lTy#WP|0:k"锲cę׻,*P҉T c&rW)V*Fm4A˃,$#rJy#g~LJgd"JoJ\25+e@;W[ i 0i0dž8J|ܴ0¤>3Ÿ>,rB1Ef$+7ƪkTp/V/I< `VmCMccc5G; N# 8f vQsr(\@bj|}0C:X0a(B:E !nvhQ ~s\퍆2".:EAg0v)b}nwdTRMdzRnVlSKh:-pxV{]f/?e2ɔ:lػv? 9^6+DZ:Fl_˲N7_{5 5]36yq,B7#̀%i:9~t]#q!aͺEAd{0ggrq"nNF_W#dP'9mss1m?i;z2kX%/_>jCb0U: .yyx>3|ZۣA8FGUwMhh,F BմB ˽{頜WHv/T&&SG:aڿݘ5r¢|*SOٟHŋY;.Gi}{39b-O*,Y&޷7fkjg< {@lnx}EEذawGwAT*i|U'IkhnzǷ(T碦 zC/YxSo5"XumCwn{(.H8mFҗ3#[j8V;: v=3Й0f˗yZo=ѻ&`ڜjG/$Kˣ/9  *Y/ xz^QcϨ@E v޸tBlqϞLpv@ m*)8~q7ralo$Ⱦf0U:/`ޙ>7O6_ٱ^d01Nep}y=u0ħJt`lrL}]^anM"t0#u&ioׇCW+jc{ OLFSJ|9v;s&Q/Ub8VoO?3jl :2tǯ힒*&[RybѥJvB?'e]sܡGRl!̦Xvjeks15lsF]+3i._~X+HNgx񏽭J!i/is9r Qq (?&f%W ?P1nHS+϶ ojJ&A+o"CUhG3jڷk)~0B*o0XHDj_6?}HD|KZC} ywZ'JYQCt$ed'vl$n윀Sß@ߢu)8N9ഭR*_qk_8䍓?cgo3qzHp2h,GMIfpF' w?ةM`! @@::k.Rݫ0[[(GǙEU>KC=9qbxW}ܷ̆w]NObyˑʳ^8 UpgHc)aӳe!9il=hɅ/ؽ,~'z[aܡi /͕nj@\ [97f$3= fԸbW?XՃ ^= c ÑMY%?( Q `qת4DV|UklFx^;\Wn-c1_'7ڧQFIc;Bv Z+E< ƭ08g=Қu7md9j*?Qh'>_ֳN?$~e`V[%RHmH;Nj\||;/ރ {8c "KGsG_ޓzX&C;ήJ˪*vZ#9zPJݘBʹ3=?WY,g~?&EY)в$a ƇZ(.A`*.+pЁT)9Ecg>!},G%oE%<~w)/EO)"{R^[i[6S[w+! mAR#8Sw r7nhj&ܥEm7TOP1N]?xv0gH˓c%0®UeǮm v|ܹ7.B&!!\1҈ue{Ftz? ~xK$@__uWT( E EhV4z]m״1u_:Re%d~_<,?(9ycWv`U2k]۵yG4sLm`a:kb[ar.jhɃ-*rZ]|=qNaPV[Lʠ{K#fɭ:7#L Ic};vLMc1P7Rs|p`[=rO@; "~e(JnL~}:O3/i]tygWW-652[<3[[5B FGFW"=x;jݎudL+Ϋn!Ci/D|@Th{j L6F*U,(#/:)kŰPVL_0r*dn_܋1[SO+eiq&IN];wv*ݤdT-;?kEb1G0C3=g*Ԅ{xtv=f N+U6JTT.\M2\E_qWT+yHMh cT[dsvVvBJ~dny5*p-I(=QqI[8]O]fCns;8"28?}zlXV[4]N;T|ً?;EKK#{8Ўh8f޻w I7%:&q2(^ٶ"(_l}b8ٳov_kZd~?~㷼&̺`tsVۍlĥWTEjwS%-UkߔOK_y KefV^;?F*~*!Gk`ɺ&c&(M!~t:.2ؾy^w<.EfUY'8~*볫t篯n a+.փy 3Yݠݿ/a(+(˖ӯ.6]~ywdF7dPgџwdHu Rŵ]h8o_j1TE~^A우'δr+"ps]y>,9ilqo$|Qoy?&w{w݃p³If:$ψk0/@yR ĵ,ȧ,jBJn#rh߿%HXqcɮ0ܡKͯ߰ouA* ЅnRV51!9yO:P,0tE߇s39 _1R5:d},~(}ISN8>#XU׎vH+ʪ1:߈=gݹ@gmYdOpla_6=Y)r]сQτ/_Plg0$aSy?mr#If`{~zsavTeyJFܘc(.ZFhnʫՕb5O׽eU@AVQuAhW\o=":{+Ha LƓ[&7)`+>#C rvIoBY]p^kM:]i ؃5,Wt Ly {_ik*e, m+ raHyNqcMa5Fy\Zwgn[@m׹?1;WOQ2G:;[RYGƯ4VC;(|t[x{fHtYc4(DY˿o,ǶWvW %2N]zJ*@[yBE+,&ق73Q=>p,'"M{;ޘgI)|Tߕ3R+x0_}dZ3<8e)y5UJ!t+z!A/̃Ng\M 9${ ['^{u @;WEY]aJiF%m0G'Sh "60SU9Ab̚HEm^} `@E%(7$xz($^Ih sE,BǮUF}.Y?@^ï+I% OMA|DV07‡<./ۋ"z d gEk;vDB/| gCrz/5e WhSi ? r[h'N&uq Qc5AZ~(?A2#ݕ0"BrcGy3Wď?dzYttyfad-ڍyY[u6~p4y4#/FPUֆ:涠f~B,y6IENDB`qt5integration-5.0.0/styles/images/woodbutton.png000066400000000000000000000170111347440174500222040ustar00rootroot00000000000000PNG  IHDR``F pHYsHHFk>PLTEC+NKR+MIN0S?T124EGH3P$R;T0X@Z ^b_#aCk09?3DMM!R+R6[9_*bCk.s>uKm:iF<CF1KKKNP6Q-R"THY,Z7a^` `RaEb!e/e:i kCl:p.t"uHy6K ^-GN(EIDATߏ$IboDFdUwOWWUVedVfVwL,]z{l |@X~'$̃@$d #9A6|vfw5w;=3#2#z2#2χ<ӷ?rx; Ξ^w_^ڤ;;\)G+۳{sq)C͆rj5 \ 7b!tMW_a>T@\Va dZƷJe5; [F3k!pIZ@S}@@NS,J; T{OІo-rjFl⭝|2q2sdcVȽj淭O+q{$WF7>Μ @: @ @r3KiTsog],dx|y00h^]FeԬ+>H%S:eU{!{ '{@nssw>hWf}xPUwq4+1 HTPjЖz U;="8p ueVAbrBK$m8hTJf4@+lnj<[OXrzus0ъhR'GgVmܾ0@`9}o0CdeI.He!1{> ղJMu:'KtN'GAj_Í~uҴb@|`A,hu 'μBcBIlփܐ",qLr=ިP1 ,+OWhP9 7MzBm> {-3 BgX/'JMc"/b<׍qM:}yȔv קѕY*g<<Rqh deaU{jYS:8mcKAv>-b3* ^/GWLʗ[|ߚ=zrfuzMYЊ~kƠ5v`0f鍦x_GڣqB@ ȝ7)p'q"@'o:C3t*`~)6;]$xq.ʝ je  Љ%%b'lD27.T@<7B'_Gxjȼ̻ho;\eeQ7L!Aԭ:|*؆[9ž2PXRc7Xd%c#PDFs=')g.m|[9vR`Hl>2Qjj^9^y<pmUm]JW2v)sO;9oS2vg=L7ȳRW=& @1kw@;s-fvPa=Pփyt.Vh=q ~1Óf6R+E.}nqtȀIDi #I#A1:^e&`(m. 3F -AgR[C1tE p7Թ)=j\>W<g~A8_$jBԑ{IA8f`ĵWT#;k+|nLg|1<b-Rcx|?_@n7[&p0}dF?"(The^t.}cam;tLfP!_eK'+P.ǗV+ѱwz4?J[-.5C[O;gJCN[oG<_TDO*!UKj1M>M=e'$|+D+ǧ5 s+ܢ-d7pus`Wf@5Sda0ѣyJv@ȅoW Z"wɨD/Zcy*? Sdv o9xt:F!02(|8uoRn;u<`H" F]o@˚2o fyRC[8܁/{ҚCڹ o;!Zs `t\n9eԄN^tEZ#VGjXޠ/`nb| m(* ɘXrINkx1( ~5iI[&@藫֒OyŹ XbK*>#!B <KT8״۷1>  (`g"NOmwbDP^! ^ df?O&zzSyQu>Ab{[|`Y%|#Ѫ{\j~Jo/mMo։\ Վ N?WNqTNZ)RQ (^%H^ ܐ-0w "ܧ\XyKuʦ5 w1+9n[k5X FCS5 68ʎ jqҳ8:(ٯlۯ! 6w%< G4mL'8+ŀLpܶ)peN20A+:|ܧr-ޡO>:8$?㵪&7LwxxV;/_?|պ*n^bl[j17/7˧>y:sV<ԚYz,o{7ɕc~YxV8`3rWFzy9]0C1 yu]v2@L))@6nP`5H@ H|**TM.|y3\ʊ*P*=U`]s@-`0 ?DC*pp5/ 0w1_w\r s@u3` BՋWOnWՀod97YR8yҮ-Ptq4ȤW6aA-ƣˁ~|z̕k5&n@br^ab6` OH0G:XEEfɒ*iHP}_E`8}nP(:C00~D0hJ!00lQI)x+͒@ X>8KLZ_X?@W~9P_/& wO疽t.-+SuZݙg_T ϖw@Ygx_C,HUFr(3dT#%nzF7@#huj+{^f?p{街`R :oǧב{6_(p=N}gYp{{Ozs^uXA;ϗymbTJ q/ \C!)hub}>)7?bj9XUTY%蓯A` @*80@G'FJ2ihqAm >Rh@ĺ3 x?}9/\Q;7>2]\/T2x+mp^] rQк1>FJ*SVpܚh^"sB"ە@j)P.Zΰ}@/ҷn8:Հ_%! 栶9sۣޏP>4޳Mo 88߼v~;6={>sD|_L&xՌ?5 nI0ʧFܴF>w9o# `o冁<&4@:;f''-?hi} xY4aѳl`QeJ !PƈKlB֘GDotր,! !n/,6{u)5=P<$ A<8^,RsvQk[5Ɓb 1tu01t^f-weU441Lͱ#vhkjrUZق@qoT ^ xހS3cX"X%Jzl:@aP\yeHT]l"3b=&ZXm1N5 QI}`L1ƹ͂EWO v4w_aOz_f[_m^Sey˹z}M;!yl{Sd_gƳl s$Kjw/h fG(P[ʀDgЙ\V@P3 QHk 9ָiS#  sRYE(2NFXƺU`cb Hqdh=@`ig84ztHɌemP`]`aKAʚh`&$^nvâqϬ***F"٘m1:y6_녨:)7ʐs1Xk{K|4`oO> XQqS[* \9f,~ɓ9_fuH P&̤#OL k>IprѪ^w?ydH)$bi;iߏs?OYX+?]t3V4C,=c׮#g{?|aɽ +k#C'Қ^P+B˘Ĩ4nS`UmʭT b.3 4@ a&t/mcgwyxIJZŐߩHTr =6( i^*&Q#@a=O|$H))[A@{@z\1`0^jٔO@Аr-{кA&d`,.-a])Q33PL~ѷ :*9V +Y9/.4YzݑTWt1@cƩ1X$B:# dRH7+m !#EtE&,&l(yI@ESxjL$I5S+ojhԡ^[uZ;aGV҅5wO;ۉY 54 ")`Xݏ2Y?5,i%~wȺp=ÿƝb#eOVs/~bEgtkY[P`퓓tDoZ,LڐB'iH{7[jcQpPo ^ae 2-AsA ,o_A59+e2椉46he{ ZgS<3+8#|q,kuibQ!ak?fx$$pYn#IF͉. Jwg[!!o а@LZP-3UXh~ta|5N>4hcpehʡ˄RҌ~=. yj6jqc' T@I~6RYv@/kA\k}WVۨ6Fa Q >Z!Wnd$gxPVUbK+t ̳8;R<;m[d.7d[J!#dXӻlq(fD Mנ*0Va8}9ƻYUOkmbNIo<w@`ZJ8,ѲCgIENDB`qt5integration-5.0.0/styles/main.cpp000066400000000000000000000045351347440174500174640ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include "widgetgallery.h" int main(int argc, char *argv[]) { Q_INIT_RESOURCE(styles); QStringList paths = QApplication::libraryPaths(); paths.prepend(QFileInfo(QString::fromUtf8(argv[0])).path() + "/plugins/"); QApplication::setLibraryPaths(paths); QApplication app(argc, argv); WidgetGallery gallery; gallery.show(); return app.exec(); } qt5integration-5.0.0/styles/norwegianwoodstyle.cpp000066400000000000000000000254061347440174500225030ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "norwegianwoodstyle.h" NorwegianWoodStyle::NorwegianWoodStyle() : QProxyStyle(QStyleFactory::create("windows")) { } //! [0] void NorwegianWoodStyle::polish(QPalette &palette) { QColor brown(212, 140, 95); QColor beige(236, 182, 120); QColor slightlyOpaqueBlack(0, 0, 0, 63); QPixmap backgroundImage(":/images/woodbackground.png"); QPixmap buttonImage(":/images/woodbutton.png"); QPixmap midImage = buttonImage; QPainter painter; painter.begin(&midImage); painter.setPen(Qt::NoPen); painter.fillRect(midImage.rect(), slightlyOpaqueBlack); painter.end(); //! [0] //! [1] palette = QPalette(brown); palette.setBrush(QPalette::BrightText, Qt::white); palette.setBrush(QPalette::Base, beige); palette.setBrush(QPalette::Highlight, Qt::darkGreen); setTexture(palette, QPalette::Button, buttonImage); setTexture(palette, QPalette::Mid, midImage); setTexture(palette, QPalette::Window, backgroundImage); QBrush brush = palette.background(); brush.setColor(brush.color().dark()); palette.setBrush(QPalette::Disabled, QPalette::WindowText, brush); palette.setBrush(QPalette::Disabled, QPalette::Text, brush); palette.setBrush(QPalette::Disabled, QPalette::ButtonText, brush); palette.setBrush(QPalette::Disabled, QPalette::Base, brush); palette.setBrush(QPalette::Disabled, QPalette::Button, brush); palette.setBrush(QPalette::Disabled, QPalette::Mid, brush); } //! [1] //! [3] void NorwegianWoodStyle::polish(QWidget *widget) //! [3] //! [4] { if (qobject_cast(widget) || qobject_cast(widget)) widget->setAttribute(Qt::WA_Hover, true); } //! [4] //! [5] void NorwegianWoodStyle::unpolish(QWidget *widget) //! [5] //! [6] { if (qobject_cast(widget) || qobject_cast(widget)) widget->setAttribute(Qt::WA_Hover, false); } //! [6] //! [7] int NorwegianWoodStyle::pixelMetric(PixelMetric metric, //! [7] //! [8] const QStyleOption *option, const QWidget *widget) const { switch (metric) { case PM_ComboBoxFrameWidth: return 8; case PM_ScrollBarExtent: return QProxyStyle::pixelMetric(metric, option, widget) + 4; default: return QProxyStyle::pixelMetric(metric, option, widget); } } //! [8] //! [9] int NorwegianWoodStyle::styleHint(StyleHint hint, const QStyleOption *option, //! [9] //! [10] const QWidget *widget, QStyleHintReturn *returnData) const { switch (hint) { case SH_DitherDisabledText: return int(false); case SH_EtchDisabledText: return int(true); default: return QProxyStyle::styleHint(hint, option, widget, returnData); } } //! [10] //! [11] void NorwegianWoodStyle::drawPrimitive(PrimitiveElement element, //! [11] //! [12] const QStyleOption *option, QPainter *painter, const QWidget *widget) const { switch (element) { case PE_PanelButtonCommand: { int delta = (option->state & State_MouseOver) ? 64 : 0; QColor slightlyOpaqueBlack(0, 0, 0, 63); QColor semiTransparentWhite(255, 255, 255, 127 + delta); QColor semiTransparentBlack(0, 0, 0, 127 - delta); int x, y, width, height; option->rect.getRect(&x, &y, &width, &height); //! [12] //! [13] QPainterPath roundRect = roundRectPath(option->rect); //! [13] //! [14] int radius = qMin(width, height) / 2; //! [14] //! [15] QBrush brush; //! [15] //! [16] bool darker; const QStyleOptionButton *buttonOption = qstyleoption_cast(option); if (buttonOption && (buttonOption->features & QStyleOptionButton::Flat)) { brush = option->palette.background(); darker = (option->state & (State_Sunken | State_On)); } else { if (option->state & (State_Sunken | State_On)) { brush = option->palette.mid(); darker = !(option->state & State_Sunken); } else { brush = option->palette.button(); darker = false; //! [16] //! [17] } //! [17] //! [18] } //! [18] //! [19] painter->save(); //! [19] //! [20] painter->setRenderHint(QPainter::Antialiasing, true); //! [20] //! [21] painter->fillPath(roundRect, brush); //! [21] //! [22] if (darker) //! [22] //! [23] painter->fillPath(roundRect, slightlyOpaqueBlack); //! [23] //! [24] int penWidth; //! [24] //! [25] if (radius < 10) penWidth = 3; else if (radius < 20) penWidth = 5; else penWidth = 7; QPen topPen(semiTransparentWhite, penWidth); QPen bottomPen(semiTransparentBlack, penWidth); if (option->state & (State_Sunken | State_On)) qSwap(topPen, bottomPen); //! [25] //! [26] int x1 = x; int x2 = x + radius; int x3 = x + width - radius; int x4 = x + width; if (option->direction == Qt::RightToLeft) { qSwap(x1, x4); qSwap(x2, x3); } QPolygon topHalf; topHalf << QPoint(x1, y) << QPoint(x4, y) << QPoint(x3, y + radius) << QPoint(x2, y + height - radius) << QPoint(x1, y + height); painter->setClipPath(roundRect); painter->setClipRegion(topHalf, Qt::IntersectClip); painter->setPen(topPen); painter->drawPath(roundRect); //! [26] //! [32] QPolygon bottomHalf = topHalf; bottomHalf[0] = QPoint(x4, y + height); painter->setClipPath(roundRect); painter->setClipRegion(bottomHalf, Qt::IntersectClip); painter->setPen(bottomPen); painter->drawPath(roundRect); painter->setPen(option->palette.foreground().color()); painter->setClipping(false); painter->drawPath(roundRect); painter->restore(); } break; //! [32] //! [33] default: //! [33] //! [34] QProxyStyle::drawPrimitive(element, option, painter, widget); } } //! [34] //! [35] void NorwegianWoodStyle::drawControl(ControlElement element, //! [35] //! [36] const QStyleOption *option, QPainter *painter, const QWidget *widget) const { switch (element) { case CE_PushButtonLabel: { QStyleOptionButton myButtonOption; const QStyleOptionButton *buttonOption = qstyleoption_cast(option); if (buttonOption) { myButtonOption = *buttonOption; if (myButtonOption.palette.currentColorGroup() != QPalette::Disabled) { if (myButtonOption.state & (State_Sunken | State_On)) { myButtonOption.palette.setBrush(QPalette::ButtonText, myButtonOption.palette.brightText()); } } } QProxyStyle::drawControl(element, &myButtonOption, painter, widget); } break; default: QProxyStyle::drawControl(element, option, painter, widget); } } //! [36] //! [37] void NorwegianWoodStyle::setTexture(QPalette &palette, QPalette::ColorRole role, //! [37] //! [38] const QPixmap &pixmap) { for (int i = 0; i < QPalette::NColorGroups; ++i) { QColor color = palette.brush(QPalette::ColorGroup(i), role).color(); palette.setBrush(QPalette::ColorGroup(i), role, QBrush(color, pixmap)); } } //! [38] //! [39] QPainterPath NorwegianWoodStyle::roundRectPath(const QRect &rect) //! [39] //! [40] { int radius = qMin(rect.width(), rect.height()) / 2; int diam = 2 * radius; int x1, y1, x2, y2; rect.getCoords(&x1, &y1, &x2, &y2); QPainterPath path; path.moveTo(x2, y1 + radius); path.arcTo(QRect(x2 - diam, y1, diam, diam), 0.0, +90.0); path.lineTo(x1 + radius, y1); path.arcTo(QRect(x1, y1, diam, diam), 90.0, +90.0); path.lineTo(x1, y2 - radius); path.arcTo(QRect(x1, y2 - diam, diam, diam), 180.0, +90.0); path.lineTo(x1 + radius, y2); path.arcTo(QRect(x2 - diam, y2 - diam, diam, diam), 270.0, +90.0); path.closeSubpath(); return path; } //! [40] qt5integration-5.0.0/styles/norwegianwoodstyle.h000066400000000000000000000061771347440174500221540ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef NORWEGIANWOODSTYLE_H #define NORWEGIANWOODSTYLE_H #include #include QT_BEGIN_NAMESPACE class QPainterPath; QT_END_NAMESPACE //! [0] class NorwegianWoodStyle : public QProxyStyle { Q_OBJECT public: NorwegianWoodStyle(); void polish(QPalette &palette) Q_DECL_OVERRIDE; void polish(QWidget *widget) Q_DECL_OVERRIDE; void unpolish(QWidget *widget) Q_DECL_OVERRIDE; int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE; int styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const Q_DECL_OVERRIDE; void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const Q_DECL_OVERRIDE; void drawControl(ControlElement control, const QStyleOption *option, QPainter *painter, const QWidget *widget) const Q_DECL_OVERRIDE; private: static void setTexture(QPalette &palette, QPalette::ColorRole role, const QPixmap &pixmap); static QPainterPath roundRectPath(const QRect &rect); }; //! [0] #endif qt5integration-5.0.0/styles/styles.pro000066400000000000000000000005531347440174500200750ustar00rootroot00000000000000QT += widgets HEADERS = norwegianwoodstyle.h \ widgetgallery.h SOURCES = main.cpp \ norwegianwoodstyle.cpp \ widgetgallery.cpp RESOURCES = styles.qrc DESTDIR = $$_PRO_FILE_PWD_/../bin/ CONFIG += c++11 # install # target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/styles # INSTALLS += target qt5integration-5.0.0/styles/styles.qrc000066400000000000000000000002241347440174500200550ustar00rootroot00000000000000 images/woodbutton.png images/woodbackground.png qt5integration-5.0.0/styles/widgetgallery.cpp000066400000000000000000000235321347440174500214010ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "norwegianwoodstyle.h" #include "widgetgallery.h" //! [0] WidgetGallery::WidgetGallery(QWidget *parent) : QMainWindow(parent) { originalPalette = QApplication::palette(); styleComboBox = new QComboBox; styleComboBox->addItem("NorwegianWood"); styleComboBox->addItems(QStyleFactory::keys()); styleComboBox->setToolTip("Hello"); styleLabel = new QLabel(tr("&Style:")); styleLabel->setBuddy(styleComboBox); useStylePaletteCheckBox = new QCheckBox(tr("&Use style's standard palette")); useStylePaletteCheckBox->setChecked(true); disableWidgetsCheckBox = new QCheckBox(tr("&Disable widgets")); createTopLeftGroupBox(); createTopRightGroupBox(); createBottomLeftTabWidget(); createBottomRightGroupBox(); createProgressBar(); //! [0] //! [1] connect(styleComboBox, SIGNAL(activated(QString)), //! [1] //! [2] this, SLOT(changeStyle(QString))); connect(useStylePaletteCheckBox, SIGNAL(toggled(bool)), this, SLOT(changePalette())); connect(disableWidgetsCheckBox, SIGNAL(toggled(bool)), topLeftGroupBox, SLOT(setDisabled(bool))); connect(disableWidgetsCheckBox, SIGNAL(toggled(bool)), topRightGroupBox, SLOT(setDisabled(bool))); connect(disableWidgetsCheckBox, SIGNAL(toggled(bool)), bottomLeftTabWidget, SLOT(setDisabled(bool))); connect(disableWidgetsCheckBox, SIGNAL(toggled(bool)), bottomRightGroupBox, SLOT(setDisabled(bool))); //! [2] //! [3] QWidget *mainWidget = new QWidget(); QHBoxLayout *topLayout = new QHBoxLayout; //! [3] //! [4] topLayout->addWidget(styleLabel); topLayout->addWidget(styleComboBox); topLayout->addStretch(1); topLayout->addWidget(useStylePaletteCheckBox); topLayout->addWidget(disableWidgetsCheckBox); QGridLayout *mainLayout = new QGridLayout(mainWidget); mainLayout->addLayout(topLayout, 0, 0, 1, 2); mainLayout->addWidget(topLeftGroupBox, 1, 0); mainLayout->addWidget(topRightGroupBox, 1, 1); mainLayout->addWidget(bottomLeftTabWidget, 2, 0); mainLayout->addWidget(bottomRightGroupBox, 2, 1); mainLayout->addWidget(progressBar, 3, 0, 1, 2); mainLayout->setRowStretch(1, 1); mainLayout->setRowStretch(2, 1); mainLayout->setColumnStretch(0, 1); mainLayout->setColumnStretch(1, 1); setWindowTitle(tr("Styles")); changeStyle("NorwegianWood"); setCentralWidget(mainWidget); menuBar()->addAction("breeze"); menuBar()->addAction("dlight"); menuBar()->addAction("ddark"); menuBar()->addAction("dsemidark"); menuBar()->addAction("dsemilight"); connect(menuBar(), &QMenuBar::triggered, this, [this](const QAction *action) { changeStyle(action->text()); }); } //! [4] //! [5] void WidgetGallery::changeStyle(const QString &styleName) //! [5] //! [6] { if (styleName == "NorwegianWood") { QApplication::setStyle(new NorwegianWoodStyle); } else { QApplication::setStyle(QStyleFactory::create(styleName)); } changePalette(); } //! [6] //! [7] void WidgetGallery::changePalette() //! [7] //! [8] { if (useStylePaletteCheckBox->isChecked()) QApplication::setPalette(QApplication::style()->standardPalette()); else QApplication::setPalette(originalPalette); } //! [8] //! [9] void WidgetGallery::advanceProgressBar() //! [9] //! [10] { int curVal = progressBar->value(); int maxVal = progressBar->maximum(); progressBar->setValue(curVal + (maxVal - curVal) / 100); } //! [10] //! [11] void WidgetGallery::createTopLeftGroupBox() //! [11] //! [12] { topLeftGroupBox = new QGroupBox(tr("Group 1")); radioButton1 = new QRadioButton(tr("Radio button 1")); radioButton2 = new QRadioButton(tr("Radio button 2")); radioButton3 = new QRadioButton(tr("Radio button 3")); radioButton1->setChecked(true); checkBox = new QCheckBox(tr("Tri-state check box")); checkBox->setTristate(true); checkBox->setCheckState(Qt::PartiallyChecked); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(radioButton1); layout->addWidget(radioButton2); layout->addWidget(radioButton3); layout->addWidget(checkBox); layout->addStretch(1); topLeftGroupBox->setLayout(layout); } //! [12] void WidgetGallery::createTopRightGroupBox() { topRightGroupBox = new QGroupBox(tr("Group 2")); defaultPushButton = new QPushButton(tr("Default Push Button")); defaultPushButton->setDefault(true); togglePushButton = new QPushButton(tr("Toggle Push Button")); togglePushButton->setCheckable(true); togglePushButton->setChecked(true); flatPushButton = new QPushButton(tr("Flat Push Button")); flatPushButton->setFlat(true); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(defaultPushButton); layout->addWidget(togglePushButton); layout->addWidget(flatPushButton); layout->addStretch(1); topRightGroupBox->setLayout(layout); } void WidgetGallery::createBottomLeftTabWidget() { bottomLeftTabWidget = new QTabWidget; bottomLeftTabWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored); QWidget *tab1 = new QWidget; tableWidget = new QTableWidget(10, 10); QHBoxLayout *tab1hbox = new QHBoxLayout; tab1hbox->setMargin(5); tab1hbox->addWidget(tableWidget); tab1->setLayout(tab1hbox); QWidget *tab2 = new QWidget; textEdit = new QTextEdit; textEdit->setPlainText(tr("Twinkle, twinkle, little star,\n" "How I wonder what you are.\n" "Up above the world so high,\n" "Like a diamond in the sky.\n" "Twinkle, twinkle, little star,\n" "How I wonder what you are!\n")); QHBoxLayout *tab2hbox = new QHBoxLayout; tab2hbox->setMargin(5); tab2hbox->addWidget(textEdit); tab2->setLayout(tab2hbox); bottomLeftTabWidget->addTab(tab1, tr("&Table")); bottomLeftTabWidget->addTab(tab2, tr("Text &Edit")); } void WidgetGallery::createBottomRightGroupBox() { bottomRightGroupBox = new QGroupBox(tr("Group 3")); bottomRightGroupBox->setCheckable(true); bottomRightGroupBox->setChecked(true); lineEdit = new QLineEdit("s3cRe7"); lineEdit->setEchoMode(QLineEdit::Password); lineEdit->setClearButtonEnabled(true); spinBox = new QSpinBox(bottomRightGroupBox); spinBox->setValue(50); dateTimeEdit = new QDateTimeEdit(bottomRightGroupBox); dateTimeEdit->setDateTime(QDateTime::currentDateTime()); comboBoxEdit = new QComboBox(bottomRightGroupBox); comboBoxEdit->addItem(QIcon::fromTheme("state-ok"), "state-ok"); comboBoxEdit->addItem(QIcon::fromTheme("crosshairs"), "crosshairs"); comboBoxEdit->addItem(QIcon::fromTheme("audio-volume-low-symbolic"), "audio-volume-low-symbolic"); slider = new QSlider(Qt::Horizontal, bottomRightGroupBox); slider->setRange(0, 100); slider->setTickInterval(10); slider->setTickPosition(QSlider::TicksBelow); slider->setValue(40); scrollBar = new QScrollBar(Qt::Horizontal, bottomRightGroupBox); scrollBar->setValue(60); dial = new QDial(bottomRightGroupBox); dial->setValue(30); dial->setNotchesVisible(true); QGridLayout *layout = new QGridLayout; layout->addWidget(lineEdit, 0, 0, 1, 2); layout->addWidget(spinBox, 1, 0, 1, 2); layout->addWidget(dateTimeEdit, 2, 0, 1, 2); layout->addWidget(comboBoxEdit, 3, 0, 1, 2); layout->addWidget(slider, 4, 0); layout->addWidget(scrollBar, 5, 0); layout->addWidget(dial, 4, 1, 2, 1); layout->setRowStretch(6, 1); bottomRightGroupBox->setLayout(layout); } //! [13] void WidgetGallery::createProgressBar() { progressBar = new QProgressBar; progressBar->setRange(0, 10000); progressBar->setValue(0); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(advanceProgressBar())); timer->start(1000); } //! [13] qt5integration-5.0.0/styles/widgetgallery.h000066400000000000000000000070121347440174500210410ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef WIDGETGALLERY_H #define WIDGETGALLERY_H #include QT_BEGIN_NAMESPACE class QCheckBox; class QComboBox; class QDateTimeEdit; class QDial; class QGroupBox; class QLabel; class QLineEdit; class QProgressBar; class QPushButton; class QRadioButton; class QScrollBar; class QSlider; class QSpinBox; class QTabWidget; class QTableWidget; class QTextEdit; QT_END_NAMESPACE //! [0] class WidgetGallery : public QMainWindow { Q_OBJECT public: WidgetGallery(QWidget *parent = 0); private slots: void changeStyle(const QString &styleName); void changePalette(); void advanceProgressBar(); private: void createTopLeftGroupBox(); void createTopRightGroupBox(); void createBottomLeftTabWidget(); void createBottomRightGroupBox(); void createProgressBar(); QPalette originalPalette; QLabel *styleLabel; QComboBox *styleComboBox; QCheckBox *useStylePaletteCheckBox; QCheckBox *disableWidgetsCheckBox; //! [0] QGroupBox *topLeftGroupBox; QRadioButton *radioButton1; QRadioButton *radioButton2; QRadioButton *radioButton3; QCheckBox *checkBox; QGroupBox *topRightGroupBox; QPushButton *defaultPushButton; QPushButton *togglePushButton; QPushButton *flatPushButton; QTabWidget *bottomLeftTabWidget; QTableWidget *tableWidget; QTextEdit *textEdit; QGroupBox *bottomRightGroupBox; QLineEdit *lineEdit; QSpinBox *spinBox; QDateTimeEdit *dateTimeEdit; QComboBox *comboBoxEdit; QSlider *slider; QScrollBar *scrollBar; QDial *dial; QProgressBar *progressBar; //! [1] }; //! [1] #endif