├── .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 | 
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 |
96 |
--------------------------------------------------------------------------------
/screenshot_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thradde/places/9c0f949c65e3af5f664d856fd9c5e7fdb7afec60/screenshot_small.png
--------------------------------------------------------------------------------