├── .gitignore ├── Installer └── install script.iss ├── License.rtf ├── OpenIconLibrary ├── camera-photo-10.png ├── computer-4.png ├── configure-4.png ├── drive-harddisk-8.png ├── fontforge.png ├── globe.png ├── network-local.png ├── preferences-desktop-sound.png ├── printer-7.png ├── regedit.png ├── server-database.png ├── system-installer.png ├── system-settings.png └── user-trash-full.png ├── Places.sln ├── Places ├── GetIcon.h ├── IconGetter.cpp ├── Mutex.h ├── Places.manifest ├── Places.rc ├── Places.vcxproj ├── Places.vcxproj.filters ├── RfwString.cpp ├── RfwString.h ├── SystemTraySDK.cpp ├── SystemTraySDK.h ├── TrayIcon.c ├── TrayIcon.ico ├── TrayIcon.png ├── arrow add sub.cur ├── arrow select add.cur ├── arrow select sub.cur ├── bitmap_cache.cpp ├── bitmap_cache.h ├── click.wav ├── configuration.cpp ├── configuration.h ├── exceptions.cpp ├── exceptions.h ├── generic.cpp ├── generic.h ├── hand add sub.cur ├── hand select add.cur ├── hand select sub.cur ├── hook.cpp ├── hook.h ├── icon.cpp ├── icon.h ├── icon_manager.cpp ├── icon_manager.h ├── icon_page.cpp ├── icon_page.h ├── lodepng.cpp ├── lodepng.h ├── main.cpp ├── md5.c ├── md5.h ├── memdebug.h ├── my_resampler.h ├── platform.cpp ├── platform.h ├── popup_menu.cpp ├── popup_menu.h ├── resampler.cpp ├── resampler.h ├── resource.h ├── stream.cpp ├── stream.h ├── undo.cpp ├── undo.h └── zlib │ ├── adler32.c │ ├── compress.c │ ├── crc32.c │ ├── crc32.h │ ├── deflate.c │ ├── deflate.h │ ├── gzguts.h │ ├── inffast.c │ ├── inffast.h │ ├── inffixed.h │ ├── inflate.c │ ├── inflate.h │ ├── inftrees.c │ ├── inftrees.h │ ├── trees.c │ ├── trees.h │ ├── uncompr.c │ ├── zconf.h │ ├── zlib.h │ ├── zlib.vcxproj │ ├── zlib.vcxproj.filters │ ├── zutil.c │ └── zutil.h ├── Readme.md ├── SFML Patches ├── Event.hpp ├── Readme.txt ├── WindowImpl.cpp └── WindowImplWin32.cpp ├── Shaders ├── 2 tweets challenge.frag ├── A Quick Plasma Test.frag ├── Fire.frag ├── See Yaw 2.frag ├── SparkySparkz.frag ├── Star Nest.frag ├── Two Tweets.frag ├── Undulating Lines.frag ├── Warm Glows.frag ├── Warping - procedural 2.frag ├── Xor - Glowing Webs.frag ├── cairo tiling.frag ├── colorful tessellation.frag ├── ether.frag ├── fast edge detection.frag ├── galaxy.frag ├── os boot flares.frag ├── sparse grid marching.frag ├── stones.frag ├── under deep water.frag └── under water.frag ├── Textures ├── Patterrific_BrushedMetal01.jpg ├── Patterrific_BrushedMetal02.jpg ├── Patterrific_BrushedMetal03.jpg ├── Patterrific_BrushedMetal04.jpg ├── Patterrific_BrushedMetal05.jpg ├── Patterrific_BrushedMetal06.jpg ├── Patterrific_BrushedMetal07.jpg ├── Patterrific_BrushedMetal08.jpg ├── metal texture 02.jpg ├── metal texture 03.jpg ├── metal texture 04.jpg ├── metal texture 05.jpg ├── metal texture 06.jpg ├── metal texture 07.jpg ├── metal texture 08.jpg ├── metal texture 09.jpg ├── metal texture 10.jpg ├── metal texture 11.jpg ├── metal texture 12.jpg ├── metal texture.jpg └── subtlepatterns.com │ ├── Blue Fabric Texture.jpg │ ├── Blue Fabric Texture.png │ ├── Brown Linen.jpg │ ├── Brown Linen.png │ ├── Carbon Texture.jpg │ ├── Carbon Texture.png │ ├── Dark Brown Linen Texture.jpg │ ├── Dark Brown Linen Texture.png │ ├── Dark Leather.jpg │ ├── Dark Leather.png │ ├── Gray Leather.jpg │ ├── Gray Leather.png │ ├── Lil Fiber Blue Texture.jpg │ ├── Lil Fiber Blue Texture.png │ ├── Lil Fiber Violet Texture.jpg │ ├── Lil Fiber Violet Texture.png │ ├── always_grey │ ├── always_grey.png │ ├── always_grey_@2X.png │ └── readme.txt │ ├── binding_dark │ ├── binding_dark.jpg │ ├── binding_dark.png │ ├── binding_dark_@2X.png │ └── readme.txt │ ├── bo_play_pattern │ ├── bo_play_pattern.png │ ├── bo_play_pattern_@2X.png │ └── readme.txt │ ├── brickwall │ ├── .DS_Store │ ├── brickwall.png │ ├── brickwall_@2X.jpg │ ├── brickwall_@2X.png │ └── readme.txt │ ├── brown_large_leather.png │ ├── carbon_fibre - subtlepatterns.com.png │ ├── carbon_fibre.png │ ├── carbon_fibre_@16X.png │ ├── carbon_fibre_@2X.png │ ├── carbon_fibre_@4X.png │ ├── cardboard │ ├── cardboard.png │ ├── cardboard_@2X.png │ └── readme.txt │ ├── diamond_upholstery │ ├── diamond_upholstery.png │ ├── diamond_upholstery_@2X.png │ └── readme.txt │ ├── egg_shell │ ├── egg_shell.png │ ├── egg_shell_@2X.png │ └── readme.txt │ ├── foggy_birds │ ├── foggy_birds.png │ ├── foggy_birds_@2X.png │ └── readme.txt │ ├── frenchstucco │ ├── frenchstucco.png │ ├── frenchstucco_@2X.png │ └── readme.txt │ ├── greyfloral │ ├── greyfloral.png │ ├── greyfloral_@2X.png │ └── readme.txt │ ├── grunge_wall │ ├── grunge_wall.png │ ├── grunge_wall_@2X.png │ └── readme.txt │ ├── gun_metal │ ├── gun_metal.png │ ├── gun_metal_@2X.png │ └── readme.txt │ ├── hixs_pattern_evolution │ ├── hixs_pattern_evolution.png │ ├── hixs_pattern_evolution_@2X.png │ └── readme.txt │ ├── knitted-netting │ ├── knitted-netting.png │ ├── knitted-netting_@2X.png │ └── readme.txt │ ├── large_leather.png │ ├── large_leather_@2X.png │ ├── leather texture.jpg │ ├── leather texture.png │ ├── lined_paper │ ├── lined_paper.png │ ├── lined_paper_@2X.png │ └── readme.txt │ ├── natural_paper │ ├── natural_paper.png │ ├── natural_paper_@2X.png │ └── readme.txt │ ├── old_mathematics │ ├── old_mathematics.png │ ├── old_mathematics_@2X.png │ └── readme.txt │ ├── perforated_white_leather │ ├── perforated_white_leather.png │ ├── perforated_white_leather_@2X.png │ └── readme.txt │ ├── pinstriped_suit │ ├── pinstriped_suit.png │ ├── pinstriped_suit_@2X.png │ └── readme.txt │ ├── purty_wood │ ├── purty_wood.png │ ├── purty_wood_@2X.png │ └── readme.txt │ ├── random_grey_variations │ ├── random_grey_variations.png │ ├── random_grey_variations_@2X.png │ └── readme.txt │ ├── redox_02 │ ├── readme.txt │ ├── redox_02.png │ └── redox_02_@2X.png │ ├── reticular_tissue │ ├── readme.txt │ ├── reticular_tissue.png │ └── reticular_tissue_@2X.png │ ├── solid │ ├── readme.txt │ ├── solid.png │ └── solid_@2X.png │ ├── subtle_zebra_3d │ ├── readme.txt │ ├── subtle_zebra_3d.png │ └── subtle_zebra_3d_@2X.png │ ├── tex2res1 │ ├── readme.txt │ ├── tex2res1.png │ └── tex2res1_@2X.png │ ├── texturetastic_gray │ ├── readme.txt │ ├── texturetastic_gray.png │ └── texturetastic_gray_@2X.png │ ├── tileable_wood_texture │ ├── readme.txt │ ├── tileable_wood_texture.png │ └── tileable_wood_texture_@2X.png │ ├── vaio_hard_edge │ ├── readme.txt │ ├── vaio_hard_edge.png │ └── vaio_hard_edge_@2X.png │ ├── wall4 │ ├── readme.txt │ ├── wall4.png │ └── wall4_@2X.png │ ├── white_carbonfiber │ ├── readme.txt │ ├── white_carbonfiber.png │ └── white_carbonfiber_@2X.png │ ├── white_leather │ ├── readme.txt │ ├── white_leather.png │ └── white_leather_@2X.png │ ├── white_paperboard │ ├── readme.txt │ ├── white_paperboard.png │ └── white_paperboard_@2X.png │ └── white_wall │ ├── readme.txt │ ├── white_wall.png │ └── white_wall_@2X.png ├── Wallpaper ├── Free also for commercial use and modify ok │ └── Dutch winter landscape 1920 x 1200 by zoutedrop.jpg └── Tiles │ ├── Blue Fabric.png │ ├── Brown Linen.png │ ├── Carbon Fibre.png │ ├── Carbon.png │ ├── Dark Brown Linen.png │ ├── Dark Leather.png │ ├── Gray Leather.png │ ├── Leather.png │ ├── Lil Fiber Blue.png │ ├── Lil Fiber Violet.png │ └── Patterrific_BrushedMetal08.jpg ├── img-not-found.png ├── img-not-found.svg └── screenshot_small.png /.gitignore: -------------------------------------------------------------------------------- 1 | *.suo 2 | *.sdf 3 | *.vcxproj.user 4 | x64 5 | .vs 6 | Debug 7 | ipch 8 | Release 9 | -------------------------------------------------------------------------------- /OpenIconLibrary/camera-photo-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/camera-photo-10.png -------------------------------------------------------------------------------- /OpenIconLibrary/computer-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/computer-4.png -------------------------------------------------------------------------------- /OpenIconLibrary/configure-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/configure-4.png -------------------------------------------------------------------------------- /OpenIconLibrary/drive-harddisk-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/drive-harddisk-8.png -------------------------------------------------------------------------------- /OpenIconLibrary/fontforge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/fontforge.png -------------------------------------------------------------------------------- /OpenIconLibrary/globe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/globe.png -------------------------------------------------------------------------------- /OpenIconLibrary/network-local.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/network-local.png -------------------------------------------------------------------------------- /OpenIconLibrary/preferences-desktop-sound.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/preferences-desktop-sound.png -------------------------------------------------------------------------------- /OpenIconLibrary/printer-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/printer-7.png -------------------------------------------------------------------------------- /OpenIconLibrary/regedit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/regedit.png -------------------------------------------------------------------------------- /OpenIconLibrary/server-database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/server-database.png -------------------------------------------------------------------------------- /OpenIconLibrary/system-installer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/system-installer.png -------------------------------------------------------------------------------- /OpenIconLibrary/system-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/system-settings.png -------------------------------------------------------------------------------- /OpenIconLibrary/user-trash-full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/OpenIconLibrary/user-trash-full.png -------------------------------------------------------------------------------- /Places.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Places", "Places\Places.vcxproj", "{91342A30-91E9-4349-B36C-0B6DFEFD8501}" 5 | ProjectSection(ProjectDependencies) = postProject 6 | {D612CD2C-33A6-4411-B04E-0F0A3392C006} = {D612CD2C-33A6-4411-B04E-0F0A3392C006} 7 | EndProjectSection 8 | EndProject 9 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "Places\zlib\zlib.vcxproj", "{D612CD2C-33A6-4411-B04E-0F0A3392C006}" 10 | EndProject 11 | Global 12 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 13 | Debug|Win32 = Debug|Win32 14 | Debug|x64 = Debug|x64 15 | Release|Win32 = Release|Win32 16 | Release|x64 = Release|x64 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {91342A30-91E9-4349-B36C-0B6DFEFD8501}.Debug|Win32.ActiveCfg = Debug|Win32 20 | {91342A30-91E9-4349-B36C-0B6DFEFD8501}.Debug|Win32.Build.0 = Debug|Win32 21 | {91342A30-91E9-4349-B36C-0B6DFEFD8501}.Debug|x64.ActiveCfg = Debug|x64 22 | {91342A30-91E9-4349-B36C-0B6DFEFD8501}.Debug|x64.Build.0 = Debug|x64 23 | {91342A30-91E9-4349-B36C-0B6DFEFD8501}.Release|Win32.ActiveCfg = Release|Win32 24 | {91342A30-91E9-4349-B36C-0B6DFEFD8501}.Release|Win32.Build.0 = Release|Win32 25 | {91342A30-91E9-4349-B36C-0B6DFEFD8501}.Release|x64.ActiveCfg = Release|x64 26 | {91342A30-91E9-4349-B36C-0B6DFEFD8501}.Release|x64.Build.0 = Release|x64 27 | {D612CD2C-33A6-4411-B04E-0F0A3392C006}.Debug|Win32.ActiveCfg = Debug|Win32 28 | {D612CD2C-33A6-4411-B04E-0F0A3392C006}.Debug|Win32.Build.0 = Debug|Win32 29 | {D612CD2C-33A6-4411-B04E-0F0A3392C006}.Debug|x64.ActiveCfg = Debug|x64 30 | {D612CD2C-33A6-4411-B04E-0F0A3392C006}.Debug|x64.Build.0 = Debug|x64 31 | {D612CD2C-33A6-4411-B04E-0F0A3392C006}.Release|Win32.ActiveCfg = Release|Win32 32 | {D612CD2C-33A6-4411-B04E-0F0A3392C006}.Release|Win32.Build.0 = Release|Win32 33 | {D612CD2C-33A6-4411-B04E-0F0A3392C006}.Release|x64.ActiveCfg = Release|x64 34 | {D612CD2C-33A6-4411-B04E-0F0A3392C006}.Release|x64.Build.0 = Release|x64 35 | EndGlobalSection 36 | GlobalSection(SolutionProperties) = preSolution 37 | HideSolutionNode = FALSE 38 | EndGlobalSection 39 | EndGlobal 40 | -------------------------------------------------------------------------------- /Places/GetIcon.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | typedef unsigned int uint32; 19 | typedef uint32 *DIBitmap; 20 | 21 | DIBitmap GetIconBitmap(LPCTSTR filePath, int &width, int &height); 22 | DIBitmap GetIconBitmap(LPCTSTR filePath, int &pixels, bool thumbnail); 23 | -------------------------------------------------------------------------------- /Places/IconGetter.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/IconGetter.cpp -------------------------------------------------------------------------------- /Places/Mutex.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | // -------------------------------------------------------------------------------------------------------------------------------------------- 19 | // class CMutex 20 | // -------------------------------------------------------------------------------------------------------------------------------------------- 21 | class CMutex 22 | { 23 | protected: 24 | CRITICAL_SECTION m_CS; 25 | 26 | public: 27 | CMutex() { ::InitializeCriticalSection(&m_CS); } 28 | 29 | ~CMutex() { ::DeleteCriticalSection(&m_CS); } 30 | 31 | void Enter() { ::EnterCriticalSection(&m_CS); } 32 | void Leave() { ::LeaveCriticalSection(&m_CS); } 33 | }; 34 | 35 | 36 | class CMutexLock 37 | { 38 | protected: 39 | CMutex &m_Mutex; 40 | 41 | public: 42 | CMutexLock(CMutex &mutex) 43 | : m_Mutex(mutex) 44 | { 45 | m_Mutex.Enter(); 46 | } 47 | 48 | ~CMutexLock() 49 | { 50 | m_Mutex.Leave(); 51 | } 52 | }; 53 | -------------------------------------------------------------------------------- /Places/Places.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Places/Places.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {f8bf9687-aee0-4e5d-8b7b-63b6cd6e0795} 18 | 19 | 20 | 21 | 22 | Source Files 23 | 24 | 25 | Source Files 26 | 27 | 28 | Source Files 29 | 30 | 31 | Libs 32 | 33 | 34 | Libs 35 | 36 | 37 | Source Files 38 | 39 | 40 | Source Files 41 | 42 | 43 | Source Files 44 | 45 | 46 | Source Files 47 | 48 | 49 | Source Files 50 | 51 | 52 | Source Files 53 | 54 | 55 | Source Files 56 | 57 | 58 | Source Files 59 | 60 | 61 | Source Files 62 | 63 | 64 | Source Files 65 | 66 | 67 | Source Files 68 | 69 | 70 | Source Files 71 | 72 | 73 | Source Files 74 | 75 | 76 | Libs 77 | 78 | 79 | 80 | 81 | Header Files 82 | 83 | 84 | Header Files 85 | 86 | 87 | Libs 88 | 89 | 90 | Libs 91 | 92 | 93 | Header Files 94 | 95 | 96 | Header Files 97 | 98 | 99 | Header Files 100 | 101 | 102 | Header Files 103 | 104 | 105 | Header Files 106 | 107 | 108 | Header Files 109 | 110 | 111 | Header Files 112 | 113 | 114 | Header Files 115 | 116 | 117 | Header Files 118 | 119 | 120 | Header Files 121 | 122 | 123 | Header Files 124 | 125 | 126 | Header Files 127 | 128 | 129 | Header Files 130 | 131 | 132 | Header Files 133 | 134 | 135 | Header Files 136 | 137 | 138 | Libs 139 | 140 | 141 | Header Files 142 | 143 | 144 | Header Files 145 | 146 | 147 | 148 | 149 | Resource Files 150 | 151 | 152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /Places/TrayIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/TrayIcon.ico -------------------------------------------------------------------------------- /Places/TrayIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/TrayIcon.png -------------------------------------------------------------------------------- /Places/arrow add sub.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/arrow add sub.cur -------------------------------------------------------------------------------- /Places/arrow select add.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/arrow select add.cur -------------------------------------------------------------------------------- /Places/arrow select sub.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/arrow select sub.cur -------------------------------------------------------------------------------- /Places/click.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/click.wav -------------------------------------------------------------------------------- /Places/configuration.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/configuration.h -------------------------------------------------------------------------------- /Places/exceptions.cpp: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | 19 | #define STRICT 20 | #define NOMINMAX 21 | #include 22 | #include 23 | #include 24 | 25 | #include "memdebug.h" 26 | 27 | #define ASSERT 28 | #include "RfwString.h" 29 | #include "exceptions.h" 30 | 31 | 32 | static const TCHAR *ExceptionMessage[] = 33 | { 34 | _T(""), 35 | _T("General Failure"), 36 | _T("Out of Memory"), 37 | 38 | _T("Could not open or create the file"), 39 | _T("Error reading from file"), 40 | _T("Error writing to file"), 41 | 42 | _T("INI file corrupt"), 43 | 44 | _T("Structure of database file corrupted"), 45 | _T("Database version incompatible"), 46 | }; 47 | 48 | 49 | const RString Exception::GetExceptionMessage() const 50 | { 51 | if (m_enExceptionCode == EXCEPTION_PLAIN_TEXT) 52 | return m_strAdditionalInfo; 53 | else 54 | return (RString)ExceptionMessage[m_enExceptionCode] + _T("\n\n") + m_strAdditionalInfo; 55 | } 56 | -------------------------------------------------------------------------------- /Places/exceptions.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | 19 | class Exception 20 | { 21 | public: 22 | enum ExceptionCode 23 | { 24 | EXCEPTION_PLAIN_TEXT, // no standard message 25 | EXCEPTION_GENERAL_FAILURE, 26 | EXCEPTION_OUT_OF_MEMORY, 27 | 28 | EXCEPTION_FILE_OPEN, 29 | EXCEPTION_FILE_READ, 30 | EXCEPTION_FILE_WRITE, 31 | 32 | EXCEPTION_INI_FILE_CORRUPT, 33 | 34 | EXCEPTION_DB_CORRUPT, 35 | EXCEPTION_DB_VERSION, 36 | }; 37 | 38 | protected: 39 | ExceptionCode m_enExceptionCode; 40 | RString m_strAdditionalInfo; 41 | 42 | public: 43 | Exception(ExceptionCode code, const RString &additional_info = _T("")) { m_enExceptionCode = code; m_strAdditionalInfo = additional_info; } 44 | Exception(const RString &plain_text = _T("")) { m_enExceptionCode = EXCEPTION_PLAIN_TEXT; m_strAdditionalInfo = plain_text; } 45 | 46 | ExceptionCode GetExceptionCode() const { return m_enExceptionCode; } 47 | const RString GetExceptionMessage() const; 48 | }; 49 | 50 | 51 | class CriticalException : public Exception 52 | { 53 | public: 54 | CriticalException(ExceptionCode code) 55 | : Exception(code) 56 | { 57 | } 58 | }; 59 | -------------------------------------------------------------------------------- /Places/generic.cpp: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | #define STRICT 19 | #define NOMINMAX 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | 27 | #include "memdebug.h" 28 | 29 | #include 30 | 31 | #include 32 | using namespace std; 33 | 34 | #define ASSERT 35 | #include "hook.h" 36 | #include "RfwString.h" 37 | #include "platform.h" 38 | #include "generic.h" 39 | 40 | 41 | // -------------------------------------------------------------------------------------------------------------------------------------------- 42 | // ExtractFileName() 43 | // -------------------------------------------------------------------------------------------------------------------------------------------- 44 | RString ExtractFileName(const RString &path) 45 | { 46 | RString file_name; 47 | 48 | int n = path.reverse_find(_T('\\')); 49 | if (n >= 0) 50 | { 51 | file_name = path.substr(n + 1); 52 | n = file_name.reverse_find(_T('.')); 53 | if (n >= 0) 54 | file_name = file_name.substr(0, n); 55 | } 56 | 57 | return file_name; 58 | } 59 | 60 | 61 | // -------------------------------------------------------------------------------------------------------------------------------------------- 62 | // CSfmlApp::HandleEvents() 63 | // -------------------------------------------------------------------------------------------------------------------------------------------- 64 | void CSfmlApp::HandleEvents() 65 | { 66 | sf::Event event; 67 | while (m_Window.pollEvent(event)) 68 | { 69 | switch (event.type) 70 | { 71 | case sf::Event::Closed: 72 | if (OnClose()) 73 | m_Window.close(); 74 | break; 75 | 76 | case sf::Event::MouseButtonPressed: 77 | OnMouseDown(event); 78 | break; 79 | 80 | case sf::Event::MouseButtonReleased: 81 | OnMouseUp(event); 82 | break; 83 | 84 | case sf::Event::MouseMoved: 85 | OnMouseMove(event); 86 | break; 87 | 88 | case sf::Event::MouseWheelMoved: 89 | OnMouseWheel(event); 90 | break; 91 | 92 | case sf::Event::KeyPressed: 93 | OnKeyPressed(event); 94 | break; 95 | 96 | case sf::Event::DropFiles: 97 | if (event.dropFiles.listDroppedFiles) 98 | { 99 | OnDroppedFiles(event); 100 | delete event.dropFiles.listDroppedFiles; 101 | } 102 | break; 103 | } 104 | } 105 | } 106 | 107 | 108 | // -------------------------------------------------------------------------------------------------------------------------------------------- 109 | // CSfmlApp::Run() 110 | // -------------------------------------------------------------------------------------------------------------------------------------------- 111 | void CSfmlApp::Run() 112 | { 113 | do 114 | { 115 | CreateMainWindow(); 116 | m_bRecreateWindow = false; 117 | 118 | // event loop 119 | while (m_Window.isOpen()) 120 | { 121 | Sleep(1); // 10 122 | if (m_bRequestClose) 123 | { 124 | if (OnClose()) 125 | m_Window.close(); 126 | } 127 | HandleEvents(); 128 | Work(); 129 | 130 | if (IsWindowVisible(m_Window.getSystemHandle())) 131 | { 132 | Draw(); 133 | m_Window.display(); 134 | } 135 | } 136 | } 137 | while (m_bRecreateWindow); 138 | } 139 | -------------------------------------------------------------------------------- /Places/generic.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | 19 | // -------------------------------------------------------------------------------------------------------------------------------------------- 20 | // Macros 21 | // -------------------------------------------------------------------------------------------------------------------------------------------- 22 | 23 | 24 | // -------------------------------------------------------------------------------------------------------------------------------------------- 25 | // ManhattanDistance 26 | // -------------------------------------------------------------------------------------------------------------------------------------------- 27 | inline int ManhattanDistance(const sf::Vector2i pos, int dx, int dy) 28 | { 29 | int ddx = dx - pos.x; 30 | int ddy = dy - pos.y; 31 | 32 | return (int)sqrtf((float)(ddx * ddx + ddy * ddy)); 33 | } 34 | 35 | 36 | // -------------------------------------------------------------------------------------------------------------------------------------------- 37 | // Prototypes 38 | // -------------------------------------------------------------------------------------------------------------------------------------------- 39 | RString ExtractFileName(const RString &path); 40 | 41 | 42 | // -------------------------------------------------------------------------------------------------------------------------------------------- 43 | // class CSfmlApp 44 | // 45 | // Generic SFML application class 46 | // -------------------------------------------------------------------------------------------------------------------------------------------- 47 | class CSfmlApp 48 | { 49 | protected: 50 | enum EWindowStyle 51 | { 52 | enWsFullscreen, 53 | enWsWindowed, 54 | }; 55 | 56 | protected: 57 | sf::RenderWindow m_Window; // window must be created by caller using create() 58 | bool m_bRequestClose; // true if the window shall be closed 59 | EWindowStyle m_enWindowStyle; // either fullscreen or in a window 60 | bool m_bRecreateWindow; // if true, the window shall be recreated, considering m_enWindowStyle 61 | 62 | public: 63 | CSfmlApp() 64 | : m_bRequestClose(false), 65 | m_enWindowStyle(enWsFullscreen), 66 | m_bRecreateWindow(false) 67 | { 68 | } 69 | 70 | sf::RenderWindow &GetRenderWindow() { return m_Window; } 71 | 72 | virtual void ShowMainWindow() 73 | { 74 | ShowWindow(m_Window.getSystemHandle(), SW_SHOW); 75 | } 76 | 77 | virtual void CloseMainWindow() 78 | { 79 | m_bRequestClose = true; 80 | } 81 | 82 | virtual void CreateMainWindow() {} 83 | 84 | virtual void OnMouseDown(const sf::Event &event) {} 85 | virtual void OnMouseUp(const sf::Event &event) {} 86 | virtual void OnMouseMove(const sf::Event &event) {} 87 | virtual void OnMouseWheel(const sf::Event &event) {} 88 | virtual void OnKeyPressed(const sf::Event &event) {} 89 | 90 | virtual void OnDroppedFiles(const sf::Event &event) {} 91 | 92 | virtual bool OnClose() { return true; } // return false to prevent closing 93 | 94 | virtual void HandleEvents(); 95 | 96 | virtual void Work() {} // is called after HandleEvents(), allows to perform any "work" 97 | 98 | virtual void Draw() {} // is called after Work() 99 | 100 | virtual void Run(); 101 | }; 102 | -------------------------------------------------------------------------------- /Places/hand add sub.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/hand add sub.cur -------------------------------------------------------------------------------- /Places/hand select add.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/hand select add.cur -------------------------------------------------------------------------------- /Places/hand select sub.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/hand select sub.cur -------------------------------------------------------------------------------- /Places/hook.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | // Hotkey Modifiers 19 | enum 20 | { 21 | HotkeyAlt = (1 << 0), 22 | HotkeyCtrl = (1 << 1), 23 | HotkeyShift = (1 << 2), 24 | HotkeyWin = (1 << 3), 25 | }; 26 | 27 | extern BYTE gbHotkeyVKey; // virtual key code for app activation 28 | extern BYTE gbHotkeyModifiers; // modifiers for app activation (shift, ctrl, alt, win) 29 | extern int gnMouseButton; // mouse button that activates: 0 = none, 1 = middle, 2 = xbutton1, 3 = xbutton2 30 | extern int gnMouseCorner; // if moving the mouse into the left-top corner will activate: 0 = no, 1 = yes 31 | 32 | extern bool gbSuspendHooks; // de-activate keyboard and mouse hooks, e.g. when gaming 33 | 34 | extern volatile bool gbHookEvent; // true, if there was an event that did interest us. 35 | // This is either a mouse button event, a keyboard event or a progman event 36 | // After reading out "true", the consumer must set this flag = false 37 | extern volatile bool gbEatSingleClick; // same as above for mouse single click (used for checking if app was activated) 38 | extern volatile bool gbHookDoubleClick; // same as above for mouse double click (used for checking for double click on desktop) 39 | 40 | 41 | void SetHookAppWindow(HWND hWndApp); 42 | void SetHookInstance(HINSTANCE hInstance); 43 | bool SetHooks(); 44 | void ReleaseHooks(); 45 | void HookTestMouseHover(); // Must be called periodically by main program to check for mouse hovering in a screen corner. 46 | void RunHookThread(); 47 | -------------------------------------------------------------------------------- /Places/icon_page.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | 19 | // -------------------------------------------------------------------------------------------------------------------------------------------- 20 | // class CIconPage 21 | // 22 | // This array reflects the positions of the icons on a GUI page 23 | // -------------------------------------------------------------------------------------------------------------------------------------------- 24 | class CIconManager; 25 | 26 | class CIconPage 27 | { 28 | protected: 29 | CIcon **m_arIcons; 30 | int m_nCols; // number of columns 31 | int m_nRows; // number of rows 32 | 33 | void Free() 34 | { 35 | if (m_arIcons) 36 | { 37 | int count = m_nCols * m_nRows; 38 | for (int i = 0; i < count; i++) 39 | { 40 | if (m_arIcons[i]) 41 | delete m_arIcons[i]; 42 | } 43 | delete[] m_arIcons; 44 | } 45 | } 46 | 47 | public: 48 | CIconPage() 49 | : m_arIcons(nullptr) 50 | { 51 | } 52 | 53 | CIconPage(CIconPage &&page); 54 | 55 | CIconPage(Stream &stream); 56 | void Write(Stream &stream) const; 57 | 58 | ~CIconPage() 59 | { 60 | Free(); 61 | } 62 | 63 | void SetDimensions(int cols, int rows); 64 | 65 | int GetCols() const { return m_nCols; } 66 | int GetRows() const { return m_nRows; } 67 | 68 | int GetCount() const { return m_nCols * m_nRows; } 69 | 70 | int ComputeIndex(const CRasterPos &pos) const { return pos.m_nRow * m_nCols + pos.m_nCol; } 71 | 72 | CRasterPos ComputeRasterPos(int index) const 73 | { 74 | return CRasterPos(index % m_nCols, index / m_nCols); 75 | } 76 | 77 | CRasterPos Find(const CIcon *icon, bool &bFail); 78 | 79 | CIcon *GetItem(int index) 80 | { 81 | return m_arIcons[index]; 82 | } 83 | 84 | CIcon *GetItem(const CRasterPos &pos, bool &bFail); 85 | void SetItem(const CRasterPos &pos, CIcon *icon); 86 | 87 | // adapt all icons to new screen / window resolution 88 | void RecomputeAllIcons(int pixels, int nPageNum, int nHorizontalMargin, int nVerticalMargin, int nIconRasterX, int nIconRasterY); 89 | 90 | void CreateStateSnapshot(); 91 | void RestoreStateSnapshot(CIconManager &icon_manager); 92 | void CreateSelectedSnapshot(TListIcons &listSelectedIcons); 93 | bool HasSelectedIcons() const; 94 | 95 | void Select(CIconManager &icon_manager, bool do_select, const sf::FloatRect &rc); 96 | void SelectAll(CIconManager &icon_manager, bool do_select); 97 | void LassoSelect(CIconManager &icon_manager, bool do_select, const sf::FloatRect &rc); 98 | void SetAllIconStates(CIconManager &icon_manager, CIcon::EIconState state); 99 | 100 | // iterates over all icons and re-syncs one icon that is not resynced yet 101 | // if no un-resynced icon is found, false is returned. Otherwise true. 102 | bool ResyncIcons(CBitmapCache &bitmap_cache, bool &resync_running, bool &changed_an_icon); 103 | void ClearIconsResyncFlag(); 104 | 105 | // checks, if a new layout can be applied to each page, so that no icons 106 | // would fall outside the new layout 107 | bool CanChangeLayout(const CSettings &new_layout) const; 108 | 109 | void ChangeLayout(const CSettings &new_layout); 110 | void RenderTitles(); 111 | }; 112 | 113 | 114 | typedef vector TIconPages; 115 | typedef TIconPages::iterator TIconPagesIter; 116 | -------------------------------------------------------------------------------- /Places/main.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/main.cpp -------------------------------------------------------------------------------- /Places/md5.h: -------------------------------------------------------------------------------- 1 | /* 2 | * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. 3 | * MD5 Message-Digest Algorithm (RFC 1321). 4 | * 5 | * Homepage: 6 | * http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5 7 | * 8 | * Author: 9 | * Alexander Peslyak, better known as Solar Designer 10 | * 11 | * This software was written by Alexander Peslyak in 2001. No copyright is 12 | * claimed, and the software is hereby placed in the public domain. 13 | * In case this attempt to disclaim copyright and place the software in the 14 | * public domain is deemed null and void, then the software is 15 | * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the 16 | * general public under the following terms: 17 | * 18 | * Redistribution and use in source and binary forms, with or without 19 | * modification, are permitted. 20 | * 21 | * There's ABSOLUTELY NO WARRANTY, express or implied. 22 | * 23 | * See md5.c for more information. 24 | */ 25 | 26 | #ifdef HAVE_OPENSSL 27 | #include 28 | #elif !defined(_MD5_H) 29 | #define _MD5_H 30 | 31 | #define MD5_DIGEST_LENGTH 16 32 | 33 | #ifdef __cplusplus 34 | extern "C" { 35 | #endif 36 | 37 | /* Any 32-bit or wider unsigned integer data type will do */ 38 | typedef unsigned int MD5_u32plus; 39 | 40 | typedef struct { 41 | MD5_u32plus lo, hi; 42 | MD5_u32plus a, b, c, d; 43 | unsigned char buffer[64]; 44 | MD5_u32plus block[16]; 45 | } MD5_CTX; 46 | 47 | extern void MD5_Init(MD5_CTX *ctx); 48 | extern void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size); 49 | extern void MD5_Final(unsigned char *result, MD5_CTX *ctx); 50 | 51 | #ifdef __cplusplus 52 | }; 53 | #endif 54 | 55 | #endif 56 | -------------------------------------------------------------------------------- /Places/memdebug.h: -------------------------------------------------------------------------------- 1 | 2 | #define _CRTDBG_MAP_ALLOC 3 | #include 4 | 5 | #ifdef _DEBUG 6 | #define DEBUG_NEW new( _NORMAL_BLOCK, __FILE__, __LINE__) 7 | #else 8 | #define DEBUG_NEW 9 | #endif 10 | 11 | #ifdef _DEBUG 12 | #define new DEBUG_NEW 13 | #endif 14 | -------------------------------------------------------------------------------- /Places/my_resampler.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | // Resampler Code: https://code.google.com/p/imageresampler/ 27 | #include "resampler.h" 28 | 29 | 30 | #define RSMP_MIN(a, b) ((a < b) ? a : b) 31 | #define RSMP_MAX(a, b) ((a > b) ? a : b) 32 | 33 | const int srgb_to_linear_table_size = 256; 34 | const int linear_to_srgb_table_size = 4096; 35 | 36 | class CResampler 37 | { 38 | protected: 39 | float m_fSourceGamma; // Partial gamma correction looks better on mips. Set to 1.0 to disable gamma correction. 40 | float m_fFilterScale; // Filter scale - values < 1.0 cause aliasing, but create sharper looking mips. 41 | 42 | float m_SRGB_To_Linear[srgb_to_linear_table_size]; 43 | unsigned char m_Linear_to_SRGB[linear_to_srgb_table_size]; 44 | 45 | public: 46 | CResampler() 47 | : m_fFilterScale(1.0f) //.75f; 48 | { 49 | SetSourceGamma(1.75f); 50 | } 51 | 52 | 53 | void SetSourceGamma(float gamma) 54 | { 55 | m_fSourceGamma = gamma; 56 | 57 | for (int i = 0; i < srgb_to_linear_table_size; ++i) 58 | m_SRGB_To_Linear[i] = (float)pow(i * 1.0f / 255.0f, m_fSourceGamma); 59 | 60 | const float inv_linear_to_srgb_table_size = 1.0f / linear_to_srgb_table_size; 61 | const float inv_source_gamma = 1.0f / m_fSourceGamma; 62 | 63 | for (int i = 0; i < linear_to_srgb_table_size; ++i) 64 | { 65 | int k = (int)(255.0f * pow(i * inv_linear_to_srgb_table_size, inv_source_gamma) + .5f); 66 | if (k < 0) 67 | k = 0; 68 | else if (k > 255) 69 | k = 255; 70 | m_Linear_to_SRGB[i] = (unsigned char)k; 71 | } 72 | } 73 | 74 | 75 | // returns resampled image or NULL on error 76 | // returned image must be freed by the caller! 77 | unsigned char *Resample(unsigned char *pSrc_image, int src_width, int src_height, int channels, int dst_width, int dst_height) 78 | { 79 | 80 | if ((RSMP_MIN(dst_width, dst_height) < 1) || (RSMP_MAX(dst_width, dst_height) > RESAMPLER_MAX_DIMENSION)) 81 | { 82 | // printf("Invalid output width/height!\n"); 83 | return NULL; 84 | } 85 | 86 | const int max_components = 4; 87 | 88 | if ((RSMP_MAX(src_width, src_height) > RESAMPLER_MAX_DIMENSION) || (channels > max_components)) 89 | { 90 | // printf("Image is too large!\n"); 91 | return NULL; 92 | } 93 | 94 | const char* pFilter = "blackman"; //RESAMPLER_DEFAULT_FILTER; 95 | 96 | Resampler* resamplers[max_components]; 97 | std::vector samples[max_components]; 98 | 99 | // Now create a Resampler instance for each component to process. The first instance will create new contributor tables, which are shared by the resamplers 100 | // used for the other components (a memory and slight cache efficiency optimization). 101 | resamplers[0] = new Resampler(src_width, src_height, dst_width, dst_height, Resampler::BOUNDARY_CLAMP, 0.0f, 1.0f, pFilter, NULL, NULL, m_fFilterScale, m_fFilterScale); 102 | samples[0].resize(src_width); 103 | for (int i = 1; i < channels; i++) 104 | { 105 | resamplers[i] = new Resampler(src_width, src_height, dst_width, dst_height, Resampler::BOUNDARY_CLAMP, 0.0f, 1.0f, pFilter, resamplers[0]->get_clist_x(), resamplers[0]->get_clist_y(), m_fFilterScale, m_fFilterScale); 106 | samples[i].resize(src_width); 107 | } 108 | 109 | unsigned char *dst_image = new unsigned char[dst_width * channels * dst_height]; 110 | 111 | const int src_pitch = src_width * channels; 112 | const int dst_pitch = dst_width * channels; 113 | int dst_y = 0; 114 | 115 | // printf("Resampling to %ux%u\n", dst_width, dst_height); 116 | 117 | for (int src_y = 0; src_y < src_height; src_y++) 118 | { 119 | const unsigned char* pSrc = &pSrc_image[src_y * src_pitch]; 120 | 121 | for (int x = 0; x < src_width; x++) 122 | { 123 | for (int c = 0; c < channels; c++) 124 | { 125 | if ((c == 3) || ((channels == 2) && (c == 1))) 126 | samples[c][x] = *pSrc++ * (1.0f/255.0f); 127 | else 128 | samples[c][x] = m_SRGB_To_Linear[*pSrc++]; 129 | } 130 | } 131 | 132 | for (int c = 0; c < channels; c++) 133 | { 134 | if (!resamplers[c]->put_line(&samples[c][0])) 135 | { 136 | // printf("Out of memory!\n"); 137 | return NULL; 138 | } 139 | } 140 | 141 | for ( ; ; ) 142 | { 143 | int comp_index; 144 | for (comp_index = 0; comp_index < channels; comp_index++) 145 | { 146 | const float* pOutput_samples = resamplers[comp_index]->get_line(); 147 | if (!pOutput_samples) 148 | break; 149 | 150 | const bool alpha_channel = (comp_index == 3) || ((channels == 2) && (comp_index == 1)); 151 | assert(dst_y < dst_height); 152 | unsigned char* pDst = &dst_image[dst_y * dst_pitch + comp_index]; 153 | 154 | for (int x = 0; x < dst_width; x++) 155 | { 156 | if (alpha_channel) 157 | { 158 | int c = (int)(255.0f * pOutput_samples[x] + .5f); 159 | if (c < 0) c = 0; else if (c > 255) c = 255; 160 | *pDst = (unsigned char)c; 161 | } 162 | else 163 | { 164 | int j = (int)(linear_to_srgb_table_size * pOutput_samples[x] + .5f); 165 | if (j < 0) j = 0; else if (j >= linear_to_srgb_table_size) j = linear_to_srgb_table_size - 1; 166 | *pDst = m_Linear_to_SRGB[j]; 167 | } 168 | 169 | pDst += channels; 170 | } 171 | } 172 | if (comp_index < channels) 173 | break; 174 | 175 | dst_y++; 176 | } 177 | } 178 | 179 | // Delete the resamplers. 180 | for (int i = 0; i < channels; i++) 181 | delete resamplers[i]; 182 | 183 | return dst_image; 184 | } 185 | }; 186 | -------------------------------------------------------------------------------- /Places/platform.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Places/platform.cpp -------------------------------------------------------------------------------- /Places/platform.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | // -------------------------------------------------------------------------------------------------------------------------------------------- 19 | // Platform specific code 20 | // 21 | // When porting to another platform, the functions contained in here need to be rewritten. 22 | // 23 | // NOTE: This comment was written at the beginning of the project. 24 | // Meanwhile it turned out that Windows specific code had to be injected at several different places. 25 | // Gaining platform independence will require a bigger cleanup. 26 | // -------------------------------------------------------------------------------------------------------------------------------------------- 27 | 28 | 29 | // -------------------------------------------------------------------------------------------------------------------------------------------- 30 | // Globals 31 | // -------------------------------------------------------------------------------------------------------------------------------------------- 32 | extern RString gstrAppData; 33 | extern RString gstrCommonAppData; 34 | extern RString gstrWindir; 35 | 36 | 37 | // -------------------------------------------------------------------------------------------------------------------------------------------- 38 | // Prototypes 39 | // -------------------------------------------------------------------------------------------------------------------------------------------- 40 | bool GetAppPaths(); // sets gstrAppData and gstrCommonAppData 41 | RString GetShellItemName(const RString &strFilePath); 42 | RString GetVirtKeyName(BYTE keycode); 43 | RString GetKeyComboString(BYTE hotkey, BYTE virtkey); 44 | HRESULT ResolveLink(HWND hwnd, const RString &strLinkFile, RString &path); 45 | HWND GetDesktopListViewHWND(); 46 | void SetForegroundWindowInternal(HWND hWnd); 47 | bool IsFullscreenAndMaximized(HWND hwnd); 48 | bool ThereIsAFullscreenWin(); 49 | bool GetTaskbarRect(RECT &rc); 50 | 51 | 52 | // -------------------------------------------------------------------------------------------------------------------------------------------- 53 | // class CSfmlMemoryFont 54 | // 55 | // We retrieve the binary font data through Windows GDI. 56 | // Unfortunately SFML does not create a copy of the binary font data, so we need to hold it in memory 57 | // until the application terminates. 58 | // -------------------------------------------------------------------------------------------------------------------------------------------- 59 | class CSfmlMemoryFont 60 | { 61 | protected: 62 | void *m_pBinaryFontData; 63 | sf::Font m_Font; 64 | 65 | public: 66 | CSfmlMemoryFont() 67 | : m_pBinaryFontData(nullptr) 68 | { 69 | } 70 | 71 | ~CSfmlMemoryFont() 72 | { 73 | if (m_pBinaryFontData) 74 | free(m_pBinaryFontData); 75 | } 76 | 77 | void Create(const sf::Window &window, const RString &strFontName); 78 | 79 | sf::Font &GetSfmlFont() 80 | { 81 | return m_Font; 82 | } 83 | }; 84 | 85 | 86 | // -------------------------------------------------------------------------------------------------------------------------------------------- 87 | // class CFileDialog 88 | // -------------------------------------------------------------------------------------------------------------------------------------------- 89 | #define MY_MAX_PATH 4096 90 | #define MY_MAX_EXT 256 91 | 92 | class CFileDialog 93 | { 94 | protected: 95 | OPENFILENAME m_Ofn; 96 | RString m_strPath; 97 | TCHAR m_szPath[MY_MAX_PATH + MY_MAX_EXT + 1]; // used for OFN-structure 98 | DWORD m_dwFlags; 99 | LPCTSTR m_pchFilter; 100 | int m_nDefaultFilter; 101 | 102 | protected: 103 | void InitOfn(HWND hwnd_owner); 104 | void ExitOfn(); 105 | 106 | public: 107 | CFileDialog(const RString &path = _T(""), DWORD flags = 0, LPCTSTR filter = NULL, int default_filter = 1); 108 | bool GetOpenName(HWND hwnd_owner); 109 | bool GetSaveName(HWND hwnd_owner); 110 | const RString &GetPath() const { return m_strPath; } 111 | void SetFilterIndexFromFileName(); // Analyses the file name extension and sets the DefaultFilterIndex accordingly 112 | }; 113 | 114 | 115 | // -------------------------------------------------------------------------------------------------------------------------------------------- 116 | // class CTaskbar 117 | // -------------------------------------------------------------------------------------------------------------------------------------------- 118 | class CTaskbar 119 | { 120 | public: 121 | RECT m_rcPosition; 122 | int m_nWidth; 123 | int m_nHeight; 124 | 125 | protected: 126 | void ComputeDimensions(const RECT &rc) 127 | { 128 | m_rcPosition = rc; 129 | m_nHeight = m_rcPosition.bottom - m_rcPosition.top; 130 | m_nWidth = m_rcPosition.right - m_rcPosition.left; 131 | } 132 | 133 | public: 134 | CTaskbar() 135 | { 136 | GetDimensions(); 137 | } 138 | 139 | 140 | void GetDimensions() 141 | { 142 | RECT rc; 143 | if (GetTaskbarRect(rc)) 144 | ComputeDimensions(rc); 145 | } 146 | 147 | 148 | bool ChangedPosition() 149 | { 150 | RECT rc; 151 | if (GetTaskbarRect(rc)) 152 | { 153 | if (m_rcPosition.left != rc.left || 154 | m_rcPosition.top != rc.top || 155 | m_rcPosition.right != rc.right || 156 | m_rcPosition.bottom != rc.bottom) 157 | { 158 | ComputeDimensions(rc); 159 | return true; 160 | } 161 | } 162 | 163 | return false; 164 | } 165 | }; 166 | -------------------------------------------------------------------------------- /Places/popup_menu.cpp: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | #define STRICT 19 | #define NOMINMAX 20 | #include 21 | #include 22 | 23 | #include "memdebug.h" 24 | 25 | #include 26 | 27 | #include 28 | using namespace std; 29 | 30 | #define ASSERT 31 | #include "RfwString.h" 32 | #include "platform.h" 33 | #include "generic.h" 34 | #include "popup_menu.h" 35 | 36 | 37 | // -------------------------------------------------------------------------------------------------------------------------------------------- 38 | // CPopupMenu::GetItemMenu() 39 | // -------------------------------------------------------------------------------------------------------------------------------------------- 40 | CPopupMenu *CPopupMenu::GetItemMenu(long idx, long &idxInMenu, long &offsetIdx, CPopupMenu *pMenu) 41 | { 42 | long oldIDx = offsetIdx; 43 | offsetIdx += (long)pMenu->GetItemCount(); 44 | 45 | if (idx < offsetIdx) 46 | { 47 | idxInMenu = idx - oldIDx; 48 | return pMenu; 49 | } 50 | 51 | CPopupMenu *menu = NULL; 52 | 53 | for (int i = 0; i < pMenu->GetItemCount() && menu == NULL; i++) 54 | { 55 | CPopupMenuItem *menuItem = pMenu->GetItem(i); 56 | if (menuItem->GetSubmenu()) 57 | menu = GetItemMenu(idx, idxInMenu, offsetIdx, menuItem->GetSubmenu()); 58 | } 59 | 60 | return menu; 61 | } 62 | 63 | 64 | // -------------------------------------------------------------------------------------------------------------------------------------------- 65 | // CPopupMenu::CreateMenu() 66 | // -------------------------------------------------------------------------------------------------------------------------------------------- 67 | HMENU CPopupMenu::CreateMenu(CPopupMenu *pMenu, long &offsetIdx) 68 | { 69 | HMENU hMenu = ::CreatePopupMenu(); 70 | 71 | int flags = 0; 72 | long idxSubmenu = 0; 73 | long offset = offsetIdx; 74 | long nItems = (long)pMenu->GetItemCount(); 75 | offsetIdx += nItems; 76 | long inc = 0; 77 | 78 | for (int i = 0; i < nItems; i++) 79 | { 80 | CPopupMenuItem *menuItem = pMenu->GetItem(i); 81 | 82 | if (menuItem->GetIsSeparator()) 83 | { 84 | AppendMenu(hMenu, MF_SEPARATOR, 0, 0); 85 | } 86 | else 87 | { 88 | flags = MF_STRING; 89 | 90 | if (menuItem->GetSubmenu()) 91 | { 92 | HMENU submenu = CreateMenu(menuItem->GetSubmenu(), offsetIdx); 93 | if (submenu) 94 | AppendMenu(hMenu, flags|MF_POPUP|MF_ENABLED, (UINT_PTR)submenu, (const TCHAR *)menuItem->GetText().c_str()); 95 | } 96 | else 97 | { 98 | if (menuItem->GetEnabled()) 99 | flags |= MF_ENABLED; 100 | else 101 | flags |= MF_GRAYED; 102 | 103 | if (menuItem->GetIsTitle()) 104 | flags |= MF_DISABLED; 105 | 106 | if (menuItem->GetChecked()) 107 | flags |= MF_CHECKED; 108 | else 109 | flags |= MF_UNCHECKED; 110 | 111 | AppendMenu(hMenu, flags, offset + inc, (const TCHAR *)menuItem->GetText().c_str()); 112 | } 113 | } 114 | 115 | inc++; 116 | } 117 | 118 | return hMenu; 119 | } 120 | 121 | 122 | // -------------------------------------------------------------------------------------------------------------------------------------------- 123 | // CPopupMenu::CreatePopupMenu() 124 | // -------------------------------------------------------------------------------------------------------------------------------------------- 125 | CPopupMenu *CPopupMenu::CreatePopupMenu(HWND hwnd, int x, int y) 126 | { 127 | long offsetIdx = 0; 128 | HMENU hMenu = CreateMenu(this, offsetIdx); 129 | CPopupMenu *result = 0; 130 | 131 | if (hMenu) 132 | { 133 | POINT cPos; 134 | cPos.x = x; 135 | cPos.y = y; 136 | ClientToScreen(hwnd, &cPos); 137 | 138 | if (TrackPopupMenu(hMenu, 139 | TPM_LEFTALIGN, 140 | cPos.x, 141 | cPos.y, 142 | 0, 143 | hwnd, 144 | 0)) 145 | { 146 | MSG msg; 147 | 148 | // Eat WM_LBUTTONDOWN that might have been caused by a cancel-click into the app's client area, otherwise they 149 | // it'll be received by the main window and cause a hide-window action 150 | while (PeekMessage(&msg, hwnd, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE)) 151 | ; // NOP 152 | 153 | if (PeekMessage(&msg, hwnd, WM_COMMAND, WM_COMMAND, PM_REMOVE)) 154 | { 155 | if (HIWORD(msg.wParam) == 0) 156 | { 157 | long res = LOWORD(msg.wParam); 158 | if (res != -1) 159 | { 160 | long idx = 0; 161 | offsetIdx = 0; 162 | CPopupMenu *resultMenu = GetItemMenu(res, idx, offsetIdx, this); 163 | if (resultMenu) 164 | { 165 | result = resultMenu; 166 | result->SetChosenItemIndex(idx); 167 | } 168 | } 169 | } 170 | } 171 | } 172 | 173 | DestroyMenu(hMenu); 174 | } 175 | 176 | return result; 177 | } 178 | 179 | 180 | // -------------------------------------------------------------------------------------------------------------------------------------------- 181 | // CPopupMenu::DoPopupMenu() 182 | // -------------------------------------------------------------------------------------------------------------------------------------------- 183 | bool CPopupMenu::DoPopupMenu(HWND hwnd, int x, int y) 184 | { 185 | CPopupMenu *selectedMenu = CreatePopupMenu(hwnd, x, y); 186 | 187 | m_strSelectedMenu.erase(); 188 | m_strSelectedEntry.erase(); 189 | 190 | if (selectedMenu) 191 | { 192 | m_strSelectedMenu = selectedMenu->GetName(); 193 | 194 | int chosenItemIndex = selectedMenu->GetChosenItemIndex(); 195 | m_strSelectedEntry = selectedMenu->GetItemText(chosenItemIndex); 196 | return true; 197 | } 198 | 199 | return false; 200 | } 201 | -------------------------------------------------------------------------------- /Places/popup_menu.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | // -------------------------------------------------------------------------------------------------------------------------------------------- 19 | // class CPopupMenuItem 20 | // -------------------------------------------------------------------------------------------------------------------------------------------- 21 | class CPopupMenu; 22 | 23 | class CPopupMenuItem 24 | { 25 | public: 26 | enum EFlags 27 | { 28 | kNoFlags = 0, 29 | kDisabled = 1 << 0, // item is gray and not selectable 30 | kTitle = 1 << 1, // item indicates a title and is not selectable 31 | kChecked = 1 << 2, // item has a checkmark 32 | kSeparator = 1 << 3 // item is a separator 33 | }; 34 | 35 | protected: 36 | RString m_strText; 37 | CPopupMenu *m_pSubmenu; 38 | int m_nFlags; 39 | 40 | public: 41 | CPopupMenuItem(const RString &text, int flags = kNoFlags) 42 | : m_strText(text), 43 | m_nFlags(flags), 44 | m_pSubmenu(nullptr) 45 | { 46 | } 47 | 48 | CPopupMenuItem(const RString &text, CPopupMenu *pSubMenu) 49 | : m_strText(text), 50 | m_nFlags(kNoFlags), 51 | m_pSubmenu(pSubMenu) 52 | { 53 | } 54 | 55 | ~CPopupMenuItem() 56 | { 57 | //don't need to delete submenu 58 | } 59 | 60 | void SetText(const RString &text) { m_strText = text; } 61 | RString GetText() const { return m_strText; } 62 | 63 | bool GetEnabled() const { return !(m_nFlags & kDisabled); } 64 | bool GetChecked() const { return (m_nFlags & kChecked) != 0; } 65 | bool GetIsTitle() const { return (m_nFlags & kTitle) != 0; } 66 | bool GetIsSeparator() const { return (m_nFlags & kSeparator) != 0; } 67 | 68 | CPopupMenu *GetSubmenu() const { return m_pSubmenu; } 69 | 70 | void SetEnabled(bool state) 71 | { 72 | if (state) 73 | m_nFlags &= ~kDisabled; 74 | else 75 | m_nFlags |= kDisabled; 76 | } 77 | 78 | void SetChecked(bool state) 79 | { 80 | if (state) 81 | m_nFlags |= kChecked; 82 | else 83 | m_nFlags &= ~kChecked; 84 | } 85 | }; 86 | 87 | 88 | // -------------------------------------------------------------------------------------------------------------------------------------------- 89 | // class CPopupMenu 90 | // -------------------------------------------------------------------------------------------------------------------------------------------- 91 | class CPopupMenu 92 | { 93 | protected: 94 | RString m_strName; 95 | RString m_strSelectedMenu; // after user selection, this holds the name of the selected menu (so submenus can be identified) 96 | RString m_strSelectedEntry; // after user selection, this holds the string of the selected entry 97 | long m_nChosenItemIndex; // entry-index of selected menu / entry 98 | 99 | vector m_arMenuItems; 100 | 101 | protected: // -------------- GUI handling --------------- 102 | 103 | CPopupMenu *GetItemMenu(long idx, long &idxInMenu, long &offsetIdx, CPopupMenu *pMenu); 104 | 105 | HMENU CreateMenu(CPopupMenu *pMenu, long &offsetIdx); 106 | 107 | CPopupMenu *CreatePopupMenu(HWND hwnd, int x, int y); 108 | 109 | 110 | public: 111 | CPopupMenu(const RString &name) 112 | : m_strName(name), 113 | m_nChosenItemIndex(-1) 114 | { 115 | } 116 | 117 | ~CPopupMenu() 118 | { 119 | for (auto it : m_arMenuItems) 120 | delete it; 121 | } 122 | 123 | const RString &GetSelectedMenu() const { return m_strSelectedMenu; } 124 | 125 | const RString &GetSelectedEntry() const { return m_strSelectedEntry; } 126 | 127 | const RString &GetName() const { return m_strName; } 128 | 129 | int GetItemCount() { return (int)m_arMenuItems.size(); } 130 | 131 | CPopupMenuItem *GetItem(int index) 132 | { 133 | if (index >= 0 && index < (int)m_arMenuItems.size()) 134 | return m_arMenuItems[index]; 135 | 136 | return nullptr; 137 | } 138 | 139 | long GetChosenItemIndex() const { return m_nChosenItemIndex; } 140 | 141 | void SetChosenItemIndex(long index) 142 | { 143 | m_nChosenItemIndex = index; 144 | } 145 | 146 | RString GetItemText(int index) 147 | { 148 | return GetItem(index)->GetText(); 149 | } 150 | 151 | CPopupMenuItem *AddItem(const RString &text, CPopupMenu *submenu = nullptr) 152 | { 153 | CPopupMenuItem *item = new CPopupMenuItem(text, submenu); 154 | m_arMenuItems.push_back(item); 155 | return item; 156 | } 157 | 158 | CPopupMenuItem *AddSeparator() 159 | { 160 | CPopupMenuItem *item = new CPopupMenuItem(_T(""), CPopupMenuItem::kSeparator); 161 | m_arMenuItems.push_back(item); 162 | return item; 163 | } 164 | 165 | void CheckItem(int index, bool state) 166 | { 167 | CPopupMenuItem *item = m_arMenuItems[index]; 168 | item->SetChecked(state); 169 | } 170 | 171 | void CheckItemExclusive(int index) 172 | { 173 | for (int i = 0; i < (int)m_arMenuItems.size(); i++) 174 | m_arMenuItems[i]->SetChecked(i == index); 175 | } 176 | 177 | bool IsItemChecked(int index) const 178 | { 179 | return m_arMenuItems[index]->GetChecked(); 180 | } 181 | 182 | // returns false, if nothing was chosen 183 | bool DoPopupMenu(HWND hwnd, int x, int y); 184 | }; 185 | -------------------------------------------------------------------------------- /Places/resampler.h: -------------------------------------------------------------------------------- 1 | // resampler.h, Separable filtering image rescaler v2.21, Rich Geldreich - richgel99@gmail.com 2 | // See unlicense.org text at the bottom of this file. 3 | #ifndef __RESAMPLER_H__ 4 | #define __RESAMPLER_H__ 5 | 6 | #define RESAMPLER_DEBUG_OPS 0 7 | #define RESAMPLER_DEFAULT_FILTER "lanczos4" 8 | 9 | #define RESAMPLER_MAX_DIMENSION 16384 10 | 11 | // float or double 12 | typedef float Resample_Real; 13 | 14 | class Resampler 15 | { 16 | public: 17 | typedef Resample_Real Sample; 18 | 19 | struct Contrib 20 | { 21 | Resample_Real weight; 22 | unsigned short pixel; 23 | }; 24 | 25 | struct Contrib_List 26 | { 27 | unsigned short n; 28 | Contrib* p; 29 | }; 30 | 31 | enum Boundary_Op 32 | { 33 | BOUNDARY_WRAP = 0, 34 | BOUNDARY_REFLECT = 1, 35 | BOUNDARY_CLAMP = 2 36 | }; 37 | 38 | enum Status 39 | { 40 | STATUS_OKAY = 0, 41 | STATUS_OUT_OF_MEMORY = 1, 42 | STATUS_BAD_FILTER_NAME = 2, 43 | STATUS_SCAN_BUFFER_FULL = 3 44 | }; 45 | 46 | // src_x/src_y - Input dimensions 47 | // dst_x/dst_y - Output dimensions 48 | // boundary_op - How to sample pixels near the image boundaries 49 | // sample_low/sample_high - Clamp output samples to specified range, or disable clamping if sample_low >= sample_high 50 | // Pclist_x/Pclist_y - Optional pointers to contributor lists from another instance of a Resampler 51 | // src_x_ofs/src_y_ofs - Offset input image by specified amount (fractional values okay) 52 | Resampler( 53 | int src_x, int src_y, 54 | int dst_x, int dst_y, 55 | Boundary_Op boundary_op = BOUNDARY_CLAMP, 56 | Resample_Real sample_low = 0.0f, Resample_Real sample_high = 0.0f, 57 | const char* Pfilter_name = RESAMPLER_DEFAULT_FILTER, 58 | Contrib_List* Pclist_x = NULL, 59 | Contrib_List* Pclist_y = NULL, 60 | Resample_Real filter_x_scale = 1.0f, 61 | Resample_Real filter_y_scale = 1.0f, 62 | Resample_Real src_x_ofs = 0.0f, 63 | Resample_Real src_y_ofs = 0.0f); 64 | 65 | ~Resampler(); 66 | 67 | // Reinits resampler so it can handle another frame. 68 | void restart(); 69 | 70 | // false on out of memory. 71 | bool put_line(const Sample* Psrc); 72 | 73 | // NULL if no scanlines are currently available (give the resampler more scanlines!) 74 | const Sample* get_line(); 75 | 76 | Status status() const { return m_status; } 77 | 78 | // Returned contributor lists can be shared with another Resampler. 79 | void get_clists(Contrib_List** ptr_clist_x, Contrib_List** ptr_clist_y); 80 | Contrib_List* get_clist_x() const { return m_Pclist_x; } 81 | Contrib_List* get_clist_y() const { return m_Pclist_y; } 82 | 83 | // Filter accessors. 84 | static int get_filter_num(); 85 | static char* get_filter_name(int filter_num); 86 | 87 | private: 88 | Resampler(); 89 | Resampler(const Resampler& o); 90 | Resampler& operator= (const Resampler& o); 91 | 92 | #ifdef RESAMPLER_DEBUG_OPS 93 | int total_ops; 94 | #endif 95 | 96 | int m_intermediate_x; 97 | 98 | int m_resample_src_x; 99 | int m_resample_src_y; 100 | int m_resample_dst_x; 101 | int m_resample_dst_y; 102 | 103 | Boundary_Op m_boundary_op; 104 | 105 | Sample* m_Pdst_buf; 106 | Sample* m_Ptmp_buf; 107 | 108 | Contrib_List* m_Pclist_x; 109 | Contrib_List* m_Pclist_y; 110 | 111 | bool m_clist_x_forced; 112 | bool m_clist_y_forced; 113 | 114 | bool m_delay_x_resample; 115 | 116 | int* m_Psrc_y_count; 117 | unsigned char* m_Psrc_y_flag; 118 | 119 | // The maximum number of scanlines that can be buffered at one time. 120 | enum { MAX_SCAN_BUF_SIZE = RESAMPLER_MAX_DIMENSION }; 121 | 122 | struct Scan_Buf 123 | { 124 | int scan_buf_y[MAX_SCAN_BUF_SIZE]; 125 | Sample* scan_buf_l[MAX_SCAN_BUF_SIZE]; 126 | }; 127 | 128 | Scan_Buf* m_Pscan_buf; 129 | 130 | int m_cur_src_y; 131 | int m_cur_dst_y; 132 | 133 | Status m_status; 134 | 135 | void resample_x(Sample* Pdst, const Sample* Psrc); 136 | void scale_y_mov(Sample* Ptmp, const Sample* Psrc, Resample_Real weight, int dst_x); 137 | void scale_y_add(Sample* Ptmp, const Sample* Psrc, Resample_Real weight, int dst_x); 138 | void clamp(Sample* Pdst, int n); 139 | void resample_y(Sample* Pdst); 140 | 141 | int reflect(const int j, const int src_x, const Boundary_Op boundary_op); 142 | 143 | Contrib_List* make_clist( 144 | int src_x, int dst_x, Boundary_Op boundary_op, 145 | Resample_Real (*Pfilter)(Resample_Real), 146 | Resample_Real filter_support, 147 | Resample_Real filter_scale, 148 | Resample_Real src_ofs); 149 | 150 | inline int count_ops(Contrib_List* Pclist, int k) 151 | { 152 | int i, t = 0; 153 | for (i = 0; i < k; i++) 154 | t += Pclist[i].n; 155 | return (t); 156 | } 157 | 158 | Resample_Real m_lo; 159 | Resample_Real m_hi; 160 | 161 | inline Resample_Real clamp_sample(Resample_Real f) const 162 | { 163 | if (f < m_lo) 164 | f = m_lo; 165 | else if (f > m_hi) 166 | f = m_hi; 167 | return f; 168 | } 169 | }; 170 | 171 | #endif // __RESAMPLER_H__ 172 | 173 | // This is free and unencumbered software released into the public domain. 174 | // 175 | // Anyone is free to copy, modify, publish, use, compile, sell, or 176 | // distribute this software, either in source code form or as a compiled 177 | // binary, for any purpose, commercial or non-commercial, and by any 178 | // means. 179 | // 180 | // In jurisdictions that recognize copyright laws, the author or authors 181 | // of this software dedicate any and all copyright interest in the 182 | // software to the public domain. We make this dedication for the benefit 183 | // of the public at large and to the detriment of our heirs and 184 | // successors. We intend this dedication to be an overt act of 185 | // relinquishment in perpetuity of all present and future rights to this 186 | // software under copyright law. 187 | // 188 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 189 | // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 190 | // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 191 | // IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 192 | // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 193 | // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 194 | // OTHER DEALINGS IN THE SOFTWARE. 195 | // 196 | // For more information, please refer to 197 | -------------------------------------------------------------------------------- /Places/resource.h: -------------------------------------------------------------------------------- 1 | #ifndef IDC_STATIC 2 | #define IDC_STATIC (-1) 3 | #endif 4 | 5 | #define IDI_APP_ICON 1 6 | #define ARROW_SELECT_ADD 5 7 | #define ARROW_SELECT_SUB 6 8 | #define ARROW_ADD_SUB 7 9 | #define HAND_SELECT_ADD 8 10 | #define HAND_SELECT_SUB 9 11 | #define HAND_ADD_SUB 10 12 | #define IDR_TRAY_MENU 105 13 | #define IDD_SETTINGS 107 14 | #define IDD_ICON_PROPERTIES 108 15 | #define IDD_ABOUT 110 16 | #define ID_HOTKEY 40000 17 | #define ID_ICON_PATH 40000 18 | #define ID_MENU_SHOW 40000 19 | #define ID_WEBLINK 40000 20 | #define ID_FILE_BROWSE 40001 21 | #define ID_MENU_EXIT 40001 22 | #define ID_MOUSE_BUTTON 40001 23 | #define ID_MENU_SUSPEND 40002 24 | #define ID_MOUSE_CORNER 40002 25 | #define ID_PARAMETERS 40002 26 | #define ID_ICON_TITLE 40003 27 | #define ID_MENU_HELP 40003 28 | #define ID_SHADER 40003 29 | #define ID_BROWSE_SHADER 40004 30 | #define ID_ICON_BROWSE 40004 31 | #define ID_FILE_PATH 40005 32 | #define ID_IMAGE 40005 33 | #define ID_COLOR 40006 34 | #define ID_RUN_AS_ADMIN 40006 35 | #define ID_TILE_IMAGE 40007 36 | #define ID_BROWSE_IMAGE 40008 37 | #define ID_BROWSE_COLOR 40009 38 | #define ID_GRP_ACTIVATION 40010 39 | #define ID_GRP_WALLPAPER 40011 40 | #define ID_SHADER_SPEED 40012 41 | #define ID_SHADER_SPEED_DISPLAY 40013 42 | #define ID_SCALE_IMAGE 40014 43 | #define ID_COLUMNS 40015 44 | #define ID_ROWS 40016 45 | #define ID_BTN_CLEAR_SHADER 40017 46 | #define ID_BTN_CLEAR_IMAGE 40018 47 | #define ID_GRP_ICON_LAYOUT 40019 48 | #define ID_FONT_SIZE 40020 49 | #define ID_SCROLL_JUMP 40021 50 | #define ID_DISABLE_MAXIMIZED 40022 51 | #define ID_GRP_OTHER 40023 52 | #define ID_PLAY_CLICK_SOUND 40024 53 | -------------------------------------------------------------------------------- /Places/stream.h: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | // ================================================================================= 19 | // types and defines 20 | // ================================================================================= 21 | #ifndef _MAX_PATH 22 | #define _MAX_PATH 4096 23 | #endif 24 | 25 | #ifdef _WINDOWS 26 | #define PATH_SEPARATOR _T('\\') // Windows 27 | #define PATH_SEPARATOR_STRING _T("\\") 28 | #define CURRENT_PATH _T(".\\") 29 | #define PREV_PATH _T("..\\") 30 | #else 31 | #define PATH_SEPARATOR _T('/') // UNIX 32 | #define PATH_SEPARATOR_STRING _T("/") 33 | #define CURRENT_PATH _T("./") 34 | #define PREV_PATH _T("../") 35 | #endif 36 | 37 | 38 | // ================================================================================= 39 | // Prototypes 40 | // ================================================================================= 41 | bool TestWriteAccess(const RString &fname); 42 | 43 | 44 | // ================================================================================= 45 | // class Stream 46 | // ================================================================================= 47 | class Stream 48 | { 49 | protected: 50 | FILE *fh; 51 | RString m_FileName; 52 | void *m_pExtra; // pointer that can be used freely by the caller 53 | 54 | public: 55 | Stream(const RString &file_name, const RString &mode); 56 | virtual ~Stream(); 57 | 58 | virtual bool Eof(); 59 | 60 | virtual void Write(void const *buf, size_t count); 61 | virtual void WriteByte(BYTE buf); 62 | virtual void WriteBool(bool buf); 63 | virtual void WriteWord(WORD buf); 64 | virtual void WriteInt(int buf); 65 | virtual void WriteUInt(unsigned int buf); 66 | virtual void WriteInt64(__int64 buf); 67 | virtual void WriteString(const RString &s); // size of string is written as int in advance 68 | 69 | virtual void Read(void *buf, size_t count); 70 | virtual BYTE ReadByte(); 71 | virtual bool ReadBool(); 72 | virtual WORD ReadWord(); 73 | virtual int ReadInt(); 74 | virtual unsigned int ReadUInt(); 75 | virtual __int64 ReadInt64(); 76 | virtual RString ReadString(); // returns malloc'ed string, caller must free() it 77 | 78 | void *GetExtra() const { return m_pExtra; } 79 | void SetExtra(void *val) { m_pExtra = val; } 80 | }; 81 | -------------------------------------------------------------------------------- /Places/undo.cpp: -------------------------------------------------------------------------------- 1 | 2 | // Copyright (c) 2020 IDEAL Software GmbH, Neuss, Germany. 3 | // www.idealsoftware.com 4 | // Author: Thorsten Radde 5 | // 6 | // This program is free software; you can redistribute it and/or modify it under the terms of the GNU 7 | // General Public License as published by the Free Software Foundation; either version 2 of the License, 8 | // or (at your option) any later version. 9 | // 10 | // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 11 | // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public 12 | // License for more details. 13 | // 14 | // You should have received a copy of the GNU General Public License along with this program; if not, 15 | // write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 - 1301, USA. 16 | // 17 | 18 | #define STRICT 19 | #define NOMINMAX 20 | #include 21 | #include 22 | #include 23 | 24 | #include "memdebug.h" 25 | 26 | #include 27 | 28 | #include 29 | #include 30 | using namespace std; 31 | 32 | #define ASSERT 33 | #include "RfwString.h" 34 | #include "exceptions.h" 35 | #include "Mutex.h" 36 | #include "stream.h" 37 | #include "platform.h" 38 | #include "generic.h" 39 | #include "configuration.h" 40 | #include "md5.h" 41 | #include "bitmap_cache.h" 42 | #include "icon.h" 43 | #include "icon_page.h" 44 | #include "undo.h" 45 | #include "icon_manager.h" 46 | 47 | 48 | // --------------------------------------------------------- CIconInsertAction --------------------------------------------------------- 49 | void CIconInsertAction::PerformUndo(CIconManager &icon_manager, int pass) 50 | { 51 | icon_manager.UnlinkIcon(m_pIcon); 52 | } 53 | 54 | 55 | void CIconInsertAction::PerformRedo(CIconManager &icon_manager, int pass) 56 | { 57 | icon_manager.PlaceIcon(m_pIcon, m_pIcon->GetPosition()); 58 | } 59 | 60 | void CIconInsertAction::Release(CIconManager &icon_manager, bool is_undo_action) 61 | { 62 | if (!is_undo_action) 63 | { 64 | icon_manager.UnrefIcon(m_pIcon); 65 | delete m_pIcon; 66 | m_pIcon = NULL; 67 | } 68 | } 69 | 70 | 71 | // --------------------------------------------------------- CIconDeleteAction --------------------------------------------------------- 72 | void CIconDeleteAction::PerformUndo(CIconManager &icon_manager, int pass) 73 | { 74 | icon_manager.PlaceIcon(m_pIcon, m_pIcon->GetPosition()); 75 | } 76 | 77 | 78 | void CIconDeleteAction::PerformRedo(CIconManager &icon_manager, int pass) 79 | { 80 | icon_manager.UnlinkIcon(m_pIcon); 81 | } 82 | 83 | void CIconDeleteAction::Release(CIconManager &icon_manager, bool is_undo_action) 84 | { 85 | if (is_undo_action) 86 | { 87 | icon_manager.UnrefIcon(m_pIcon); 88 | delete m_pIcon; 89 | m_pIcon = NULL; 90 | } 91 | } 92 | 93 | 94 | // --------------------------------------------------------- CIconMoveAction --------------------------------------------------------- 95 | void CIconMoveAction::PerformUndo(CIconManager &icon_manager, int pass) 96 | { 97 | if (pass == 0) 98 | { 99 | // we must unlink the whole group in a first pass, otherwise some icons of the same 100 | // group might still occupy a position, to which other icons should be moved back 101 | icon_manager.UnlinkIcon(m_pIcon); 102 | } 103 | else 104 | { 105 | // after all icons have been unlinked, move the whole group in a second pass to the new position 106 | CIconPos cur_pos(m_pIcon->GetPosition()); 107 | icon_manager.PlaceIcon(m_pIcon, m_OldPosition); 108 | m_OldPosition = cur_pos; // for inverted redo action 109 | } 110 | } 111 | 112 | 113 | // --------------------------------------------------------- CIconPropertiesAction --------------------------------------------------------- 114 | void CIconPropertiesAction::PerformUndo(CIconManager &icon_manager, int pass) 115 | { 116 | // title 117 | RString tmp = m_pIcon->GetFullTitle(); 118 | if (tmp != m_strOldTitle) 119 | { 120 | m_pIcon->SetFullTitle(m_strOldTitle); 121 | m_strOldTitle = tmp; // for inverted redo action 122 | } 123 | 124 | // icon path 125 | tmp = m_pIcon->GetIconPath(); 126 | if (tmp != m_strOldIconPath) 127 | { 128 | m_pIcon->SetIconPath(icon_manager.GetBitmapCache(), m_strOldIconPath); 129 | m_strOldIconPath = tmp; // for inverted redo action 130 | } 131 | 132 | // file path 133 | tmp = m_pIcon->GetFilePath(); 134 | if (tmp != m_strOldFilePath) 135 | { 136 | m_pIcon->SetFilePath(icon_manager.GetBitmapCache(), m_strOldFilePath); 137 | m_strOldFilePath = tmp; // for inverted redo action 138 | } 139 | 140 | // parameters 141 | tmp = m_pIcon->m_strParameters; 142 | if (tmp != m_strOldParameters) 143 | { 144 | m_pIcon->m_strParameters = m_strOldParameters; 145 | m_strOldParameters = tmp; // for inverted redo action 146 | } 147 | 148 | // open as admin 149 | bool b = m_pIcon->m_bOpenAsAdmin; 150 | if (b != m_bOldOpenAsAdmin) 151 | { 152 | m_pIcon->m_bOpenAsAdmin = m_bOldOpenAsAdmin; 153 | m_bOldOpenAsAdmin = b; 154 | } 155 | } 156 | -------------------------------------------------------------------------------- /Places/zlib/adler32.c: -------------------------------------------------------------------------------- 1 | /* adler32.c -- compute the Adler-32 checksum of a data stream 2 | * Copyright (C) 1995-2011 Mark Adler 3 | * For conditions of distribution and use, see copyright notice in zlib.h 4 | */ 5 | 6 | /* @(#) $Id$ */ 7 | 8 | #include "zutil.h" 9 | 10 | #define local static 11 | 12 | local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); 13 | 14 | #define BASE 65521 /* largest prime smaller than 65536 */ 15 | #define NMAX 5552 16 | /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ 17 | 18 | #define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} 19 | #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); 20 | #define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); 21 | #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); 22 | #define DO16(buf) DO8(buf,0); DO8(buf,8); 23 | 24 | /* use NO_DIVIDE if your processor does not do division in hardware -- 25 | try it both ways to see which is faster */ 26 | #ifdef NO_DIVIDE 27 | /* note that this assumes BASE is 65521, where 65536 % 65521 == 15 28 | (thank you to John Reiser for pointing this out) */ 29 | # define CHOP(a) \ 30 | do { \ 31 | unsigned long tmp = a >> 16; \ 32 | a &= 0xffffUL; \ 33 | a += (tmp << 4) - tmp; \ 34 | } while (0) 35 | # define MOD28(a) \ 36 | do { \ 37 | CHOP(a); \ 38 | if (a >= BASE) a -= BASE; \ 39 | } while (0) 40 | # define MOD(a) \ 41 | do { \ 42 | CHOP(a); \ 43 | MOD28(a); \ 44 | } while (0) 45 | # define MOD63(a) \ 46 | do { /* this assumes a is not negative */ \ 47 | z_off64_t tmp = a >> 32; \ 48 | a &= 0xffffffffL; \ 49 | a += (tmp << 8) - (tmp << 5) + tmp; \ 50 | tmp = a >> 16; \ 51 | a &= 0xffffL; \ 52 | a += (tmp << 4) - tmp; \ 53 | tmp = a >> 16; \ 54 | a &= 0xffffL; \ 55 | a += (tmp << 4) - tmp; \ 56 | if (a >= BASE) a -= BASE; \ 57 | } while (0) 58 | #else 59 | # define MOD(a) a %= BASE 60 | # define MOD28(a) a %= BASE 61 | # define MOD63(a) a %= BASE 62 | #endif 63 | 64 | /* ========================================================================= */ 65 | uLong ZEXPORT adler32(adler, buf, len) 66 | uLong adler; 67 | const Bytef *buf; 68 | uInt len; 69 | { 70 | unsigned long sum2; 71 | unsigned n; 72 | 73 | /* split Adler-32 into component sums */ 74 | sum2 = (adler >> 16) & 0xffff; 75 | adler &= 0xffff; 76 | 77 | /* in case user likes doing a byte at a time, keep it fast */ 78 | if (len == 1) { 79 | adler += buf[0]; 80 | if (adler >= BASE) 81 | adler -= BASE; 82 | sum2 += adler; 83 | if (sum2 >= BASE) 84 | sum2 -= BASE; 85 | return adler | (sum2 << 16); 86 | } 87 | 88 | /* initial Adler-32 value (deferred check for len == 1 speed) */ 89 | if (buf == Z_NULL) 90 | return 1L; 91 | 92 | /* in case short lengths are provided, keep it somewhat fast */ 93 | if (len < 16) { 94 | while (len--) { 95 | adler += *buf++; 96 | sum2 += adler; 97 | } 98 | if (adler >= BASE) 99 | adler -= BASE; 100 | MOD28(sum2); /* only added so many BASE's */ 101 | return adler | (sum2 << 16); 102 | } 103 | 104 | /* do length NMAX blocks -- requires just one modulo operation */ 105 | while (len >= NMAX) { 106 | len -= NMAX; 107 | n = NMAX / 16; /* NMAX is divisible by 16 */ 108 | do { 109 | DO16(buf); /* 16 sums unrolled */ 110 | buf += 16; 111 | } while (--n); 112 | MOD(adler); 113 | MOD(sum2); 114 | } 115 | 116 | /* do remaining bytes (less than NMAX, still just one modulo) */ 117 | if (len) { /* avoid modulos if none remaining */ 118 | while (len >= 16) { 119 | len -= 16; 120 | DO16(buf); 121 | buf += 16; 122 | } 123 | while (len--) { 124 | adler += *buf++; 125 | sum2 += adler; 126 | } 127 | MOD(adler); 128 | MOD(sum2); 129 | } 130 | 131 | /* return recombined sums */ 132 | return adler | (sum2 << 16); 133 | } 134 | 135 | /* ========================================================================= */ 136 | local uLong adler32_combine_(adler1, adler2, len2) 137 | uLong adler1; 138 | uLong adler2; 139 | z_off64_t len2; 140 | { 141 | unsigned long sum1; 142 | unsigned long sum2; 143 | unsigned rem; 144 | 145 | /* for negative len, return invalid adler32 as a clue for debugging */ 146 | if (len2 < 0) 147 | return 0xffffffffUL; 148 | 149 | /* the derivation of this formula is left as an exercise for the reader */ 150 | MOD63(len2); /* assumes len2 >= 0 */ 151 | rem = (unsigned)len2; 152 | sum1 = adler1 & 0xffff; 153 | sum2 = rem * sum1; 154 | MOD(sum2); 155 | sum1 += (adler2 & 0xffff) + BASE - 1; 156 | sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; 157 | if (sum1 >= BASE) sum1 -= BASE; 158 | if (sum1 >= BASE) sum1 -= BASE; 159 | if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1); 160 | if (sum2 >= BASE) sum2 -= BASE; 161 | return sum1 | (sum2 << 16); 162 | } 163 | 164 | /* ========================================================================= */ 165 | uLong ZEXPORT adler32_combine(adler1, adler2, len2) 166 | uLong adler1; 167 | uLong adler2; 168 | z_off_t len2; 169 | { 170 | return adler32_combine_(adler1, adler2, len2); 171 | } 172 | 173 | uLong ZEXPORT adler32_combine64(adler1, adler2, len2) 174 | uLong adler1; 175 | uLong adler2; 176 | z_off64_t len2; 177 | { 178 | return adler32_combine_(adler1, adler2, len2); 179 | } 180 | -------------------------------------------------------------------------------- /Places/zlib/compress.c: -------------------------------------------------------------------------------- 1 | /* compress.c -- compress a memory buffer 2 | * Copyright (C) 1995-2005 Jean-loup Gailly. 3 | * For conditions of distribution and use, see copyright notice in zlib.h 4 | */ 5 | 6 | /* @(#) $Id$ */ 7 | 8 | #define ZLIB_INTERNAL 9 | #include "zlib.h" 10 | 11 | /* =========================================================================== 12 | Compresses the source buffer into the destination buffer. The level 13 | parameter has the same meaning as in deflateInit. sourceLen is the byte 14 | length of the source buffer. Upon entry, destLen is the total size of the 15 | destination buffer, which must be at least 0.1% larger than sourceLen plus 16 | 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. 17 | 18 | compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough 19 | memory, Z_BUF_ERROR if there was not enough room in the output buffer, 20 | Z_STREAM_ERROR if the level parameter is invalid. 21 | */ 22 | int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) 23 | Bytef *dest; 24 | uLongf *destLen; 25 | const Bytef *source; 26 | uLong sourceLen; 27 | int level; 28 | { 29 | z_stream stream; 30 | int err; 31 | 32 | stream.next_in = (z_const Bytef *)source; 33 | stream.avail_in = (uInt)sourceLen; 34 | #ifdef MAXSEG_64K 35 | /* Check for source > 64K on 16-bit machine: */ 36 | if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; 37 | #endif 38 | stream.next_out = dest; 39 | stream.avail_out = (uInt)*destLen; 40 | if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; 41 | 42 | stream.zalloc = (alloc_func)0; 43 | stream.zfree = (free_func)0; 44 | stream.opaque = (voidpf)0; 45 | 46 | err = deflateInit(&stream, level); 47 | if (err != Z_OK) return err; 48 | 49 | err = deflate(&stream, Z_FINISH); 50 | if (err != Z_STREAM_END) { 51 | deflateEnd(&stream); 52 | return err == Z_OK ? Z_BUF_ERROR : err; 53 | } 54 | *destLen = stream.total_out; 55 | 56 | err = deflateEnd(&stream); 57 | return err; 58 | } 59 | 60 | /* =========================================================================== 61 | */ 62 | int ZEXPORT compress (dest, destLen, source, sourceLen) 63 | Bytef *dest; 64 | uLongf *destLen; 65 | const Bytef *source; 66 | uLong sourceLen; 67 | { 68 | return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); 69 | } 70 | 71 | /* =========================================================================== 72 | If the default memLevel or windowBits for deflateInit() is changed, then 73 | this function needs to be updated. 74 | */ 75 | uLong ZEXPORT compressBound (sourceLen) 76 | uLong sourceLen; 77 | { 78 | return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 79 | (sourceLen >> 25) + 13; 80 | } 81 | -------------------------------------------------------------------------------- /Places/zlib/inffast.h: -------------------------------------------------------------------------------- 1 | /* inffast.h -- header to use inffast.c 2 | * Copyright (C) 1995-2003, 2010 Mark Adler 3 | * For conditions of distribution and use, see copyright notice in zlib.h 4 | */ 5 | 6 | /* WARNING: this file should *not* be used by applications. It is 7 | part of the implementation of the compression library and is 8 | subject to change. Applications should only use zlib.h. 9 | */ 10 | 11 | void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); 12 | -------------------------------------------------------------------------------- /Places/zlib/inffixed.h: -------------------------------------------------------------------------------- 1 | /* inffixed.h -- table for decoding fixed codes 2 | * Generated automatically by makefixed(). 3 | */ 4 | 5 | /* WARNING: this file should *not* be used by applications. 6 | It is part of the implementation of this library and is 7 | subject to change. Applications should only use zlib.h. 8 | */ 9 | 10 | static const code lenfix[512] = { 11 | {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, 12 | {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, 13 | {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, 14 | {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, 15 | {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, 16 | {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, 17 | {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, 18 | {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, 19 | {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, 20 | {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, 21 | {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, 22 | {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, 23 | {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, 24 | {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, 25 | {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, 26 | {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, 27 | {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, 28 | {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, 29 | {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, 30 | {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, 31 | {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, 32 | {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, 33 | {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, 34 | {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, 35 | {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, 36 | {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, 37 | {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, 38 | {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, 39 | {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, 40 | {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, 41 | {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, 42 | {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, 43 | {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, 44 | {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, 45 | {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, 46 | {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, 47 | {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, 48 | {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, 49 | {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, 50 | {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, 51 | {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, 52 | {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, 53 | {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, 54 | {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, 55 | {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, 56 | {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, 57 | {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, 58 | {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, 59 | {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, 60 | {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, 61 | {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, 62 | {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, 63 | {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, 64 | {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, 65 | {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, 66 | {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, 67 | {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, 68 | {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, 69 | {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, 70 | {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, 71 | {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, 72 | {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, 73 | {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, 74 | {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, 75 | {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, 76 | {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, 77 | {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, 78 | {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, 79 | {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, 80 | {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, 81 | {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, 82 | {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, 83 | {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, 84 | {0,9,255} 85 | }; 86 | 87 | static const code distfix[32] = { 88 | {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, 89 | {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, 90 | {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, 91 | {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, 92 | {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, 93 | {22,5,193},{64,5,0} 94 | }; 95 | -------------------------------------------------------------------------------- /Places/zlib/inflate.h: -------------------------------------------------------------------------------- 1 | /* inflate.h -- internal inflate state definition 2 | * Copyright (C) 1995-2009 Mark Adler 3 | * For conditions of distribution and use, see copyright notice in zlib.h 4 | */ 5 | 6 | /* WARNING: this file should *not* be used by applications. It is 7 | part of the implementation of the compression library and is 8 | subject to change. Applications should only use zlib.h. 9 | */ 10 | 11 | /* define NO_GZIP when compiling if you want to disable gzip header and 12 | trailer decoding by inflate(). NO_GZIP would be used to avoid linking in 13 | the crc code when it is not needed. For shared libraries, gzip decoding 14 | should be left enabled. */ 15 | #ifndef NO_GZIP 16 | # define GUNZIP 17 | #endif 18 | 19 | /* Possible inflate modes between inflate() calls */ 20 | typedef enum { 21 | HEAD, /* i: waiting for magic header */ 22 | FLAGS, /* i: waiting for method and flags (gzip) */ 23 | TIME, /* i: waiting for modification time (gzip) */ 24 | OS, /* i: waiting for extra flags and operating system (gzip) */ 25 | EXLEN, /* i: waiting for extra length (gzip) */ 26 | EXTRA, /* i: waiting for extra bytes (gzip) */ 27 | NAME, /* i: waiting for end of file name (gzip) */ 28 | COMMENT, /* i: waiting for end of comment (gzip) */ 29 | HCRC, /* i: waiting for header crc (gzip) */ 30 | DICTID, /* i: waiting for dictionary check value */ 31 | DICT, /* waiting for inflateSetDictionary() call */ 32 | TYPE, /* i: waiting for type bits, including last-flag bit */ 33 | TYPEDO, /* i: same, but skip check to exit inflate on new block */ 34 | STORED, /* i: waiting for stored size (length and complement) */ 35 | COPY_, /* i/o: same as COPY below, but only first time in */ 36 | COPY, /* i/o: waiting for input or output to copy stored block */ 37 | TABLE, /* i: waiting for dynamic block table lengths */ 38 | LENLENS, /* i: waiting for code length code lengths */ 39 | CODELENS, /* i: waiting for length/lit and distance code lengths */ 40 | LEN_, /* i: same as LEN below, but only first time in */ 41 | LEN, /* i: waiting for length/lit/eob code */ 42 | LENEXT, /* i: waiting for length extra bits */ 43 | DIST, /* i: waiting for distance code */ 44 | DISTEXT, /* i: waiting for distance extra bits */ 45 | MATCH, /* o: waiting for output space to copy string */ 46 | LIT, /* o: waiting for output space to write literal */ 47 | CHECK, /* i: waiting for 32-bit check value */ 48 | LENGTH, /* i: waiting for 32-bit length (gzip) */ 49 | DONE, /* finished check, done -- remain here until reset */ 50 | BAD, /* got a data error -- remain here until reset */ 51 | MEM, /* got an inflate() memory error -- remain here until reset */ 52 | SYNC /* looking for synchronization bytes to restart inflate() */ 53 | } inflate_mode; 54 | 55 | /* 56 | State transitions between above modes - 57 | 58 | (most modes can go to BAD or MEM on error -- not shown for clarity) 59 | 60 | Process header: 61 | HEAD -> (gzip) or (zlib) or (raw) 62 | (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT -> 63 | HCRC -> TYPE 64 | (zlib) -> DICTID or TYPE 65 | DICTID -> DICT -> TYPE 66 | (raw) -> TYPEDO 67 | Read deflate blocks: 68 | TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK 69 | STORED -> COPY_ -> COPY -> TYPE 70 | TABLE -> LENLENS -> CODELENS -> LEN_ 71 | LEN_ -> LEN 72 | Read deflate codes in fixed or dynamic block: 73 | LEN -> LENEXT or LIT or TYPE 74 | LENEXT -> DIST -> DISTEXT -> MATCH -> LEN 75 | LIT -> LEN 76 | Process trailer: 77 | CHECK -> LENGTH -> DONE 78 | */ 79 | 80 | /* state maintained between inflate() calls. Approximately 10K bytes. */ 81 | struct inflate_state { 82 | inflate_mode mode; /* current inflate mode */ 83 | int last; /* true if processing last block */ 84 | int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ 85 | int havedict; /* true if dictionary provided */ 86 | int flags; /* gzip header method and flags (0 if zlib) */ 87 | unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ 88 | unsigned long check; /* protected copy of check value */ 89 | unsigned long total; /* protected copy of output count */ 90 | gz_headerp head; /* where to save gzip header information */ 91 | /* sliding window */ 92 | unsigned wbits; /* log base 2 of requested window size */ 93 | unsigned wsize; /* window size or zero if not using window */ 94 | unsigned whave; /* valid bytes in the window */ 95 | unsigned wnext; /* window write index */ 96 | unsigned char FAR *window; /* allocated sliding window, if needed */ 97 | /* bit accumulator */ 98 | unsigned long hold; /* input bit accumulator */ 99 | unsigned bits; /* number of bits in "in" */ 100 | /* for string and stored block copying */ 101 | unsigned length; /* literal or length of data to copy */ 102 | unsigned offset; /* distance back to copy string from */ 103 | /* for table and code decoding */ 104 | unsigned extra; /* extra bits needed */ 105 | /* fixed and dynamic code tables */ 106 | code const FAR *lencode; /* starting table for length/literal codes */ 107 | code const FAR *distcode; /* starting table for distance codes */ 108 | unsigned lenbits; /* index bits for lencode */ 109 | unsigned distbits; /* index bits for distcode */ 110 | /* dynamic table building */ 111 | unsigned ncode; /* number of code length code lengths */ 112 | unsigned nlen; /* number of length code lengths */ 113 | unsigned ndist; /* number of distance code lengths */ 114 | unsigned have; /* number of code lengths in lens[] */ 115 | code FAR *next; /* next available space in codes[] */ 116 | unsigned short lens[320]; /* temporary storage for code lengths */ 117 | unsigned short work[288]; /* work area for code table building */ 118 | code codes[ENOUGH]; /* space for code tables */ 119 | int sane; /* if false, allow invalid distance too far */ 120 | int back; /* bits back of last unprocessed length/lit */ 121 | unsigned was; /* initial length of match */ 122 | }; 123 | -------------------------------------------------------------------------------- /Places/zlib/inftrees.h: -------------------------------------------------------------------------------- 1 | /* inftrees.h -- header to use inftrees.c 2 | * Copyright (C) 1995-2005, 2010 Mark Adler 3 | * For conditions of distribution and use, see copyright notice in zlib.h 4 | */ 5 | 6 | /* WARNING: this file should *not* be used by applications. It is 7 | part of the implementation of the compression library and is 8 | subject to change. Applications should only use zlib.h. 9 | */ 10 | 11 | /* Structure for decoding tables. Each entry provides either the 12 | information needed to do the operation requested by the code that 13 | indexed that table entry, or it provides a pointer to another 14 | table that indexes more bits of the code. op indicates whether 15 | the entry is a pointer to another table, a literal, a length or 16 | distance, an end-of-block, or an invalid code. For a table 17 | pointer, the low four bits of op is the number of index bits of 18 | that table. For a length or distance, the low four bits of op 19 | is the number of extra bits to get after the code. bits is 20 | the number of bits in this code or part of the code to drop off 21 | of the bit buffer. val is the actual byte to output in the case 22 | of a literal, the base length or distance, or the offset from 23 | the current table to the next table. Each entry is four bytes. */ 24 | typedef struct { 25 | unsigned char op; /* operation, extra bits, table bits */ 26 | unsigned char bits; /* bits in this part of the code */ 27 | unsigned short val; /* offset in table or code value */ 28 | } code; 29 | 30 | /* op values as set by inflate_table(): 31 | 00000000 - literal 32 | 0000tttt - table link, tttt != 0 is the number of table index bits 33 | 0001eeee - length or distance, eeee is the number of extra bits 34 | 01100000 - end of block 35 | 01000000 - invalid code 36 | */ 37 | 38 | /* Maximum size of the dynamic table. The maximum number of code structures is 39 | 1444, which is the sum of 852 for literal/length codes and 592 for distance 40 | codes. These values were found by exhaustive searches using the program 41 | examples/enough.c found in the zlib distribtution. The arguments to that 42 | program are the number of symbols, the initial root table size, and the 43 | maximum bit length of a code. "enough 286 9 15" for literal/length codes 44 | returns returns 852, and "enough 30 6 15" for distance codes returns 592. 45 | The initial root table size (9 or 6) is found in the fifth argument of the 46 | inflate_table() calls in inflate.c and infback.c. If the root table size is 47 | changed, then these maximum sizes would be need to be recalculated and 48 | updated. */ 49 | #define ENOUGH_LENS 852 50 | #define ENOUGH_DISTS 592 51 | #define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) 52 | 53 | /* Type of code to build for inflate_table() */ 54 | typedef enum { 55 | CODES, 56 | LENS, 57 | DISTS 58 | } codetype; 59 | 60 | int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, 61 | unsigned codes, code FAR * FAR *table, 62 | unsigned FAR *bits, unsigned short FAR *work)); 63 | -------------------------------------------------------------------------------- /Places/zlib/uncompr.c: -------------------------------------------------------------------------------- 1 | /* uncompr.c -- decompress a memory buffer 2 | * Copyright (C) 1995-2003, 2010 Jean-loup Gailly. 3 | * For conditions of distribution and use, see copyright notice in zlib.h 4 | */ 5 | 6 | /* @(#) $Id$ */ 7 | 8 | #define ZLIB_INTERNAL 9 | #include "zlib.h" 10 | 11 | /* =========================================================================== 12 | Decompresses the source buffer into the destination buffer. sourceLen is 13 | the byte length of the source buffer. Upon entry, destLen is the total 14 | size of the destination buffer, which must be large enough to hold the 15 | entire uncompressed data. (The size of the uncompressed data must have 16 | been saved previously by the compressor and transmitted to the decompressor 17 | by some mechanism outside the scope of this compression library.) 18 | Upon exit, destLen is the actual size of the compressed buffer. 19 | 20 | uncompress returns Z_OK if success, Z_MEM_ERROR if there was not 21 | enough memory, Z_BUF_ERROR if there was not enough room in the output 22 | buffer, or Z_DATA_ERROR if the input data was corrupted. 23 | */ 24 | int ZEXPORT uncompress (dest, destLen, source, sourceLen) 25 | Bytef *dest; 26 | uLongf *destLen; 27 | const Bytef *source; 28 | uLong sourceLen; 29 | { 30 | z_stream stream; 31 | int err; 32 | 33 | stream.next_in = (z_const Bytef *)source; 34 | stream.avail_in = (uInt)sourceLen; 35 | /* Check for source > 64K on 16-bit machine: */ 36 | if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; 37 | 38 | stream.next_out = dest; 39 | stream.avail_out = (uInt)*destLen; 40 | if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; 41 | 42 | stream.zalloc = (alloc_func)0; 43 | stream.zfree = (free_func)0; 44 | 45 | err = inflateInit(&stream); 46 | if (err != Z_OK) return err; 47 | 48 | err = inflate(&stream, Z_FINISH); 49 | if (err != Z_STREAM_END) { 50 | inflateEnd(&stream); 51 | if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0)) 52 | return Z_DATA_ERROR; 53 | return err; 54 | } 55 | *destLen = stream.total_out; 56 | 57 | err = inflateEnd(&stream); 58 | return err; 59 | } 60 | -------------------------------------------------------------------------------- /Places/zlib/zlib.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Source Files 23 | 24 | 25 | Source Files 26 | 27 | 28 | Source Files 29 | 30 | 31 | Source Files 32 | 33 | 34 | Source Files 35 | 36 | 37 | Source Files 38 | 39 | 40 | Source Files 41 | 42 | 43 | Source Files 44 | 45 | 46 | Source Files 47 | 48 | 49 | Source Files 50 | 51 | 52 | 53 | 54 | Header Files 55 | 56 | 57 | Header Files 58 | 59 | 60 | Header Files 61 | 62 | 63 | Header Files 64 | 65 | 66 | Header Files 67 | 68 | 69 | Header Files 70 | 71 | 72 | Header Files 73 | 74 | 75 | Header Files 76 | 77 | 78 | Header Files 79 | 80 | 81 | Header Files 82 | 83 | 84 | Header Files 85 | 86 | 87 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Places: Windows Application Launcher 2 | 3 | ![Screenshot](screenshot_small.png) 4 | 5 | ## Design Goals 6 | Starting applications or opening folder-/ file links as quickly as possible with a minimum number of user interactions (i.e. mouse clicks, key presses). 7 | 8 | Everything stays in its place: icons will always stay in the same position, where you once placed them. No sorting, no re-ordering, no changes if the resolution of the screen changes. Instead, the icons are scaled accordingly to the screen resolution. You will always find your icons at the same position with a quick mouse click. Therefore the name "Places". 9 | 10 | ## Eye-Candy and Smooth 11 | - Animated icons 12 | - Animated smooth scrolling between pages 13 | - Bitmaps for icons can be loaded from external files 14 | - Use shaders, patterns or images as background wallpaper 15 | 16 | ## Intuitive and fast user interface 17 | - Places is moved to the front of the screen and is not hidden by other windows 18 | - Unlimited undo and redo (ctrl + z, ctrl + y) 19 | - Lasso to select and de-select groups of items (alt + left-click to drag lasso, groups of icons can be arranged or moved to other pages) 20 | - Provides a total of 10 pages 21 | - Special windowed mode, also useful to drag apps and folders into "Places" 22 | - Wipe to scroll between pages 23 | - Several activation methods to activate / hide Places (5-button mouse recommended) 24 | - Activation can be suspended, when a full-screen app is running in foreground, e.g. a game 25 | 26 | ## System Requirements 27 | - Windows Vista or higher 28 | - Graphics Card with OpenGL driver (i.e. any modern Graphics Card) 29 | 30 | ## Download 31 | Download the binary installer at [www.idealsoftware.com](https://www.idealsoftware.com/opensource/places.html). 32 | 33 | ## Links 34 | [Youtube Video](https://youtu.be/onOWVSTzzqM) 35 | -------------------------------------------------------------------------------- /SFML Patches/Event.hpp: -------------------------------------------------------------------------------- 1 | diff U11 include/SFML/Window/Event.hpp include/SFML/Window/Event.hpp 2 | --- include/SFML/Window/Event.hpp Mon Jan 19 23:26:36 1970 3 | +++ include/SFML/Window/Event.hpp Mon Jan 19 23:26:36 1970 4 | @@ -24,22 +24,24 @@ 5 | 6 | #ifndef SFML_EVENT_HPP 7 | #define SFML_EVENT_HPP 8 | 9 | //////////////////////////////////////////////////////////// 10 | // Headers 11 | //////////////////////////////////////////////////////////// 12 | #include 13 | #include 14 | #include 15 | #include 16 | +#include 17 | +#include 18 | 19 | 20 | namespace sf 21 | { 22 | //////////////////////////////////////////////////////////// 23 | /// \brief Defines a system event and its parameters 24 | /// 25 | //////////////////////////////////////////////////////////// 26 | class Event 27 | { 28 | public : 29 | @@ -133,22 +135,31 @@ 30 | //////////////////////////////////////////////////////////// 31 | /// \brief Joystick buttons events parameters 32 | /// (JoystickButtonPressed, JoystickButtonReleased) 33 | /// 34 | //////////////////////////////////////////////////////////// 35 | struct JoystickButtonEvent 36 | { 37 | unsigned int joystickId; ///< Index of the joystick (in range [0 .. Joystick::Count - 1]) 38 | unsigned int button; ///< Index of the button that has been pressed (in range [0 .. Joystick::ButtonCount - 1]) 39 | }; 40 | 41 | + //////////////////////////////////////////////////////////// 42 | + /// \brief DropFiles events parameters 43 | + /// 44 | + //////////////////////////////////////////////////////////// 45 | + struct DropFilesEvent 46 | + { 47 | + std::list *listDroppedFiles; ///< List of strings with names of dropped files 48 | + }; 49 | + 50 | //////////////////////////////////////////////////////////// 51 | /// \brief Enumeration of the different types of events 52 | /// 53 | //////////////////////////////////////////////////////////// 54 | enum EventType 55 | { 56 | Closed, ///< The window requested to be closed (no data) 57 | Resized, ///< The window was resized (data in event.size) 58 | LostFocus, ///< The window lost the focus (no data) 59 | GainedFocus, ///< The window gained the focus (no data) 60 | TextEntered, ///< A character was entered (data in event.text) 61 | @@ -157,42 +168,44 @@ 62 | MouseWheelMoved, ///< The mouse wheel was scrolled (data in event.mouseWheel) 63 | MouseButtonPressed, ///< A mouse button was pressed (data in event.mouseButton) 64 | MouseButtonReleased, ///< A mouse button was released (data in event.mouseButton) 65 | MouseMoved, ///< The mouse cursor moved (data in event.mouseMove) 66 | MouseEntered, ///< The mouse cursor entered the area of the window (no data) 67 | MouseLeft, ///< The mouse cursor left the area of the window (no data) 68 | JoystickButtonPressed, ///< A joystick button was pressed (data in event.joystickButton) 69 | JoystickButtonReleased, ///< A joystick button was released (data in event.joystickButton) 70 | JoystickMoved, ///< The joystick moved along an axis (data in event.joystickMove) 71 | JoystickConnected, ///< A joystick was connected (data in event.joystickConnect) 72 | JoystickDisconnected, ///< A joystick was disconnected (data in event.joystickConnect) 73 | + DropFiles, ///< Files have been dropped via Drag&Drop (data in event.dropFiles) 74 | 75 | Count ///< Keep last -- the total number of event types 76 | }; 77 | 78 | //////////////////////////////////////////////////////////// 79 | // Member data 80 | //////////////////////////////////////////////////////////// 81 | EventType type; ///< Type of the event 82 | 83 | union 84 | { 85 | SizeEvent size; ///< Size event parameters (Event::Resized) 86 | KeyEvent key; ///< Key event parameters (Event::KeyPressed, Event::KeyReleased) 87 | TextEvent text; ///< Text event parameters (Event::TextEntered) 88 | MouseMoveEvent mouseMove; ///< Mouse move event parameters (Event::MouseMoved) 89 | MouseButtonEvent mouseButton; ///< Mouse button event parameters (Event::MouseButtonPressed, Event::MouseButtonReleased) 90 | MouseWheelEvent mouseWheel; ///< Mouse wheel event parameters (Event::MouseWheelMoved) 91 | JoystickMoveEvent joystickMove; ///< Joystick move event parameters (Event::JoystickMoved) 92 | JoystickButtonEvent joystickButton; ///< Joystick button event parameters (Event::JoystickButtonPressed, Event::JoystickButtonReleased) 93 | JoystickConnectEvent joystickConnect; ///< Joystick (dis)connect event parameters (Event::JoystickConnected, Event::JoystickDisconnected) 94 | + DropFilesEvent dropFiles; ///< Files have been dropped via Drag&Drop event parameters (Event::DropFiles) 95 | }; 96 | }; 97 | 98 | } // namespace sf 99 | 100 | 101 | #endif // SFML_EVENT_HPP 102 | 103 | 104 | //////////////////////////////////////////////////////////// 105 | /// \class sf::Event 106 | -------------------------------------------------------------------------------- /SFML Patches/Readme.txt: -------------------------------------------------------------------------------- 1 | Places is compiled and linked against SFML v2.3. 2 | SFML was modified to support Drag & Drop. 3 | I also experienced random crashes in DINPUT.DLL, which is related to joystick input. 4 | This happened after Places was running for several days or weeks. 5 | Therefore I disabled the SFML joystick processing, as it is not used in Places. 6 | The patch files in this directory must be applied to the SFML 2.3 source code. -------------------------------------------------------------------------------- /SFML Patches/WindowImpl.cpp: -------------------------------------------------------------------------------- 1 | diff -u E:/source/SFML source 2.3 original/src/SFML/Window/WindowImpl.cpp E:/source/SFML source/src/SFML/Window/WindowImpl.cpp 2 | --- E:/source/SFML source 2.3 original/src/SFML/Window/WindowImpl.cpp Sun May 3 21:53:53 2015 3 | +++ E:/source/SFML source/src/SFML/Window/WindowImpl.cpp Mon Sep 21 13:03:04 2020 4 | @@ -118 +118 @@ 5 | - processJoystickEvents(); 6 | + //processJoystickEvents(); 7 | @@ -131 +131 @@ 8 | - processJoystickEvents(); 9 | + //processJoystickEvents(); 10 | -------------------------------------------------------------------------------- /SFML Patches/WindowImplWin32.cpp: -------------------------------------------------------------------------------- 1 | diff U11 src/SFML/Window/Win32/WindowImplWin32.cpp src/SFML/Window/Win32/WindowImplWin32.cpp 2 | --- src/SFML/Window/Win32/WindowImplWin32.cpp Mon Jan 19 23:26:36 1970 3 | +++ src/SFML/Window/Win32/WindowImplWin32.cpp Mon Jan 19 23:26:36 1970 4 | @@ -741,25 +741,51 @@ 5 | Event event; 6 | event.type = Event::MouseEntered; 7 | pushEvent(event); 8 | } 9 | 10 | // Generate a MouseMove event 11 | Event event; 12 | event.type = Event::MouseMoved; 13 | event.mouseMove.x = x; 14 | event.mouseMove.y = y; 15 | pushEvent(event); 16 | - break; 17 | } 18 | } 19 | + break; 20 | + 21 | + case WM_DROPFILES: 22 | + { 23 | + TCHAR *buffer; 24 | + Event event; 25 | + event.type = Event::DropFiles; 26 | + event.dropFiles.listDroppedFiles = new std::list; 27 | + UINT nFileCount = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0); 28 | + for (unsigned int n = 0; n < nFileCount; n++) 29 | + { 30 | + UINT size = DragQueryFile((HDROP)wParam, n, 0, 0); 31 | + if (size > 0) 32 | + { 33 | + buffer = new TCHAR[size + 1]; 34 | + UINT result_size = DragQueryFile((HDROP)wParam, n, buffer, size + 1); 35 | + if (result_size == 0) 36 | + *buffer = 0; // something is wrong... 37 | + } 38 | + else 39 | + buffer = NULL; // something is wrong... 40 | + event.dropFiles.listDroppedFiles->push_back(buffer); 41 | + } 42 | + DragFinish((HDROP)wParam); 43 | + pushEvent(event); 44 | + } 45 | + break; 46 | } 47 | } 48 | 49 | 50 | //////////////////////////////////////////////////////////// 51 | Keyboard::Key WindowImplWin32::virtualKeyCodeToSF(WPARAM key, LPARAM flags) 52 | { 53 | switch (key) 54 | { 55 | // Check the scancode to distinguish between left and right shift 56 | case VK_SHIFT : 57 | -------------------------------------------------------------------------------- /Shaders/2 tweets challenge.frag: -------------------------------------------------------------------------------- 1 | // 2 Tweets Challenge by nimitz (twitter: @stormoid) 2 | 3 | #ifdef GL_ES 4 | precision mediump float; 5 | #endif 6 | 7 | uniform float time; 8 | uniform vec2 mouse; 9 | uniform vec2 resolution; 10 | 11 | #define iGlobalTime time 12 | #define iResolution resolution 13 | #define iMouse mouse 14 | 15 | void mainImage( out vec4 f, in vec2 w ){ 16 | vec4 p = vec4(w,0.,1.)/iResolution.y - vec4(.9,.5,0,0), c=p-p; 17 | float t=iGlobalTime,r=length(p.xy+=sin(t+sin(t*.8))*.4),a=atan(p.y,p.x); 18 | for (float i = 0.;i<60.;i++) 19 | c = c*.98 + (sin(i+vec4(5,3,2,1))*.5+.5)*smoothstep(.99, 1., sin(log(r+i*.05)-t-i+sin(a +=t*.01))); 20 | f = c*r; 21 | } 22 | 23 | void main(void) 24 | { 25 | mainImage(gl_FragColor, gl_FragCoord.xy); 26 | } 27 | -------------------------------------------------------------------------------- /Shaders/A Quick Plasma Test.frag: -------------------------------------------------------------------------------- 1 | 2 | uniform float time; 3 | uniform vec2 mouse; 4 | uniform vec2 resolution; 5 | 6 | #define iGlobalTime time 7 | #define iResolution resolution 8 | #define iMouse mouse 9 | 10 | /* 11 | * This function will function like an array. 12 | */ 13 | vec2 getWaveSource(int ws) 14 | { 15 | vec2 outp; 16 | if (ws == 0) 17 | { 18 | outp = vec2(-100,-100); 19 | } 20 | else if (ws == 1) 21 | { 22 | outp = vec2(-100,500); 23 | } 24 | else 25 | { 26 | outp = vec2(500,-500); 27 | } 28 | return outp; 29 | } 30 | /* 31 | * Don't need an expensive square root operation. 32 | * This returns distance squared, not distance. 33 | */ 34 | float distanceSq(vec2 a, vec2 b) 35 | { 36 | vec2 diff = a - b; 37 | return dot(diff, diff); 38 | } 39 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 40 | { 41 | const int wsCount = 3; 42 | 43 | vec2 uv = fragCoord.xy / iResolution.xy; 44 | 45 | float wavePower = 0.0; 46 | for(int i=0; ia.y) ? vec2(1.0,0.0) : vec2(0.0,1.0); //vec2 of = 0.5 + 0.5*vec2(sign(a.x-a.y), sign(a.y-a.x)); 32 | vec2 b = a - o + K2; 33 | vec2 c = a - 1.0 + 2.0*K2; 34 | 35 | vec3 h = max( 0.5-vec3(dot(a,a), dot(b,b), dot(c,c) ), 0.0 ); 36 | 37 | vec3 n = h*h*h*h*vec3( dot(a,hash(i+0.0)), dot(b,hash(i+o)), dot(c,hash(i+1.0))); 38 | 39 | return dot( n, vec3(70.0) ); 40 | 41 | } 42 | 43 | const mat2 m = mat2( 0.80, 0.60, -0.60, 0.80 ); 44 | 45 | float fbm4( in vec2 p ) 46 | { 47 | float f = 0.0; 48 | f += 0.5000*noise( p ); p = m*p*2.02; 49 | f += 0.2500*noise( p ); p = m*p*2.03; 50 | f += 0.1250*noise( p ); p = m*p*2.01; 51 | f += 0.0625*noise( p ); 52 | return f; 53 | } 54 | 55 | float fbm6( in vec2 p ) 56 | { 57 | float f = 0.0; 58 | f += 0.5000*noise( p ); p = m*p*2.02; 59 | f += 0.2500*noise( p ); p = m*p*2.03; 60 | f += 0.1250*noise( p ); p = m*p*2.01; 61 | f += 0.0625*noise( p ); p = m*p*2.04; 62 | f += 0.031250*noise( p ); p = m*p*2.01; 63 | f += 0.015625*noise( p ); 64 | return f; 65 | } 66 | 67 | float turb4( in vec2 p ) 68 | { 69 | float f = 0.0; 70 | f += 0.5000*abs(noise(p)); p = m*p*2.02; 71 | f += 0.2500*abs(noise(p)); p = m*p*2.03; 72 | f += 0.1250*abs(noise(p)); p = m*p*2.01; 73 | f += 0.0625*abs(noise(p)); 74 | return f; 75 | } 76 | 77 | float turb6( in vec2 p ) 78 | { 79 | float f = 0.0; 80 | f += 0.5000*abs(noise(p)); p = m*p*2.02; 81 | f += 0.2500*abs(noise(p)); p = m*p*2.03; 82 | f += 0.1250*abs(noise(p)); p = m*p*2.01; 83 | f += 0.0625*abs(noise(p)); p = m*p*2.04; 84 | f += 0.031250*abs(noise(p)); p = m*p*2.01; 85 | f += 0.015625*abs(noise(p)); 86 | return f; 87 | } 88 | 89 | float marble(in vec2 p) 90 | { 91 | return cos(p.x+fbm4(p)); 92 | } 93 | 94 | float wood(in vec2 p) 95 | { 96 | float n = noise(p); 97 | return n-floor(n); 98 | } 99 | 100 | float dowarp ( in vec2 q, out vec2 a, out vec2 b ) 101 | { 102 | float ang=0.; 103 | ang = 1.2345 * sin (0.015*iGlobalTime); 104 | mat2 m1 = mat2(cos(ang), -sin(ang), sin(ang), cos(ang)); 105 | ang = 0.2345 * sin (0.021*iGlobalTime); 106 | mat2 m2 = mat2(cos(ang), -sin(ang), sin(ang), cos(ang)); 107 | 108 | a = vec2( marble(m1*q), marble(m2*q+vec2(1.12,0.654)) ); 109 | 110 | ang = 0.543 * cos (0.011*iGlobalTime); 111 | m1 = mat2(cos(ang), -sin(ang), sin(ang), cos(ang)); 112 | ang = 1.128 * cos (0.018*iGlobalTime); 113 | m2 = mat2(cos(ang), -sin(ang), sin(ang), cos(ang)); 114 | 115 | b = vec2( marble( m2*(q + a)), marble( m1*(q + a) ) ); 116 | 117 | return marble( q + b +vec2(0.32,1.654)); 118 | } 119 | 120 | // ----------------------------------------------- 121 | 122 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 123 | { 124 | vec2 uv = fragCoord.xy / iResolution.xy; 125 | vec2 q = 2.*uv-1.; 126 | q.y *= iResolution.y/iResolution.x; 127 | 128 | float Time = 0.1*iGlobalTime; 129 | q += vec2( 0.2 *sin(Time), 0.); 130 | q *= 1.725; 131 | 132 | vec2 a = vec2(0.); 133 | vec2 b = vec2(0.); 134 | float f = dowarp(q, a, b); 135 | f = 0.5+0.5*f; 136 | 137 | vec3 col = vec3(f); 138 | float c = 0.; 139 | c = f; 140 | col = vec3(c, c*c, c*c*c); 141 | c = abs(a.x); 142 | col -= vec3(c*c, c, c*c*c); 143 | c = abs(b.x); 144 | col += vec3(c*c*c, c*c, c); 145 | col *= 0.7; 146 | col.x = pow(col.x, 2.18); 147 | // col.y = pow(col.y, 1.58); 148 | col.z = pow(col.z, 1.88); 149 | col = smoothstep(0., 1., col); 150 | col = 0.5 - (1.4*col-0.7)*(1.4*col-0.7); 151 | col = 1.25*sqrt(col); 152 | col = clamp(col, 0., 1.); 153 | 154 | // Vignetting 155 | vec2 r = -1.0 + 2.0*(uv); 156 | float vb = max(abs(r.x), abs(r.y)); 157 | col *= (0.15 + 0.85*(1.0-exp(-(1.0-vb)*30.0))); 158 | fragColor = vec4( col, 1.0 ); 159 | } 160 | 161 | void main(void) 162 | { 163 | mainImage(gl_FragColor, gl_FragCoord.xy); 164 | } 165 | -------------------------------------------------------------------------------- /Shaders/SparkySparkz.frag: -------------------------------------------------------------------------------- 1 | // attempt at spark creation - based on Blobs by @paulofalcao 2 | 3 | uniform float time; 4 | uniform vec2 mouse; 5 | uniform vec2 resolution; 6 | 7 | #define iResolution resolution 8 | #define iMouse mouse 9 | 10 | float makePoint(float x,float y,float sparkDur,float fy,float sparkDist,float xShakeWidth,float t,float offset){ 11 | float xx=x+sin(t*sparkDur*3.0)*xShakeWidth; 12 | //float xx=x+sin(t*fx)*sx; 13 | //changed below from fy/sy -- this just creates different x/y orbit bases 14 | float yy=y+cos(t*sparkDur)*0.4*sparkDist; 15 | //float yy=y+cos(t*fx)*sx; 16 | float overTime = 1.0/(sqrt(xx*xx+yy*yy)); 17 | //return 1.0/(sqrt(xx*xx+yy*yy));//+abs(cos(t*fx)));//+offset 18 | 19 | //multiplying by the sin makes light fade in then out on upward cos swing 20 | return overTime*sin(t*sparkDur); 21 | } 22 | 23 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) { 24 | 25 | vec2 p=(fragCoord.xy/iResolution.x)*2.0-vec2(1.0,iResolution.y/iResolution.x); 26 | 27 | p=p*2.0; 28 | 29 | float x=p.x; 30 | float y=p.y; 31 | 32 | float a= 33 | makePoint(x,y,3.0,2.9,0.8,0.15,time,0.1); 34 | a=a+makePoint(x,y,1.9,2.0,0.8,0.2,time,0.4); 35 | a=a+makePoint(x,y,0.8,0.7,0.4,0.17,time,0.7); 36 | a=a+makePoint(x,y,2.3,0.1,0.6,0.3,time,2.5); 37 | a=a+makePoint(x,y,0.8,1.7,0.5,0.24,time,1.6); 38 | a=a+makePoint(x,y,0.3,1.0,0.4,0.33,time,0.8); 39 | a=a+makePoint(x,y,1.4,1.7,0.4,0.08,time,1.3); 40 | a=a+makePoint(x,y,1.3,2.1,0.6,0.14,time,2.3); 41 | a=a+makePoint(x,y,1.8,1.7,0.5,0.14,time,2.8); 42 | 43 | /*float b= 44 | makePoint(x,y,1.2,1.9,0.8,0.3,time,0.6); 45 | b=b+makePoint(x,y,0.7,2.7,0.4,0.4,time); 46 | b=b+makePoint(x,y,1.4,0.6,0.4,0.5,time); 47 | b=b+makePoint(x,y,2.6,0.4,0.6,0.3,time); 48 | b=b+makePoint(x,y,0.7,1.4,0.5,0.4,time); 49 | b=b+makePoint(x,y,0.7,1.7,0.4,0.4,time); 50 | b=b+makePoint(x,y,0.8,0.5,0.4,0.5,time); 51 | b=b+makePoint(x,y,1.4,0.9,0.6,0.3,time); 52 | b=b+makePoint(x,y,0.7,1.3,0.5,0.4,time);*/ 53 | 54 | /*float c= 55 | makePoint(x,y,3.7,0.3,0.8,0.3,time,0.8); 56 | c=c+makePoint(x,y,1.9,1.3,0.4,0.4,time); 57 | c=c+makePoint(x,y,0.8,0.9,0.4,0.5,time); 58 | c=c+makePoint(x,y,1.2,1.7,0.6,0.3,time); 59 | c=c+makePoint(x,y,0.3,0.6,0.5,0.4,time); 60 | c=c+makePoint(x,y,0.3,0.3,0.4,0.4,time); 61 | c=c+makePoint(x,y,1.4,0.8,0.4,0.5,time); 62 | c=c+makePoint(x,y,0.2,0.6,0.6,0.3,time); 63 | c=c+makePoint(x,y,1.3,0.5,0.5,0.4,time);*/ 64 | 65 | vec3 d=vec3(a,a-y*32.0,a-y*50.0)/32.0; 66 | // vec3 d=vec3(a,b,c)/32.0; 67 | 68 | fragColor = vec4(d.x,d.y,d.z,1.0); 69 | } 70 | 71 | void main(void) 72 | { 73 | mainImage(gl_FragColor, gl_FragCoord.xy); 74 | } 75 | -------------------------------------------------------------------------------- /Shaders/Star Nest.frag: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Shaders/Star Nest.frag -------------------------------------------------------------------------------- /Shaders/Two Tweets.frag: -------------------------------------------------------------------------------- 1 | // Created by inigo quilez - iq/2013 2 | // License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. 3 | 4 | uniform float time; 5 | uniform vec2 mouse; 6 | uniform vec2 resolution; 7 | 8 | #define iGlobalTime time 9 | #define iResolution resolution 10 | #define iMouse mouse 11 | 12 | float f(vec3 p) 13 | { 14 | p.z+=iGlobalTime;return length(.05*cos(9.*p.y*p.x)+cos(p)-.1*cos(9.*(p.z+.3*p.x-p.y)))-1.; 15 | } 16 | void mainImage( out vec4 c, vec2 p ) 17 | { 18 | vec3 d=.5-vec3(p,1)/iResolution.x,o=d;for(int i=0;i<99;i++)o+=f(o)*d; 19 | c=vec4(abs(f(o-d)*vec3(0,.1,.2)+f(o-.6)*vec3(.2,.1,0))*(10.-o.z),1); 20 | } 21 | 22 | void main(void) 23 | { 24 | mainImage(gl_FragColor, gl_FragCoord.xy); 25 | } 26 | -------------------------------------------------------------------------------- /Shaders/Undulating Lines.frag: -------------------------------------------------------------------------------- 1 | // https://www.shadertoy.com/view/Xd2XRh 2 | // Uploaded by abubusoft in 2014-Aug-25 3 | 4 | uniform float time; 5 | uniform vec2 mouse; 6 | uniform vec2 resolution; 7 | 8 | #define iGlobalTime time 9 | #define iResolution resolution 10 | #define iMouse mouse 11 | 12 | const float VELOCITY = 1.0 ; // speed of lines [ 0.5 .. 1.5 ] = 1.0 13 | const float HEIGHT = 0.5 ; // height of the lines [ 0 .. 1.0 ] = 0.5 14 | const float FREQUENCY = 7.5 ; // frequency [ 1.0 .. 14.0 ] = 9.0 15 | const float AMPLITUDE = 0.3 ; // amplitude [ 0.1 .. 0.5 ] = 0.2 16 | const int NUMBER = 10 ; // lines [ 0 .. 20 ] = 10.0 17 | const float INVERSE = 1.0 / float(10); // inverse 18 | 19 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 20 | { 21 | vec3 col = vec3( 1.); 22 | 23 | float rColMod; 24 | float gColMod; 25 | float bColMod; 26 | 27 | float offset; 28 | float t; 29 | 30 | float color; 31 | float colora; 32 | 33 | float tsin; 34 | 35 | for (int i = 0; i < NUMBER; ++i) 36 | { 37 | vec2 pos= fragCoord.xy/iResolution.xy; 38 | 39 | offset = float(i) * INVERSE; 40 | 41 | t = iGlobalTime * 0.25 + VELOCITY *(offset * offset * 2.); 42 | 43 | tsin = sin( t ); 44 | 45 | pos.y -= HEIGHT; 46 | pos.y+=sin(pos.x * FREQUENCY + t ) * AMPLITUDE * tsin; 47 | 48 | color = 1.0 - pow( abs( pos.y ) , 0.2 ); 49 | colora = pow( 1. , 0.2 * abs( pos.y ) ); 50 | 51 | rColMod = (1. - (offset * .5) + .5) * colora ; 52 | gColMod = ((offset * .5) + .5) * colora ; 53 | bColMod = ((offset * .5) + .5) * colora ; 54 | 55 | col -= color * INVERSE * vec3( mix(rColMod, gColMod, tsin), mix(gColMod, bColMod, tsin) , mix(bColMod, rColMod, tsin)) ; 56 | } 57 | 58 | fragColor=vec4(col.x, col.y, col.z ,1.0); 59 | } 60 | 61 | 62 | void main(void) 63 | { 64 | mainImage(gl_FragColor, gl_FragCoord.xy); 65 | } 66 | -------------------------------------------------------------------------------- /Shaders/Warm Glows.frag: -------------------------------------------------------------------------------- 1 | 2 | uniform float time; 3 | uniform vec2 mouse; 4 | uniform vec2 resolution; 5 | 6 | #define iGlobalTime time 7 | #define iResolution resolution 8 | #define iMouse mouse 9 | 10 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 11 | { 12 | vec2 uv = fragCoord.xy/iResolution.xy; 13 | float red = clamp(uv.y*2.0-1.0+cos(uv.x+iGlobalTime),0.0,1.0); 14 | float green = pow(1.0-abs(uv.y*2.0-cos(uv.x+iGlobalTime*0.7)),8.0); 15 | float blue = uv.y*0.2+pow(fract(cos(fragCoord.x*35.7375)*36764.86437+0.5+0.5*cos(iGlobalTime/5.0))*0.1,2.0); 16 | fragColor = vec4(red,green,blue,1.0); 17 | } 18 | 19 | void main(void) 20 | { 21 | mainImage(gl_FragColor, gl_FragCoord.xy); 22 | } 23 | -------------------------------------------------------------------------------- /Shaders/Warping - procedural 2.frag: -------------------------------------------------------------------------------- 1 | // Created by inigo quilez - iq/2013 2 | // License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. 3 | 4 | // See here for a tutorial on how to make this: http://www.iquilezles.org/www/articles/warp/warp.htm 5 | 6 | uniform float time; 7 | uniform vec2 mouse; 8 | uniform vec2 resolution; 9 | 10 | #define iGlobalTime time 11 | #define iResolution resolution 12 | #define iMouse mouse 13 | 14 | const mat2 m = mat2( 0.80, 0.60, -0.60, 0.80 ); 15 | 16 | float noise( in vec2 x ) 17 | { 18 | return sin(1.5*x.x)*sin(1.5*x.y); 19 | } 20 | 21 | float fbm4( vec2 p ) 22 | { 23 | float f = 0.0; 24 | f += 0.5000*noise( p ); p = m*p*2.02; 25 | f += 0.2500*noise( p ); p = m*p*2.03; 26 | f += 0.1250*noise( p ); p = m*p*2.01; 27 | f += 0.0625*noise( p ); 28 | return f/0.9375; 29 | } 30 | 31 | float fbm6( vec2 p ) 32 | { 33 | float f = 0.0; 34 | f += 0.500000*(0.5+0.5*noise( p )); p = m*p*2.02; 35 | f += 0.250000*(0.5+0.5*noise( p )); p = m*p*2.03; 36 | f += 0.125000*(0.5+0.5*noise( p )); p = m*p*2.01; 37 | f += 0.062500*(0.5+0.5*noise( p )); p = m*p*2.04; 38 | f += 0.031250*(0.5+0.5*noise( p )); p = m*p*2.01; 39 | f += 0.015625*(0.5+0.5*noise( p )); 40 | return f/0.96875; 41 | } 42 | 43 | 44 | float func( vec2 q, out vec4 ron ) 45 | { 46 | float ql = length( q ); 47 | q.x += 0.05*sin(0.27*iGlobalTime+ql*4.1); 48 | q.y += 0.05*sin(0.23*iGlobalTime+ql*4.3); 49 | q *= 0.5; 50 | 51 | vec2 o = vec2(0.0); 52 | o.x = 0.5 + 0.5*fbm4( vec2(2.0*q ) ); 53 | o.y = 0.5 + 0.5*fbm4( vec2(2.0*q+vec2(5.2)) ); 54 | 55 | float ol = length( o ); 56 | o.x += 0.02*sin(0.12*iGlobalTime+ol)/ol; 57 | o.y += 0.02*sin(0.14*iGlobalTime+ol)/ol; 58 | 59 | vec2 n; 60 | n.x = fbm6( vec2(4.0*o+vec2(9.2)) ); 61 | n.y = fbm6( vec2(4.0*o+vec2(5.7)) ); 62 | 63 | vec2 p = 4.0*q + 4.0*n; 64 | 65 | float f = 0.5 + 0.5*fbm4( p ); 66 | 67 | f = mix( f, f*f*f*3.5, f*abs(n.x) ); 68 | 69 | float g = 0.5 + 0.5*sin(4.0*p.x)*sin(4.0*p.y); 70 | f *= 1.0-0.5*pow( g, 8.0 ); 71 | 72 | ron = vec4( o, n ); 73 | 74 | return f; 75 | } 76 | 77 | 78 | 79 | vec3 doMagic(vec2 p) 80 | { 81 | vec2 q = p*0.6; 82 | 83 | vec4 on = vec4(0.0); 84 | float f = func(q, on); 85 | 86 | vec3 col = vec3(0.0); 87 | col = mix( vec3(0.2,0.1,0.4), vec3(0.3,0.05,0.05), f ); 88 | col = mix( col, vec3(0.9,0.9,0.9), dot(on.zw,on.zw) ); 89 | col = mix( col, vec3(0.4,0.3,0.3), 0.5*on.y*on.y ); 90 | col = mix( col, vec3(0.0,0.2,0.4), 0.5*smoothstep(1.2,1.3,abs(on.z)+abs(on.w)) ); 91 | col = clamp( col*f*2.0, 0.0, 1.0 ); 92 | 93 | vec3 nor = normalize( vec3( dFdx(f)*iResolution.x, 6.0, dFdy(f)*iResolution.y ) ); 94 | 95 | vec3 lig = normalize( vec3( 0.9, -0.2, -0.4 ) ); 96 | float dif = clamp( 0.3+0.7*dot( nor, lig ), 0.0, 1.0 ); 97 | vec3 bdrf; 98 | bdrf = vec3(0.70,0.90,0.95)*(nor.y*0.5+0.5); 99 | bdrf += vec3(0.15,0.10,0.05)*dif; 100 | col *= 1.2*bdrf; 101 | col = 1.0-col; 102 | return 1.1*col*col; 103 | } 104 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 105 | { 106 | vec2 q = fragCoord.xy / iResolution.xy; 107 | vec2 p = -1.0 + 2.0 * q; 108 | p.x *= iResolution.x/iResolution.y; 109 | 110 | fragColor = vec4( doMagic( p ), 1.0 ); 111 | } 112 | 113 | void main(void) 114 | { 115 | mainImage(gl_FragColor, gl_FragCoord.xy); 116 | } 117 | -------------------------------------------------------------------------------- /Shaders/Xor - Glowing Webs.frag: -------------------------------------------------------------------------------- 1 | 2 | uniform float time; 3 | uniform vec2 mouse; 4 | uniform vec2 resolution; 5 | 6 | #define iGlobalTime time 7 | #define iResolution resolution 8 | #define iMouse mouse 9 | 10 | float r(float n) 11 | { 12 | return fract(cos(n*89.42)*343.42); 13 | } 14 | vec2 r(vec2 n) 15 | { 16 | return vec2(r(n.x*23.62-300.0+n.y*34.35),r(n.x*45.13+256.0+n.y*38.89)); 17 | } 18 | float worley(vec2 P,vec2 R,float s) 19 | { 20 | vec2 n = P+iGlobalTime*s-0.5*R; 21 | float dis = 64.0; 22 | for(int x = -1;x<2;x++) 23 | { 24 | for(int y = -1;y<2;y++) 25 | { 26 | vec2 p = floor(n/s)+vec2(x,y); 27 | float d = length(r(p)+vec2(x,y)-fract(n/s)); 28 | if (dis>d) 29 | { 30 | dis = d; 31 | } 32 | } 33 | } 34 | return pow(dis,4.0); 35 | } 36 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 37 | { 38 | vec2 c = fragCoord; 39 | vec2 r = iResolution.xy; 40 | vec3 col = vec3(worley(c,r,32.0)+worley(c,r,36.0)+worley(c,r,44.0)); 41 | fragColor = vec4(col,1.0); 42 | } 43 | 44 | void main(void) 45 | { 46 | mainImage(gl_FragColor, gl_FragCoord.xy); 47 | } 48 | -------------------------------------------------------------------------------- /Shaders/cairo tiling.frag: -------------------------------------------------------------------------------- 1 | //Cairo tiling by nimitz (stormoid.com) (twitter: @stormoid) 2 | 3 | //Inspired by Petri Leskinen's "Cairo Pentagonal Tiling" http://pixelero.wordpress.com/page/2/ 4 | 5 | /* 6 | Cairo pentagonal tiling made using a "voronoi-like" function, 7 | the main difference is that half the tiles are reflected and the centers are 8 | displaced symmetrically. 9 | 10 | Please let me know if you can think of a simple way to get all the edges. 11 | */ 12 | 13 | #ifdef GL_ES 14 | precision mediump float; 15 | #endif 16 | 17 | uniform float time; 18 | uniform vec2 mouse; 19 | uniform vec2 resolution; 20 | 21 | #define iGlobalTime time 22 | #define iResolution resolution 23 | #define iMouse mouse 24 | 25 | float hash( float n ){ return fract(sin(n)*43758.5453);} 26 | 27 | 28 | //returns: x -> distance form center | y -> cell id | z -> distance from edge 29 | vec3 field(const in vec2 p) 30 | { 31 | vec2 fp = fract(p); 32 | vec2 ip = floor(p); 33 | 34 | vec3 rz = vec3(1.); 35 | 36 | //vary the offset over time 37 | float of = sin(time*0.6)*.5; 38 | 39 | //reflect 40 | float rf = mod(ip.x+ip.y,2.0); 41 | fp.x = rf-fp.x*sign(rf-.5); 42 | 43 | for(float j=0.; j<=1.; j++) 44 | for(float i=0.; i<=1.; i++) 45 | { 46 | vec2 b = vec2(j, i); 47 | 48 | //Displace each sample 49 | float sgn = sign(j-0.5); 50 | float cmp = float(j == i); 51 | vec2 o = vec2(sgn*cmp,-sgn*(1.-cmp)); 52 | //o = b-vec2(i,j); //variation 53 | vec2 sp = fp - b + of*o; 54 | b += o; 55 | 56 | float d = dot(sp,sp); 57 | 58 | if( d=FAR ) break; 63 | d.x += h; 64 | vec2 res = map(ro+rd*d.x); 65 | if (!stp) 66 | { 67 | md = min(md,res.x); 68 | if (h < EDGE_SIZE && h < res.x && i>0) 69 | { 70 | stp = true; 71 | d.y = d.x; 72 | } 73 | } 74 | h = res.x; 75 | id = res.y; 76 | } 77 | 78 | if (stp) md = smoothstep(EDGE_SIZE-SMOOTH, EDGE_SIZE+0.01, md); 79 | else md = 1.; 80 | return vec4(d, md, id); 81 | } 82 | 83 | vec3 normal(in vec3 p, in float d) 84 | { 85 | vec2 e = vec2(-1., 1.)*0.003*d; 86 | return normalize(e.yxx*map(p + e.yxx).x + e.xxy*map(p + e.xxy).x + 87 | e.xyx*map(p + e.xyx).x + e.yyy*map(p + e.yyy).x ); 88 | } 89 | 90 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 91 | { 92 | vec2 q = fragCoord.xy/iResolution.xy; 93 | vec2 p = -1.0 + 2.0*q; 94 | p.x*=iResolution.x/iResolution.y; 95 | vec2 mo = iMouse.xy/iResolution.xy*2.-1.; 96 | mo = (mo==vec2(-1.))?mo=vec2(0.):mo; 97 | mo.x *= iResolution.x/iResolution.y; 98 | 99 | //camera 100 | vec3 ro = vec3(4.1,-time*2.,time-0.5); 101 | vec3 rd = normalize(vec3(p,2.5)); 102 | rd = roty(rd,sin(time*0.2)*0.5+0.9+mo.x); 103 | rd = rotx(rd,sin(time*0.12+sin(time*.5)*1.)+0.9); 104 | 105 | vec4 rz = march(ro,rd); 106 | vec3 ligt = normalize( vec3(-.5, 0.2, -0.2) ); 107 | float sun = dot(rd,ligt); 108 | vec3 bg = vec3(0.5,0.6,.9)*sun*0.5+0.6; 109 | vec3 col = bg; 110 | 111 | if ( rz.x < FAR ) 112 | { 113 | vec3 pos = ro+rz.x*rd; 114 | float d = distance(ro,pos); 115 | vec3 nor= normal(pos,d); 116 | vec3 h = normalize(ligt - rd); 117 | col = sqrt(col); 118 | col = mix(sin(vec3(1,2,3)*rz.w*1.9)*0.5+0.35,col,0.2); 119 | 120 | float dif = clamp( dot(nor, ligt), 0., 1.); 121 | float spe = pow(clamp(dot(nor,h), 0., 1.),70.); 122 | float fre = 0.1*pow(clamp(1. + dot(nor, rd), 0., 1.), 2.); 123 | vec3 brdf = 1.5*vec3(.10, .11, .11); 124 | brdf += 1.30*dif*vec3(1., .9, .75); 125 | col = col*brdf + col*spe + fre*col; 126 | } 127 | 128 | col = mix(col,bg,smoothstep(30.,40.,rz.x)); //Distance fog 129 | col *= mix(rz.z,1.,smoothstep(30.,40.,rz.y)); //Edges + Fog (using edge-eye distance) 130 | 131 | col = pow(col, vec3(.8))*1.; 132 | //vignetting from iq 133 | col *= 0.4 + 0.6*pow( 16.0*q.x*q.y*(1.0-q.x)*(1.0-q.y), 0.2 ); 134 | 135 | fragColor = vec4( col, 1.0 ); 136 | } 137 | void main(void) 138 | { 139 | mainImage(gl_FragColor, gl_FragCoord.xy); 140 | } 141 | -------------------------------------------------------------------------------- /Shaders/os boot flares.frag: -------------------------------------------------------------------------------- 1 | // by mrqzzz (https://www.shadertoy.com/user/mrqzzz) 2 | // 3 | #ifdef GL_ES 4 | precision mediump float; 5 | #endif 6 | 7 | uniform float time; 8 | uniform vec2 mouse; 9 | uniform vec2 resolution; 10 | 11 | #define iGlobalTime time 12 | #define iResolution resolution 13 | #define iMouse mouse 14 | 15 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 16 | { 17 | vec2 uv = fragCoord.xy / iResolution.xy; 18 | float t=iGlobalTime/13. + cos(iGlobalTime/2.); 19 | fragColor = vec4( 20 | 0.5 + 0.5 * ( sin(uv.x*cos(t)*6.*cos(uv.y*t/232.)) + sin(uv.y*sin(t)*3.*cos(uv.x*t/212.)) ), 21 | 0.5 + 0.5 * ( cos(uv.x*sin(t)*5.*cos(uv.y*t/211.)) + sin(uv.y*sin(t)*6.*cos(uv.x*t/234.)) ), 22 | 0.5 + 0.5 * ( cos(uv.x*cos(t)*4.*cos(uv.y*t/311.)) + sin(uv.y*sin(t)*7.*cos(uv.x*t/321.)) ), 23 | 1.); 24 | } 25 | 26 | void main(void) 27 | { 28 | mainImage(gl_FragColor, gl_FragCoord.xy); 29 | } 30 | -------------------------------------------------------------------------------- /Shaders/stones.frag: -------------------------------------------------------------------------------- 1 | // Procedural Tiles // Based on http://www.iquilezles.org/www/articles/smoothvoronoi/smoothvoronoi.htm 2 | 3 | #ifdef GL_ES 4 | precision mediump float; 5 | #endif 6 | 7 | const vec2 mouse = vec2(50,50); 8 | const vec2 resolution = vec2(100,100); 9 | const float time = 0.0; 10 | // Expensive Noise 11 | 12 | vec4 textureRND2D(vec2 uv){ 13 | uv = floor(fract(uv)*1e3); 14 | float v = uv.x+uv.y*1e3; 15 | return fract(1e5*sin(vec4(v*1e-2, (v+200.)*1e-2, (v+1e3)*1e-2, (v+1e3+1.)*1e-2))); 16 | } 17 | 18 | float noise(vec2 p) { 19 | vec2 f = fract(p*1e3); 20 | vec4 r = textureRND2D(p); 21 | f = f*f*(3.0-2.0*f); 22 | return (mix(mix(r.x, r.y, f.x), mix(r.z, r.w, f.x), f.y)); 23 | } 24 | 25 | vec2 random2f( vec2 seed ) { 26 | #define rnd_seed 1.337 27 | float rnd1 = mod(noise(seed*rnd_seed), 1.0); 28 | float rnd2 = mod(rnd1*2.0,1.0); 29 | 30 | return vec2(rnd1, rnd2); 31 | } 32 | 33 | // Cheap Noise 34 | 35 | float rand(vec2 co){ 36 | return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); 37 | } 38 | 39 | vec2 rand2(vec2 co){ 40 | float rnd1 = rand(co); 41 | float rnd2 = rand(co*rnd1); 42 | return vec2(rnd1,rnd2); 43 | } 44 | 45 | 46 | // Methods 47 | 48 | vec3 tile_color = vec3(0.0); 49 | 50 | #define tile_height 0.35 51 | float voronoi( in vec2 x ) { 52 | vec2 p = floor( x ); 53 | vec2 f = fract( x ); 54 | 55 | vec3 res = vec3(1.0); 56 | 57 | for( int j=-1; j<=1; j++ ) for( int i=-1; i<=1; i++ ) { 58 | vec2 b = vec2( i, j ); 59 | //vec2 r = vec2( b ) + rand2( p + b ) - f; // cheap 60 | vec2 r = vec2( b ) + random2f( p + b ) - f; // expensive but has some nicer properties for morphing 61 | float d = dot( r , r ); 62 | 63 | if ( d < res.x ) { 64 | res.xyz = vec3(d,res.xy); 65 | if (rand(p+b) < 0.5) tile_color = vec3(.77,.87,.9); 66 | else tile_color = vec3(0.9,0.9,0.9); 67 | } else if (d < res.y) { 68 | res.yz = vec2(d,res.y); 69 | } 70 | } 71 | 72 | return clamp(sqrt(res.y) - sqrt(res.x),0.0,tile_height); 73 | } 74 | 75 | vec3 normal(vec2 p) { 76 | float d = 0.001; 77 | float d2 = 0.01; // Smoothing parameter for normal 78 | vec3 dx = vec3(d2, 0.0, voronoi(p + vec2(d2, 0.0))) - vec3(-d, 0.0, voronoi(p + vec2(-d, 0.0))); 79 | vec3 dy = vec3(0.0, d2, voronoi(p + vec2(0.0, d2))) - vec3(0.0, -d, voronoi(p + vec2(0.0, -d))); 80 | return normalize(cross(dx,dy)); 81 | } 82 | 83 | void main( void ) { 84 | 85 | vec2 p = vec2(sin(time),-cos(time)) + (3.*gl_FragCoord.xy)/resolution.y - mouse * vec2(40.0,20.0); 86 | 87 | float color = voronoi(p); 88 | 89 | float light_intensity = 0.75/tile_height; 90 | vec3 light = normalize(vec3(1.0,0.1,1.0)) * light_intensity; 91 | 92 | float shade = dot(light,normal(p))+0.5; 93 | gl_FragColor = vec4(vec3(shade*color) * tile_color, 1.0); 94 | } 95 | -------------------------------------------------------------------------------- /Shaders/under deep water.frag: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | uniform float time; 6 | uniform vec2 mouse; 7 | uniform vec2 resolution; 8 | 9 | 10 | float CausticDistortDomainFn(vec2 pos) 11 | { 12 | pos.x *= (pos.y * .20 + .5); 13 | //pos.x *= 1. + sin(time / 1.) / 10.; 14 | return pos.x; 15 | } 16 | 17 | 18 | vec4 function(vec2 p) 19 | { 20 | float x = CausticDistortDomainFn(p) * .75; // 10 .. 30 21 | // * (sin(time / 2) * .1 + 1.1) 22 | 23 | // gut: float fx = sin((x+.5)*3 * (sin(time / 2) * 2 + 2)) + sin((x+.5)*6*16.3); 24 | // float fx = sin((x+.5)*3 * (sin(time / 2) * 2 + 1)) + sin((x+.5)*6*16.3 * (sin(time / 3) * .1 + 1.1)); 25 | float fx = sin((x+.5)*3 * (sin(time / 2.3) * 1.2 + 1)) + sin((x+.5)*6*12.3 * (sin(time / 3) * .1 + 1)); 26 | // float fx = sin(x) * 2 + sin(x * 16.3 * (sin(time / 2) * .5 + 2)); 27 | fx = fx * fx / 3; 28 | 29 | //fx *= (sin((p.x + .5) * 3.14) + 1) / 2; // shade 30 | //fx *= pow(p.y + .75, 3); 31 | fx *= p.y; // clamp(p.y, .2, 1); 32 | //fx += (sin((p.x + .5) * 3.14) + 1) / 2; // shade 33 | fx += (sin((p.x + .5) * 3.14) + 1) / 4 + .5; // shade 34 | 35 | // return vec4(.1, .5, .7, 1) * fx; // vec4(r, g, fx, 1.0); 36 | return vec4(.039, .23, .46, 1) * fx; // vec4(r, g, fx, 1.0); 37 | } 38 | 39 | void main(void) 40 | { 41 | vec2 position = gl_FragCoord.xy / resolution; 42 | position.x -= .5; 43 | gl_FragColor = function(position); 44 | } -------------------------------------------------------------------------------- /Shaders/under water.frag: -------------------------------------------------------------------------------- 1 | #ifdef GL_ES 2 | precision mediump float; 3 | #endif 4 | 5 | uniform float time; 6 | uniform vec2 mouse; 7 | uniform vec2 resolution; 8 | 9 | 10 | float CausticDistortDomainFn(vec2 pos) 11 | { 12 | pos.x *= (pos.y * .20 + .5); 13 | //pos.x *= 1. + sin(time / 1.) / 10.; 14 | return pos.x; 15 | } 16 | 17 | 18 | vec4 function(vec2 p) 19 | { 20 | float x = CausticDistortDomainFn(p) * .75; // 10 .. 30 21 | // * (sin(time / 2) * .1 + 1.1) 22 | 23 | // gut: float fx = sin((x+.5)*3 * (sin(time / 2) * 2 + 2)) + sin((x+.5)*6*16.3); 24 | // float fx = sin((x+.5)*3 * (sin(time / 2) * 2 + 1)) + sin((x+.5)*6*16.3 * (sin(time / 3) * .1 + 1.1)); 25 | float fx = sin((x+.5)*3 * (sin(time / 2.3) * 1.2 + 1)) + sin((x+.5)*6*12.3 * (sin(time / 3) * .1 + 1)); 26 | // float fx = sin(x) * 2 + sin(x * 16.3 * (sin(time / 2) * .5 + 2)); 27 | fx = fx * fx / 5; 28 | 29 | //fx *= (sin((p.x + .5) * 3.14) + 1) / 2; // shade 30 | //fx *= pow(p.y + .75, 3); 31 | fx *= p.y; // clamp(p.y, .2, 1); 32 | //fx += (sin((p.x + .5) * 3.14) + 1) / 2; // shade 33 | fx += (sin((p.x + .5) * 3.14) + 1) / 4 + .5; // shade 34 | 35 | return vec4(.1, .5, .7, 1) * fx; // vec4(r, g, fx, 1.0); 36 | } 37 | 38 | void main(void) 39 | { 40 | vec2 position = gl_FragCoord.xy / resolution; 41 | position.x -= .5; 42 | gl_FragColor = function(position); 43 | } -------------------------------------------------------------------------------- /Textures/Patterrific_BrushedMetal01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/Patterrific_BrushedMetal01.jpg -------------------------------------------------------------------------------- /Textures/Patterrific_BrushedMetal02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/Patterrific_BrushedMetal02.jpg -------------------------------------------------------------------------------- /Textures/Patterrific_BrushedMetal03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/Patterrific_BrushedMetal03.jpg -------------------------------------------------------------------------------- /Textures/Patterrific_BrushedMetal04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/Patterrific_BrushedMetal04.jpg -------------------------------------------------------------------------------- /Textures/Patterrific_BrushedMetal05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/Patterrific_BrushedMetal05.jpg -------------------------------------------------------------------------------- /Textures/Patterrific_BrushedMetal06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/Patterrific_BrushedMetal06.jpg -------------------------------------------------------------------------------- /Textures/Patterrific_BrushedMetal07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/Patterrific_BrushedMetal07.jpg -------------------------------------------------------------------------------- /Textures/Patterrific_BrushedMetal08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/Patterrific_BrushedMetal08.jpg -------------------------------------------------------------------------------- /Textures/metal texture 02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 02.jpg -------------------------------------------------------------------------------- /Textures/metal texture 03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 03.jpg -------------------------------------------------------------------------------- /Textures/metal texture 04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 04.jpg -------------------------------------------------------------------------------- /Textures/metal texture 05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 05.jpg -------------------------------------------------------------------------------- /Textures/metal texture 06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 06.jpg -------------------------------------------------------------------------------- /Textures/metal texture 07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 07.jpg -------------------------------------------------------------------------------- /Textures/metal texture 08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 08.jpg -------------------------------------------------------------------------------- /Textures/metal texture 09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 09.jpg -------------------------------------------------------------------------------- /Textures/metal texture 10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 10.jpg -------------------------------------------------------------------------------- /Textures/metal texture 11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 11.jpg -------------------------------------------------------------------------------- /Textures/metal texture 12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture 12.jpg -------------------------------------------------------------------------------- /Textures/metal texture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/metal texture.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Blue Fabric Texture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Blue Fabric Texture.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Blue Fabric Texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Blue Fabric Texture.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Brown Linen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Brown Linen.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Brown Linen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Brown Linen.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Carbon Texture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Carbon Texture.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Carbon Texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Carbon Texture.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Dark Brown Linen Texture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Dark Brown Linen Texture.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Dark Brown Linen Texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Dark Brown Linen Texture.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Dark Leather.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Dark Leather.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Dark Leather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Dark Leather.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Gray Leather.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Gray Leather.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Gray Leather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Gray Leather.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Lil Fiber Blue Texture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Lil Fiber Blue Texture.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Lil Fiber Blue Texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Lil Fiber Blue Texture.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Lil Fiber Violet Texture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Lil Fiber Violet Texture.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/Lil Fiber Violet Texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/Lil Fiber Violet Texture.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/always_grey/always_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/always_grey/always_grey.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/always_grey/always_grey_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/always_grey/always_grey_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/always_grey/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/binding_dark/binding_dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/binding_dark/binding_dark.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/binding_dark/binding_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/binding_dark/binding_dark.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/binding_dark/binding_dark_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/binding_dark/binding_dark_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/binding_dark/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/bo_play_pattern/bo_play_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/bo_play_pattern/bo_play_pattern.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/bo_play_pattern/bo_play_pattern_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/bo_play_pattern/bo_play_pattern_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/bo_play_pattern/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/brickwall/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/brickwall/.DS_Store -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/brickwall/brickwall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/brickwall/brickwall.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/brickwall/brickwall_@2X.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/brickwall/brickwall_@2X.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/brickwall/brickwall_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/brickwall/brickwall_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/brickwall/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/brown_large_leather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/brown_large_leather.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/carbon_fibre - subtlepatterns.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/carbon_fibre - subtlepatterns.com.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/carbon_fibre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/carbon_fibre.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/carbon_fibre_@16X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/carbon_fibre_@16X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/carbon_fibre_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/carbon_fibre_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/carbon_fibre_@4X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/carbon_fibre_@4X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/cardboard/cardboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/cardboard/cardboard.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/cardboard/cardboard_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/cardboard/cardboard_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/cardboard/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/diamond_upholstery/diamond_upholstery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/diamond_upholstery/diamond_upholstery.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/diamond_upholstery/diamond_upholstery_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/diamond_upholstery/diamond_upholstery_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/diamond_upholstery/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/egg_shell/egg_shell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/egg_shell/egg_shell.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/egg_shell/egg_shell_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/egg_shell/egg_shell_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/egg_shell/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/foggy_birds/foggy_birds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/foggy_birds/foggy_birds.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/foggy_birds/foggy_birds_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/foggy_birds/foggy_birds_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/foggy_birds/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/frenchstucco/frenchstucco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/frenchstucco/frenchstucco.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/frenchstucco/frenchstucco_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/frenchstucco/frenchstucco_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/frenchstucco/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/greyfloral/greyfloral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/greyfloral/greyfloral.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/greyfloral/greyfloral_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/greyfloral/greyfloral_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/greyfloral/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/grunge_wall/grunge_wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/grunge_wall/grunge_wall.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/grunge_wall/grunge_wall_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/grunge_wall/grunge_wall_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/grunge_wall/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/gun_metal/gun_metal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/gun_metal/gun_metal.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/gun_metal/gun_metal_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/gun_metal/gun_metal_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/gun_metal/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/hixs_pattern_evolution/hixs_pattern_evolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/hixs_pattern_evolution/hixs_pattern_evolution.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/hixs_pattern_evolution/hixs_pattern_evolution_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/hixs_pattern_evolution/hixs_pattern_evolution_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/hixs_pattern_evolution/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/knitted-netting/knitted-netting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/knitted-netting/knitted-netting.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/knitted-netting/knitted-netting_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/knitted-netting/knitted-netting_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/knitted-netting/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/large_leather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/large_leather.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/large_leather_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/large_leather_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/leather texture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/leather texture.jpg -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/leather texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/leather texture.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/lined_paper/lined_paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/lined_paper/lined_paper.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/lined_paper/lined_paper_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/lined_paper/lined_paper_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/lined_paper/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/natural_paper/natural_paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/natural_paper/natural_paper.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/natural_paper/natural_paper_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/natural_paper/natural_paper_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/natural_paper/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/old_mathematics/old_mathematics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/old_mathematics/old_mathematics.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/old_mathematics/old_mathematics_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/old_mathematics/old_mathematics_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/old_mathematics/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/perforated_white_leather/perforated_white_leather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/perforated_white_leather/perforated_white_leather.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/perforated_white_leather/perforated_white_leather_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/perforated_white_leather/perforated_white_leather_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/perforated_white_leather/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/pinstriped_suit/pinstriped_suit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/pinstriped_suit/pinstriped_suit.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/pinstriped_suit/pinstriped_suit_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/pinstriped_suit/pinstriped_suit_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/pinstriped_suit/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/purty_wood/purty_wood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/purty_wood/purty_wood.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/purty_wood/purty_wood_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/purty_wood/purty_wood_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/purty_wood/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/random_grey_variations/random_grey_variations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/random_grey_variations/random_grey_variations.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/random_grey_variations/random_grey_variations_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/random_grey_variations/random_grey_variations_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/random_grey_variations/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/redox_02/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/redox_02/redox_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/redox_02/redox_02.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/redox_02/redox_02_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/redox_02/redox_02_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/reticular_tissue/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/reticular_tissue/reticular_tissue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/reticular_tissue/reticular_tissue.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/reticular_tissue/reticular_tissue_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/reticular_tissue/reticular_tissue_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/solid/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/solid/solid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/solid/solid.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/solid/solid_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/solid/solid_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/subtle_zebra_3d/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/subtle_zebra_3d/subtle_zebra_3d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/subtle_zebra_3d/subtle_zebra_3d.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/subtle_zebra_3d/subtle_zebra_3d_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/subtle_zebra_3d/subtle_zebra_3d_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/tex2res1/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/tex2res1/tex2res1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/tex2res1/tex2res1.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/tex2res1/tex2res1_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/tex2res1/tex2res1_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/texturetastic_gray/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/texturetastic_gray/texturetastic_gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/texturetastic_gray/texturetastic_gray.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/texturetastic_gray/texturetastic_gray_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/texturetastic_gray/texturetastic_gray_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/tileable_wood_texture/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/tileable_wood_texture/tileable_wood_texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/tileable_wood_texture/tileable_wood_texture.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/tileable_wood_texture/tileable_wood_texture_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/tileable_wood_texture/tileable_wood_texture_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/vaio_hard_edge/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/vaio_hard_edge/vaio_hard_edge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/vaio_hard_edge/vaio_hard_edge.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/vaio_hard_edge/vaio_hard_edge_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/vaio_hard_edge/vaio_hard_edge_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/wall4/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/wall4/wall4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/wall4/wall4.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/wall4/wall4_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/wall4/wall4_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_carbonfiber/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_carbonfiber/white_carbonfiber.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/white_carbonfiber/white_carbonfiber.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_carbonfiber/white_carbonfiber_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/white_carbonfiber/white_carbonfiber_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_leather/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_leather/white_leather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/white_leather/white_leather.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_leather/white_leather_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/white_leather/white_leather_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_paperboard/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_paperboard/white_paperboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/white_paperboard/white_paperboard.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_paperboard/white_paperboard_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/white_paperboard/white_paperboard_@2X.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_wall/readme.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | ======================================================== 4 | This pattern is downloaded from www.subtlepatterns.com 5 | If you need more, that's where to get'em. 6 | ======================================================== 7 | 8 | -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_wall/white_wall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/white_wall/white_wall.png -------------------------------------------------------------------------------- /Textures/subtlepatterns.com/white_wall/white_wall_@2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Textures/subtlepatterns.com/white_wall/white_wall_@2X.png -------------------------------------------------------------------------------- /Wallpaper/Free also for commercial use and modify ok/Dutch winter landscape 1920 x 1200 by zoutedrop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Free also for commercial use and modify ok/Dutch winter landscape 1920 x 1200 by zoutedrop.jpg -------------------------------------------------------------------------------- /Wallpaper/Tiles/Blue Fabric.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Blue Fabric.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Brown Linen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Brown Linen.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Carbon Fibre.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Carbon Fibre.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Carbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Carbon.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Dark Brown Linen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Dark Brown Linen.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Dark Leather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Dark Leather.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Gray Leather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Gray Leather.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Leather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Leather.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Lil Fiber Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Lil Fiber Blue.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Lil Fiber Violet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Lil Fiber Violet.png -------------------------------------------------------------------------------- /Wallpaper/Tiles/Patterrific_BrushedMetal08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/Wallpaper/Tiles/Patterrific_BrushedMetal08.jpg -------------------------------------------------------------------------------- /img-not-found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/img-not-found.png -------------------------------------------------------------------------------- /img-not-found.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 24 | 44 | 49 | 50 | 52 | 53 | 55 | image/svg+xml 56 | 58 | 59 | 60 | 61 | 62 | 67 | 74 | 82 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /screenshot_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/screenshot_small.png --------------------------------------------------------------------------------