mirror of
				https://bitbucket.org/mfeemster/fractorium.git
				synced 2025-11-04 02:00:31 -05:00 
			
		
		
		
	06/09/2017
--User changes -dark.qss is now per-OS. -Properly set/reload palette when coming from the palette editor. The latter must be done if they've modified the current palette even if they've clicked cancel. --Bug fixes -Make the following variations safer by using Zeps(): conic, bipolar, edisc, whorl, tan, csc, cot, tanh, sech, csch, coth, auger, bwraps, hypertile3d, hypertile3d1, ortho, poincare, rational3, barycentroid, sschecks, cscq, cschq, scry_3D, splitbrdr, hexcrop, nblur, crob. -Fix bug enabling/disabling overwrite button in palette editor. -Small optimization for gdoffs, use precalcAtanYX. -Properly propagate z through circlesplit, cylinder2 and tile_log variations. -Some values in truchet_fill could've been NaN. --Code changes -Make most installation files read only. -Qualify many calls with std:: to ensure they're not colliding with glm:: -Use auto in more places.
This commit is contained in:
		@ -6,7 +6,7 @@
 | 
				
			|||||||
    <ProductVersion>3.7</ProductVersion>
 | 
					    <ProductVersion>3.7</ProductVersion>
 | 
				
			||||||
    <ProjectGuid>{c8096c47-e358-438c-a520-146d46b0637d}</ProjectGuid>
 | 
					    <ProjectGuid>{c8096c47-e358-438c-a520-146d46b0637d}</ProjectGuid>
 | 
				
			||||||
    <SchemaVersion>2.0</SchemaVersion>
 | 
					    <SchemaVersion>2.0</SchemaVersion>
 | 
				
			||||||
    <OutputName>Fractorium_1.0.0.3</OutputName>
 | 
					    <OutputName>Fractorium_1.0.0.4</OutputName>
 | 
				
			||||||
    <OutputType>Package</OutputType>
 | 
					    <OutputType>Package</OutputType>
 | 
				
			||||||
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
 | 
					    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
 | 
				
			||||||
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
 | 
					    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@
 | 
				
			|||||||
	<!--
 | 
						<!--
 | 
				
			||||||
	Change this for every release.
 | 
						Change this for every release.
 | 
				
			||||||
	-->
 | 
						-->
 | 
				
			||||||
	<?define ProductCode="{E671123A-596D-4159-8DFC-3AC6BE8DFD9B}"?>
 | 
						<?define ProductCode="{344D73B1-F519-44CD-8F62-9FE6595816F9}"?>
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	<Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="1033" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)">
 | 
						<Product Id="$(var.ProductCode)" Name="$(var.ProductName)" Language="1033" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)">
 | 
				
			||||||
		<Package
 | 
							<Package
 | 
				
			||||||
@ -123,43 +123,43 @@
 | 
				
			|||||||
	<Fragment>
 | 
						<Fragment>
 | 
				
			||||||
		<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
 | 
							<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
 | 
				
			||||||
			<Component Id="Fractorium.exe" Guid="ccc04ca4-c747-4330-8cfd-bdd943b185c0">
 | 
								<Component Id="Fractorium.exe" Guid="ccc04ca4-c747-4330-8cfd-bdd943b185c0">
 | 
				
			||||||
				<File Id="Fractorium.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\Fractorium.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
 | 
									<File Id="Fractorium.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\Fractorium.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="EmberRender.exe" Guid="12d49219-9269-495a-b8e4-3d33cb32d280">
 | 
								<Component Id="EmberRender.exe" Guid="12d49219-9269-495a-b8e4-3d33cb32d280">
 | 
				
			||||||
				<File Id="EmberRender.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberRender.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
 | 
									<File Id="EmberRender.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberRender.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="EmberAnimate.exe" Guid="ae362704-93a3-48dc-a13b-7c4eabd87ee1">
 | 
								<Component Id="EmberAnimate.exe" Guid="ae362704-93a3-48dc-a13b-7c4eabd87ee1">
 | 
				
			||||||
				<File Id="EmberAnimate.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberAnimate.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
 | 
									<File Id="EmberAnimate.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberAnimate.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="EmberGenome.exe" Guid="7a93f079-216a-4d1c-9b02-8ca93a6a8daa">
 | 
								<Component Id="EmberGenome.exe" Guid="7a93f079-216a-4d1c-9b02-8ca93a6a8daa">
 | 
				
			||||||
				<File Id="EmberGenome.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberGenome.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" />
 | 
									<File Id="EmberGenome.exe" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberGenome.exe" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="Ember.dll" Guid="c0f80dee-7a16-4d6a-b7ed-d6cd162154eb">
 | 
								<Component Id="Ember.dll" Guid="c0f80dee-7a16-4d6a-b7ed-d6cd162154eb">
 | 
				
			||||||
				<File Id="Ember.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\Ember.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
 | 
									<File Id="Ember.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\Ember.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="EmberCL.dll" Guid="21c0e372-c605-4e0d-9ba8-94e38949833b">
 | 
								<Component Id="EmberCL.dll" Guid="21c0e372-c605-4e0d-9ba8-94e38949833b">
 | 
				
			||||||
				<File Id="EmberCL.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberCL.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
 | 
									<File Id="EmberCL.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\$(var.Configuration)\EmberCL.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="libxml2.dll" Guid="bb3aa687-7a3d-4d16-a27c-28529b472754">
 | 
								<Component Id="libxml2.dll" Guid="bb3aa687-7a3d-4d16-a27c-28529b472754">
 | 
				
			||||||
				<File Id="libxml2.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\Release\libxml2.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
 | 
									<File Id="libxml2.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\Release\libxml2.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="tbb.dll" Guid="ffa1b2ec-32d5-41aa-9380-fb04d8139103">
 | 
								<Component Id="tbb.dll" Guid="ffa1b2ec-32d5-41aa-9380-fb04d8139103">
 | 
				
			||||||
				<File Id="tbb.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\Release\tbb.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
 | 
									<File Id="tbb.dll" Source="$(var.SolutionDir)..\..\..\Bin\$(var.Platform)\Release\tbb.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="msvcp140.dll" Guid="8f1ffde7-c1bd-45fb-8bc8-26dde552eafd">
 | 
								<Component Id="msvcp140.dll" Guid="8f1ffde7-c1bd-45fb-8bc8-26dde552eafd">
 | 
				
			||||||
				<File Id="msvcp140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\msvcp140.dll" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="msvcp140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\msvcp140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="vcruntime140.dll" Guid="50c9bc27-c547-4a03-9f6c-cd416f449dd8">
 | 
								<Component Id="vcruntime140.dll" Guid="50c9bc27-c547-4a03-9f6c-cd416f449dd8">
 | 
				
			||||||
				<File Id="vcruntime140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\vcruntime140.dll" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="vcruntime140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\vcruntime140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="vccorlib140.dll" Guid="affe33e7-1e64-4bb0-a062-2b56f77459b4">
 | 
								<Component Id="vccorlib140.dll" Guid="affe33e7-1e64-4bb0-a062-2b56f77459b4">
 | 
				
			||||||
				<File Id="vccorlib140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\vccorlib140.dll" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="vccorlib140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\vccorlib140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="concrt140.dll" Guid="7fb716a1-1b4f-42fb-89c7-4d216ebd6e2e">
 | 
								<Component Id="concrt140.dll" Guid="7fb716a1-1b4f-42fb-89c7-4d216ebd6e2e">
 | 
				
			||||||
				<File Id="concrt140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\concrt140.dll" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="concrt140.dll" Source="$(env.VS140COMNTOOLS)..\..\VC\redist\x64\Microsoft.VC140.CRT\concrt140.dll" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="flam3palettes.xml" Guid="d3adb0bb-14ef-4923-99d9-a5784b7ef04e">
 | 
								<Component Id="flam3palettes.xml" Guid="d3adb0bb-14ef-4923-99d9-a5784b7ef04e">
 | 
				
			||||||
				<File Id="flam3palettes.xml" Source="$(var.SolutionDir)..\..\..\Data\flam3-palettes.xml" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="flam3palettes.xml" Source="$(var.SolutionDir)..\..\..\Data\flam3-palettes.xml" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="userpalettes.xml" Guid="53e1e43e-b01e-4159-94fa-bdf6e8fd1d57">
 | 
								<Component Id="userpalettes.xml" Guid="53e1e43e-b01e-4159-94fa-bdf6e8fd1d57">
 | 
				
			||||||
@ -167,74 +167,87 @@
 | 
				
			|||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			<Component Id="boxtail_pack_02.gradient" Guid="f9bd8f21-6a61-4e4a-a7e6-bc50f2633dd6">
 | 
								<Component Id="boxtail_pack_02.gradient" Guid="f9bd8f21-6a61-4e4a-a7e6-bc50f2633dd6">
 | 
				
			||||||
				<File Id="boxtail_pack_02.gradient" Source="$(var.SolutionDir)..\..\..\Data\boxtail_pack_02.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="boxtail_pack_02.gradient" Source="$(var.SolutionDir)..\..\..\Data\boxtail_pack_02.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="boxtail_pack_03_triangle.gradient" Guid="19d4957a-7ce7-4afd-b74b-5049265dffa2">
 | 
								<Component Id="boxtail_pack_03_triangle.gradient" Guid="19d4957a-7ce7-4afd-b74b-5049265dffa2">
 | 
				
			||||||
				<File Id="boxtail_pack_03_triangle.gradient" Source="$(var.SolutionDir)..\..\..\Data\boxtail_pack_03_triangle.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="boxtail_pack_03_triangle.gradient" Source="$(var.SolutionDir)..\..\..\Data\boxtail_pack_03_triangle.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="boxtail_pack_04_mineshack.gradient" Guid="2f144d87-97bd-4fe6-8000-f0a9e62f770f">
 | 
								<Component Id="boxtail_pack_04_mineshack.gradient" Guid="2f144d87-97bd-4fe6-8000-f0a9e62f770f">
 | 
				
			||||||
				<File Id="boxtail_pack_04_mineshack.gradient" Source="$(var.SolutionDir)..\..\..\Data\boxtail_pack_04_mineshack.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="boxtail_pack_04_mineshack.gradient" Source="$(var.SolutionDir)..\..\..\Data\boxtail_pack_04_mineshack.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="fardareismai_pack_01_variety_number_128.gradient" Guid="9ee0a298-b35b-4501-9beb-c0cdca41ca25">
 | 
								<Component Id="fardareismai_pack_01_variety_number_128.gradient" Guid="9ee0a298-b35b-4501-9beb-c0cdca41ca25">
 | 
				
			||||||
				<File Id="fardareismai_pack_01_variety_number_128.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_01_variety_number_128.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="fardareismai_pack_01_variety_number_128.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_01_variety_number_128.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="fardareismai_pack_02_b_sides.gradient" Guid="69e0c7d9-283b-4161-a924-b015eb658e8d">
 | 
								<Component Id="fardareismai_pack_02_b_sides.gradient" Guid="69e0c7d9-283b-4161-a924-b015eb658e8d">
 | 
				
			||||||
				<File Id="fardareismai_pack_02_b_sides.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_02_b_sides.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="fardareismai_pack_02_b_sides.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_02_b_sides.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="fardareismai_pack_03_old_and_new.gradient" Guid="1059241b-67e7-4a36-878d-675f3282c530">
 | 
								<Component Id="fardareismai_pack_03_old_and_new.gradient" Guid="1059241b-67e7-4a36-878d-675f3282c530">
 | 
				
			||||||
				<File Id="fardareismai_pack_03_old_and_new.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_03_old_and_new.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="fardareismai_pack_03_old_and_new.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_03_old_and_new.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="fardareismai_pack_04_hoard.gradient" Guid="c611ee88-e0f4-493b-84f5-c65f899d43f3">
 | 
								<Component Id="fardareismai_pack_04_hoard.gradient" Guid="c611ee88-e0f4-493b-84f5-c65f899d43f3">
 | 
				
			||||||
				<File Id="fardareismai_pack_04_hoard.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_04_hoard.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="fardareismai_pack_04_hoard.gradient" Source="$(var.SolutionDir)..\..\..\Data\fardareismai_pack_04_hoard.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="fractaldesire_pack_01.gradient" Guid="9f0885ab-920f-420d-a962-9bc515986701">
 | 
								<Component Id="fractaldesire_pack_01.gradient" Guid="9f0885ab-920f-420d-a962-9bc515986701">
 | 
				
			||||||
				<File Id="fractaldesire_pack_01.gradient" Source="$(var.SolutionDir)..\..\..\Data\fractaldesire_pack_01.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="fractaldesire_pack_01.gradient" Source="$(var.SolutionDir)..\..\..\Data\fractaldesire_pack_01.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="rce_ordinary_pack_01_colornation.gradient" Guid="8eb62cb8-279b-4518-9098-c0fec5830493">
 | 
								<Component Id="rce_ordinary_pack_01_colornation.gradient" Guid="8eb62cb8-279b-4518-9098-c0fec5830493">
 | 
				
			||||||
				<File Id="rce_ordinary_pack_01_colornation.gradient" Source="$(var.SolutionDir)..\..\..\Data\rce_ordinary_pack_01_colornation.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="rce_ordinary_pack_01_colornation.gradient" Source="$(var.SolutionDir)..\..\..\Data\rce_ordinary_pack_01_colornation.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="tatasz_pack_01.gradient" Guid="967c9577-74d1-4bc0-aa52-2fb78507b572">
 | 
								<Component Id="tatasz_pack_01.gradient" Guid="967c9577-74d1-4bc0-aa52-2fb78507b572">
 | 
				
			||||||
				<File Id="tatasz_pack_01.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_01.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="tatasz_pack_01.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_01.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="tatasz_pack_02_colder.gradient" Guid="304976a2-8ae7-47eb-bf1f-c6f3cbe380b8">
 | 
								<Component Id="tatasz_pack_02_colder.gradient" Guid="304976a2-8ae7-47eb-bf1f-c6f3cbe380b8">
 | 
				
			||||||
				<File Id="tatasz_pack_02_colder.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_02_colder.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="tatasz_pack_02_colder.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_02_colder.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="tatasz_pack_02_dark.gradient" Guid="05ed49cf-364c-4547-a107-2bd46afc6664">
 | 
								<Component Id="tatasz_pack_02_dark.gradient" Guid="05ed49cf-364c-4547-a107-2bd46afc6664">
 | 
				
			||||||
				<File Id="tatasz_pack_02_dark.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_02_dark.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="tatasz_pack_02_dark.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_02_dark.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="tatasz_pack_02_warmer.gradient" Guid="62282580-0ae3-484e-98ba-38ec7bbf80e2">
 | 
								<Component Id="tatasz_pack_02_warmer.gradient" Guid="62282580-0ae3-484e-98ba-38ec7bbf80e2">
 | 
				
			||||||
				<File Id="tatasz_pack_02_warmer.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_02_warmer.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="tatasz_pack_02_warmer.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_02_warmer.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			<Component Id="tatasz_pack_03.gradient" Guid="7e5b5ef3-45be-4807-a88f-a8b773663e77">
 | 
								<Component Id="tatasz_pack_03.gradient" Guid="7e5b5ef3-45be-4807-a88f-a8b773663e77">
 | 
				
			||||||
				<File Id="tatasz_pack_03.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_03.gradient" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="tatasz_pack_03.gradient" Source="$(var.SolutionDir)..\..\..\Data\tatasz_pack_03.gradient" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
			<Component Id="dark.qss" Guid="c120ace3-5fab-416f-b7f1-a8d9e3e0f061">
 | 
								
 | 
				
			||||||
				<File Id="dark.qss" Source="$(var.SolutionDir)..\..\..\Data\dark.qss" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
								<Component Id="dark_windows.qss" Guid="c120ace3-5fab-416f-b7f1-a8d9e3e0f061">
 | 
				
			||||||
 | 
									<File Id="dark_windows.qss" Source="$(var.SolutionDir)..\..\..\Data\dark_windows.qss" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								<Component Id="dark_linux.qss" Guid="65384f40-50cd-4064-ad4d-dbe5365a8deb">
 | 
				
			||||||
 | 
									<File Id="dark_linux.qss" Source="$(var.SolutionDir)..\..\..\Data\dark_linux.qss" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
 | 
								</Component>
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								<Component Id="dark_mac.qss" Guid="561e3a5d-c330-45b0-ab65-32d7ea2ed6d2">
 | 
				
			||||||
 | 
									<File Id="dark_mac.qss" Source="$(var.SolutionDir)..\..\..\Data\dark_mac.qss" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
 | 
								</Component>
 | 
				
			||||||
 | 
									
 | 
				
			||||||
			<Component Id="VersionHistory.txt" Guid="8b031217-9e7d-4700-9ab8-2593a4e002b6">
 | 
								<Component Id="VersionHistory.txt" Guid="8b031217-9e7d-4700-9ab8-2593a4e002b6">
 | 
				
			||||||
				<File Id="VersionHistory.txt" Source="$(var.SolutionDir)..\..\..\Data\Version History.txt" KeyPath="yes" Checksum="yes" />
 | 
									<File Id="VersionHistory.txt" Source="$(var.SolutionDir)..\..\..\Data\Version History.txt" KeyPath="yes" Checksum="yes" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
								
 | 
				
			||||||
			<Component Id="Qt5Core.dll" Guid="0198dd4b-9bbb-4ea2-86e3-6ea0f4f6ac51">
 | 
								<Component Id="Qt5Core.dll" Guid="0198dd4b-9bbb-4ea2-86e3-6ea0f4f6ac51">
 | 
				
			||||||
				<File Id="Qt5Core.dll" Source="$(env.QTDIR)\bin\Qt5Core.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
 | 
									<File Id="Qt5Core.dll" Source="$(env.QTDIR)\bin\Qt5Core.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
								
 | 
				
			||||||
			<Component Id="Qt5Gui.dll" Guid="7f93dcc2-55db-4920-83d7-e06c23f7719a">
 | 
								<Component Id="Qt5Gui.dll" Guid="7f93dcc2-55db-4920-83d7-e06c23f7719a">
 | 
				
			||||||
				<File Id="Qt5Gui.dll" Source="$(env.QTDIR)\bin\Qt5Gui.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
 | 
									<File Id="Qt5Gui.dll" Source="$(env.QTDIR)\bin\Qt5Gui.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
 | 
									
 | 
				
			||||||
			<Component Id="Qt5Widgets.dll" Guid="006bb2f1-7a38-426f-ba2c-5196d1d6c24d">
 | 
								<Component Id="Qt5Widgets.dll" Guid="006bb2f1-7a38-426f-ba2c-5196d1d6c24d">
 | 
				
			||||||
				<File Id="Qt5Widgets.dll" Source="$(env.QTDIR)\bin\Qt5Widgets.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
 | 
									<File Id="Qt5Widgets.dll" Source="$(env.QTDIR)\bin\Qt5Widgets.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
		</ComponentGroup>
 | 
							</ComponentGroup>
 | 
				
			||||||
	</Fragment>
 | 
						</Fragment>
 | 
				
			||||||
@ -242,7 +255,7 @@
 | 
				
			|||||||
	<Fragment>
 | 
						<Fragment>
 | 
				
			||||||
		<ComponentGroup Id="PlatformComponents" Directory="INSTALLFOLDERPLATFORMS">
 | 
							<ComponentGroup Id="PlatformComponents" Directory="INSTALLFOLDERPLATFORMS">
 | 
				
			||||||
			<Component Id="qwindows.dll" Guid="627b7f5a-8fa6-4c78-a6b7-81fcdd8fdd63">
 | 
								<Component Id="qwindows.dll" Guid="627b7f5a-8fa6-4c78-a6b7-81fcdd8fdd63">
 | 
				
			||||||
				<File Id="qwindows.dll" Source="$(env.QTDIR)\plugins\platforms\qwindows.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64"/>
 | 
									<File Id="qwindows.dll" Source="$(env.QTDIR)\plugins\platforms\qwindows.dll" KeyPath="yes" Checksum="yes" ProcessorArchitecture="x64" ReadOnly="yes"/>
 | 
				
			||||||
			</Component>
 | 
								</Component>
 | 
				
			||||||
		</ComponentGroup>
 | 
							</ComponentGroup>
 | 
				
			||||||
	</Fragment>
 | 
						</Fragment>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										632
									
								
								Data/dark_linux.qss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										632
									
								
								Data/dark_linux.qss
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,632 @@
 | 
				
			|||||||
 | 
					/*---Base Style---
 | 
				
			||||||
 | 
							This is needed to deal with the large tabs in the fusion theme which is the default on Linux, and optional on Windows.
 | 
				
			||||||
 | 
							It's not needed for other themes.
 | 
				
			||||||
 | 
							You should keep this at the top of whatever custom style you make to ensure the tabs aren't unusually large.*/
 | 
				
			||||||
 | 
					QTabBar::tab { height: 3ex; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*This is needed to give the labels on the status bar some padding.*/
 | 
				
			||||||
 | 
					QStatusBar QLabel { padding-left: 2px; padding-right: 2px; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*Specific styles below this line*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QObject
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color : rgb(53, 53, 53);
 | 
				
			||||||
 | 
						color:  darkgray;
 | 
				
			||||||
 | 
						alternate-background-color:  rgb(53, 53, 53);
 | 
				
			||||||
 | 
						selection-color: black;
 | 
				
			||||||
 | 
						selection-background-color: rgb(42, 130, 218);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QObject:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						border-color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QDockWidget::float-button
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QDockWidget::title
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						padding: 2px;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTabWidget::pane
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QPushButton
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QPushButton:pressed
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QPushButton:focus
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QPushButton
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						padding: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QLineEdit, QTextEdit
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
						color: darkgray;
 | 
				
			||||||
 | 
						background-color: rgb(40, 40, 50);
 | 
				
			||||||
 | 
						selection-background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QToolTip
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
						border: 1px solid darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QSpinBox,
 | 
				
			||||||
 | 
					QDoubleSpinBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						padding-right: 0px;
 | 
				
			||||||
 | 
						color: darkgray;
 | 
				
			||||||
 | 
						selection-background-color: darkgray;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						spacing: 5px;
 | 
				
			||||||
 | 
						outline: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator,
 | 
				
			||||||
 | 
					QTableView::indicator
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
						border-radius: 2px;
 | 
				
			||||||
 | 
						background-color: lightgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator:enabled:unchecked,
 | 
				
			||||||
 | 
					QTableView::indicator:enabled:unchecked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: lightgray;
 | 
				
			||||||
 | 
						image: url(:/Fractorium/Icons/checkbox_unchecked.png);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator:enabled:checked,
 | 
				
			||||||
 | 
					QTableView::indicator:enabled:checked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: lightgray;
 | 
				
			||||||
 | 
					    image: url(:/Fractorium/Icons/checkbox_checked.png);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator:disabled:unchecked,
 | 
				
			||||||
 | 
					QTableView::indicator:disabled:unchecked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						image: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator:disabled:checked,
 | 
				
			||||||
 | 
					QTableView::indicator:disabled:checked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					    image: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QRadioButton::indicator:checked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: black;
 | 
				
			||||||
 | 
						border: 2px solid gray;
 | 
				
			||||||
 | 
						border-radius: 7px;
 | 
				
			||||||
 | 
						width: 8px;
 | 
				
			||||||
 | 
						height: 8px;
 | 
				
			||||||
 | 
						margin: 3px;
 | 
				
			||||||
 | 
						padding: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QRadioButton::indicator:checked:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QRadioButton::indicator:unchecked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 2px solid gray;
 | 
				
			||||||
 | 
						border-radius: 7px;
 | 
				
			||||||
 | 
						width: 8px;
 | 
				
			||||||
 | 
						height: 8px;
 | 
				
			||||||
 | 
						margin: 3px;
 | 
				
			||||||
 | 
						padding: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 0px;
 | 
				
			||||||
 | 
						padding-left: 4px;
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox::down-arrow:enabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
						margin-right: 2px;
 | 
				
			||||||
 | 
						margin-top: 0px;
 | 
				
			||||||
 | 
						margin-bottom: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox::down-arrow:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid  rgb(35, 35, 35);
 | 
				
			||||||
 | 
						margin-right: 2px;
 | 
				
			||||||
 | 
						margin-top: 0px;
 | 
				
			||||||
 | 
						margin-bottom: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox::drop-down
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*For some reason this is needed with Fusion, but not with Windows*/
 | 
				
			||||||
 | 
					QComboBox::item:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						selection-background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox QAbstractItemView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    border: 1px solid gray;
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
					    selection-background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QComboBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						padding: 0px;
 | 
				
			||||||
 | 
						padding-left: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QGroupBox QComboBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						margin-bottom: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QComboBox::down-arrow
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin-top: 0px;
 | 
				
			||||||
 | 
						margin-right: 1px;
 | 
				
			||||||
 | 
						margin-bottom: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QProgressBar
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: black;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					    border: 0px none gray;
 | 
				
			||||||
 | 
						border-radius: 3px;
 | 
				
			||||||
 | 
						text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QProgressBar::chunk
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-radius: 3px;
 | 
				
			||||||
 | 
					    background-color: lightgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QStatusBar QProgressBar
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						min-width: 300px;
 | 
				
			||||||
 | 
						max-width: 300px;
 | 
				
			||||||
 | 
						margin-right: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenuBar
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-bottom: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenuBar::item
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenu::item:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenu::item:enabled:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenu::item:disabled:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QToolBar
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px none gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QGroupBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						padding-top: 3px;
 | 
				
			||||||
 | 
						border: 2px solid gray;
 | 
				
			||||||
 | 
					    border-radius: 4px;
 | 
				
			||||||
 | 
					    margin-top: 3ex;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QGroupBox::title
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						subcontrol-origin: border;
 | 
				
			||||||
 | 
						subcontrol-position: top left;
 | 
				
			||||||
 | 
						margin-top: -1ex;
 | 
				
			||||||
 | 
						margin-left: 0px;
 | 
				
			||||||
 | 
						padding-right: 1px;
 | 
				
			||||||
 | 
						padding-left: 2px;
 | 
				
			||||||
 | 
						top: -2ex;
 | 
				
			||||||
 | 
						left: 8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QListView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						selection-color: black;
 | 
				
			||||||
 | 
						selection-background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QListView::item:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*Setting this gives a more consistent look, but removes the ability to gray variations that are included in the xform*/
 | 
				
			||||||
 | 
					QTreeView::item
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						color: darkgray;
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
						margin-right: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::item:hover
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px none black;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::item:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px none black;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::branch:!has-children
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					       background:  rgb(53, 53, 53);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::branch:has-children:closed
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid darkgray;
 | 
				
			||||||
 | 
						background: gray;
 | 
				
			||||||
 | 
						margin: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::branch:has-children:!closed
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid lightgray;
 | 
				
			||||||
 | 
						background: gray;
 | 
				
			||||||
 | 
						margin-left: 1px;
 | 
				
			||||||
 | 
						margin-right: 0px;
 | 
				
			||||||
 | 
						margin-top: 3px;
 | 
				
			||||||
 | 
						margin-bottom: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-left: 0px none gray;
 | 
				
			||||||
 | 
						border-top: 0px none gray;
 | 
				
			||||||
 | 
						border-right: 0px none gray;
 | 
				
			||||||
 | 
						border-bottom: 0px none gray;
 | 
				
			||||||
 | 
						gridline-color: gray;
 | 
				
			||||||
 | 
						color: darkgray;
 | 
				
			||||||
 | 
						selection-color: darkgray;
 | 
				
			||||||
 | 
						selection-background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
					    font: 9pt "MS Shell Dlg";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QTableCornerButton::section:enabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QTableCornerButton::section:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView::indicator:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
						gridline-color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHeaderView::section::vertical:enabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: black;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
						border-bottom: 1px solid gray;
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHeaderView::section::horizontal:enabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: black;
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						border-right: 1px solid gray;
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHeaderView::section::vertical:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						border: 0px none darkgray;
 | 
				
			||||||
 | 
						border-bottom: 1px solid rgb(53, 53, 53);
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHeaderView::section::horizontal:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color:rgb(35, 35, 35);
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						border: 0px none darkgray;
 | 
				
			||||||
 | 
						border-right: 1px solid rgb(53, 53, 53);
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						width: 15px;
 | 
				
			||||||
 | 
						margin: 22px 0 22px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::handle::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    background-color: gray;
 | 
				
			||||||
 | 
						border-top: 1px solid darkgray;
 | 
				
			||||||
 | 
						border-bottom: 1px solid darkgray;
 | 
				
			||||||
 | 
						min-height: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::add-line::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						height: 22px;
 | 
				
			||||||
 | 
						subcontrol-position: bottom;
 | 
				
			||||||
 | 
						subcontrol-origin: margin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::sub-line::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						height: 22px;
 | 
				
			||||||
 | 
						subcontrol-position: top;
 | 
				
			||||||
 | 
						subcontrol-origin: margin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::up-arrow::vertical, QScrollBar::down-arrow::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					     border: 2px solid darkgray;
 | 
				
			||||||
 | 
					     width: 5px;
 | 
				
			||||||
 | 
					     height: 12px;
 | 
				
			||||||
 | 
					     background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::add-page::vertical, QScrollBar::sub-page::vertical, QScrollBar::add-page::horizontal, QScrollBar::sub-page::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					     background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						height: 15px;
 | 
				
			||||||
 | 
						margin: 0px 20px 0 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::handle::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						border-left: 1px solid darkgray;
 | 
				
			||||||
 | 
						border-right: 1px solid darkgray;
 | 
				
			||||||
 | 
						min-width: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::add-line::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						width: 20px;
 | 
				
			||||||
 | 
						subcontrol-position: right;
 | 
				
			||||||
 | 
						subcontrol-origin: margin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::sub-line::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						width: 20px;
 | 
				
			||||||
 | 
						subcontrol-position: left;
 | 
				
			||||||
 | 
						subcontrol-origin: margin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::left-arrow::horizontal, QScrollBar::right-arrow::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    border: 2px solid darkgray;
 | 
				
			||||||
 | 
					    width: 12px;
 | 
				
			||||||
 | 
					    height: 5px;
 | 
				
			||||||
 | 
					    background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenu::separator
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						height: 1px;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QToolBar::separator
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						width: 1px;
 | 
				
			||||||
 | 
						margin-top: 3px;
 | 
				
			||||||
 | 
						margin-bottom: 2px;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QStatusBar::item
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*Specific controls*/
 | 
				
			||||||
 | 
					QTableWidget#ColorTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTableWidget#GeometryTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTableWidget#FilterTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTableWidget#IterationTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTableWidget#AnimationTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTreeWidget#LibraryTree QHeaderView::section::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-right: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableWidget#ColorTable,
 | 
				
			||||||
 | 
					QTableWidget#GeometryTable,
 | 
				
			||||||
 | 
					QTableWidget#FilterTable,
 | 
				
			||||||
 | 
					QTableWidget#IterationTable,
 | 
				
			||||||
 | 
					QTableWidget#AnimationTable,
 | 
				
			||||||
 | 
					QTableWidget#XformWeightNameTable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-left: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableWidget#SummaryTable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-left: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*Normally doesn't matter, but when a palette file doesn't have enough palettes in it to fill the whole table, it looks funny without a border*/
 | 
				
			||||||
 | 
					QTableWidget#PaletteListTable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableWidget#SummaryTable QHeaderView::section::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableWidget#PaletteAdjustTable,
 | 
				
			||||||
 | 
					QTableWidget#PalettePreviewTable,
 | 
				
			||||||
 | 
					QTableWidget#XformColorIndexTable,
 | 
				
			||||||
 | 
					QTableWidget#XformColorValuesTable,
 | 
				
			||||||
 | 
					QTableWidget#InfoBoundsTable,
 | 
				
			||||||
 | 
					QTableWidget#OptionsXmlSavingTable,
 | 
				
			||||||
 | 
					QTableWidget#OptionsIdentityTable,
 | 
				
			||||||
 | 
					QTableWidget#FinalRenderSizeTable,
 | 
				
			||||||
 | 
					QTableWidget#FinalRenderParamsTable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-left: 1px solid gray;
 | 
				
			||||||
 | 
						border-top: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QLineEdit#PaletteFilterLineEdit,
 | 
				
			||||||
 | 
					QLineEdit#VariationsFilterLineEdit
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						height: 20px;
 | 
				
			||||||
 | 
						min-height: 20px;
 | 
				
			||||||
 | 
						max-height: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QSpinBox#ThreadCountSpin,
 | 
				
			||||||
 | 
					QSpinBox#RandomCountSpin,
 | 
				
			||||||
 | 
					QSpinBox#CpuSubBatchSpin,
 | 
				
			||||||
 | 
					QSpinBox#OpenCLSubBatchSpin,
 | 
				
			||||||
 | 
					QSpinBox#FinalRenderCurrentSpin,
 | 
				
			||||||
 | 
					QSpinBox#FinalRenderThreadCountSpin
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						padding: 2px;
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QSpinBox#ThreadCountSpin:disabled,
 | 
				
			||||||
 | 
					QSpinBox#CpuSubBatchSpin:disabled,
 | 
				
			||||||
 | 
					QSpinBox#OpenCLSubBatchSpin:disabled,
 | 
				
			||||||
 | 
					QSpinBox#FinalRenderCurrentSpin:disabled,
 | 
				
			||||||
 | 
					QSpinBox#FinalRenderThreadCountSpin:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						padding: 2px;
 | 
				
			||||||
 | 
						border: 1px solid rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView#FinalRenderParamsTable QComboBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin-top: 0px;
 | 
				
			||||||
 | 
						margin-bottom: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView#FinalRenderParamsTable QPushButton
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin-top: 1px;
 | 
				
			||||||
 | 
						margin-bottom: 2px;
 | 
				
			||||||
 | 
						padding: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										632
									
								
								Data/dark_mac.qss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										632
									
								
								Data/dark_mac.qss
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,632 @@
 | 
				
			|||||||
 | 
					/*---Base Style---
 | 
				
			||||||
 | 
							This is needed to deal with the large tabs in the fusion theme which is the default on Linux, and optional on Windows.
 | 
				
			||||||
 | 
							It's not needed for other themes.
 | 
				
			||||||
 | 
							You should keep this at the top of whatever custom style you make to ensure the tabs aren't unusually large.*/
 | 
				
			||||||
 | 
					QTabBar::tab { height: 3ex; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*This is needed to give the labels on the status bar some padding.*/
 | 
				
			||||||
 | 
					QStatusBar QLabel { padding-left: 2px; padding-right: 2px; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*Specific styles below this line*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QObject
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color : rgb(53, 53, 53);
 | 
				
			||||||
 | 
						color:  darkgray;
 | 
				
			||||||
 | 
						alternate-background-color:  rgb(53, 53, 53);
 | 
				
			||||||
 | 
						selection-color: black;
 | 
				
			||||||
 | 
						selection-background-color: rgb(42, 130, 218);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QObject:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						border-color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QDockWidget::float-button
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QDockWidget::title
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						padding: 2px;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTabWidget::pane
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QPushButton
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QPushButton:pressed
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QPushButton:focus
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QPushButton
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						padding: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QLineEdit, QTextEdit
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
						color: darkgray;
 | 
				
			||||||
 | 
						background-color: rgb(40, 40, 50);
 | 
				
			||||||
 | 
						selection-background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QToolTip
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
						border: 1px solid darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QSpinBox,
 | 
				
			||||||
 | 
					QDoubleSpinBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						padding-right: 0px;
 | 
				
			||||||
 | 
						color: darkgray;
 | 
				
			||||||
 | 
						selection-background-color: darkgray;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						spacing: 5px;
 | 
				
			||||||
 | 
						outline: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator,
 | 
				
			||||||
 | 
					QTableView::indicator
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
						border-radius: 2px;
 | 
				
			||||||
 | 
						background-color: lightgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator:enabled:unchecked,
 | 
				
			||||||
 | 
					QTableView::indicator:enabled:unchecked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: lightgray;
 | 
				
			||||||
 | 
						image: url(:/Fractorium/Icons/checkbox_unchecked.png);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator:enabled:checked,
 | 
				
			||||||
 | 
					QTableView::indicator:enabled:checked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: lightgray;
 | 
				
			||||||
 | 
					    image: url(:/Fractorium/Icons/checkbox_checked.png);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator:disabled:unchecked,
 | 
				
			||||||
 | 
					QTableView::indicator:disabled:unchecked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						image: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QCheckBox::indicator:disabled:checked,
 | 
				
			||||||
 | 
					QTableView::indicator:disabled:checked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					    image: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QRadioButton::indicator:checked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: black;
 | 
				
			||||||
 | 
						border: 2px solid gray;
 | 
				
			||||||
 | 
						border-radius: 7px;
 | 
				
			||||||
 | 
						width: 8px;
 | 
				
			||||||
 | 
						height: 8px;
 | 
				
			||||||
 | 
						margin: 3px;
 | 
				
			||||||
 | 
						padding: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QRadioButton::indicator:checked:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QRadioButton::indicator:unchecked
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 2px solid gray;
 | 
				
			||||||
 | 
						border-radius: 7px;
 | 
				
			||||||
 | 
						width: 8px;
 | 
				
			||||||
 | 
						height: 8px;
 | 
				
			||||||
 | 
						margin: 3px;
 | 
				
			||||||
 | 
						padding: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 0px;
 | 
				
			||||||
 | 
						padding-left: 4px;
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox::down-arrow:enabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
						margin-right: 2px;
 | 
				
			||||||
 | 
						margin-top: 0px;
 | 
				
			||||||
 | 
						margin-bottom: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox::down-arrow:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid  rgb(35, 35, 35);
 | 
				
			||||||
 | 
						margin-right: 2px;
 | 
				
			||||||
 | 
						margin-top: 0px;
 | 
				
			||||||
 | 
						margin-bottom: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox::drop-down
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*For some reason this is needed with Fusion, but not with Windows*/
 | 
				
			||||||
 | 
					QComboBox::item:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						selection-background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QComboBox QAbstractItemView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    border: 1px solid gray;
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
					    selection-background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QComboBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						padding: 0px;
 | 
				
			||||||
 | 
						padding-left: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QGroupBox QComboBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin: 1px;
 | 
				
			||||||
 | 
						margin-bottom: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QComboBox::down-arrow
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin-top: 0px;
 | 
				
			||||||
 | 
						margin-right: 1px;
 | 
				
			||||||
 | 
						margin-bottom: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QProgressBar
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: black;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					    border: 0px none gray;
 | 
				
			||||||
 | 
						border-radius: 3px;
 | 
				
			||||||
 | 
						text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QProgressBar::chunk
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-radius: 3px;
 | 
				
			||||||
 | 
					    background-color: lightgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QStatusBar QProgressBar
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						min-width: 300px;
 | 
				
			||||||
 | 
						max-width: 300px;
 | 
				
			||||||
 | 
						margin-right: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenuBar
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-bottom: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenuBar::item
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenu::item:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenu::item:enabled:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenu::item:disabled:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QToolBar
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px none gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QGroupBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						padding-top: 3px;
 | 
				
			||||||
 | 
						border: 2px solid gray;
 | 
				
			||||||
 | 
					    border-radius: 4px;
 | 
				
			||||||
 | 
					    margin-top: 3ex;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QGroupBox::title
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						subcontrol-origin: border;
 | 
				
			||||||
 | 
						subcontrol-position: top left;
 | 
				
			||||||
 | 
						margin-top: -1ex;
 | 
				
			||||||
 | 
						margin-left: 0px;
 | 
				
			||||||
 | 
						padding-right: 1px;
 | 
				
			||||||
 | 
						padding-left: 2px;
 | 
				
			||||||
 | 
						top: -2ex;
 | 
				
			||||||
 | 
						left: 8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QListView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						selection-color: black;
 | 
				
			||||||
 | 
						selection-background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QListView::item:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*Setting this gives a more consistent look, but removes the ability to gray variations that are included in the xform*/
 | 
				
			||||||
 | 
					QTreeView::item
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						color: darkgray;
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
						margin-right: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::item:hover
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px none black;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::item:selected
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px none black;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						outline: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::branch:!has-children
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					       background:  rgb(53, 53, 53);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::branch:has-children:closed
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid darkgray;
 | 
				
			||||||
 | 
						background: gray;
 | 
				
			||||||
 | 
						margin: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTreeView::branch:has-children:!closed
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid lightgray;
 | 
				
			||||||
 | 
						background: gray;
 | 
				
			||||||
 | 
						margin-left: 1px;
 | 
				
			||||||
 | 
						margin-right: 0px;
 | 
				
			||||||
 | 
						margin-top: 3px;
 | 
				
			||||||
 | 
						margin-bottom: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-left: 0px none gray;
 | 
				
			||||||
 | 
						border-top: 0px none gray;
 | 
				
			||||||
 | 
						border-right: 0px none gray;
 | 
				
			||||||
 | 
						border-bottom: 0px none gray;
 | 
				
			||||||
 | 
						gridline-color: gray;
 | 
				
			||||||
 | 
						color: darkgray;
 | 
				
			||||||
 | 
						selection-color: darkgray;
 | 
				
			||||||
 | 
						selection-background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
					    font: 9pt "MS Shell Dlg";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QTableCornerButton::section:enabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView QTableCornerButton::section:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView::indicator:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
						gridline-color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHeaderView::section::vertical:enabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: black;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
						border-bottom: 1px solid gray;
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHeaderView::section::horizontal:enabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: black;
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						border-right: 1px solid gray;
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHeaderView::section::vertical:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color: rgb(35, 35, 35);
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						border: 0px none darkgray;
 | 
				
			||||||
 | 
						border-bottom: 1px solid rgb(53, 53, 53);
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QHeaderView::section::horizontal:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						color:rgb(35, 35, 35);
 | 
				
			||||||
 | 
						background-color: rgb(53, 53, 53);
 | 
				
			||||||
 | 
						border: 0px none darkgray;
 | 
				
			||||||
 | 
						border-right: 1px solid rgb(53, 53, 53);
 | 
				
			||||||
 | 
						padding: 4px;
 | 
				
			||||||
 | 
						font: 9pt "MS Shell Dlg 2";/*For some reason the font changes if you set any style. Set this to whatever font is the default on your system*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						width: 15px;
 | 
				
			||||||
 | 
						margin: 22px 0 22px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::handle::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    background-color: gray;
 | 
				
			||||||
 | 
						border-top: 1px solid darkgray;
 | 
				
			||||||
 | 
						border-bottom: 1px solid darkgray;
 | 
				
			||||||
 | 
						min-height: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::add-line::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						height: 22px;
 | 
				
			||||||
 | 
						subcontrol-position: bottom;
 | 
				
			||||||
 | 
						subcontrol-origin: margin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::sub-line::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						height: 22px;
 | 
				
			||||||
 | 
						subcontrol-position: top;
 | 
				
			||||||
 | 
						subcontrol-origin: margin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::up-arrow::vertical, QScrollBar::down-arrow::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					     border: 2px solid darkgray;
 | 
				
			||||||
 | 
					     width: 5px;
 | 
				
			||||||
 | 
					     height: 12px;
 | 
				
			||||||
 | 
					     background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::add-page::vertical, QScrollBar::sub-page::vertical, QScrollBar::add-page::horizontal, QScrollBar::sub-page::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					     background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						height: 15px;
 | 
				
			||||||
 | 
						margin: 0px 20px 0 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::handle::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						border-left: 1px solid darkgray;
 | 
				
			||||||
 | 
						border-right: 1px solid darkgray;
 | 
				
			||||||
 | 
						min-width: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::add-line::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						width: 20px;
 | 
				
			||||||
 | 
						subcontrol-position: right;
 | 
				
			||||||
 | 
						subcontrol-origin: margin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::sub-line::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 0px solid darkgray;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
						width: 20px;
 | 
				
			||||||
 | 
						subcontrol-position: left;
 | 
				
			||||||
 | 
						subcontrol-origin: margin;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QScrollBar::left-arrow::horizontal, QScrollBar::right-arrow::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    border: 2px solid darkgray;
 | 
				
			||||||
 | 
					    width: 12px;
 | 
				
			||||||
 | 
					    height: 5px;
 | 
				
			||||||
 | 
					    background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QMenu::separator
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						height: 1px;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QToolBar::separator
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						width: 1px;
 | 
				
			||||||
 | 
						margin-top: 3px;
 | 
				
			||||||
 | 
						margin-bottom: 2px;
 | 
				
			||||||
 | 
						background-color: gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QStatusBar::item
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*Specific controls*/
 | 
				
			||||||
 | 
					QTableWidget#ColorTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTableWidget#GeometryTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTableWidget#FilterTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTableWidget#IterationTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTableWidget#AnimationTableHeader QHeaderView::section::horizontal,
 | 
				
			||||||
 | 
					QTreeWidget#LibraryTree QHeaderView::section::horizontal
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-right: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableWidget#ColorTable,
 | 
				
			||||||
 | 
					QTableWidget#GeometryTable,
 | 
				
			||||||
 | 
					QTableWidget#FilterTable,
 | 
				
			||||||
 | 
					QTableWidget#IterationTable,
 | 
				
			||||||
 | 
					QTableWidget#AnimationTable,
 | 
				
			||||||
 | 
					QTableWidget#XformWeightNameTable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-left: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableWidget#SummaryTable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-left: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*Normally doesn't matter, but when a palette file doesn't have enough palettes in it to fill the whole table, it looks funny without a border*/
 | 
				
			||||||
 | 
					QTableWidget#PaletteListTable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableWidget#SummaryTable QHeaderView::section::vertical
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						background-color: darkgray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableWidget#PaletteAdjustTable,
 | 
				
			||||||
 | 
					QTableWidget#PalettePreviewTable,
 | 
				
			||||||
 | 
					QTableWidget#XformColorIndexTable,
 | 
				
			||||||
 | 
					QTableWidget#XformColorValuesTable,
 | 
				
			||||||
 | 
					QTableWidget#InfoBoundsTable,
 | 
				
			||||||
 | 
					QTableWidget#OptionsXmlSavingTable,
 | 
				
			||||||
 | 
					QTableWidget#OptionsIdentityTable,
 | 
				
			||||||
 | 
					QTableWidget#FinalRenderSizeTable,
 | 
				
			||||||
 | 
					QTableWidget#FinalRenderParamsTable
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						border-left: 1px solid gray;
 | 
				
			||||||
 | 
						border-top: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QLineEdit#PaletteFilterLineEdit,
 | 
				
			||||||
 | 
					QLineEdit#VariationsFilterLineEdit
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						height: 20px;
 | 
				
			||||||
 | 
						min-height: 20px;
 | 
				
			||||||
 | 
						max-height: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QSpinBox#ThreadCountSpin,
 | 
				
			||||||
 | 
					QSpinBox#RandomCountSpin,
 | 
				
			||||||
 | 
					QSpinBox#CpuSubBatchSpin,
 | 
				
			||||||
 | 
					QSpinBox#OpenCLSubBatchSpin,
 | 
				
			||||||
 | 
					QSpinBox#FinalRenderCurrentSpin,
 | 
				
			||||||
 | 
					QSpinBox#FinalRenderThreadCountSpin
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						padding: 2px;
 | 
				
			||||||
 | 
						border: 1px solid gray;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QSpinBox#ThreadCountSpin:disabled,
 | 
				
			||||||
 | 
					QSpinBox#CpuSubBatchSpin:disabled,
 | 
				
			||||||
 | 
					QSpinBox#OpenCLSubBatchSpin:disabled,
 | 
				
			||||||
 | 
					QSpinBox#FinalRenderCurrentSpin:disabled,
 | 
				
			||||||
 | 
					QSpinBox#FinalRenderThreadCountSpin:disabled
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						padding: 2px;
 | 
				
			||||||
 | 
						border: 1px solid rgb(35, 35, 35);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView#FinalRenderParamsTable QComboBox
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin-top: 0px;
 | 
				
			||||||
 | 
						margin-bottom: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QTableView#FinalRenderParamsTable QPushButton
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						margin-top: 1px;
 | 
				
			||||||
 | 
						margin-bottom: 2px;
 | 
				
			||||||
 | 
						padding: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -141,7 +141,7 @@ public:
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//Allocate the memory for these filters and the hit/width lookup array.
 | 
							//Allocate the memory for these filters and the hit/width lookup array.
 | 
				
			||||||
		rowSize = static_cast<int>(2 * ceil(finalMaxRad) - 1);
 | 
							rowSize = static_cast<int>(2 * std::ceil(finalMaxRad) - 1);
 | 
				
			||||||
		m_FilterWidth = (rowSize - 1) / 2;
 | 
							m_FilterWidth = (rowSize - 1) / 2;
 | 
				
			||||||
		m_KernelSize = (m_FilterWidth + 1) * (2 + m_FilterWidth) / 2;
 | 
							m_KernelSize = (m_FilterWidth + 1) * (2 + m_FilterWidth) / 2;
 | 
				
			||||||
		m_Coefs.resize(maxIndex * m_KernelSize);
 | 
							m_Coefs.resize(maxIndex * m_KernelSize);
 | 
				
			||||||
 | 
				
			|||||||
@ -634,7 +634,7 @@ public:
 | 
				
			|||||||
							t = xform->m_Post.m_Mat[col][2];
 | 
												t = xform->m_Post.m_Mat[col][2];
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						cxAng[k][col] = atan2(c1[1], c1[0]);
 | 
											cxAng[k][col] = std::atan2(c1[1], c1[0]);
 | 
				
			||||||
						cxMag[k][col] = std::sqrt(c1[0] * c1[0] + c1[1] * c1[1]);
 | 
											cxMag[k][col] = std::sqrt(c1[0] * c1[0] + c1[1] * c1[1]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						if (cxMag[k][col] == 0)
 | 
											if (cxMag[k][col] == 0)
 | 
				
			||||||
@ -722,7 +722,7 @@ public:
 | 
				
			|||||||
				{
 | 
									{
 | 
				
			||||||
					c1[0] = embers[k].GetXform(xfi)->m_Affine.m_Mat[0][col];//A,D then B,E.
 | 
										c1[0] = embers[k].GetXform(xfi)->m_Affine.m_Mat[0][col];//A,D then B,E.
 | 
				
			||||||
					c1[1] = embers[k].GetXform(xfi)->m_Affine.m_Mat[1][col];
 | 
										c1[1] = embers[k].GetXform(xfi)->m_Affine.m_Mat[1][col];
 | 
				
			||||||
					cxang[k][col] = atan2(c1[1], c1[0]);
 | 
										cxang[k][col] = std::atan2(c1[1], c1[0]);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -774,7 +774,7 @@ public:
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			for (i = 0; i < size; i++)
 | 
								for (i = 0; i < size; i++)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (log(cxMag[i][col]) < -10)
 | 
									if (std::log(cxMag[i][col]) < -10)
 | 
				
			||||||
					accmode[col] = 1;//Mode set to linear interp.
 | 
										accmode[col] = 1;//Mode set to linear interp.
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -926,8 +926,8 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			if (bd < 0) return true;
 | 
								if (bd < 0) return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			ad = atan2(a.m_Affine.A(), a.m_Affine.D());
 | 
								ad = std::atan2(a.m_Affine.A(), a.m_Affine.D());
 | 
				
			||||||
			bd = atan2(b.m_Affine.A(), b.m_Affine.D());
 | 
								bd = std::atan2(b.m_Affine.A(), b.m_Affine.D());
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return ad > bd;
 | 
							return ad > bd;
 | 
				
			||||||
 | 
				
			|||||||
@ -919,18 +919,17 @@ eRenderStatus Renderer<T, bucketT>::GaussianDensityFilter()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		for (intmax_t j = localStartRow; (j < localEndRow) && !m_Abort; j++)
 | 
							for (intmax_t j = localStartRow; (j < localEndRow) && !m_Abort; j++)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			size_t bucketRowStart = j * m_SuperRasW;//Pull out of inner loop for optimization.
 | 
								auto buckets = m_HistBuckets.data();
 | 
				
			||||||
			const tvec4<bucketT, glm::defaultp>* bucket;
 | 
								auto bucketRowStart = buckets + (j * m_SuperRasW);//Pull out of inner loop for optimization.
 | 
				
			||||||
			const tvec4<bucketT, glm::defaultp>* buckets = m_HistBuckets.data();
 | 
								auto filterCoefs = m_DensityFilter->Coefs();
 | 
				
			||||||
			const bucketT* filterCoefs = m_DensityFilter->Coefs();
 | 
								auto filterWidths = m_DensityFilter->Widths();
 | 
				
			||||||
			const bucketT* filterWidths = m_DensityFilter->Widths();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			for (intmax_t i = startCol; i < endCol; i++)
 | 
								for (intmax_t i = startCol; i < endCol; i++)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				intmax_t ii, jj, arrFilterWidth;
 | 
									intmax_t ii, jj, arrFilterWidth;
 | 
				
			||||||
				size_t filterSelectInt, filterCoefIndex;
 | 
									size_t filterSelectInt, filterCoefIndex;
 | 
				
			||||||
				T filterSelect = 0;
 | 
									T filterSelect = 0;
 | 
				
			||||||
				bucket = buckets + bucketRowStart + i;
 | 
									auto bucket = bucketRowStart + i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				//Don't do anything if there's no hits here. Must also put this first to avoid dividing by zero below.
 | 
									//Don't do anything if there's no hits here. Must also put this first to avoid dividing by zero below.
 | 
				
			||||||
				if (bucket->a == 0)
 | 
									if (bucket->a == 0)
 | 
				
			||||||
 | 
				
			|||||||
@ -684,7 +684,7 @@ static inline void ClampGte0Ref(T& val)
 | 
				
			|||||||
template <typename T>
 | 
					template <typename T>
 | 
				
			||||||
static inline T Round(T r)
 | 
					static inline T Round(T r)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return (r > 0) ? static_cast<T>(Floor<T>(r + T(0.5))) : ceil(r - T(0.5));
 | 
						return (r > 0) ? static_cast<T>(Floor<T>(r + T(0.5))) : std::ceil(r - T(0.5));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -1226,10 +1226,10 @@ public:
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (m_NeedPrecalcAtanXY)
 | 
							if (m_NeedPrecalcAtanXY)
 | 
				
			||||||
			iteratorHelper.m_PrecalcAtanxy = atan2(iteratorHelper.In.x, iteratorHelper.In.y);
 | 
								iteratorHelper.m_PrecalcAtanxy = std::atan2(iteratorHelper.In.x, iteratorHelper.In.y);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (m_NeedPrecalcAtanYX)
 | 
							if (m_NeedPrecalcAtanYX)
 | 
				
			||||||
			iteratorHelper.m_PrecalcAtanyx = atan2(iteratorHelper.In.y, iteratorHelper.In.x);
 | 
								iteratorHelper.m_PrecalcAtanyx = std::atan2(iteratorHelper.In.y, iteratorHelper.In.x);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/// <summary>
 | 
						/// <summary>
 | 
				
			||||||
@ -2328,4 +2328,4 @@ protected:
 | 
				
			|||||||
		\
 | 
							\
 | 
				
			||||||
		PREPOSTPARVARCOPY(Post##varName##Variation, varName##Variation) \
 | 
							PREPOSTPARVARCOPY(Post##varName##Variation, varName##Variation) \
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2883,9 +2883,10 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T ct = helper.In.x / helper.m_PrecalcSqrtSumSquares;
 | 
							T z = Zeps(helper.m_PrecalcSqrtSumSquares);
 | 
				
			||||||
 | 
							T ct = helper.In.x / z;
 | 
				
			||||||
		T r = m_Weight * (rand.Frand01<T>() - m_Holes) *
 | 
							T r = m_Weight * (rand.Frand01<T>() - m_Holes) *
 | 
				
			||||||
			  m_Eccentricity / (1 + m_Eccentricity * ct) / helper.m_PrecalcSqrtSumSquares;
 | 
								  m_Eccentricity / (1 + m_Eccentricity * ct) / z;
 | 
				
			||||||
		helper.Out.x = r * helper.In.x;
 | 
							helper.Out.x = r * helper.In.x;
 | 
				
			||||||
		helper.Out.y = r * helper.In.y;
 | 
							helper.Out.y = r * helper.In.y;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -2900,8 +2901,9 @@ public:
 | 
				
			|||||||
		string eccentricity = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
							string eccentricity = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
				
			||||||
		string holes =        "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
							string holes =        "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
				
			||||||
		ss << "\t{\n"
 | 
							ss << "\t{\n"
 | 
				
			||||||
 | 
							   << "\t\treal_t z = Zeps(precalcSqrtSumSquares);\n"
 | 
				
			||||||
		   << "\t\treal_t ct = vIn.x / precalcSqrtSumSquares;\n"
 | 
							   << "\t\treal_t ct = vIn.x / precalcSqrtSumSquares;\n"
 | 
				
			||||||
		   << "\t\treal_t r = xform->m_VariationWeights[" << varIndex << "] * (MwcNext01(mwc) - " << holes << ") * " << eccentricity << " / (1 + " << eccentricity << " * ct) / precalcSqrtSumSquares;\n"
 | 
							   << "\t\treal_t r = xform->m_VariationWeights[" << varIndex << "] * (MwcNext01(mwc) - " << holes << ") * " << eccentricity << " / (1 + " << eccentricity << " * ct) / z;\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = r * vIn.x;\n"
 | 
							   << "\t\tvOut.x = r * vIn.x;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = r * vIn.y;\n"
 | 
							   << "\t\tvOut.y = r * vIn.y;\n"
 | 
				
			||||||
@ -2910,6 +2912,11 @@ public:
 | 
				
			|||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual void Random(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Random(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		m_Eccentricity = rand.Frand01<T>();
 | 
							m_Eccentricity = rand.Frand01<T>();
 | 
				
			||||||
@ -3096,7 +3103,7 @@ public:
 | 
				
			|||||||
		const T x2y2 = helper.m_PrecalcSumSquares;
 | 
							const T x2y2 = helper.m_PrecalcSumSquares;
 | 
				
			||||||
		const T t = x2y2 + 1;
 | 
							const T t = x2y2 + 1;
 | 
				
			||||||
		const T x2 = 2 * helper.In.x;
 | 
							const T x2 = 2 * helper.In.x;
 | 
				
			||||||
		T y = T(0.5) * atan2(2 * helper.In.y, x2y2 - 1) + m_S;
 | 
							T y = T(0.5) * std::atan2(2 * helper.In.y, x2y2 - 1) + m_S;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (y > T(M_PI_2))
 | 
							if (y > T(M_PI_2))
 | 
				
			||||||
			y = -T(M_PI_2) + fmod(y + T(M_PI_2), T(M_PI));
 | 
								y = -T(M_PI_2) + fmod(y + T(M_PI_2), T(M_PI));
 | 
				
			||||||
@ -3123,7 +3130,7 @@ public:
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			helper.Out.x = m_V4 * std::log((t + x2) / (t - x2));
 | 
								helper.Out.x = m_V4 * std::log((t + x2) / Zeps(t - x2));
 | 
				
			||||||
			helper.Out.y = m_V * y;
 | 
								helper.Out.y = m_V * y;
 | 
				
			||||||
			helper.Out.z = m_Weight * helper.In.z;
 | 
								helper.Out.z = m_Weight * helper.In.z;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -3176,7 +3183,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		ss << "\t\telse\n"
 | 
							ss << "\t\telse\n"
 | 
				
			||||||
		   << "\t\t{\n"
 | 
							   << "\t\t{\n"
 | 
				
			||||||
		   << "\t\t	vOut.x = (" << v4 << " * log((t + x2) / (t - x2)));\n"
 | 
							   << "\t\t	vOut.x = (" << v4 << " * log((t + x2) / Zeps(t - x2)));\n"
 | 
				
			||||||
		   << "\t\t	vOut.y = (" << v << " * y);\n"
 | 
							   << "\t\t	vOut.y = (" << v << " * y);\n"
 | 
				
			||||||
		   << "\t\t	vOut.z = xform->m_VariationWeights[" << varIndex << "] * vIn.z;\n"
 | 
							   << "\t\t	vOut.z = xform->m_VariationWeights[" << varIndex << "] * vIn.z;\n"
 | 
				
			||||||
		   << "\t\t}\n"
 | 
							   << "\t\t}\n"
 | 
				
			||||||
@ -3196,6 +3203,11 @@ public:
 | 
				
			|||||||
		m_Shift = 2 * rand.Frand01<T>() - 1;
 | 
							m_Shift = 2 * rand.Frand01<T>() - 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual bool SetParamVal(const char* name, T val) override
 | 
						virtual bool SetParamVal(const char* name, T val) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (!_stricmp(name, "bipolar_shift"))
 | 
							if (!_stricmp(name, "bipolar_shift"))
 | 
				
			||||||
@ -3394,8 +3406,8 @@ public:
 | 
				
			|||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T invCellSize = 1 / m_Size;
 | 
							T invCellSize = 1 / m_Size;
 | 
				
			||||||
		T x = floor(helper.In.x * invCellSize);//Calculate input cell. Note that int cast is omitted here. See below.
 | 
							T x = std::floor(helper.In.x * invCellSize);//Calculate input cell. Note that int cast is omitted here. See below.
 | 
				
			||||||
		T y = floor(helper.In.y * invCellSize);
 | 
							T y = std::floor(helper.In.y * invCellSize);
 | 
				
			||||||
		T dx = helper.In.x - x * m_Size;//Offset from cell origin.
 | 
							T dx = helper.In.x - x * m_Size;//Offset from cell origin.
 | 
				
			||||||
		T dy = helper.In.y - y * m_Size;
 | 
							T dy = helper.In.y - y * m_Size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3696,14 +3708,14 @@ public:
 | 
				
			|||||||
		T tmp2 = 2 * helper.In.x;
 | 
							T tmp2 = 2 * helper.In.x;
 | 
				
			||||||
		T r1 = std::sqrt(tmp + tmp2);
 | 
							T r1 = std::sqrt(tmp + tmp2);
 | 
				
			||||||
		T r2 = std::sqrt(tmp - tmp2);
 | 
							T r2 = std::sqrt(tmp - tmp2);
 | 
				
			||||||
		T xmax = (r1 + r2) * T(0.5);
 | 
							T xmax = Zeps((r1 + r2) * T(0.5));
 | 
				
			||||||
		T a1 = std::log(xmax + std::sqrt(xmax - 1));
 | 
							T a1 = std::log(xmax + std::sqrt(xmax - 1));
 | 
				
			||||||
		T a2 = -std::acos(Clamp<T>(helper.In.x / xmax, -1, 1));
 | 
							T a2 = -std::acos(Clamp<T>(helper.In.x / xmax, -1, 1));
 | 
				
			||||||
		T w = m_Weight / T(11.57034632);//This is an interesting magic number.
 | 
							T w = m_Weight / T(11.57034632);//This is an interesting magic number.
 | 
				
			||||||
		T snv, csv, snhu, cshu;
 | 
							T snv, csv, snhu, cshu;
 | 
				
			||||||
		sincos(a1, &snv, &csv);
 | 
							sincos(a1, &snv, &csv);
 | 
				
			||||||
		snhu = sinh(a2);
 | 
							snhu = std::sinh(a2);
 | 
				
			||||||
		cshu = cosh(a2);
 | 
							cshu = std::cosh(a2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (helper.In.y > 0.0)
 | 
							if (helper.In.y > 0.0)
 | 
				
			||||||
			snv = -snv;
 | 
								snv = -snv;
 | 
				
			||||||
@ -3722,7 +3734,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t tmp2 = (real_t)(2.0) * vIn.x;\n"
 | 
							   << "\t\treal_t tmp2 = (real_t)(2.0) * vIn.x;\n"
 | 
				
			||||||
		   << "\t\treal_t r1 = sqrt(tmp + tmp2);\n"
 | 
							   << "\t\treal_t r1 = sqrt(tmp + tmp2);\n"
 | 
				
			||||||
		   << "\t\treal_t r2 = sqrt(tmp - tmp2);\n"
 | 
							   << "\t\treal_t r2 = sqrt(tmp - tmp2);\n"
 | 
				
			||||||
		   << "\t\treal_t xmax = (r1 + r2) * (real_t)(0.5);\n"
 | 
							   << "\t\treal_t xmax = Zeps((r1 + r2) * (real_t)(0.5));\n"
 | 
				
			||||||
		   << "\t\treal_t a1 = log(xmax + sqrt(xmax - (real_t)(1.0)));\n"
 | 
							   << "\t\treal_t a1 = log(xmax + sqrt(xmax - (real_t)(1.0)));\n"
 | 
				
			||||||
		   << "\t\treal_t a2 = -acos(clamp(vIn.x / xmax, -(real_t)(1.0), (real_t)(1.0)));\n"
 | 
							   << "\t\treal_t a2 = -acos(clamp(vIn.x / xmax, -(real_t)(1.0), (real_t)(1.0)));\n"
 | 
				
			||||||
		   << "\t\treal_t w = xform->m_VariationWeights[" << varIndex << "] / (real_t)(11.57034632);\n"
 | 
							   << "\t\treal_t w = xform->m_VariationWeights[" << varIndex << "] / (real_t)(11.57034632);\n"
 | 
				
			||||||
@ -3738,6 +3750,11 @@ public:
 | 
				
			|||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -3774,7 +3791,7 @@ public:
 | 
				
			|||||||
		else
 | 
							else
 | 
				
			||||||
			ssx = std::sqrt(ssx);
 | 
								ssx = std::sqrt(ssx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		helper.Out.x = w * atan2(a, b);
 | 
							helper.Out.x = w * std::atan2(a, b);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (helper.In.y > 0)
 | 
							if (helper.In.y > 0)
 | 
				
			||||||
			helper.Out.y = w * std::log(xmax + ssx);
 | 
								helper.Out.y = w * std::log(xmax + ssx);
 | 
				
			||||||
@ -3997,7 +4014,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if (r < m_Weight)
 | 
							if (r < m_Weight)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			T a = atan2(y, x) + m_Spin + m_Twist * (m_Weight - r);
 | 
								T a = std::atan2(y, x) + m_Spin + m_Twist * (m_Weight - r);
 | 
				
			||||||
			helper.Out.x = m_Weight * (r * std::cos(a) + m_X);//Fix to make it colapse to 0 when weight is 0.//SMOULDER
 | 
								helper.Out.x = m_Weight * (r * std::cos(a) + m_X);//Fix to make it colapse to 0 when weight is 0.//SMOULDER
 | 
				
			||||||
			helper.Out.y = m_Weight * (r * std::sin(a) - m_Y);
 | 
								helper.Out.y = m_Weight * (r * std::sin(a) - m_Y);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -4657,12 +4674,12 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (cos(helper.In.y * m_YAng) >= 0)
 | 
							if (std::cos(helper.In.y * m_YAng) >= 0)
 | 
				
			||||||
			helper.Out.x = m_Weight * helper.In.x;
 | 
								helper.Out.x = m_Weight * helper.In.x;
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			helper.Out.x = -(m_Weight * helper.In.x);
 | 
								helper.Out.x = -(m_Weight * helper.In.x);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (cos(helper.In.x * m_XAng) >= 0)
 | 
							if (std::cos(helper.In.x * m_XAng) >= 0)
 | 
				
			||||||
			helper.Out.y = m_Weight * helper.In.y;
 | 
								helper.Out.y = m_Weight * helper.In.y;
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			helper.Out.y = -(m_Weight * helper.In.y);
 | 
								helper.Out.y = -(m_Weight * helper.In.y);
 | 
				
			||||||
@ -5151,7 +5168,7 @@ public:
 | 
				
			|||||||
		if (r < m_Weight)
 | 
							if (r < m_Weight)
 | 
				
			||||||
			a = helper.m_PrecalcAtanyx + m_Inside / (m_Weight - r);
 | 
								a = helper.m_PrecalcAtanyx + m_Inside / (m_Weight - r);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			a = helper.m_PrecalcAtanyx + m_Outside / (m_Weight - r);
 | 
								a = helper.m_PrecalcAtanyx + m_Outside / Zeps(m_Weight - r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		helper.Out.x = m_Weight * r * std::cos(a);
 | 
							helper.Out.x = m_Weight * r * std::cos(a);
 | 
				
			||||||
		helper.Out.y = m_Weight * r * std::sin(a);
 | 
							helper.Out.y = m_Weight * r * std::sin(a);
 | 
				
			||||||
@ -5173,7 +5190,7 @@ public:
 | 
				
			|||||||
		   << "\t\tif (r < xform->m_VariationWeights[" << varIndex << "])\n"
 | 
							   << "\t\tif (r < xform->m_VariationWeights[" << varIndex << "])\n"
 | 
				
			||||||
		   << "\t\t	a = precalcAtanyx + " << inside << " / (xform->m_VariationWeights[" << varIndex << "] - r);\n"
 | 
							   << "\t\t	a = precalcAtanyx + " << inside << " / (xform->m_VariationWeights[" << varIndex << "] - r);\n"
 | 
				
			||||||
		   << "\t\telse\n"
 | 
							   << "\t\telse\n"
 | 
				
			||||||
		   << "\t\t	a = precalcAtanyx + " << outside << " / (xform->m_VariationWeights[" << varIndex << "] - r);\n"
 | 
							   << "\t\t	a = precalcAtanyx + " << outside << " / Zeps(xform->m_VariationWeights[" << varIndex << "] - r);\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = (xform->m_VariationWeights[" << varIndex << "] * r * cos(a));\n"
 | 
							   << "\t\tvOut.x = (xform->m_VariationWeights[" << varIndex << "] * r * cos(a));\n"
 | 
				
			||||||
		   << "\t\tvOut.y = (xform->m_VariationWeights[" << varIndex << "] * r * sin(a));\n"
 | 
							   << "\t\tvOut.y = (xform->m_VariationWeights[" << varIndex << "] * r * sin(a));\n"
 | 
				
			||||||
@ -5182,6 +5199,11 @@ public:
 | 
				
			|||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual void Random(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Random(QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		m_Inside = rand.Frand01<T>();
 | 
							m_Inside = rand.Frand01<T>();
 | 
				
			||||||
@ -5378,8 +5400,8 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		helper.Out.x = m_Weight * std::sin(helper.In.x) * cosh(helper.In.y);
 | 
							helper.Out.x = m_Weight * std::sin(helper.In.x) * std::cosh(helper.In.y);
 | 
				
			||||||
		helper.Out.y = m_Weight * std::cos(helper.In.x) * sinh(helper.In.y);
 | 
							helper.Out.y = m_Weight * std::cos(helper.In.x) * std::sinh(helper.In.y);
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -5410,8 +5432,8 @@ public:
 | 
				
			|||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		//clamp fabs x and y to 7.104760e+002 for cosh, and |x| 7.104760e+002 for sinh
 | 
							//clamp fabs x and y to 7.104760e+002 for cosh, and |x| 7.104760e+002 for sinh
 | 
				
			||||||
		helper.Out.x = m_Weight * std::cos(helper.In.x) * cosh(helper.In.y);
 | 
							helper.Out.x = m_Weight * std::cos(helper.In.x)   * std::cosh(helper.In.y);
 | 
				
			||||||
		helper.Out.y = -(m_Weight * std::sin(helper.In.x) * sinh(helper.In.y));
 | 
							helper.Out.y = -(m_Weight * std::sin(helper.In.x) * std::sinh(helper.In.y));
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -5443,9 +5465,9 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T tansin, tancos, tansinh, tancosh, tanden;
 | 
							T tansin, tancos, tansinh, tancosh, tanden;
 | 
				
			||||||
		sincos(2 * helper.In.x, &tansin, &tancos);
 | 
							sincos(2 * helper.In.x, &tansin, &tancos);
 | 
				
			||||||
		tansinh = sinh(2 * helper.In.y);
 | 
							tansinh = std::sinh(2 * helper.In.y);
 | 
				
			||||||
		tancosh = cosh(2 * helper.In.y);
 | 
							tancosh = std::cosh(2 * helper.In.y);
 | 
				
			||||||
		tanden = 1 / (tancos + tancosh);
 | 
							tanden = 1 / Zeps(tancos + tancosh);
 | 
				
			||||||
		helper.Out.x = m_Weight * tanden * tansin;
 | 
							helper.Out.x = m_Weight * tanden * tansin;
 | 
				
			||||||
		helper.Out.y = m_Weight * tanden * tansinh;
 | 
							helper.Out.y = m_Weight * tanden * tansinh;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5460,7 +5482,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t tancos = cos((real_t)(2.0) * vIn.x);\n"
 | 
							   << "\t\treal_t tancos = cos((real_t)(2.0) * vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t tansinh = sinh((real_t)(2.0) * vIn.y);\n"
 | 
							   << "\t\treal_t tansinh = sinh((real_t)(2.0) * vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t tancosh = cosh((real_t)(2.0) * vIn.y);\n"
 | 
							   << "\t\treal_t tancosh = cosh((real_t)(2.0) * vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t tanden = (real_t)(1.0) / (tancos + tancosh);\n"
 | 
							   << "\t\treal_t tanden = (real_t)(1.0) / Zeps(tancos + tancosh);\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * tanden * tansin;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * tanden * tansin;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * tanden * tansinh;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * tanden * tansinh;\n"
 | 
				
			||||||
@ -5468,6 +5490,11 @@ public:
 | 
				
			|||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -5485,9 +5512,9 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T secsin, seccos, secsinh, seccosh, secden;
 | 
							T secsin, seccos, secsinh, seccosh, secden;
 | 
				
			||||||
		sincos(helper.In.x, &secsin, &seccos);
 | 
							sincos(helper.In.x, &secsin, &seccos);
 | 
				
			||||||
		secsinh = sinh(helper.In.y);
 | 
							secsinh = std::sinh(helper.In.y);
 | 
				
			||||||
		seccosh = cosh(helper.In.y);
 | 
							seccosh = std::cosh(helper.In.y);
 | 
				
			||||||
		secden = 2 / (cos(2 * helper.In.x) + cosh(2 * helper.In.y));
 | 
							secden = 2 / Zeps(std::cos(2 * helper.In.x) + std::cosh(2 * helper.In.y));
 | 
				
			||||||
		helper.Out.x = m_Weight * secden * seccos * seccosh;
 | 
							helper.Out.x = m_Weight * secden * seccos * seccosh;
 | 
				
			||||||
		helper.Out.y = m_Weight * secden * secsin * secsinh;
 | 
							helper.Out.y = m_Weight * secden * secsin * secsinh;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5502,7 +5529,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t seccos = cos(vIn.x);\n"
 | 
							   << "\t\treal_t seccos = cos(vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t secsinh = sinh(vIn.y);\n"
 | 
							   << "\t\treal_t secsinh = sinh(vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t seccosh = cosh(vIn.y);\n"
 | 
							   << "\t\treal_t seccosh = cosh(vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t secden = (real_t)(2.0) / (cos((real_t)(2.0) * vIn.x) + cosh((real_t)(2.0) * vIn.y));\n"
 | 
							   << "\t\treal_t secden = (real_t)(2.0) / Zeps(cos((real_t)(2.0) * vIn.x) + cosh((real_t)(2.0) * vIn.y));\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * secden * seccos * seccosh;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * secden * seccos * seccosh;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * secden * secsin * secsinh;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * secden * secsin * secsinh;\n"
 | 
				
			||||||
@ -5510,6 +5537,11 @@ public:
 | 
				
			|||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -5529,7 +5561,7 @@ public:
 | 
				
			|||||||
		sincos(helper.In.x, &cscsin, &csccos);
 | 
							sincos(helper.In.x, &cscsin, &csccos);
 | 
				
			||||||
		cscsinh = std::sinh(helper.In.y);
 | 
							cscsinh = std::sinh(helper.In.y);
 | 
				
			||||||
		csccosh = std::cosh(helper.In.y);
 | 
							csccosh = std::cosh(helper.In.y);
 | 
				
			||||||
		cscden = 2 / (std::cosh(2 * helper.In.y) - std::cos(2 * helper.In.x));
 | 
							cscden = 2 / Zeps(std::cosh(2 * helper.In.y) - std::cos(2 * helper.In.x));
 | 
				
			||||||
		helper.Out.x = m_Weight * cscden * cscsin * csccosh;
 | 
							helper.Out.x = m_Weight * cscden * cscsin * csccosh;
 | 
				
			||||||
		helper.Out.y = -(m_Weight * cscden * csccos * cscsinh);
 | 
							helper.Out.y = -(m_Weight * cscden * csccos * cscsinh);
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5544,7 +5576,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t csccos = cos(vIn.x);\n"
 | 
							   << "\t\treal_t csccos = cos(vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t cscsinh = sinh(vIn.y);\n"
 | 
							   << "\t\treal_t cscsinh = sinh(vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t csccosh = cosh(vIn.y);\n"
 | 
							   << "\t\treal_t csccosh = cosh(vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t cscden = (real_t)(2.0) / (cosh((real_t)(2.0) * vIn.y) - cos((real_t)(2.0) * vIn.x));\n"
 | 
							   << "\t\treal_t cscden = (real_t)(2.0) / Zeps(cosh((real_t)(2.0) * vIn.y) - cos((real_t)(2.0) * vIn.x));\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * cscden * cscsin * csccosh;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * cscden * cscsin * csccosh;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = -(xform->m_VariationWeights[" << varIndex << "] * cscden * csccos * cscsinh);\n"
 | 
							   << "\t\tvOut.y = -(xform->m_VariationWeights[" << varIndex << "] * cscden * csccos * cscsinh);\n"
 | 
				
			||||||
@ -5552,6 +5584,11 @@ public:
 | 
				
			|||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -5569,9 +5606,9 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T cotsin, cotcos, cotsinh, cotcosh, cotden;
 | 
							T cotsin, cotcos, cotsinh, cotcosh, cotden;
 | 
				
			||||||
		sincos(2 * helper.In.x, &cotsin, &cotcos);
 | 
							sincos(2 * helper.In.x, &cotsin, &cotcos);
 | 
				
			||||||
		cotsinh = sinh(2 * helper.In.y);
 | 
							cotsinh = std::sinh(2 * helper.In.y);
 | 
				
			||||||
		cotcosh = cosh(2 * helper.In.y);
 | 
							cotcosh = std::cosh(2 * helper.In.y);
 | 
				
			||||||
		cotden = 1 / (cotcosh - cotcos);
 | 
							cotden = 1 / Zeps(cotcosh - cotcos);
 | 
				
			||||||
		helper.Out.x = m_Weight * cotden * cotsin;
 | 
							helper.Out.x = m_Weight * cotden * cotsin;
 | 
				
			||||||
		helper.Out.y = m_Weight * cotden * -1 * cotsinh;
 | 
							helper.Out.y = m_Weight * cotden * -1 * cotsinh;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5586,7 +5623,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t cotcos = cos((real_t)(2.0) * vIn.x);\n"
 | 
							   << "\t\treal_t cotcos = cos((real_t)(2.0) * vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t cotsinh = sinh((real_t)(2.0) * vIn.y);\n"
 | 
							   << "\t\treal_t cotsinh = sinh((real_t)(2.0) * vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t cotcosh = cosh((real_t)(2.0) * vIn.y);\n"
 | 
							   << "\t\treal_t cotcosh = cosh((real_t)(2.0) * vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t cotden = (real_t)(1.0) / (cotcosh - cotcos);\n"
 | 
							   << "\t\treal_t cotden = (real_t)(1.0) / Zeps(cotcosh - cotcos);\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * cotden * cotsin;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * cotden * cotsin;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * cotden * -1 * cotsinh;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * cotden * -1 * cotsinh;\n"
 | 
				
			||||||
@ -5594,6 +5631,11 @@ public:
 | 
				
			|||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -5611,8 +5653,8 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T sinhsin, sinhcos, sinhsinh, sinhcosh;
 | 
							T sinhsin, sinhcos, sinhsinh, sinhcosh;
 | 
				
			||||||
		sincos(helper.In.y, &sinhsin, &sinhcos);
 | 
							sincos(helper.In.y, &sinhsin, &sinhcos);
 | 
				
			||||||
		sinhsinh = sinh(helper.In.x);
 | 
							sinhsinh = std::sinh(helper.In.x);
 | 
				
			||||||
		sinhcosh = cosh(helper.In.x);
 | 
							sinhcosh = std::cosh(helper.In.x);
 | 
				
			||||||
		helper.Out.x = m_Weight * sinhsinh * sinhcos;
 | 
							helper.Out.x = m_Weight * sinhsinh * sinhcos;
 | 
				
			||||||
		helper.Out.y = m_Weight * sinhcosh * sinhsin;
 | 
							helper.Out.y = m_Weight * sinhcosh * sinhsin;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5651,8 +5693,8 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T coshsin, coshcos, coshsinh, coshcosh;
 | 
							T coshsin, coshcos, coshsinh, coshcosh;
 | 
				
			||||||
		sincos(helper.In.y, &coshsin, &coshcos);
 | 
							sincos(helper.In.y, &coshsin, &coshcos);
 | 
				
			||||||
		coshsinh = sinh(helper.In.x);
 | 
							coshsinh = std::sinh(helper.In.x);
 | 
				
			||||||
		coshcosh = cosh(helper.In.x);
 | 
							coshcosh = std::cosh(helper.In.x);
 | 
				
			||||||
		helper.Out.x = m_Weight * coshcosh * coshcos;
 | 
							helper.Out.x = m_Weight * coshcosh * coshcos;
 | 
				
			||||||
		helper.Out.y = m_Weight * coshsinh * coshsin;
 | 
							helper.Out.y = m_Weight * coshsinh * coshsin;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5691,9 +5733,9 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T tanhsin, tanhcos, tanhsinh, tanhcosh, tanhden;
 | 
							T tanhsin, tanhcos, tanhsinh, tanhcosh, tanhden;
 | 
				
			||||||
		sincos(2 * helper.In.y, &tanhsin, &tanhcos);
 | 
							sincos(2 * helper.In.y, &tanhsin, &tanhcos);
 | 
				
			||||||
		tanhsinh = sinh(2 * helper.In.x);
 | 
							tanhsinh = std::sinh(2 * helper.In.x);
 | 
				
			||||||
		tanhcosh = cosh(2 * helper.In.x);
 | 
							tanhcosh = std::cosh(2 * helper.In.x);
 | 
				
			||||||
		tanhden = 1 / (tanhcos + tanhcosh);
 | 
							tanhden = 1 / Zeps(tanhcos + tanhcosh);
 | 
				
			||||||
		helper.Out.x = m_Weight * tanhden * tanhsinh;
 | 
							helper.Out.x = m_Weight * tanhden * tanhsinh;
 | 
				
			||||||
		helper.Out.y = m_Weight * tanhden * tanhsin;
 | 
							helper.Out.y = m_Weight * tanhden * tanhsin;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5708,7 +5750,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t tanhcos = cos((real_t)(2.0) * vIn.y);\n"
 | 
							   << "\t\treal_t tanhcos = cos((real_t)(2.0) * vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t tanhsinh = sinh((real_t)(2.0) * vIn.x);\n"
 | 
							   << "\t\treal_t tanhsinh = sinh((real_t)(2.0) * vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t tanhcosh = cosh((real_t)(2.0) * vIn.x);\n"
 | 
							   << "\t\treal_t tanhcosh = cosh((real_t)(2.0) * vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t tanhden = (real_t)(1.0) / (tanhcos + tanhcosh);\n"
 | 
							   << "\t\treal_t tanhden = (real_t)(1.0) / Zeps(tanhcos + tanhcosh);\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * tanhden * tanhsinh;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * tanhden * tanhsinh;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * tanhden * tanhsin;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * tanhden * tanhsin;\n"
 | 
				
			||||||
@ -5716,6 +5758,11 @@ public:
 | 
				
			|||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -5733,9 +5780,9 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T sechsin, sechcos, sechsinh, sechcosh, sechden;
 | 
							T sechsin, sechcos, sechsinh, sechcosh, sechden;
 | 
				
			||||||
		sincos(helper.In.y, &sechsin, &sechcos);
 | 
							sincos(helper.In.y, &sechsin, &sechcos);
 | 
				
			||||||
		sechsinh = sinh(helper.In.x);
 | 
							sechsinh = std::sinh(helper.In.x);
 | 
				
			||||||
		sechcosh = cosh(helper.In.x);
 | 
							sechcosh = std::cosh(helper.In.x);
 | 
				
			||||||
		sechden = 2 / (cos(2 * helper.In.y) + cosh(2 * helper.In.x));
 | 
							sechden = 2 / Zeps(std::cos(2 * helper.In.y) + std::cosh(2 * helper.In.x));
 | 
				
			||||||
		helper.Out.x = m_Weight * sechden * sechcos * sechcosh;
 | 
							helper.Out.x = m_Weight * sechden * sechcos * sechcosh;
 | 
				
			||||||
		helper.Out.y = -(m_Weight * sechden * sechsin * sechsinh);
 | 
							helper.Out.y = -(m_Weight * sechden * sechsin * sechsinh);
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5750,7 +5797,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t sechcos = cos(vIn.y);\n"
 | 
							   << "\t\treal_t sechcos = cos(vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t sechsinh = sinh(vIn.x);\n"
 | 
							   << "\t\treal_t sechsinh = sinh(vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t sechcosh = cosh(vIn.x);\n"
 | 
							   << "\t\treal_t sechcosh = cosh(vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t sechden = (real_t)(2.0) / (cos((real_t)(2.0) * vIn.y) + cosh((real_t)(2.0) * vIn.x));\n"
 | 
							   << "\t\treal_t sechden = (real_t)(2.0) / Zeps(cos((real_t)(2.0) * vIn.y) + cosh((real_t)(2.0) * vIn.x));\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * sechden * sechcos * sechcosh;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * sechden * sechcos * sechcosh;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = -(xform->m_VariationWeights[" << varIndex << "] * sechden * sechsin * sechsinh);\n"
 | 
							   << "\t\tvOut.y = -(xform->m_VariationWeights[" << varIndex << "] * sechden * sechsin * sechsinh);\n"
 | 
				
			||||||
@ -5758,6 +5805,11 @@ public:
 | 
				
			|||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -5777,7 +5829,7 @@ public:
 | 
				
			|||||||
		sincos(helper.In.y, &cschsin, &cschcos);
 | 
							sincos(helper.In.y, &cschsin, &cschcos);
 | 
				
			||||||
		cschsinh = std::sinh(helper.In.x);
 | 
							cschsinh = std::sinh(helper.In.x);
 | 
				
			||||||
		cschcosh = std::cosh(helper.In.x);
 | 
							cschcosh = std::cosh(helper.In.x);
 | 
				
			||||||
		cschden = 2 / (std::cosh(2 * helper.In.x) - std::cos(2 * helper.In.y));
 | 
							cschden = 2 / Zeps(std::cosh(2 * helper.In.x) - std::cos(2 * helper.In.y));
 | 
				
			||||||
		helper.Out.x = m_Weight * cschden * cschsinh * cschcos;
 | 
							helper.Out.x = m_Weight * cschden * cschsinh * cschcos;
 | 
				
			||||||
		helper.Out.y = -(m_Weight * cschden * cschcosh * cschsin);
 | 
							helper.Out.y = -(m_Weight * cschden * cschcosh * cschsin);
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5792,7 +5844,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t cschcos = cos(vIn.y);\n"
 | 
							   << "\t\treal_t cschcos = cos(vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t cschsinh = sinh(vIn.x);\n"
 | 
							   << "\t\treal_t cschsinh = sinh(vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t cschcosh = cosh(vIn.x);\n"
 | 
							   << "\t\treal_t cschcosh = cosh(vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t cschden = (real_t)(2.0) / (cosh((real_t)(2.0) * vIn.x) - cos((real_t)(2.0) * vIn.y));\n"
 | 
							   << "\t\treal_t cschden = (real_t)(2.0) / Zeps(cosh((real_t)(2.0) * vIn.x) - cos((real_t)(2.0) * vIn.y));\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * cschden * cschsinh * cschcos;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * cschden * cschsinh * cschcos;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = -(xform->m_VariationWeights[" << varIndex << "] * cschden * cschcosh * cschsin);\n"
 | 
							   << "\t\tvOut.y = -(xform->m_VariationWeights[" << varIndex << "] * cschden * cschcosh * cschsin);\n"
 | 
				
			||||||
@ -5800,6 +5852,11 @@ public:
 | 
				
			|||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -5817,9 +5874,9 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T cothsin, cothcos, cothsinh, cothcosh, cothden;
 | 
							T cothsin, cothcos, cothsinh, cothcosh, cothden;
 | 
				
			||||||
		sincos(2 * helper.In.y, &cothsin, &cothcos);
 | 
							sincos(2 * helper.In.y, &cothsin, &cothcos);
 | 
				
			||||||
		cothsinh = sinh(2 * helper.In.x);
 | 
							cothsinh = std::sinh(2 * helper.In.x);
 | 
				
			||||||
		cothcosh = cosh(2 * helper.In.x);
 | 
							cothcosh = std::cosh(2 * helper.In.x);
 | 
				
			||||||
		cothden = 1 / (cothcosh - cothcos);
 | 
							cothden = 1 / Zeps(cothcosh - cothcos);
 | 
				
			||||||
		helper.Out.x = m_Weight * cothden * cothsinh;
 | 
							helper.Out.x = m_Weight * cothden * cothsinh;
 | 
				
			||||||
		helper.Out.y = m_Weight * cothden * cothsin;
 | 
							helper.Out.y = m_Weight * cothden * cothsin;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -5834,7 +5891,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t cothcos = cos((real_t)(2.0) * vIn.y);\n"
 | 
							   << "\t\treal_t cothcos = cos((real_t)(2.0) * vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t cothsinh = sinh((real_t)(2.0) * vIn.x);\n"
 | 
							   << "\t\treal_t cothsinh = sinh((real_t)(2.0) * vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t cothcosh = cosh((real_t)(2.0) * vIn.x);\n"
 | 
							   << "\t\treal_t cothcosh = cosh((real_t)(2.0) * vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t cothden = (real_t)(1.0) / (cothcosh - cothcos);\n"
 | 
							   << "\t\treal_t cothden = (real_t)(1.0) / Zeps(cothcosh - cothcos);\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * cothden * cothsinh;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * cothden * cothsinh;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * cothden * cothsin;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * cothden * cothsin;\n"
 | 
				
			||||||
@ -5842,6 +5899,11 @@ public:
 | 
				
			|||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -5862,8 +5924,8 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T s = std::sin(m_Freq * helper.In.x);
 | 
							T s = std::sin(m_Freq * helper.In.x);
 | 
				
			||||||
		T t = std::sin(m_Freq * helper.In.y);
 | 
							T t = std::sin(m_Freq * helper.In.y);
 | 
				
			||||||
		T dy = helper.In.y + m_AugerWeight * (m_Scale * s / 2 + std::abs(helper.In.y) * s);
 | 
							T dy = helper.In.y + m_AugerWeight * (m_Scale * s / Zeps(2 + std::abs(helper.In.y) * s));
 | 
				
			||||||
		T dx = helper.In.x + m_AugerWeight * (m_Scale * t / 2 + std::abs(helper.In.x) * t);
 | 
							T dx = helper.In.x + m_AugerWeight * (m_Scale * t / Zeps(2 + std::abs(helper.In.x) * t));
 | 
				
			||||||
		helper.Out.x = m_Weight * (helper.In.x + m_Symmetry * (dx - helper.In.x));
 | 
							helper.Out.x = m_Weight * (helper.In.x + m_Symmetry * (dx - helper.In.x));
 | 
				
			||||||
		helper.Out.y = m_Weight * dy;
 | 
							helper.Out.y = m_Weight * dy;
 | 
				
			||||||
		helper.Out.z = m_Weight * helper.In.z;
 | 
							helper.Out.z = m_Weight * helper.In.z;
 | 
				
			||||||
@ -5882,8 +5944,8 @@ public:
 | 
				
			|||||||
		ss << "\t{\n"
 | 
							ss << "\t{\n"
 | 
				
			||||||
		   << "\t\treal_t s = sin(" << freq << " * vIn.x);\n"
 | 
							   << "\t\treal_t s = sin(" << freq << " * vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t t = sin(" << freq << " * vIn.y);\n"
 | 
							   << "\t\treal_t t = sin(" << freq << " * vIn.y);\n"
 | 
				
			||||||
		   << "\t\treal_t dy = vIn.y + " << augerWeight << " * (" << scale << " * s / (real_t)(2.0) + fabs(vIn.y) * s);\n"
 | 
							   << "\t\treal_t dy = vIn.y + " << augerWeight << " * (" << scale << " * s / Zeps((real_t)(2.0) + fabs(vIn.y) * s));\n"
 | 
				
			||||||
		   << "\t\treal_t dx = vIn.x + " << augerWeight << " * (" << scale << " * t / (real_t)(2.0) + fabs(vIn.x) * t);\n"
 | 
							   << "\t\treal_t dx = vIn.x + " << augerWeight << " * (" << scale << " * t / Zeps((real_t)(2.0) + fabs(vIn.x) * t));\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (vIn.x + " << symmetry << " * (dx - vIn.x));\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (vIn.x + " << symmetry << " * (dx - vIn.x));\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * dy;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * dy;\n"
 | 
				
			||||||
@ -5900,6 +5962,11 @@ public:
 | 
				
			|||||||
		m_Scale       = rand.Frand01<T>();
 | 
							m_Scale       = rand.Frand01<T>();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -5943,7 +6010,7 @@ public:
 | 
				
			|||||||
			frac = 1;
 | 
								frac = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		T avgr = m_Weight * (m_Spr * std::sqrt(std::sqrt(yy + SQR(xpw)) / frac));
 | 
							T avgr = m_Weight * (m_Spr * std::sqrt(std::sqrt(yy + SQR(xpw)) / frac));
 | 
				
			||||||
		T avga = (atan2(helper.In.y, xmw) - atan2(helper.In.y, xpw)) * T(0.5);
 | 
							T avga = (std::atan2(helper.In.y, xmw) - std::atan2(helper.In.y, xpw)) * T(0.5);
 | 
				
			||||||
		helper.Out.x = avgr * std::cos(avga);
 | 
							helper.Out.x = avgr * std::cos(avga);
 | 
				
			||||||
		helper.Out.y = avgr * std::sin(avga);
 | 
							helper.Out.y = avgr * std::sin(avga);
 | 
				
			||||||
		helper.Out.z = helper.In.z;//Apo does not use weight, sums only z. Sum here for reg, else assign.
 | 
							helper.Out.z = helper.In.z;//Apo does not use weight, sums only z. Sum here for reg, else assign.
 | 
				
			||||||
 | 
				
			|||||||
@ -155,7 +155,7 @@ public:
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				lx *= m_G2;
 | 
									lx *= m_G2;
 | 
				
			||||||
				ly *= m_G2;
 | 
									ly *= m_G2;
 | 
				
			||||||
				T r = m_Rfactor / ((SQR(lx) + SQR(ly)) / 4 + 1);
 | 
									T r = m_Rfactor / Zeps((SQR(lx) + SQR(ly)) / 4 + 1);
 | 
				
			||||||
				lx *= r;
 | 
									lx *= r;
 | 
				
			||||||
				ly *= r;
 | 
									ly *= r;
 | 
				
			||||||
				r = (SQR(lx) + SQR(ly)) / m_R2;
 | 
									r = (SQR(lx) + SQR(ly)) / m_R2;
 | 
				
			||||||
@ -211,7 +211,7 @@ public:
 | 
				
			|||||||
		   << "\t\t		lx *= " << g2 << ";\n"
 | 
							   << "\t\t		lx *= " << g2 << ";\n"
 | 
				
			||||||
		   << "\t\t		ly *= " << g2 << ";\n"
 | 
							   << "\t\t		ly *= " << g2 << ";\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\t		real_t r = " << rfactor << " / ((SQR(lx) + SQR(ly)) / 4 + 1);\n"
 | 
							   << "\t\t		real_t r = " << rfactor << " / Zeps((SQR(lx) + SQR(ly)) / 4 + 1);\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\t		lx *= r;\n"
 | 
							   << "\t\t		lx *= r;\n"
 | 
				
			||||||
		   << "\t\t		ly *= r;\n"
 | 
							   << "\t\t		ly *= r;\n"
 | 
				
			||||||
@ -245,10 +245,15 @@ public:
 | 
				
			|||||||
		else
 | 
							else
 | 
				
			||||||
			maxBubble *= (1 / (SQR(maxBubble) / 4 + 1));
 | 
								maxBubble *= (1 / (SQR(maxBubble) / 4 + 1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m_R2 = SQR(radius);
 | 
							m_R2 = Zeps(SQR(radius));
 | 
				
			||||||
		m_Rfactor = radius / maxBubble;
 | 
							m_Rfactor = radius / maxBubble;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -1957,7 +1962,7 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		T s, c;
 | 
							T s, c;
 | 
				
			||||||
		T avgr = m_Weight * (std::sqrt(SQR(helper.In.y) + SQR(helper.In.x + 1)) / std::sqrt(SQR(helper.In.y) + SQR(helper.In.x - 1)));
 | 
							T avgr = m_Weight * (std::sqrt(SQR(helper.In.y) + SQR(helper.In.x + 1)) / std::sqrt(SQR(helper.In.y) + SQR(helper.In.x - 1)));
 | 
				
			||||||
		T avga = (atan2(helper.In.y, helper.In.x - 1) - atan2(helper.In.y, helper.In.x + 1)) / 2;
 | 
							T avga = (atan2(helper.In.y, helper.In.x - 1) - std::atan2(helper.In.y, helper.In.x + 1)) / 2;
 | 
				
			||||||
		sincos(avga, &s, &c);
 | 
							sincos(avga, &s, &c);
 | 
				
			||||||
		helper.Out.x = avgr * c;
 | 
							helper.Out.x = avgr * c;
 | 
				
			||||||
		helper.Out.y = avgr * s;
 | 
							helper.Out.y = avgr * s;
 | 
				
			||||||
@ -2033,7 +2038,7 @@ public:
 | 
				
			|||||||
	virtual void Precalc() override
 | 
						virtual void Precalc() override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		m_K = T(0.5) * std::log(Zeps(SQR(m_Real) + SQR(m_Imag)));//Original used 1e-300, which isn't representable with a float.
 | 
							m_K = T(0.5) * std::log(Zeps(SQR(m_Real) + SQR(m_Imag)));//Original used 1e-300, which isn't representable with a float.
 | 
				
			||||||
		m_T = atan2(m_Imag, m_Real);
 | 
							m_T = std::atan2(m_Imag, m_Real);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
@ -2958,7 +2963,7 @@ public:
 | 
				
			|||||||
		T r2 = helper.m_PrecalcSumSquares + helper.In.z;
 | 
							T r2 = helper.m_PrecalcSumSquares + helper.In.z;
 | 
				
			||||||
		T x2cx = m_C2x * helper.In.x;
 | 
							T x2cx = m_C2x * helper.In.x;
 | 
				
			||||||
		T y2cy = m_C2y * helper.In.y;
 | 
							T y2cy = m_C2y * helper.In.y;
 | 
				
			||||||
		T d = m_Weight / (m_C2 * r2 + x2cx - y2cy + 1);
 | 
							T d = m_Weight / Zeps(m_C2 * r2 + x2cx - y2cy + 1);
 | 
				
			||||||
		helper.Out.x = d * (helper.In.x * m_S2x - m_Cx * ( y2cy - r2 - 1));
 | 
							helper.Out.x = d * (helper.In.x * m_S2x - m_Cx * ( y2cy - r2 - 1));
 | 
				
			||||||
		helper.Out.y = d * (helper.In.y * m_S2y + m_Cy * (-x2cx - r2 - 1));
 | 
							helper.Out.y = d * (helper.In.y * m_S2y + m_Cy * (-x2cx - r2 - 1));
 | 
				
			||||||
		helper.Out.z = d * (helper.In.z * m_S2z);
 | 
							helper.Out.z = d * (helper.In.z * m_S2z);
 | 
				
			||||||
@ -2987,7 +2992,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t r2 = precalcSumSquares + vIn.z;\n"
 | 
							   << "\t\treal_t r2 = precalcSumSquares + vIn.z;\n"
 | 
				
			||||||
		   << "\t\treal_t x2cx = " << c2x << " * vIn.x;\n"
 | 
							   << "\t\treal_t x2cx = " << c2x << " * vIn.x;\n"
 | 
				
			||||||
		   << "\t\treal_t y2cy = " << c2y << " * vIn.y;\n"
 | 
							   << "\t\treal_t y2cy = " << c2y << " * vIn.y;\n"
 | 
				
			||||||
		   << "\t\treal_t d = xform->m_VariationWeights[" << varIndex << "] / (" << c2 << " * r2 + x2cx - y2cy + 1);\n"
 | 
							   << "\t\treal_t d = xform->m_VariationWeights[" << varIndex << "] / Zeps(" << c2 << " * r2 + x2cx - y2cy + 1);\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = d * (vIn.x * " << s2x << " - " << cx << "* ( y2cy - r2 - 1));\n"
 | 
							   << "\t\tvOut.x = d * (vIn.x * " << s2x << " - " << cx << "* ( y2cy - r2 - 1));\n"
 | 
				
			||||||
		   << "\t\tvOut.y = d * (vIn.y * " << s2y << " + " << cy << "* (-x2cx - r2 - 1));\n"
 | 
							   << "\t\tvOut.y = d * (vIn.y * " << s2y << " + " << cy << "* (-x2cx - r2 - 1));\n"
 | 
				
			||||||
@ -3018,6 +3023,11 @@ public:
 | 
				
			|||||||
		m_S2z = 1 - SQR(m_Cy) - SQR(m_Cx);
 | 
							m_S2z = 1 - SQR(m_Cy) - SQR(m_Cx);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -3078,7 +3088,7 @@ public:
 | 
				
			|||||||
		T r2 = helper.m_PrecalcSumSquares + SQR(helper.In.z);
 | 
							T r2 = helper.m_PrecalcSumSquares + SQR(helper.In.z);
 | 
				
			||||||
		T x2cx = 2 * cx * helper.In.x;
 | 
							T x2cx = 2 * cx * helper.In.x;
 | 
				
			||||||
		T y2cy = 2 * cy * helper.In.x;
 | 
							T y2cy = 2 * cy * helper.In.x;
 | 
				
			||||||
		T d = m_Weight / (m_C2 * r2 + x2cx - y2cy + 1);
 | 
							T d = m_Weight / Zeps(m_C2 * r2 + x2cx - y2cy + 1);
 | 
				
			||||||
		helper.Out.x = d * (helper.In.x * s2x - cx * ( y2cy - r2 - 1));
 | 
							helper.Out.x = d * (helper.In.x * s2x - cx * ( y2cy - r2 - 1));
 | 
				
			||||||
		helper.Out.y = d * (helper.In.y * s2y + cy * (-x2cx - r2 - 1));
 | 
							helper.Out.y = d * (helper.In.y * s2y + cy * (-x2cx - r2 - 1));
 | 
				
			||||||
		helper.Out.z = d * (helper.In.z * m_S2z);
 | 
							helper.Out.z = d * (helper.In.z * m_S2z);
 | 
				
			||||||
@ -3105,7 +3115,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t r2 = precalcSumSquares + SQR(vIn.z);\n"
 | 
							   << "\t\treal_t r2 = precalcSumSquares + SQR(vIn.z);\n"
 | 
				
			||||||
		   << "\t\treal_t x2cx = 2 * cx * vIn.x;\n"
 | 
							   << "\t\treal_t x2cx = 2 * cx * vIn.x;\n"
 | 
				
			||||||
		   << "\t\treal_t y2cy = 2 * cy * vIn.x;\n"
 | 
							   << "\t\treal_t y2cy = 2 * cy * vIn.x;\n"
 | 
				
			||||||
		   << "\t\treal_t d = xform->m_VariationWeights[" << varIndex << "] / (" << c2 << " * r2 + x2cx - y2cy + 1);\n"
 | 
							   << "\t\treal_t d = xform->m_VariationWeights[" << varIndex << "] / Zeps(" << c2 << " * r2 + x2cx - y2cy + 1);\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = d * (vIn.x * s2x - cx * ( y2cy - r2 - 1));\n"
 | 
							   << "\t\tvOut.x = d * (vIn.x * s2x - cx * ( y2cy - r2 - 1));\n"
 | 
				
			||||||
		   << "\t\tvOut.y = d * (vIn.y * s2y + cy * (-x2cx - r2 - 1));\n"
 | 
							   << "\t\tvOut.y = d * (vIn.y * s2y + cy * (-x2cx - r2 - 1));\n"
 | 
				
			||||||
@ -3131,6 +3141,11 @@ public:
 | 
				
			|||||||
		m_S2z = 1 - m_C2;
 | 
							m_S2z = 1 - m_C2;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -3811,10 +3826,10 @@ public:
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			if (helper.In.x >= 0)
 | 
								if (helper.In.x >= 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				xo = (r + 1) / (2 * helper.In.x);
 | 
									xo = (r + 1) / Zeps(2 * helper.In.x);
 | 
				
			||||||
				ro = std::sqrt(SQR(helper.In.x - xo) + SQR(helper.In.y));
 | 
									ro = std::sqrt(SQR(helper.In.x - xo) + SQR(helper.In.y));
 | 
				
			||||||
				theta = atan2(T(1), ro);
 | 
									theta = std::atan2(T(1), ro);
 | 
				
			||||||
				a = fmod(m_In * theta + atan2(helper.In.y, xo - helper.In.x) + theta, 2 * theta) - theta;
 | 
									a = fmod(m_In * theta + std::atan2(helper.In.y, xo - helper.In.x) + theta, 2 * theta) - theta;
 | 
				
			||||||
				sincos(a, &s, &c);
 | 
									sincos(a, &s, &c);
 | 
				
			||||||
				helper.Out.x = m_Weight * (xo - c * ro);
 | 
									helper.Out.x = m_Weight * (xo - c * ro);
 | 
				
			||||||
				helper.Out.y = m_Weight * s * ro;
 | 
									helper.Out.y = m_Weight * s * ro;
 | 
				
			||||||
@ -3823,8 +3838,8 @@ public:
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				xo = - (r + 1) / (2 * helper.In.x);
 | 
									xo = - (r + 1) / (2 * helper.In.x);
 | 
				
			||||||
				ro = std::sqrt(SQR(-helper.In.x - xo) + SQR(helper.In.y));
 | 
									ro = std::sqrt(SQR(-helper.In.x - xo) + SQR(helper.In.y));
 | 
				
			||||||
				theta = atan2(T(1), ro);
 | 
									theta = std::atan2(T(1), ro);
 | 
				
			||||||
				a = fmod(m_In * theta + atan2(helper.In.y, xo + helper.In.x) + theta, 2 * theta) - theta;
 | 
									a = fmod(m_In * theta + std::atan2(helper.In.y, xo + helper.In.x) + theta, 2 * theta) - theta;
 | 
				
			||||||
				sincos(a, &s, &c);
 | 
									sincos(a, &s, &c);
 | 
				
			||||||
				helper.Out.x = -(m_Weight * (xo - c * ro));
 | 
									helper.Out.x = -(m_Weight * (xo - c * ro));
 | 
				
			||||||
				helper.Out.y = m_Weight * s * ro;
 | 
									helper.Out.y = m_Weight * s * ro;
 | 
				
			||||||
@ -3840,10 +3855,10 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			if (x >= 0)
 | 
								if (x >= 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				xo = (SQR(x) + SQR(y) + 1) / (2 * x);
 | 
									xo = (SQR(x) + SQR(y) + 1) / Zeps(2 * x);
 | 
				
			||||||
				ro = std::sqrt(SQR(x - xo) + SQR(y));
 | 
									ro = std::sqrt(SQR(x - xo) + SQR(y));
 | 
				
			||||||
				theta = std::atan2(T(1), ro);
 | 
									theta = std::atan2(T(1), ro);
 | 
				
			||||||
				a = fmod(m_Out * theta + atan2(y, xo - x) + theta, 2 * theta) - theta;
 | 
									a = fmod(m_Out * theta + std::atan2(y, xo - x) + theta, 2 * theta) - theta;
 | 
				
			||||||
				sincos(a, &s, &c);
 | 
									sincos(a, &s, &c);
 | 
				
			||||||
				x = (xo - c * ro);
 | 
									x = (xo - c * ro);
 | 
				
			||||||
				y =  s * ro;
 | 
									y =  s * ro;
 | 
				
			||||||
@ -3895,7 +3910,7 @@ public:
 | 
				
			|||||||
		   << "\t\t{\n"
 | 
							   << "\t\t{\n"
 | 
				
			||||||
		   << "\t\t	if (vIn.x >= 0)\n"
 | 
							   << "\t\t	if (vIn.x >= 0)\n"
 | 
				
			||||||
		   << "\t\t	{\n"
 | 
							   << "\t\t	{\n"
 | 
				
			||||||
		   << "\t\t		xo = (r + 1) / (2 * vIn.x);\n"
 | 
							   << "\t\t		xo = (r + 1) / Zeps(2 * vIn.x);\n"
 | 
				
			||||||
		   << "\t\t		ro = sqrt(SQR(vIn.x - xo) + SQR(vIn.y));\n"
 | 
							   << "\t\t		ro = sqrt(SQR(vIn.x - xo) + SQR(vIn.y));\n"
 | 
				
			||||||
		   << "\t\t		theta = atan2(1, ro);\n"
 | 
							   << "\t\t		theta = atan2(1, ro);\n"
 | 
				
			||||||
		   << "\t\t		a = fmod(" << in << " * theta + atan2(vIn.y, xo - vIn.x) + theta, 2 * theta) - theta;\n"
 | 
							   << "\t\t		a = fmod(" << in << " * theta + atan2(vIn.y, xo - vIn.x) + theta, 2 * theta) - theta;\n"
 | 
				
			||||||
@ -3928,7 +3943,7 @@ public:
 | 
				
			|||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\t	if (x >= 0)\n"
 | 
							   << "\t\t	if (x >= 0)\n"
 | 
				
			||||||
		   << "\t\t	{\n"
 | 
							   << "\t\t	{\n"
 | 
				
			||||||
		   << "\t\t		xo = (SQR(x) + SQR(y) + 1) / (2 * x);\n"
 | 
							   << "\t\t		xo = (SQR(x) + SQR(y) + 1) / Zeps(2 * x);\n"
 | 
				
			||||||
		   << "\t\t		ro = sqrt(SQR(x - xo) + SQR(y));\n"
 | 
							   << "\t\t		ro = sqrt(SQR(x - xo) + SQR(y));\n"
 | 
				
			||||||
		   << "\t\t		theta = atan2(1 , ro);\n"
 | 
							   << "\t\t		theta = atan2(1 , ro);\n"
 | 
				
			||||||
		   << "\t\t		a = fmod(" << out << " * theta + atan2(y, xo - x) + theta, 2 * theta) - theta;\n"
 | 
							   << "\t\t		a = fmod(" << out << " * theta + atan2(y, xo - x) + theta, 2 * theta) - theta;\n"
 | 
				
			||||||
@ -3971,6 +3986,11 @@ public:
 | 
				
			|||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -4001,10 +4021,10 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T x = m_C1x + (SQR(m_C1r) * (helper.In.x - m_C1x)) / (SQR(helper.In.x - m_C1x) + SQR(helper.In.y - m_C1y));
 | 
							T x = m_C1x + (SQR(m_C1r) * (helper.In.x - m_C1x)) / Zeps(Sqr(helper.In.x - m_C1x) + Sqr(helper.In.y - m_C1y));
 | 
				
			||||||
		T y = m_C1y + (SQR(m_C1r) * (helper.In.y - m_C1y)) / (SQR(helper.In.x - m_C1x) + SQR(helper.In.y - m_C1y));
 | 
							T y = m_C1y + (SQR(m_C1r) * (helper.In.y - m_C1y)) / Zeps(Sqr(helper.In.x - m_C1x) + Sqr(helper.In.y - m_C1y));
 | 
				
			||||||
		helper.Out.x = m_C2x + (SQR(m_C2r) * (x - m_C2x)) / (SQR(x - m_C2x) + SQR(y - m_C2y));
 | 
							helper.Out.x = m_C2x + (SQR(m_C2r) * (x - m_C2x))  / Zeps(Sqr(x - m_C2x) + Sqr(y - m_C2y));
 | 
				
			||||||
		helper.Out.y = m_C2y + (SQR(m_C2r) * (y - m_C2y)) / (SQR(x - m_C2x) + SQR(y - m_C2y));
 | 
							helper.Out.y = m_C2y + (SQR(m_C2r) * (y - m_C2y))  / Zeps(Sqr(x - m_C2x) + Sqr(y - m_C2y));
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -4025,11 +4045,11 @@ public:
 | 
				
			|||||||
		string c1d = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
							string c1d = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
				
			||||||
		string c2d = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
							string c2d = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
				
			||||||
		ss << "\t{\n"
 | 
							ss << "\t{\n"
 | 
				
			||||||
		   << "\t\treal_t x = " << c1x << " + (SQR(" << c1r << ") * (vIn.x - " << c1x << ")) / (SQR(vIn.x - " << c1x << ") + SQR(vIn.y - " << c1y << "));\n"
 | 
							   << "\t\treal_t x = " << c1x << " + (SQR(" << c1r << ") * (vIn.x - " << c1x << ")) / Zeps(Sqr(vIn.x - " << c1x << ") + Sqr(vIn.y - " << c1y << "));\n"
 | 
				
			||||||
		   << "\t\treal_t y = " << c1y << " + (SQR(" << c1r << ") * (vIn.y - " << c1y << ")) / (SQR(vIn.x - " << c1x << ") + SQR(vIn.y - " << c1y << "));\n"
 | 
							   << "\t\treal_t y = " << c1y << " + (SQR(" << c1r << ") * (vIn.y - " << c1y << ")) / Zeps(Sqr(vIn.x - " << c1x << ") + Sqr(vIn.y - " << c1y << "));\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = " << c2x << " + (SQR(" << c2r << ") * (x - " << c2x << ")) / (SQR(x - " << c2x << ") + SQR(y - " << c2y << "));\n"
 | 
							   << "\t\tvOut.x = " << c2x << " + (SQR(" << c2r << ") * (x - " << c2x << ")) / Zeps(Sqr(x - " << c2x << ") + Sqr(y - " << c2y << "));\n"
 | 
				
			||||||
		   << "\t\tvOut.y = " << c2y << " + (SQR(" << c2r << ") * (y - " << c2y << ")) / (SQR(x - " << c2x << ") + SQR(y - " << c2y << "));\n"
 | 
							   << "\t\tvOut.y = " << c2y << " + (SQR(" << c2r << ") * (y - " << c2y << ")) / Zeps(Sqr(x - " << c2x << ") + Sqr(y - " << c2y << "));\n"
 | 
				
			||||||
		   << "\t\tvOut.z = " << DefaultZCl()
 | 
							   << "\t\tvOut.z = " << DefaultZCl()
 | 
				
			||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
@ -4045,6 +4065,11 @@ public:
 | 
				
			|||||||
		m_C2y = m_C2d * std::sin(fmod(m_C2a, T(M_PI)));
 | 
							m_C2y = m_C2d * std::sin(fmod(m_C2a, T(M_PI)));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Sqr", "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -4358,7 +4383,7 @@ public:
 | 
				
			|||||||
		T ti = m_T3 * (3 * xsqr * helper.In.y - ycb) + m_T2 * 2 * helper.In.x * helper.In.y + m_T1 * helper.In.y;
 | 
							T ti = m_T3 * (3 * xsqr * helper.In.y - ycb) + m_T2 * 2 * helper.In.x * helper.In.y + m_T1 * helper.In.y;
 | 
				
			||||||
		T br = m_B3 * (xcb - 3 * helper.In.x * ysqr) + m_B2 * (xsqr - ysqr) + m_B1 * helper.In.x + m_Bc;
 | 
							T br = m_B3 * (xcb - 3 * helper.In.x * ysqr) + m_B2 * (xsqr - ysqr) + m_B1 * helper.In.x + m_Bc;
 | 
				
			||||||
		T bi = m_B3 * (3 * xsqr * helper.In.y - ycb) + m_B2 * 2 * helper.In.x * helper.In.y + m_B1 * helper.In.y;
 | 
							T bi = m_B3 * (3 * xsqr * helper.In.y - ycb) + m_B2 * 2 * helper.In.x * helper.In.y + m_B1 * helper.In.y;
 | 
				
			||||||
		T r3den = 1 / (br * br + bi * bi);
 | 
							T r3den = 1 / Zeps(br * br + bi * bi);
 | 
				
			||||||
		helper.Out.x = m_Weight * (tr * br + ti * bi) * r3den;
 | 
							helper.Out.x = m_Weight * (tr * br + ti * bi) * r3den;
 | 
				
			||||||
		helper.Out.y = m_Weight * (ti * br - tr * bi) * r3den;
 | 
							helper.Out.y = m_Weight * (ti * br - tr * bi) * r3den;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
@ -4390,7 +4415,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t br = " << b3 << " * (xcb - 3 * vIn.x * ysqr) + " << b2 << " * (xsqr - ysqr) + " << b1 << " * vIn.x + " << bc << ";\n"
 | 
							   << "\t\treal_t br = " << b3 << " * (xcb - 3 * vIn.x * ysqr) + " << b2 << " * (xsqr - ysqr) + " << b1 << " * vIn.x + " << bc << ";\n"
 | 
				
			||||||
		   << "\t\treal_t bi = " << b3 << " * (3 * xsqr * vIn.y - ycb) + " << b2 << " * 2 * vIn.x * vIn.y + " << b1 << " * vIn.y;\n"
 | 
							   << "\t\treal_t bi = " << b3 << " * (3 * xsqr * vIn.y - ycb) + " << b2 << " * 2 * vIn.x * vIn.y + " << b1 << " * vIn.y;\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\treal_t r3den = 1 / (br * br + bi * bi);\n"
 | 
							   << "\t\treal_t r3den = 1 / Zeps(br * br + bi * bi);\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (tr * br + ti * bi) * r3den;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (tr * br + ti * bi) * r3den;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (ti * br - tr * bi) * r3den;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * (ti * br - tr * bi) * r3den;\n"
 | 
				
			||||||
@ -4399,6 +4424,11 @@ public:
 | 
				
			|||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -4663,6 +4693,11 @@ public:
 | 
				
			|||||||
		m_Vv = std::abs(m_Weight);
 | 
							m_Vv = std::abs(m_Weight);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -5192,7 +5227,7 @@ public:
 | 
				
			|||||||
		T dot11 = SQR(m_C) + SQR(m_D);//v1 * v1.
 | 
							T dot11 = SQR(m_C) + SQR(m_D);//v1 * v1.
 | 
				
			||||||
		T dot12 = m_C * helper.In.x + m_D * helper.In.y;//v1 * v2.
 | 
							T dot12 = m_C * helper.In.x + m_D * helper.In.y;//v1 * v2.
 | 
				
			||||||
		//Compute inverse denomiator.
 | 
							//Compute inverse denomiator.
 | 
				
			||||||
		T invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
 | 
							T invDenom = 1 / Zeps(dot00 * dot11 - dot01 * dot01);
 | 
				
			||||||
		//Now we can pull [u,v] as the barycentric coordinates of the point
 | 
							//Now we can pull [u,v] as the barycentric coordinates of the point
 | 
				
			||||||
		//P in the triangle [A, B, C].
 | 
							//P in the triangle [A, B, C].
 | 
				
			||||||
		T u = (dot11 * dot02 - dot01 * dot12) * invDenom;
 | 
							T u = (dot11 * dot02 - dot01 * dot12) * invDenom;
 | 
				
			||||||
@ -5221,7 +5256,7 @@ public:
 | 
				
			|||||||
		   << "\t\treal_t dot02 = " << a << " * vIn.x + " << b << " * vIn.y;\n"
 | 
							   << "\t\treal_t dot02 = " << a << " * vIn.x + " << b << " * vIn.y;\n"
 | 
				
			||||||
		   << "\t\treal_t dot11 = SQR(" << c << ") + SQR(" << d << ");\n"
 | 
							   << "\t\treal_t dot11 = SQR(" << c << ") + SQR(" << d << ");\n"
 | 
				
			||||||
		   << "\t\treal_t dot12 = " << c << " * vIn.x + " << d << " * vIn.y;\n"
 | 
							   << "\t\treal_t dot12 = " << c << " * vIn.x + " << d << " * vIn.y;\n"
 | 
				
			||||||
		   << "\t\treal_t invDenom = (real_t)(1.0) / (dot00 * dot11 - dot01 * dot01);\n"
 | 
							   << "\t\treal_t invDenom = (real_t)(1.0) / Zeps(dot00 * dot11 - dot01 * dot01);\n"
 | 
				
			||||||
		   << "\t\treal_t u = (dot11 * dot02 - dot01 * dot12) * invDenom;\n"
 | 
							   << "\t\treal_t u = (dot11 * dot02 - dot01 * dot12) * invDenom;\n"
 | 
				
			||||||
		   << "\t\treal_t v = (dot00 * dot12 - dot01 * dot02) * invDenom;\n"
 | 
							   << "\t\treal_t v = (dot00 * dot12 - dot01 * dot02) * invDenom;\n"
 | 
				
			||||||
		   << "\t\treal_t um = sqrt(SQR(u) + SQR(vIn.x)) * Sign(u);\n"
 | 
							   << "\t\treal_t um = sqrt(SQR(u) + SQR(vIn.x)) * Sign(u);\n"
 | 
				
			||||||
@ -5236,7 +5271,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return vector<string> { "Sign" };
 | 
							return vector<string> { "Sign", "Zeps" };
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
 | 
				
			|||||||
@ -20,9 +20,9 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T temp = 1 / Zeps(cos(helper.In.y)) + m_Effect * T(M_PI);
 | 
							T temp = 1 / Zeps(std::cos(helper.In.y)) + m_Effect * T(M_PI);
 | 
				
			||||||
		helper.Out.x = m_Weight * (tanh(helper.In.x) * temp);
 | 
							helper.Out.x = m_Weight * (std::tanh(helper.In.x) * temp);
 | 
				
			||||||
		helper.Out.y = m_Weight * (tanh(helper.In.y) * temp);
 | 
							helper.Out.y = m_Weight * (std::tanh(helper.In.y) * temp);
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1111,7 +1111,7 @@ public:
 | 
				
			|||||||
		T coeff = std::abs(helper.In.z);
 | 
							T coeff = std::abs(helper.In.z);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (coeff != 0 && m_Power != 1)
 | 
							if (coeff != 0 && m_Power != 1)
 | 
				
			||||||
			coeff = std::exp(log(coeff) * m_Power);
 | 
								coeff = std::exp(std::log(coeff) * m_Power);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		helper.Out.x = m_Weight * (helper.m_TransX + helper.In.x * coeff);
 | 
							helper.Out.x = m_Weight * (helper.m_TransX + helper.In.x * coeff);
 | 
				
			||||||
		helper.Out.y = m_Weight * (helper.m_TransY + helper.In.y * coeff);
 | 
							helper.Out.y = m_Weight * (helper.m_TransY + helper.In.y * coeff);
 | 
				
			||||||
@ -2258,7 +2258,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T dx, dy, r = m_Weight / (helper.m_PrecalcSumSquares + EPS);
 | 
							T dx, dy, r = m_Weight / Zeps(helper.m_PrecalcSumSquares);
 | 
				
			||||||
		int isXY = int(VarFuncs<T>::LRint(helper.In.x * m_InvSize) + VarFuncs<T>::LRint(helper.In.y * m_InvSize));
 | 
							int isXY = int(VarFuncs<T>::LRint(helper.In.x * m_InvSize) + VarFuncs<T>::LRint(helper.In.y * m_InvSize));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (isXY & 1)
 | 
							if (isXY & 1)
 | 
				
			||||||
@ -2289,7 +2289,7 @@ public:
 | 
				
			|||||||
		string rand    = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
							string rand    = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
				
			||||||
		string invSize = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
 | 
							string invSize = "parVars[" + ToUpper(m_Params[i++].Name()) + index;//Precalc.
 | 
				
			||||||
		ss << "\t{\n"
 | 
							ss << "\t{\n"
 | 
				
			||||||
		   << "\t\treal_t dx, dy, r = xform->m_VariationWeights[" << varIndex << "] / (precalcSumSquares + EPS);\n"
 | 
							   << "\t\treal_t dx, dy, r = xform->m_VariationWeights[" << varIndex << "] / Zeps(precalcSumSquares);\n"
 | 
				
			||||||
		   << "\t\tint isXY = LRint(vIn.x * " << invSize << ") + LRint(vIn.y * " << invSize << ");\n"
 | 
							   << "\t\tint isXY = LRint(vIn.x * " << invSize << ") + LRint(vIn.y * " << invSize << ");\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tif (isXY & 1)\n"
 | 
							   << "\t\tif (isXY & 1)\n"
 | 
				
			||||||
@ -2312,12 +2312,12 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return vector<string> { "LRint" };
 | 
							return vector<string> { "LRint", "Zeps" };
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual void Precalc() override
 | 
						virtual void Precalc() override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		m_InvSize = 1 / (m_Size + EPS);
 | 
							m_InvSize = 1 / Zeps(m_Size);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
@ -3468,8 +3468,8 @@ public:
 | 
				
			|||||||
			sigma = alt * m_PiCn + fmod(sigma - m_CaCn, m_PiCn);
 | 
								sigma = alt * m_PiCn + fmod(sigma - m_CaCn, m_PiCn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		T temp = std::cosh(tau) - std::cos(sigma);
 | 
							T temp = std::cosh(tau) - std::cos(sigma);
 | 
				
			||||||
		helper.Out.x = m_Weight * sinh(tau) / temp;
 | 
							helper.Out.x = m_Weight * std::sinh(tau) / temp;
 | 
				
			||||||
		helper.Out.y = m_Weight * sin(sigma) / temp;
 | 
							helper.Out.y = m_Weight * std::sin(sigma) / temp;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3791,7 +3791,7 @@ public:
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		helper.Out.x = m_Weight * xmax * std::cos(nu);
 | 
							helper.Out.x = m_Weight * xmax * std::cos(nu);
 | 
				
			||||||
		helper.Out.y = m_Weight * std::sqrt(xmax - 1) * std::sqrt(xmax + 1) * sin(nu);
 | 
							helper.Out.y = m_Weight * std::sqrt(xmax - 1) * std::sqrt(xmax + 1) * std::sin(nu);
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -592,8 +592,8 @@ public:
 | 
				
			|||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T d = Zeps(helper.m_PrecalcSumSquares);
 | 
							T d = Zeps(helper.m_PrecalcSumSquares);
 | 
				
			||||||
		helper.Out.x = (m_Weight / d) * (tanh(d) * (2 * helper.In.x));
 | 
							helper.Out.x = (m_Weight / d) * (std::tanh(d) * (2 * helper.In.x));
 | 
				
			||||||
		helper.Out.y = (m_Weight / d) * (cos(d)  * (2 * helper.In.y));
 | 
							helper.Out.y = (m_Weight / d) * (std::cos(d)  * (2 * helper.In.y));
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -631,8 +631,8 @@ public:
 | 
				
			|||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T d = Zeps(helper.m_PrecalcSumSquares);
 | 
							T d = Zeps(helper.m_PrecalcSumSquares);
 | 
				
			||||||
		helper.Out.x = (m_Weight / 2) * (tanh(d) * (2 * helper.In.x));
 | 
							helper.Out.x = (m_Weight / 2) * (std::tanh(d) * (2 * helper.In.x));
 | 
				
			||||||
		helper.Out.y = (m_Weight / 2) * (cos(d)  * (2 * helper.In.y));
 | 
							helper.Out.y = (m_Weight / 2) * (std::cos(d)  * (2 * helper.In.y));
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3664,7 +3664,7 @@ public:
 | 
				
			|||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T absV = VarFuncs<T>::Hypot(helper.In.y, helper.In.z);
 | 
							T absV = VarFuncs<T>::Hypot(helper.In.y, helper.In.z);
 | 
				
			||||||
		T ni = m_Weight / (helper.m_PrecalcSumSquares + SQR(helper.In.z));
 | 
							T ni = m_Weight / Zeps(helper.m_PrecalcSumSquares + SQR(helper.In.z));
 | 
				
			||||||
		T s = std::sin(helper.In.x);
 | 
							T s = std::sin(helper.In.x);
 | 
				
			||||||
		T c = std::cos(helper.In.x);
 | 
							T c = std::cos(helper.In.x);
 | 
				
			||||||
		T sh = std::sinh(absV);
 | 
							T sh = std::sinh(absV);
 | 
				
			||||||
@ -3681,7 +3681,7 @@ public:
 | 
				
			|||||||
		intmax_t varIndex = IndexInXform();
 | 
							intmax_t varIndex = IndexInXform();
 | 
				
			||||||
		ss << "\t{\n"
 | 
							ss << "\t{\n"
 | 
				
			||||||
		   << "\t\treal_t absV = Hypot(vIn.y, vIn.z);\n"
 | 
							   << "\t\treal_t absV = Hypot(vIn.y, vIn.z);\n"
 | 
				
			||||||
		   << "\t\treal_t ni = xform->m_VariationWeights[" << varIndex << "] / (precalcSumSquares + SQR(vIn.z));\n"
 | 
							   << "\t\treal_t ni = xform->m_VariationWeights[" << varIndex << "] / Zeps(precalcSumSquares + SQR(vIn.z));\n"
 | 
				
			||||||
		   << "\t\treal_t s = sin(vIn.x);\n"
 | 
							   << "\t\treal_t s = sin(vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t c = cos(vIn.x);\n"
 | 
							   << "\t\treal_t c = cos(vIn.x);\n"
 | 
				
			||||||
		   << "\t\treal_t sh = sinh(absV);\n"
 | 
							   << "\t\treal_t sh = sinh(absV);\n"
 | 
				
			||||||
@ -3715,7 +3715,7 @@ public:
 | 
				
			|||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T absV = VarFuncs<T>::Hypot(helper.In.y, helper.In.z);
 | 
							T absV = VarFuncs<T>::Hypot(helper.In.y, helper.In.z);
 | 
				
			||||||
		T ni = m_Weight / (helper.m_PrecalcSumSquares + SQR(helper.In.z));
 | 
							T ni = m_Weight / Zeps(helper.m_PrecalcSumSquares + SQR(helper.In.z));
 | 
				
			||||||
		T s = std::sin(absV);
 | 
							T s = std::sin(absV);
 | 
				
			||||||
		T c = std::cos(absV);
 | 
							T c = std::cos(absV);
 | 
				
			||||||
		T sh = std::sinh(helper.In.x);
 | 
							T sh = std::sinh(helper.In.x);
 | 
				
			||||||
@ -3732,7 +3732,7 @@ public:
 | 
				
			|||||||
		intmax_t varIndex = IndexInXform();
 | 
							intmax_t varIndex = IndexInXform();
 | 
				
			||||||
		ss << "\t{\n"
 | 
							ss << "\t{\n"
 | 
				
			||||||
		   << "\t\treal_t absV = Hypot(vIn.y, vIn.z);\n"
 | 
							   << "\t\treal_t absV = Hypot(vIn.y, vIn.z);\n"
 | 
				
			||||||
		   << "\t\treal_t ni = xform->m_VariationWeights[" << varIndex << "] / (precalcSumSquares + SQR(vIn.z));\n"
 | 
							   << "\t\treal_t ni = xform->m_VariationWeights[" << varIndex << "] / Zeps(precalcSumSquares + SQR(vIn.z));\n"
 | 
				
			||||||
		   << "\t\treal_t s = sin(absV);\n"
 | 
							   << "\t\treal_t s = sin(absV);\n"
 | 
				
			||||||
		   << "\t\treal_t c = cos(absV);\n"
 | 
							   << "\t\treal_t c = cos(absV);\n"
 | 
				
			||||||
		   << "\t\treal_t sh = sinh(vIn.x);\n"
 | 
							   << "\t\treal_t sh = sinh(vIn.x);\n"
 | 
				
			||||||
@ -4731,7 +4731,7 @@ public:
 | 
				
			|||||||
			if (r <= m_R1)
 | 
								if (r <= m_R1)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				r *= m_R2 / m_R1;
 | 
									r *= m_R2 / m_R1;
 | 
				
			||||||
				temp = atan2(helper.In.y, c1mx);
 | 
									temp = std::atan2(helper.In.y, c1mx);
 | 
				
			||||||
				helper.Out.x = m_Weight * (r * std::cos(temp) - m_C2);
 | 
									helper.Out.x = m_Weight * (r * std::cos(temp) - m_C2);
 | 
				
			||||||
				helper.Out.y = m_Weight *  r * std::sin(temp);
 | 
									helper.Out.y = m_Weight *  r * std::sin(temp);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -4749,7 +4749,7 @@ public:
 | 
				
			|||||||
			if (r <= m_R2)
 | 
								if (r <= m_R2)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				r *= m_R1 / m_R2;
 | 
									r *= m_R1 / m_R2;
 | 
				
			||||||
				temp = atan2(helper.In.y, c1mx);
 | 
									temp = std::atan2(helper.In.y, c1mx);
 | 
				
			||||||
				helper.Out.x = m_Weight * (r * std::cos(temp) + m_C1);
 | 
									helper.Out.x = m_Weight * (r * std::cos(temp) + m_C1);
 | 
				
			||||||
				helper.Out.y = m_Weight *  r * std::sin(temp);
 | 
									helper.Out.y = m_Weight *  r * std::sin(temp);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -5060,10 +5060,10 @@ public:
 | 
				
			|||||||
		T ymax = T(0.5) * (std::sqrt(tmp + y2) + std::sqrt(tmp - y2));
 | 
							T ymax = T(0.5) * (std::sqrt(tmp + y2) + std::sqrt(tmp - y2));
 | 
				
			||||||
		T a = helper.In.x / Zeps(xmax);
 | 
							T a = helper.In.x / Zeps(xmax);
 | 
				
			||||||
		T b = VarFuncs<T>::SafeSqrt(1 - SQR(a));
 | 
							T b = VarFuncs<T>::SafeSqrt(1 - SQR(a));
 | 
				
			||||||
		helper.Out.x = m_Vx * atan2(a, b) * r;
 | 
							helper.Out.x = m_Vx * std::atan2(a, b) * r;
 | 
				
			||||||
		a = helper.In.y / Zeps(ymax);
 | 
							a = helper.In.y / Zeps(ymax);
 | 
				
			||||||
		b = VarFuncs<T>::SafeSqrt(1 - SQR(a));
 | 
							b = VarFuncs<T>::SafeSqrt(1 - SQR(a));
 | 
				
			||||||
		helper.Out.y = m_Vy * atan2(a, b) * r;
 | 
							helper.Out.y = m_Vy * std::atan2(a, b) * r;
 | 
				
			||||||
		helper.Out.z = DefaultZ(helper);
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1086,8 +1086,8 @@ public:
 | 
				
			|||||||
		T uu = SQR(helper.In.x);
 | 
							T uu = SQR(helper.In.x);
 | 
				
			||||||
		T vv = SQR(helper.In.y);
 | 
							T vv = SQR(helper.In.y);
 | 
				
			||||||
		T ww = SQR(helper.In.z);
 | 
							T ww = SQR(helper.In.z);
 | 
				
			||||||
		T atOmegaX = atan2(vv, ww);
 | 
							T atOmegaX = std::atan2(vv, ww);
 | 
				
			||||||
		T atOmegaY = atan2(uu, ww);
 | 
							T atOmegaY = std::atan2(uu, ww);
 | 
				
			||||||
		T su = std::sin(helper.In.x);
 | 
							T su = std::sin(helper.In.x);
 | 
				
			||||||
		T cu = std::cos(helper.In.x);
 | 
							T cu = std::cos(helper.In.x);
 | 
				
			||||||
		T sv = std::sin(helper.In.y);
 | 
							T sv = std::sin(helper.In.y);
 | 
				
			||||||
@ -1994,7 +1994,7 @@ public:
 | 
				
			|||||||
	virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
						virtual void Func(IteratorHelper<T>& helper, Point<T>& outPoint, QTIsaac<ISAAC_SIZE, ISAAC_INT>& rand) override
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		T t = helper.m_PrecalcSumSquares + SQR(helper.In.z);
 | 
							T t = helper.m_PrecalcSumSquares + SQR(helper.In.z);
 | 
				
			||||||
		T r = 1 / (std::sqrt(t) * (t + m_InvWeight));
 | 
							T r = 1 / Zeps(std::sqrt(t) * (t + m_InvWeight));
 | 
				
			||||||
		T z = helper.In.z == 0 ? helper.m_PrecalcAtanyx : helper.In.z;
 | 
							T z = helper.In.z == 0 ? helper.m_PrecalcAtanyx : helper.In.z;
 | 
				
			||||||
		helper.Out.x = helper.In.x * r;
 | 
							helper.Out.x = helper.In.x * r;
 | 
				
			||||||
		helper.Out.y = helper.In.y * r;
 | 
							helper.Out.y = helper.In.y * r;
 | 
				
			||||||
@ -2010,7 +2010,7 @@ public:
 | 
				
			|||||||
		string invWeight = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
							string invWeight = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
 | 
				
			||||||
		ss << "\t{\n"
 | 
							ss << "\t{\n"
 | 
				
			||||||
		   << "\t\treal_t t = precalcSumSquares + SQR(vIn.z);\n"
 | 
							   << "\t\treal_t t = precalcSumSquares + SQR(vIn.z);\n"
 | 
				
			||||||
		   << "\t\treal_t r = 1 / (sqrt(t) * (t + " << invWeight << "));\n"
 | 
							   << "\t\treal_t r = 1 / Zeps(sqrt(t) * (t + " << invWeight << "));\n"
 | 
				
			||||||
		   << "\t\treal_t z = vIn.z == 0 ? precalcAtanyx : vIn.z;\n"
 | 
							   << "\t\treal_t z = vIn.z == 0 ? precalcAtanyx : vIn.z;\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = vIn.x * r;\n"
 | 
							   << "\t\tvOut.x = vIn.x * r;\n"
 | 
				
			||||||
@ -2025,6 +2025,11 @@ public:
 | 
				
			|||||||
		m_InvWeight = 1 / Zeps(m_Weight);
 | 
							m_InvWeight = 1 / Zeps(m_Weight);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -2159,12 +2164,12 @@ public:
 | 
				
			|||||||
				if (offsetX >= 0)
 | 
									if (offsetX >= 0)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					helper.Out.x += m_Weight * (offsetX * T(0.5) + roundX + m_X);
 | 
										helper.Out.x += m_Weight * (offsetX * T(0.5) + roundX + m_X);
 | 
				
			||||||
					helper.Out.y += m_Weight * (offsetY * T(0.5) + roundY + m_Y * offsetY / offsetX);
 | 
										helper.Out.y += m_Weight * (offsetY * T(0.5) + roundY + m_Y * offsetY / Zeps(offsetX));
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					helper.Out.x += m_Weight * (offsetX * T(0.5) + roundX - m_Y);
 | 
										helper.Out.x += m_Weight * (offsetX * T(0.5) + roundX - m_Y);
 | 
				
			||||||
					helper.Out.y += m_Weight * (offsetY * T(0.5) + roundY - m_Y * offsetY / offsetX);
 | 
										helper.Out.y += m_Weight * (offsetY * T(0.5) + roundY - m_Y * offsetY / Zeps(offsetX));
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
@ -2172,12 +2177,12 @@ public:
 | 
				
			|||||||
				if (offsetY >= 0)
 | 
									if (offsetY >= 0)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					helper.Out.y += m_Weight * (offsetY * T(0.5) + roundY + m_Y);
 | 
										helper.Out.y += m_Weight * (offsetY * T(0.5) + roundY + m_Y);
 | 
				
			||||||
					helper.Out.x += m_Weight * (offsetX * T(0.5) + roundX + offsetX / offsetY * m_Y);
 | 
										helper.Out.x += m_Weight * (offsetX * T(0.5) + roundX + offsetX / Zeps(offsetY) * m_Y);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					helper.Out.y += m_Weight * (offsetY * T(0.5) + roundY - m_Y);
 | 
										helper.Out.y += m_Weight * (offsetY * T(0.5) + roundY - m_Y);
 | 
				
			||||||
					helper.Out.x += m_Weight * (offsetX * T(0.5) + roundX - offsetX / offsetY * m_X);
 | 
										helper.Out.x += m_Weight * (offsetX * T(0.5) + roundX - offsetX / Zeps(offsetY) * m_X);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -2219,12 +2224,12 @@ public:
 | 
				
			|||||||
		   << "\t\t		if (offsetX >= 0)\n"
 | 
							   << "\t\t		if (offsetX >= 0)\n"
 | 
				
			||||||
		   << "\t\t		{\n"
 | 
							   << "\t\t		{\n"
 | 
				
			||||||
		   << "\t\t			vOut.x += xform->m_VariationWeights[" << varIndex << "] * (offsetX * (real_t)(0.5) + roundX + " << x << ");\n"
 | 
							   << "\t\t			vOut.x += xform->m_VariationWeights[" << varIndex << "] * (offsetX * (real_t)(0.5) + roundX + " << x << ");\n"
 | 
				
			||||||
		   << "\t\t			vOut.y += xform->m_VariationWeights[" << varIndex << "] * (offsetY * (real_t)(0.5) + roundY + " << y << " * offsetY / offsetX);\n"
 | 
							   << "\t\t			vOut.y += xform->m_VariationWeights[" << varIndex << "] * (offsetY * (real_t)(0.5) + roundY + " << y << " * offsetY / Zeps(offsetX));\n"
 | 
				
			||||||
		   << "\t\t		}\n"
 | 
							   << "\t\t		}\n"
 | 
				
			||||||
		   << "\t\t		else\n"
 | 
							   << "\t\t		else\n"
 | 
				
			||||||
		   << "\t\t		{\n"
 | 
							   << "\t\t		{\n"
 | 
				
			||||||
		   << "\t\t			vOut.x += xform->m_VariationWeights[" << varIndex << "] * (offsetX * (real_t)(0.5) + roundX - " << y << ");\n"
 | 
							   << "\t\t			vOut.x += xform->m_VariationWeights[" << varIndex << "] * (offsetX * (real_t)(0.5) + roundX - " << y << ");\n"
 | 
				
			||||||
		   << "\t\t			vOut.y += xform->m_VariationWeights[" << varIndex << "] * (offsetY * (real_t)(0.5) + roundY - " << y << " * offsetY / offsetX);\n"
 | 
							   << "\t\t			vOut.y += xform->m_VariationWeights[" << varIndex << "] * (offsetY * (real_t)(0.5) + roundY - " << y << " * offsetY / Zeps(offsetX));\n"
 | 
				
			||||||
		   << "\t\t		}\n"
 | 
							   << "\t\t		}\n"
 | 
				
			||||||
		   << "\t\t	}\n"
 | 
							   << "\t\t	}\n"
 | 
				
			||||||
		   << "\t\t	else\n"
 | 
							   << "\t\t	else\n"
 | 
				
			||||||
@ -2232,12 +2237,12 @@ public:
 | 
				
			|||||||
		   << "\t\t		if (offsetY >= 0)\n"
 | 
							   << "\t\t		if (offsetY >= 0)\n"
 | 
				
			||||||
		   << "\t\t		{\n"
 | 
							   << "\t\t		{\n"
 | 
				
			||||||
		   << "\t\t			vOut.y += xform->m_VariationWeights[" << varIndex << "] * (offsetY * (real_t)(0.5) + roundY + " << y << ");\n"
 | 
							   << "\t\t			vOut.y += xform->m_VariationWeights[" << varIndex << "] * (offsetY * (real_t)(0.5) + roundY + " << y << ");\n"
 | 
				
			||||||
		   << "\t\t			vOut.x += xform->m_VariationWeights[" << varIndex << "] * (offsetX * (real_t)(0.5) + roundX + offsetX / offsetY * " << y << ");\n"
 | 
							   << "\t\t			vOut.x += xform->m_VariationWeights[" << varIndex << "] * (offsetX * (real_t)(0.5) + roundX + offsetX / Zeps(offsetY) * " << y << ");\n"
 | 
				
			||||||
		   << "\t\t		}\n"
 | 
							   << "\t\t		}\n"
 | 
				
			||||||
		   << "\t\t		else\n"
 | 
							   << "\t\t		else\n"
 | 
				
			||||||
		   << "\t\t		{\n"
 | 
							   << "\t\t		{\n"
 | 
				
			||||||
		   << "\t\t			vOut.y += xform->m_VariationWeights[" << varIndex << "] * (offsetY * (real_t)(0.5) + roundY - " << y << ");\n"
 | 
							   << "\t\t			vOut.y += xform->m_VariationWeights[" << varIndex << "] * (offsetY * (real_t)(0.5) + roundY - " << y << ");\n"
 | 
				
			||||||
		   << "\t\t			vOut.x += xform->m_VariationWeights[" << varIndex << "] * (offsetX * (real_t)(0.5) + roundX - offsetX / offsetY * " << x << ");\n"
 | 
							   << "\t\t			vOut.x += xform->m_VariationWeights[" << varIndex << "] * (offsetX * (real_t)(0.5) + roundX - offsetX / Zeps(offsetY) * " << x << ");\n"
 | 
				
			||||||
		   << "\t\t		}\n"
 | 
							   << "\t\t		}\n"
 | 
				
			||||||
		   << "\t\t	}\n"
 | 
							   << "\t\t	}\n"
 | 
				
			||||||
		   << "\t\t}\n"
 | 
							   << "\t\t}\n"
 | 
				
			||||||
@ -2249,6 +2254,11 @@ public:
 | 
				
			|||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@ -2360,9 +2370,9 @@ public:
 | 
				
			|||||||
			default:
 | 
								default:
 | 
				
			||||||
				scale = Clamp<T>(rs, 0, T(0.9)) + T(0.1);
 | 
									scale = Clamp<T>(rs, 0, T(0.9)) + T(0.1);
 | 
				
			||||||
				denom = 1 / scale;
 | 
									denom = 1 / scale;
 | 
				
			||||||
				helper.Out.x = m_Weight * Lerp<T>(helper.In.x, floor(helper.In.x * denom) + scale * ax, m_MulX * rs) + m_MulX * std::pow(ax, m_BoxPow) * rs * denom;//m_BoxPow should be an integer value held in T,
 | 
									helper.Out.x = m_Weight * Lerp<T>(helper.In.x, std::floor(helper.In.x * denom) + scale * ax, m_MulX * rs) + m_MulX * std::pow(ax, m_BoxPow) * rs * denom;//m_BoxPow should be an integer value held in T,
 | 
				
			||||||
				helper.Out.y = m_Weight * Lerp<T>(helper.In.y, floor(helper.In.y * denom) + scale * ay, m_MulY * rs) + m_MulY * std::pow(ay, m_BoxPow) * rs * denom;//so std::abs() shouldn't be necessary.
 | 
									helper.Out.y = m_Weight * Lerp<T>(helper.In.y, std::floor(helper.In.y * denom) + scale * ay, m_MulY * rs) + m_MulY * std::pow(ay, m_BoxPow) * rs * denom;//so std::abs() shouldn't be necessary.
 | 
				
			||||||
				helper.Out.z = m_Weight * Lerp<T>(helper.In.z, floor(helper.In.z * denom) + scale * az, m_MulZ * rs) + m_MulZ * std::pow(az, m_BoxPow) * rs * denom;
 | 
									helper.Out.z = m_Weight * Lerp<T>(helper.In.z, std::floor(helper.In.z * denom) + scale * az, m_MulZ * rs) + m_MulZ * std::pow(az, m_BoxPow) * rs * denom;
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -4131,7 +4141,7 @@ public:
 | 
				
			|||||||
		while (++n < 6)
 | 
							while (++n < 6)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if ((m_P[n].y <= i.y && i.y < m_P[j].y) || (m_P[j].y <= i.y && i.y < m_P[n].y))
 | 
								if ((m_P[n].y <= i.y && i.y < m_P[j].y) || (m_P[j].y <= i.y && i.y < m_P[n].y))
 | 
				
			||||||
				if (i.x < (m_P[j].x - m_P[n].x) * (i.y - m_P[n].y) / (m_P[j].y - m_P[n].y) + m_P[n].x)
 | 
									if (i.x < (m_P[j].x - m_P[n].x) * (i.y - m_P[n].y) / Zeps(m_P[j].y - m_P[n].y) + m_P[n].x)
 | 
				
			||||||
					c ^= 1;
 | 
										c ^= 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			j = n;
 | 
								j = n;
 | 
				
			||||||
@ -4182,7 +4192,7 @@ public:
 | 
				
			|||||||
		   << "\t\t	int ynoff = " << pyStartIndex << " + n;\n"
 | 
							   << "\t\t	int ynoff = " << pyStartIndex << " + n;\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\t	if ((parVars[ynoff] <= i.y && i.y < parVars[yjoff]) || (parVars[yjoff] <= i.y && i.y < parVars[ynoff]))\n"
 | 
							   << "\t\t	if ((parVars[ynoff] <= i.y && i.y < parVars[yjoff]) || (parVars[yjoff] <= i.y && i.y < parVars[ynoff]))\n"
 | 
				
			||||||
		   << "\t\t		if (i.x < (parVars[xjoff] - parVars[xnoff]) * (i.y - parVars[ynoff]) / (parVars[yjoff] - parVars[ynoff]) + parVars[xnoff])\n"
 | 
							   << "\t\t		if (i.x < (parVars[xjoff] - parVars[xnoff]) * (i.y - parVars[ynoff]) / Zeps(parVars[yjoff] - parVars[ynoff]) + parVars[xnoff])\n"
 | 
				
			||||||
		   << "\t\t			c ^= 1;\n"
 | 
							   << "\t\t			c ^= 1;\n"
 | 
				
			||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\t	j = n;\n"
 | 
							   << "\t\t	j = n;\n"
 | 
				
			||||||
@ -4226,6 +4236,11 @@ public:
 | 
				
			|||||||
		m_P[5].y = T(0.0000000000000000000000000000000)  * m_ScaleY;
 | 
							m_P[5].y = T(0.0000000000000000000000000000000)  * m_ScaleY;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
				
			|||||||
@ -783,9 +783,9 @@ public:
 | 
				
			|||||||
		if (m_AdjustToLinear == 1)
 | 
							if (m_AdjustToLinear == 1)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (int(m_NumEdges) % 4 == 0)
 | 
								if (int(m_NumEdges) % 4 == 0)
 | 
				
			||||||
				m_AdjustedWeight = m_Weight / (std::sqrt(2 - 2 * std::cos(m_MidAngle * (m_NumEdges / 2 - 1))) / 2);
 | 
									m_AdjustedWeight = m_Weight / Zeps(std::sqrt(2 - 2 * std::cos(m_MidAngle * (m_NumEdges / 2 - 1))) / 2);
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				m_AdjustedWeight = m_Weight / (std::sqrt(2 - 2 * std::cos(m_MidAngle * std::floor((m_NumEdges / 2)))) / 2);
 | 
									m_AdjustedWeight = m_Weight / Zeps(std::sqrt(2 - 2 * std::cos(m_MidAngle * std::floor((m_NumEdges / 2)))) / 2);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			m_AdjustedWeight = m_Weight;
 | 
								m_AdjustedWeight = m_Weight;
 | 
				
			||||||
@ -1515,7 +1515,7 @@ public:
 | 
				
			|||||||
						yTmp = m_Top + rand.Frand01<T>() * m_YInt2;
 | 
											yTmp = m_Top + rand.Frand01<T>() * m_YInt2;
 | 
				
			||||||
						xTmp = m_Right - pow(rand.Frand01<T>(), m_DirectBlur) * m_RatioBlur * m_MinInt2;
 | 
											xTmp = m_Right - pow(rand.Frand01<T>(), m_DirectBlur) * m_RatioBlur * m_MinInt2;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					while ((yTmp - m_Y0c) / (xTmp - m_X0c) < -1);
 | 
										while ((yTmp - m_Y0c) / Zeps(xTmp - m_X0c) < -1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if (secTmp < m_SetProbH)
 | 
										if (secTmp < m_SetProbH)
 | 
				
			||||||
						xTmp = m_Left + m_Right - xTmp;
 | 
											xTmp = m_Left + m_Right - xTmp;
 | 
				
			||||||
@ -1529,7 +1529,7 @@ public:
 | 
				
			|||||||
					{
 | 
										{
 | 
				
			||||||
						xTmp = m_Right - rand.Frand01<T>() * m_XInt2;
 | 
											xTmp = m_Right - rand.Frand01<T>() * m_XInt2;
 | 
				
			||||||
						yTmp = m_Top + std::pow(rand.Frand01<T>(), m_DirectBlur) * m_RatioBlur * m_MinInt2;
 | 
											yTmp = m_Top + std::pow(rand.Frand01<T>(), m_DirectBlur) * m_RatioBlur * m_MinInt2;
 | 
				
			||||||
						gradTmp = (yTmp - m_Y0c) / (xTmp - m_X0c);
 | 
											gradTmp = (yTmp - m_Y0c) / Zeps(xTmp - m_X0c);
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					while ((gradTmp <= 0) && (gradTmp > -1));
 | 
										while ((gradTmp <= 0) && (gradTmp > -1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1614,7 +1614,7 @@ public:
 | 
				
			|||||||
				<< "\t\t			{\n"
 | 
									<< "\t\t			{\n"
 | 
				
			||||||
				<< "\t\t				yTmp = " << top << " + MwcNext01(mwc) * " << yInt2 << ";\n"
 | 
									<< "\t\t				yTmp = " << top << " + MwcNext01(mwc) * " << yInt2 << ";\n"
 | 
				
			||||||
				<< "\t\t				xTmp = " << right << " - pow(MwcNext01(mwc), " << directBlur << ") * " << ratioBlur << " * " << minInt2 << ";\n"
 | 
									<< "\t\t				xTmp = " << right << " - pow(MwcNext01(mwc), " << directBlur << ") * " << ratioBlur << " * " << minInt2 << ";\n"
 | 
				
			||||||
				<< "\t\t			} while ((yTmp - " << y0c << ") / (xTmp - " << x0c << ") < -1);\n"
 | 
									<< "\t\t			} while ((yTmp - " << y0c << ") / Zeps(xTmp - " << x0c << ") < -1);\n"
 | 
				
			||||||
				<< "\n"
 | 
									<< "\n"
 | 
				
			||||||
				<< "\t\t			if (secTmp < " << setProbH << ")\n"
 | 
									<< "\t\t			if (secTmp < " << setProbH << ")\n"
 | 
				
			||||||
				<< "\t\t				xTmp = " << left << " + " << right << " - xTmp;\n"
 | 
									<< "\t\t				xTmp = " << left << " + " << right << " - xTmp;\n"
 | 
				
			||||||
@ -1628,7 +1628,7 @@ public:
 | 
				
			|||||||
				<< "\t\t			{\n"
 | 
									<< "\t\t			{\n"
 | 
				
			||||||
				<< "\t\t				xTmp = " << right << " - MwcNext01(mwc) * " << xInt2 << ";\n"
 | 
									<< "\t\t				xTmp = " << right << " - MwcNext01(mwc) * " << xInt2 << ";\n"
 | 
				
			||||||
				<< "\t\t				yTmp = " << top << " + pow(MwcNext01(mwc), " << directBlur << ") * " << ratioBlur << " * " << minInt2 << ";\n"
 | 
									<< "\t\t				yTmp = " << top << " + pow(MwcNext01(mwc), " << directBlur << ") * " << ratioBlur << " * " << minInt2 << ";\n"
 | 
				
			||||||
				<< "\t\t				gradTmp = (yTmp - " << y0c << ") / (xTmp - " << x0c << ");\n"
 | 
									<< "\t\t				gradTmp = (yTmp - " << y0c << ") / Zeps(xTmp - " << x0c << ");\n"
 | 
				
			||||||
				<< "\t\t			} while ((gradTmp <= 0) && (gradTmp > -1));\n"
 | 
									<< "\t\t			} while ((gradTmp <= 0) && (gradTmp > -1));\n"
 | 
				
			||||||
				<< "\n"
 | 
									<< "\n"
 | 
				
			||||||
				<< "\t\t			if (secTmp > " << setProbH << ")\n"
 | 
									<< "\t\t			if (secTmp > " << setProbH << ")\n"
 | 
				
			||||||
@ -1737,6 +1737,11 @@ public:
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual vector<string> OpenCLGlobalFuncNames() const override
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return vector<string> { "Zeps" };
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	void Init()
 | 
						void Init()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 | 
				
			|||||||
@ -957,7 +957,7 @@ template <typename T>
 | 
				
			|||||||
class CircleSplitVariation : public ParametricVariation<T>
 | 
					class CircleSplitVariation : public ParametricVariation<T>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
	CircleSplitVariation(T weight = 1.0) : ParametricVariation<T>("circlesplit", eVariationId::VAR_CIRCLESPLIT, weight, true, true)
 | 
						CircleSplitVariation(T weight = 1.0) : ParametricVariation<T>("circlesplit", eVariationId::VAR_CIRCLESPLIT, weight, true, true, false, false, true)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		Init();
 | 
							Init();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -975,7 +975,7 @@ public:
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			T a = std::atan2(helper.In.y, helper.In.x);
 | 
								T a = helper.m_PrecalcAtanyx;
 | 
				
			||||||
			T len = helper.m_PrecalcSqrtSumSquares + m_Split;
 | 
								T len = helper.m_PrecalcSqrtSumSquares + m_Split;
 | 
				
			||||||
			x1 = std::cos(a) * len;
 | 
								x1 = std::cos(a) * len;
 | 
				
			||||||
			y1 = std::sin(a) * len;
 | 
								y1 = std::sin(a) * len;
 | 
				
			||||||
@ -983,6 +983,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		helper.Out.x = m_Weight * x1;
 | 
							helper.Out.x = m_Weight * x1;
 | 
				
			||||||
		helper.Out.y = m_Weight * y1;
 | 
							helper.Out.y = m_Weight * y1;
 | 
				
			||||||
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual string OpenCLString() const override
 | 
						virtual string OpenCLString() const override
 | 
				
			||||||
@ -1003,13 +1004,14 @@ public:
 | 
				
			|||||||
		   << "\t\t}\n"
 | 
							   << "\t\t}\n"
 | 
				
			||||||
		   << "\t\telse\n"
 | 
							   << "\t\telse\n"
 | 
				
			||||||
		   << "\t\t{\n"
 | 
							   << "\t\t{\n"
 | 
				
			||||||
		   << "\t\t\treal_t a = (real_t)atan2(vIn.y, vIn.x);\n"
 | 
							   << "\t\t\treal_t a = precalcAtanyx;\n"
 | 
				
			||||||
		   << "\t\t\treal_t len = precalcSqrtSumSquares + " << cs_split << ";\n"
 | 
							   << "\t\t\treal_t len = precalcSqrtSumSquares + " << cs_split << ";\n"
 | 
				
			||||||
		   << "\t\t\tx1 = cos(a) * len;\n"
 | 
							   << "\t\t\tx1 = cos(a) * len;\n"
 | 
				
			||||||
		   << "\t\t\ty1 = sin(a) * len;\n"
 | 
							   << "\t\t\ty1 = sin(a) * len;\n"
 | 
				
			||||||
		   << "\t\t}"
 | 
							   << "\t\t}"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * x1;\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * x1;\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * y1;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * y1;\n"
 | 
				
			||||||
 | 
							   << "\t\tvOut.z = " << DefaultZCl()
 | 
				
			||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -1045,6 +1047,7 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		helper.Out.x = m_Weight * (helper.In.x / Zeps(std::sqrt(SQR(helper.In.x) + 1)));
 | 
							helper.Out.x = m_Weight * (helper.In.x / Zeps(std::sqrt(SQR(helper.In.x) + 1)));
 | 
				
			||||||
		helper.Out.y = m_Weight * helper.In.y;
 | 
							helper.Out.y = m_Weight * helper.In.y;
 | 
				
			||||||
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual string OpenCLString() const override
 | 
						virtual string OpenCLString() const override
 | 
				
			||||||
@ -1055,6 +1058,7 @@ public:
 | 
				
			|||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (vIn.x / Zeps(sqrt(SQR(vIn.x) + (real_t)1.0)));\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (vIn.x / Zeps(sqrt(SQR(vIn.x) + (real_t)1.0)));\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
 | 
				
			||||||
 | 
							   << "\t\tvOut.z = " << DefaultZCl()
 | 
				
			||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -1086,6 +1090,7 @@ public:
 | 
				
			|||||||
		T temp = Round(std::log(rand.Frand01<T>()) * (rand.Rand() & 1 ? m_Spread : -m_Spread));
 | 
							T temp = Round(std::log(rand.Frand01<T>()) * (rand.Rand() & 1 ? m_Spread : -m_Spread));
 | 
				
			||||||
		helper.Out.x = m_Weight * (helper.In.x + temp);
 | 
							helper.Out.x = m_Weight * (helper.In.x + temp);
 | 
				
			||||||
		helper.Out.y = m_Weight * helper.In.y;
 | 
							helper.Out.y = m_Weight * helper.In.y;
 | 
				
			||||||
 | 
							helper.Out.z = DefaultZ(helper);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual string OpenCLString() const override
 | 
						virtual string OpenCLString() const override
 | 
				
			||||||
@ -1100,6 +1105,7 @@ public:
 | 
				
			|||||||
		   << "\n"
 | 
							   << "\n"
 | 
				
			||||||
		   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (vIn.x + temp);\n"
 | 
							   << "\t\tvOut.x = xform->m_VariationWeights[" << varIndex << "] * (vIn.x + temp);\n"
 | 
				
			||||||
		   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
 | 
							   << "\t\tvOut.y = xform->m_VariationWeights[" << varIndex << "] * vIn.y;\n"
 | 
				
			||||||
 | 
							   << "\t\tvOut.z = " << DefaultZCl()
 | 
				
			||||||
		   << "\t}\n";
 | 
							   << "\t}\n";
 | 
				
			||||||
		return ss.str();
 | 
							return ss.str();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -1341,7 +1347,7 @@ public:
 | 
				
			|||||||
		m_FinalExponent = m_Exponent > T(2) ? T(2) : (m_Exponent < T(0.001) ? T(0.001) : m_Exponent);
 | 
							m_FinalExponent = m_Exponent > T(2) ? T(2) : (m_Exponent < T(0.001) ? T(0.001) : m_Exponent);
 | 
				
			||||||
		m_OneOverEx = T(1) / m_FinalExponent;
 | 
							m_OneOverEx = T(1) / m_FinalExponent;
 | 
				
			||||||
		m_Width = m_ArcWidth > T(1) ? T(1) : (m_ArcWidth < T(0.001) ? T(0.001) : m_ArcWidth);
 | 
							m_Width = m_ArcWidth > T(1) ? T(1) : (m_ArcWidth < T(0.001) ? T(0.001) : m_ArcWidth);
 | 
				
			||||||
		m_Seed2 = std::sqrt(m_Seed * T(1.5)) / (m_Seed * T(0.5)) * T(0.25);
 | 
							m_Seed2 = std::sqrt(m_Seed * T(1.5)) / Zeps(m_Seed * T(0.5)) * T(0.25);
 | 
				
			||||||
		m_Rmax = T(0.5) * (std::pow(T(2), m_OneOverEx) - T(1)) * m_Width;
 | 
							m_Rmax = T(0.5) * (std::pow(T(2), m_OneOverEx) - T(1)) * m_Width;
 | 
				
			||||||
		m_Scale = T(1) / m_Weight;
 | 
							m_Scale = T(1) / m_Weight;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -866,10 +866,10 @@ public:
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (m_NeedPrecalcAtanXY)
 | 
							if (m_NeedPrecalcAtanXY)
 | 
				
			||||||
			helper.m_PrecalcAtanxy = atan2(helper.m_TransX, helper.m_TransY);
 | 
								helper.m_PrecalcAtanxy = std::atan2(helper.m_TransX, helper.m_TransY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (m_NeedPrecalcAtanYX)
 | 
							if (m_NeedPrecalcAtanYX)
 | 
				
			||||||
			helper.m_PrecalcAtanyx = atan2(helper.m_TransY, helper.m_TransX);
 | 
								helper.m_PrecalcAtanyx = std::atan2(helper.m_TransY, helper.m_TransX);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/// <summary>
 | 
						/// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -128,7 +128,7 @@ double DEOpenCLKernelCreator::SolveMaxDERad(double desiredFilterSize, double ss)
 | 
				
			|||||||
		return desiredFilterSize;
 | 
							return desiredFilterSize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//The final size doesn't fit, so scale the original down until it fits.
 | 
						//The final size doesn't fit, so scale the original down until it fits.
 | 
				
			||||||
	return floor((MaxDEFilterSize() - (ss - 1.0)) / ss);
 | 
						return std::floor((MaxDEFilterSize() - (ss - 1.0)) / ss);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
@ -139,7 +139,7 @@ double DEOpenCLKernelCreator::SolveMaxDERad(double desiredFilterSize, double ss)
 | 
				
			|||||||
/// <returns>The maximum filter box size allowed</returns>
 | 
					/// <returns>The maximum filter box size allowed</returns>
 | 
				
			||||||
uint DEOpenCLKernelCreator::SolveMaxBoxSize(uint localMem)
 | 
					uint DEOpenCLKernelCreator::SolveMaxBoxSize(uint localMem)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return uint(floor(std::sqrt(floor(localMem / 16.0))));//Divide by 16 because each element is float4.
 | 
						return uint(std::floor(std::sqrt(Floor(localMem / 16.0))));//Divide by 16 because each element is float4.
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -389,4 +389,14 @@ const string* FunctionMapper::GetGlobalFunc(const string& func)
 | 
				
			|||||||
	else
 | 
						else
 | 
				
			||||||
		return nullptr;
 | 
							return nullptr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Get a copy of the function map.
 | 
				
			||||||
 | 
					/// This is useful only for debugging/testing.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					/// <returns>A copy of the function map</returns>
 | 
				
			||||||
 | 
					const std::unordered_map<string, string> FunctionMapper::GetGlobalMapCopy()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return s_GlobalMap;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ class EMBERCL_API FunctionMapper
 | 
				
			|||||||
public:
 | 
					public:
 | 
				
			||||||
	FunctionMapper();
 | 
						FunctionMapper();
 | 
				
			||||||
	static const string* GetGlobalFunc(const string& func);
 | 
						static const string* GetGlobalFunc(const string& func);
 | 
				
			||||||
 | 
						static const std::unordered_map<string, string> GetGlobalMapCopy();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
	static std::unordered_map<string, string> s_GlobalMap;
 | 
						static std::unordered_map<string, string> s_GlobalMap;
 | 
				
			||||||
 | 
				
			|||||||
@ -1035,19 +1035,36 @@ bool TestConstants()
 | 
				
			|||||||
	return success;
 | 
						return success;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TestFuncs()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						//auto vlf(VariationList<float>::Instance());
 | 
				
			||||||
 | 
						//vector<string> stringVec;
 | 
				
			||||||
 | 
						//stringVec.push_back("/ (");
 | 
				
			||||||
 | 
						////stringVec.push_back("log(");
 | 
				
			||||||
 | 
						//for (size_t i = 0; i < vlf->Size(); i++)
 | 
				
			||||||
 | 
						//{
 | 
				
			||||||
 | 
						//	auto var = vlf->GetVariation(i);
 | 
				
			||||||
 | 
						//	if (SearchVar(var, stringVec, false))
 | 
				
			||||||
 | 
						//	{
 | 
				
			||||||
 | 
						//		cout << var->Name() << endl;
 | 
				
			||||||
 | 
						//	}
 | 
				
			||||||
 | 
						//}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool TestGlobalFuncs()
 | 
					bool TestGlobalFuncs()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	bool success = true;
 | 
						bool success = true;
 | 
				
			||||||
	auto vlf(VariationList<float>::Instance());
 | 
						auto vlf(VariationList<float>::Instance());
 | 
				
			||||||
	vector<string> funcs;
 | 
						vector<string> funcs;
 | 
				
			||||||
	FunctionMapper mapper;
 | 
						FunctionMapper mapper;
 | 
				
			||||||
 | 
						auto funcmap = mapper.GetGlobalMapCopy();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (size_t i = 0; i < vlf->Size(); i++)
 | 
						for (size_t i = 0; i < vlf->Size(); i++)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		auto var = vlf->GetVariation(i);
 | 
							auto var = vlf->GetVariation(i);
 | 
				
			||||||
		funcs = var->OpenCLGlobalFuncNames();
 | 
							funcs = var->OpenCLGlobalFuncNames();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for (auto& func : funcs)
 | 
							for (auto& func : funcs)//Test if the functions the variation says it requires actually exist.
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (!mapper.GetGlobalFunc(func))
 | 
								if (!mapper.GetGlobalFunc(func))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@ -1059,6 +1076,23 @@ bool TestGlobalFuncs()
 | 
				
			|||||||
				//cout << "Variation " << var->Name() << " used valid global funcion " << func << endl;
 | 
									//cout << "Variation " << var->Name() << " used valid global funcion " << func << endl;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							auto str = var->OpenCLString();
 | 
				
			||||||
 | 
							auto vec = var->OpenCLGlobalFuncNames();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (auto& func : funcmap)//Test if the functions the variation uses are actually included in those it says are required.
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (Find(str, func.first + "("))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if (!Contains(vec, func.first))
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										cout << "Variation " << var->Name() << " used global funcion " << func.first << ", but it's not found in its global func name vector: " << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										for (auto& v : vec)
 | 
				
			||||||
 | 
											cout << v << endl;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return success;
 | 
						return success;
 | 
				
			||||||
@ -1221,11 +1255,11 @@ void TestVarTime()
 | 
				
			|||||||
			helper.m_Color.x = p.m_ColorX = rand.Frand01<T>();
 | 
								helper.m_Color.x = p.m_ColorX = rand.Frand01<T>();
 | 
				
			||||||
			p.m_Opacity = rand.Frand01<T>();
 | 
								p.m_Opacity = rand.Frand01<T>();
 | 
				
			||||||
			helper.m_PrecalcSumSquares = SQR(helper.m_TransX) + SQR(helper.m_TransY);
 | 
								helper.m_PrecalcSumSquares = SQR(helper.m_TransX) + SQR(helper.m_TransY);
 | 
				
			||||||
			helper.m_PrecalcSqrtSumSquares = sqrt(helper.m_PrecalcSumSquares);
 | 
								helper.m_PrecalcSqrtSumSquares = std::sqrt(helper.m_PrecalcSumSquares);
 | 
				
			||||||
			helper.m_PrecalcSina = helper.m_TransX / helper.m_PrecalcSqrtSumSquares;
 | 
								helper.m_PrecalcSina = helper.m_TransX / helper.m_PrecalcSqrtSumSquares;
 | 
				
			||||||
			helper.m_PrecalcCosa = helper.m_TransY / helper.m_PrecalcSqrtSumSquares;
 | 
								helper.m_PrecalcCosa = helper.m_TransY / helper.m_PrecalcSqrtSumSquares;
 | 
				
			||||||
			helper.m_PrecalcAtanxy = atan2(helper.m_TransX, helper.m_TransY);
 | 
								helper.m_PrecalcAtanxy = std::atan2(helper.m_TransX, helper.m_TransY);
 | 
				
			||||||
			helper.m_PrecalcAtanyx = atan2(helper.m_TransY, helper.m_TransX);
 | 
								helper.m_PrecalcAtanyx = std::atan2(helper.m_TransY, helper.m_TransX);
 | 
				
			||||||
			var->Random(rand);
 | 
								var->Random(rand);
 | 
				
			||||||
			t.Tic();
 | 
								t.Tic();
 | 
				
			||||||
			var->Func(helper, p, rand);
 | 
								var->Func(helper, p, rand);
 | 
				
			||||||
@ -1288,8 +1322,6 @@ void TestOperations()
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		cout << "Variation " << varVec[i]->Name() << " contained MwcNext(mwc) %. Use MwcNextRange() instead." << endl;
 | 
							cout << "Variation " << varVec[i]->Name() << " contained MwcNext(mwc) %. Use MwcNextRange() instead." << endl;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	stringVec.clear();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template <typename T>
 | 
					template <typename T>
 | 
				
			||||||
@ -1347,11 +1379,11 @@ void TestVarsSimilar()
 | 
				
			|||||||
				p.m_Opacity = rand.Frand01<T>();
 | 
									p.m_Opacity = rand.Frand01<T>();
 | 
				
			||||||
				pComp = p;
 | 
									pComp = p;
 | 
				
			||||||
				helper.m_PrecalcSumSquares = SQR(helper.m_TransX) + SQR(helper.m_TransY);
 | 
									helper.m_PrecalcSumSquares = SQR(helper.m_TransX) + SQR(helper.m_TransY);
 | 
				
			||||||
				helper.m_PrecalcSqrtSumSquares = sqrt(helper.m_PrecalcSumSquares);
 | 
									helper.m_PrecalcSqrtSumSquares = std::sqrt(helper.m_PrecalcSumSquares);
 | 
				
			||||||
				helper.m_PrecalcSina = helper.m_TransX / helper.m_PrecalcSqrtSumSquares;
 | 
									helper.m_PrecalcSina = helper.m_TransX / helper.m_PrecalcSqrtSumSquares;
 | 
				
			||||||
				helper.m_PrecalcCosa = helper.m_TransY / helper.m_PrecalcSqrtSumSquares;
 | 
									helper.m_PrecalcCosa = helper.m_TransY / helper.m_PrecalcSqrtSumSquares;
 | 
				
			||||||
				helper.m_PrecalcAtanxy = atan2(helper.m_TransX, helper.m_TransY);
 | 
									helper.m_PrecalcAtanxy = std::atan2(helper.m_TransX, helper.m_TransY);
 | 
				
			||||||
				helper.m_PrecalcAtanyx = atan2(helper.m_TransY, helper.m_TransX);
 | 
									helper.m_PrecalcAtanyx = std::atan2(helper.m_TransY, helper.m_TransX);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (parVar)
 | 
									if (parVar)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@ -1641,10 +1673,10 @@ void TestRandomAccess(size_t vsize, size_t ipp, bool cache)
 | 
				
			|||||||
			v4T v4(rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
 | 
								v4T v4(rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
 | 
				
			||||||
			int index = rand.Rand((ISAAC_INT)vsize);
 | 
								int index = rand.Rand((ISAAC_INT)vsize);
 | 
				
			||||||
			v4T v42 = vdata[index];
 | 
								v4T v42 = vdata[index];
 | 
				
			||||||
			v4.x = log(v4.x);
 | 
								v4.x = std::log(v4.x);
 | 
				
			||||||
			v4.y = sqrt(v4.y);
 | 
								v4.y = std::sqrt(v4.y);
 | 
				
			||||||
			v4.z = sin(v4.z);
 | 
								v4.z = std::sin(v4.z);
 | 
				
			||||||
			v4.w = cos(v4.w);
 | 
								v4.w = std::cos(v4.w);
 | 
				
			||||||
			v4 += T(1.234);
 | 
								v4 += T(1.234);
 | 
				
			||||||
			v4 *= T(55.55);
 | 
								v4 *= T(55.55);
 | 
				
			||||||
			v4 /= T(0.0045);
 | 
								v4 /= T(0.0045);
 | 
				
			||||||
@ -1657,10 +1689,10 @@ void TestRandomAccess(size_t vsize, size_t ipp, bool cache)
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			v4T v4(rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
 | 
								v4T v4(rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>(), rand.Frand11<T>());
 | 
				
			||||||
			int index = rand.Rand((ISAAC_INT)vsize);
 | 
								int index = rand.Rand((ISAAC_INT)vsize);
 | 
				
			||||||
			v4.x = log(v4.x);
 | 
								v4.x = std::log(v4.x);
 | 
				
			||||||
			v4.y = sqrt(v4.y);
 | 
								v4.y = std::sqrt(v4.y);
 | 
				
			||||||
			v4.z = sin(v4.z);
 | 
								v4.z = std::sin(v4.z);
 | 
				
			||||||
			v4.w = cos(v4.w);
 | 
								v4.w = std::cos(v4.w);
 | 
				
			||||||
			v4 += T(1.234);
 | 
								v4 += T(1.234);
 | 
				
			||||||
			v4 *= T(55.55);
 | 
								v4 *= T(55.55);
 | 
				
			||||||
			v4 /= T(0.0045);
 | 
								v4 /= T(0.0045);
 | 
				
			||||||
@ -1673,7 +1705,7 @@ template <typename T>
 | 
				
			|||||||
void TestCross(T x, T y, T weight)
 | 
					void TestCross(T x, T y, T weight)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	T s = x * x - y * y;
 | 
						T s = x * x - y * y;
 | 
				
			||||||
	T r = weight * sqrt(1 / (s * s + EPS));
 | 
						T r = weight * std::sqrt(1 / (s * s + EPS));
 | 
				
			||||||
	T outX = x * r;
 | 
						T outX = x * r;
 | 
				
			||||||
	T outY = y * r;
 | 
						T outY = y * r;
 | 
				
			||||||
	cout << "First way, outX, outY == " << outX << ", " << outY << endl;
 | 
						cout << "First way, outX, outY == " << outX << ", " << outY << endl;
 | 
				
			||||||
@ -1931,9 +1963,8 @@ int _tmain(int argc, _TCHAR* argv[])
 | 
				
			|||||||
	vector<Ember<double>> dv;
 | 
						vector<Ember<double>> dv;
 | 
				
			||||||
	list<Ember<float>> fl;
 | 
						list<Ember<float>> fl;
 | 
				
			||||||
	list<Ember<double>> dl;
 | 
						list<Ember<double>> dl;
 | 
				
			||||||
	_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
 | 
						/*  TestFuncs();
 | 
				
			||||||
	_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
 | 
						    string line = "title=\"cj_aerie\" smooth=no", delim = " =\"";
 | 
				
			||||||
	/*  string line = "title=\"cj_aerie\" smooth=no", delim = " =\"";
 | 
					 | 
				
			||||||
	    auto vec = Split(line, delim, true);
 | 
						    auto vec = Split(line, delim, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	    for (auto& s : vec) cout << s << endl;
 | 
						    for (auto& s : vec) cout << s << endl;
 | 
				
			||||||
@ -1958,9 +1989,9 @@ int _tmain(int argc, _TCHAR* argv[])
 | 
				
			|||||||
	    TestRotate<double>();
 | 
						    TestRotate<double>();
 | 
				
			||||||
	    return 1;
 | 
						    return 1;
 | 
				
			||||||
	*/
 | 
						*/
 | 
				
			||||||
	MakeTestAllVarsRegPrePostComboFile("testallvarsout.flame");
 | 
						//MakeTestAllVarsRegPrePostComboFile("testallvarsout.flame");
 | 
				
			||||||
	return 0;
 | 
						/*  return 0;
 | 
				
			||||||
	/*
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	    TestThreadedKernel();
 | 
						    TestThreadedKernel();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -481,8 +481,8 @@ int FinalRenderEmberController<T>::ProgressFunc(Ember<T>& ember, void* foo, doub
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	static int count = 0;
 | 
						static int count = 0;
 | 
				
			||||||
	size_t strip = *(reinterpret_cast<size_t*>(FirstOrDefaultRenderer()->m_ProgressParameter));
 | 
						size_t strip = *(reinterpret_cast<size_t*>(FirstOrDefaultRenderer()->m_ProgressParameter));
 | 
				
			||||||
	double fracPerStrip = ceil(100.0 / m_GuiState.m_Strips);
 | 
						double fracPerStrip = std::ceil(100.0 / m_GuiState.m_Strips);
 | 
				
			||||||
	double stripsfrac = ceil(fracPerStrip * strip) + ceil(fraction / m_GuiState.m_Strips);
 | 
						double stripsfrac = std::ceil(fracPerStrip * strip) + std::ceil(fraction / m_GuiState.m_Strips);
 | 
				
			||||||
	int intFract = int(stripsfrac);
 | 
						int intFract = int(stripsfrac);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (stage == 0)
 | 
						if (stage == 0)
 | 
				
			||||||
 | 
				
			|||||||
@ -319,6 +319,7 @@ void FractoriumEmberController<T>::PaletteEditorButtonClicked()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	size_t i = 0;
 | 
						size_t i = 0;
 | 
				
			||||||
	auto ed = m_Fractorium->m_PaletteEditor;
 | 
						auto ed = m_Fractorium->m_PaletteEditor;
 | 
				
			||||||
 | 
						Palette<float> edPal;
 | 
				
			||||||
	Palette<float> prevPal = m_TempPalette;
 | 
						Palette<float> prevPal = m_TempPalette;
 | 
				
			||||||
	ed->SetPalette(m_TempPalette);
 | 
						ed->SetPalette(m_TempPalette);
 | 
				
			||||||
	map<size_t, float> colorIndices;
 | 
						map<size_t, float> colorIndices;
 | 
				
			||||||
@ -327,28 +328,27 @@ void FractoriumEmberController<T>::PaletteEditorButtonClicked()
 | 
				
			|||||||
		colorIndices[i++] = xform->m_ColorX;
 | 
							colorIndices[i++] = xform->m_ColorX;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ed->SetColorIndices(colorIndices);
 | 
						ed->SetColorIndices(colorIndices);
 | 
				
			||||||
 | 
						ed->SetPaletteFile(m_CurrentPaletteFilePath);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ed->exec() == QDialog::Accepted)
 | 
						if (ed->exec() == QDialog::Accepted)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (!m_Fractorium->PaletteChanged())//If the clicked ok, but never synced, set the palette now.
 | 
							if (!m_Fractorium->PaletteChanged())//If the clicked ok, but never synced, set the palette now.
 | 
				
			||||||
			SetBasePaletteAndAdjust(ed->GetPalette(int(256)));
 | 
							{
 | 
				
			||||||
 | 
								edPal = ed->GetPalette(int(256));
 | 
				
			||||||
 | 
								SetBasePaletteAndAdjust(edPal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (edPal.m_Filename.get() && !edPal.m_Filename->empty())
 | 
				
			||||||
 | 
									m_Fractorium->SetPaletteFileComboIndex(*edPal.m_Filename);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (m_Fractorium->PaletteChanged())//They clicked cancel, but synced at least once, restore the previous palette.
 | 
						else if (m_Fractorium->PaletteChanged())//They clicked cancel, but synced at least once, restore the previous palette.
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		SetBasePaletteAndAdjust(prevPal);
 | 
							SetBasePaletteAndAdjust(prevPal);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//If the palette was modifiable, and any palette was changed at least once
 | 
						//Whether the current palette file was changed or not, if it's modifiable then reload it just to be safe.
 | 
				
			||||||
	if (m_Fractorium->m_PaletteFileChanged && m_PaletteList->IsModifiable(m_CurrentPaletteFilePath))
 | 
						if (m_PaletteList->IsModifiable(m_CurrentPaletteFilePath))
 | 
				
			||||||
	{
 | 
							m_Fractorium->OnPaletteFilenameComboChanged(QString::fromStdString(m_CurrentPaletteFilePath));
 | 
				
			||||||
		if (!::FillPaletteTable(m_CurrentPaletteFilePath, m_Fractorium->ui.PaletteListTable, m_PaletteList))
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			vector<string> errors = m_PaletteList->ErrorReport();
 | 
					 | 
				
			||||||
			m_Fractorium->ErrorReportToQTextEdit(errors, m_Fractorium->ui.InfoFileOpeningTextEdit);
 | 
					 | 
				
			||||||
			m_Fractorium->ShowCritical("Palette Read Error", "Could not re-load modified palette file, all images will be black. See info tab for details.");
 | 
					 | 
				
			||||||
			m_PaletteList->ClearErrorReport();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
 | 
				
			|||||||
@ -259,21 +259,21 @@ void FractoriumEmberController<T>::AffineSetHelper(double d, int index, bool pre
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				case 0:
 | 
									case 0:
 | 
				
			||||||
				case 3:
 | 
									case 3:
 | 
				
			||||||
					affine.A(cos(spinners[0]->value() * DEG_2_RAD) * spinners[3]->value());
 | 
										affine.A(std::cos(spinners[0]->value() * DEG_2_RAD) * spinners[3]->value());
 | 
				
			||||||
					affine.D(sin(spinners[0]->value() * DEG_2_RAD) * spinners[3]->value());
 | 
										affine.D(std::sin(spinners[0]->value() * DEG_2_RAD) * spinners[3]->value());
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case 1:
 | 
									case 1:
 | 
				
			||||||
				case 4:
 | 
									case 4:
 | 
				
			||||||
					affine.B(cos(spinners[1]->value() * DEG_2_RAD) * spinners[4]->value());
 | 
										affine.B(std::cos(spinners[1]->value() * DEG_2_RAD) * spinners[4]->value());
 | 
				
			||||||
					affine.E(sin(spinners[1]->value() * DEG_2_RAD) * spinners[4]->value());
 | 
										affine.E(std::sin(spinners[1]->value() * DEG_2_RAD) * spinners[4]->value());
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case 2:
 | 
									case 2:
 | 
				
			||||||
				case 5:
 | 
									case 5:
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
					affine.C(cos(spinners[2]->value() * DEG_2_RAD) * spinners[5]->value());
 | 
										affine.C(std::cos(spinners[2]->value() * DEG_2_RAD) * spinners[5]->value());
 | 
				
			||||||
					affine.F(sin(spinners[2]->value() * DEG_2_RAD) * spinners[5]->value());
 | 
										affine.F(std::sin(spinners[2]->value() * DEG_2_RAD) * spinners[5]->value());
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -623,9 +623,9 @@ void FractoriumEmberController<T>::FillAffineWithXform(Xform<T>* xform, bool pre
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (m_Fractorium->ui.PolarAffineCheckBox->isChecked())
 | 
						if (m_Fractorium->ui.PolarAffineCheckBox->isChecked())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		spinners[0]->SetValueStealth(RAD_2_DEG * atan2(affine.D(), affine.A()));
 | 
							spinners[0]->SetValueStealth(RAD_2_DEG * std::atan2(affine.D(), affine.A()));
 | 
				
			||||||
		spinners[1]->SetValueStealth(RAD_2_DEG * atan2(affine.E(), affine.B()));
 | 
							spinners[1]->SetValueStealth(RAD_2_DEG * std::atan2(affine.E(), affine.B()));
 | 
				
			||||||
		spinners[2]->SetValueStealth(RAD_2_DEG * atan2(affine.F(), affine.C()));
 | 
							spinners[2]->SetValueStealth(RAD_2_DEG * std::atan2(affine.F(), affine.C()));
 | 
				
			||||||
		spinners[3]->SetValueStealth(VarFuncs<T>::Hypot(affine.D(), affine.A()));
 | 
							spinners[3]->SetValueStealth(VarFuncs<T>::Hypot(affine.D(), affine.A()));
 | 
				
			||||||
		spinners[4]->SetValueStealth(VarFuncs<T>::Hypot(affine.E(), affine.B()));
 | 
							spinners[4]->SetValueStealth(VarFuncs<T>::Hypot(affine.E(), affine.B()));
 | 
				
			||||||
		spinners[5]->SetValueStealth(VarFuncs<T>::Hypot(affine.F(), affine.C()));
 | 
							spinners[5]->SetValueStealth(VarFuncs<T>::Hypot(affine.F(), affine.C()));
 | 
				
			||||||
 | 
				
			|||||||
@ -860,10 +860,10 @@ void GLEmberController<T>::DrawGrid()
 | 
				
			|||||||
	double scale = m_FractoriumEmberController->AffineScaleCurrentToLocked();
 | 
						double scale = m_FractoriumEmberController->AffineScaleCurrentToLocked();
 | 
				
			||||||
	float unitX = (std::abs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0f) / scale;
 | 
						float unitX = (std::abs(renderer->UpperRightX(false) - renderer->LowerLeftX(false)) / 2.0f) / scale;
 | 
				
			||||||
	float unitY = (std::abs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0f) / scale;
 | 
						float unitY = (std::abs(renderer->UpperRightY(false) - renderer->LowerLeftY(false)) / 2.0f) / scale;
 | 
				
			||||||
	float xLow =  floor(-unitX);
 | 
						float xLow = std::floor(-unitX);
 | 
				
			||||||
	float xHigh = ceil(unitX);
 | 
						float xHigh = std::ceil(unitX);
 | 
				
			||||||
	float yLow =  floor(-unitY);
 | 
						float yLow = std::floor(-unitY);
 | 
				
			||||||
	float yHigh = ceil(unitY);
 | 
						float yHigh = std::ceil(unitY);
 | 
				
			||||||
	float alpha = 0.25f;
 | 
						float alpha = 0.25f;
 | 
				
			||||||
	Affine2D<T> temp;
 | 
						Affine2D<T> temp;
 | 
				
			||||||
	m4T mat = (temp * scale).ToMat4RowMajor();
 | 
						m4T mat = (temp * scale).ToMat4RowMajor();
 | 
				
			||||||
 | 
				
			|||||||
@ -70,8 +70,11 @@
 | 
				
			|||||||
         <height>16777215</height>
 | 
					         <height>16777215</height>
 | 
				
			||||||
        </size>
 | 
					        </size>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
       <property name="font">
 | 
								 <property name="font">
 | 
				
			||||||
       </property>
 | 
								 	<font>
 | 
				
			||||||
 | 
								 		<kerning>true</kerning>
 | 
				
			||||||
 | 
								 	</font>
 | 
				
			||||||
 | 
								 </property>
 | 
				
			||||||
       <property name="frameShape">
 | 
					       <property name="frameShape">
 | 
				
			||||||
        <enum>QFrame::Panel</enum>
 | 
					        <enum>QFrame::Panel</enum>
 | 
				
			||||||
       </property>
 | 
					       </property>
 | 
				
			||||||
 | 
				
			|||||||
@ -105,18 +105,18 @@ ColorTriangle::ColorTriangle(QWidget* parent)
 | 
				
			|||||||
void ColorTriangle::Polish()
 | 
					void ColorTriangle::Polish()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	outerRadius = CalcOuterRadius();//Matt
 | 
						outerRadius = CalcOuterRadius();//Matt
 | 
				
			||||||
	penWidth = (int) floor(outerRadius / 50.0);
 | 
						penWidth = (int)Floor(outerRadius / 50.0);
 | 
				
			||||||
	ellipseSize = (int) floor(outerRadius / 12.5);
 | 
						ellipseSize = (int) Floor(outerRadius / 12.5);
 | 
				
			||||||
	double cx = (double) contentsRect().center().x();
 | 
						double cx = (double) contentsRect().center().x();
 | 
				
			||||||
	double cy = (double) contentsRect().center().y();
 | 
						double cy = (double) contentsRect().center().y();
 | 
				
			||||||
	pa = QPointF(cx + (cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
						pa = QPointF(cx + (std::cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
				 cy - (sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
									 cy - (std::sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
	pb = QPointF(cx + (cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
						pb = QPointF(cx + (std::cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
				 cy - (sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
									 cy - (std::sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
	pc = QPointF(cx + (cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
						pc = QPointF(cx + (std::cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
				 cy - (sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
									 cy - (std::sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
	pd = QPointF(cx + (cos(a) * (outerRadius - (outerRadius / 10.0))),
 | 
						pd = QPointF(cx + (std::cos(a) * (outerRadius - (outerRadius / 10.0))),
 | 
				
			||||||
				 cy - (sin(a) * (outerRadius - (outerRadius / 10.0))));
 | 
									 cy - (std::sin(a) * (outerRadius - (outerRadius / 10.0))));
 | 
				
			||||||
	// Find the current position of the selector
 | 
						// Find the current position of the selector
 | 
				
			||||||
	selectorPos = PointFromColor(curColor);
 | 
						selectorPos = PointFromColor(curColor);
 | 
				
			||||||
	update();
 | 
						update();
 | 
				
			||||||
@ -182,7 +182,7 @@ void ColorTriangle::GenBackground()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for (int f = 0; f <= 5760; f += 20)
 | 
						for (int f = 0; f <= 5760; f += 20)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		int value = int((0.5 + cos(((f - 1800) / 5760.0) * TWOPI) / 2) * 255.0);
 | 
							int value = int((0.5 + std::cos(((f - 1800) / 5760.0) * TWOPI) / 2) * 255.0);
 | 
				
			||||||
		color.setHsv(int((f / 5760.0) * 360.0), 128 + (255 - value) / 2, 255 - (255 - value) / 4);
 | 
							color.setHsv(int((f / 5760.0) * 360.0), 128 + (255 - value) / 2, 255 - (255 - value) / 4);
 | 
				
			||||||
		p.setPen(QPen(color, penThickness));
 | 
							p.setPen(QPen(color, penThickness));
 | 
				
			||||||
		p.drawArc(innerRadiusRect, 1440 - f, 20);
 | 
							p.drawArc(innerRadiusRect, 1440 - f, 20);
 | 
				
			||||||
@ -237,14 +237,14 @@ void ColorTriangle::mouseMoveEvent(QMouseEvent* e)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		double cx = (double) contentsRect().center().x();
 | 
							double cx = (double) contentsRect().center().x();
 | 
				
			||||||
		double cy = (double) contentsRect().center().y();
 | 
							double cy = (double) contentsRect().center().y();
 | 
				
			||||||
		pa = QPointF(cx + (cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
							pa = QPointF(cx + (std::cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
					 cy - (sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
										 cy - (std::sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
		pb = QPointF(cx + (cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
							pb = QPointF(cx + (std::cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
					 cy - (sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
										 cy - (std::sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
		pc = QPointF(cx + (cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
							pc = QPointF(cx + (std::cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
					 cy - (sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
										 cy - (std::sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
		pd = QPointF(cx + (cos(a) * (outerRadius - (outerRadius / 10.0))),
 | 
							pd = QPointF(cx + (std::cos(a) * (outerRadius - (outerRadius / 10.0))),
 | 
				
			||||||
					 cy - (sin(a) * (outerRadius - (outerRadius / 10.0))));
 | 
										 cy - (std::sin(a) * (outerRadius - (outerRadius / 10.0))));
 | 
				
			||||||
		selectorPos = PointFromColor(curColor);
 | 
							selectorPos = PointFromColor(curColor);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
@ -331,14 +331,14 @@ void ColorTriangle::mousePressEvent(QMouseEvent* e)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		double cx = (double) contentsRect().center().x();
 | 
							double cx = (double) contentsRect().center().x();
 | 
				
			||||||
		double cy = (double) contentsRect().center().y();
 | 
							double cy = (double) contentsRect().center().y();
 | 
				
			||||||
		pa = QPointF(cx + (cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
							pa = QPointF(cx + (std::cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
					 cy - (sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
										 cy - (std::sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
		pb = QPointF(cx + (cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
							pb = QPointF(cx + (std::cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
					 cy - (sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
										 cy - (std::sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
		pc = QPointF(cx + (cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
							pc = QPointF(cx + (std::cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
					 cy - (sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
										 cy - (std::sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
		pd = QPointF(cx + (cos(a) * (outerRadius - (outerRadius / 10.0))),
 | 
							pd = QPointF(cx + (std::cos(a) * (outerRadius - (outerRadius / 10.0))),
 | 
				
			||||||
					 cy - (sin(a) * (outerRadius - (outerRadius / 10.0))));
 | 
										 cy - (std::sin(a) * (outerRadius - (outerRadius / 10.0))));
 | 
				
			||||||
		selectorPos = PointFromColor(curColor);
 | 
							selectorPos = PointFromColor(curColor);
 | 
				
			||||||
		emit ColorChanged(curColor);
 | 
							emit ColorChanged(curColor);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -477,18 +477,18 @@ void ColorTriangle::keyPressEvent(QKeyEvent* e)
 | 
				
			|||||||
void ColorTriangle::resizeEvent(QResizeEvent*)
 | 
					void ColorTriangle::resizeEvent(QResizeEvent*)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	outerRadius = CalcOuterRadius();//Matt
 | 
						outerRadius = CalcOuterRadius();//Matt
 | 
				
			||||||
	penWidth = (int) floor(outerRadius / 50.0);
 | 
						penWidth = (int)Floor(outerRadius / 50.0);
 | 
				
			||||||
	ellipseSize = (int) floor(outerRadius / 12.5);
 | 
						ellipseSize = (int)Floor(outerRadius / 12.5);
 | 
				
			||||||
	double cx = (double) contentsRect().center().x();
 | 
						double cx = (double) contentsRect().center().x();
 | 
				
			||||||
	double cy = (double) contentsRect().center().y();
 | 
						double cy = (double) contentsRect().center().y();
 | 
				
			||||||
	pa = QPointF(cx + (cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
						pa = QPointF(cx + (std::cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
				 cy - (sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
									 cy - (std::sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
	pb = QPointF(cx + (cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
						pb = QPointF(cx + (std::cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
				 cy - (sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
									 cy - (std::sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
	pc = QPointF(cx + (cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
						pc = QPointF(cx + (std::cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
				 cy - (sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
									 cy - (std::sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
	pd = QPointF(cx + (cos(a) * (outerRadius - (outerRadius / 10.0))),
 | 
						pd = QPointF(cx + (std::cos(a) * (outerRadius - (outerRadius / 10.0))),
 | 
				
			||||||
				 cy - (sin(a) * (outerRadius - (outerRadius / 10.0))));
 | 
									 cy - (std::sin(a) * (outerRadius - (outerRadius / 10.0))));
 | 
				
			||||||
	// Find the current position of the selector
 | 
						// Find the current position of the selector
 | 
				
			||||||
	selectorPos = PointFromColor(curColor);
 | 
						selectorPos = PointFromColor(curColor);
 | 
				
			||||||
	mustGenerateBackground = true;
 | 
						mustGenerateBackground = true;
 | 
				
			||||||
@ -614,10 +614,10 @@ void ColorTriangle::DrawTrigon(QImage* buf, const QPointF& pa,
 | 
				
			|||||||
	QVarLengthArray<DoubleColor, 2000> rightColors;
 | 
						QVarLengthArray<DoubleColor, 2000> rightColors;
 | 
				
			||||||
	QVarLengthArray<double, 2000> leftX;
 | 
						QVarLengthArray<double, 2000> leftX;
 | 
				
			||||||
	QVarLengthArray<double, 2000> rightX;
 | 
						QVarLengthArray<double, 2000> rightX;
 | 
				
			||||||
	leftColors.resize(int(floor(p3->point.y() + 1)));
 | 
						leftColors.resize(int(Floor(p3->point.y() + 1)));
 | 
				
			||||||
	rightColors.resize(int(floor(p3->point.y() + 1)));
 | 
						rightColors.resize(int(Floor(p3->point.y() + 1)));
 | 
				
			||||||
	leftX.resize(int(floor(p3->point.y() + 1)));
 | 
						leftX.resize(int(Floor(p3->point.y() + 1)));
 | 
				
			||||||
	rightX.resize(int(floor(p3->point.y() + 1)));
 | 
						rightX.resize(int(Floor(p3->point.y() + 1)));
 | 
				
			||||||
	// Scan longy - find all left and right colors and X-values for
 | 
						// Scan longy - find all left and right colors and X-values for
 | 
				
			||||||
	// the tallest edge (p1-p3).
 | 
						// the tallest edge (p1-p3).
 | 
				
			||||||
	DoubleColor source;
 | 
						DoubleColor source;
 | 
				
			||||||
@ -634,8 +634,8 @@ void ColorTriangle::DrawTrigon(QImage* buf, const QPointF& pa,
 | 
				
			|||||||
	r = source.r;
 | 
						r = source.r;
 | 
				
			||||||
	g = source.g;
 | 
						g = source.g;
 | 
				
			||||||
	b = source.b;
 | 
						b = source.b;
 | 
				
			||||||
	y1 = (int) floor(p1->point.y());
 | 
						y1 = (int)Floor(p1->point.y());
 | 
				
			||||||
	y2 = (int) floor(p3->point.y());
 | 
						y2 = (int)Floor(p3->point.y());
 | 
				
			||||||
	// Find slopes (notice that if the y dists are 0, we don't care
 | 
						// Find slopes (notice that if the y dists are 0, we don't care
 | 
				
			||||||
	// about the slopes)
 | 
						// about the slopes)
 | 
				
			||||||
	xdelta = p1p3ydist == 0.0 ? 0.0 : p1p3xdist / p1p3ydist;
 | 
						xdelta = p1p3ydist == 0.0 ? 0.0 : p1p3xdist / p1p3ydist;
 | 
				
			||||||
@ -672,8 +672,8 @@ void ColorTriangle::DrawTrigon(QImage* buf, const QPointF& pa,
 | 
				
			|||||||
	r = source.r;
 | 
						r = source.r;
 | 
				
			||||||
	g = source.g;
 | 
						g = source.g;
 | 
				
			||||||
	b = source.b;
 | 
						b = source.b;
 | 
				
			||||||
	y1 = (int) floor(p1->point.y());
 | 
						y1 = (int)Floor(p1->point.y());
 | 
				
			||||||
	y2 = (int) floor(p2->point.y());
 | 
						y2 = (int)Floor(p2->point.y());
 | 
				
			||||||
	// Find slopes (notice that if the y dists are 0, we don't care
 | 
						// Find slopes (notice that if the y dists are 0, we don't care
 | 
				
			||||||
	// about the slopes)
 | 
						// about the slopes)
 | 
				
			||||||
	xdelta = p1p2ydist == 0.0 ? 0.0 : p1p2xdist / p1p2ydist;
 | 
						xdelta = p1p2ydist == 0.0 ? 0.0 : p1p2xdist / p1p2ydist;
 | 
				
			||||||
@ -709,8 +709,8 @@ void ColorTriangle::DrawTrigon(QImage* buf, const QPointF& pa,
 | 
				
			|||||||
	r = source.r;
 | 
						r = source.r;
 | 
				
			||||||
	g = source.g;
 | 
						g = source.g;
 | 
				
			||||||
	b = source.b;
 | 
						b = source.b;
 | 
				
			||||||
	y1 = (int) floor(p2->point.y());
 | 
						y1 = (int)Floor(p2->point.y());
 | 
				
			||||||
	y2 = (int) floor(p3->point.y());
 | 
						y2 = (int)Floor(p3->point.y());
 | 
				
			||||||
	// Find slopes (notice that if the y dists are 0, we don't care
 | 
						// Find slopes (notice that if the y dists are 0, we don't care
 | 
				
			||||||
	// about the slopes)
 | 
						// about the slopes)
 | 
				
			||||||
	xdelta = p2p3ydist == 0.0 ? 0.0 : p2p3xdist / p2p3ydist;
 | 
						xdelta = p2p3ydist == 0.0 ? 0.0 : p2p3xdist / p2p3ydist;
 | 
				
			||||||
@ -740,14 +740,14 @@ void ColorTriangle::DrawTrigon(QImage* buf, const QPointF& pa,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Inner loop. For each y in the left map of x-values, draw one
 | 
						// Inner loop. For each y in the left map of x-values, draw one
 | 
				
			||||||
	// line from left to right.
 | 
						// line from left to right.
 | 
				
			||||||
	const int p3yfloor = int(floor(p3->point.y()));
 | 
						const int p3yfloor = int(Floor(p3->point.y()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (int y = int(floor(p1->point.y())); y < p3yfloor; ++y)
 | 
						for (int y = int(Floor(p1->point.y())); y < p3yfloor; ++y)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		double lx = leftX[y];
 | 
							double lx = leftX[y];
 | 
				
			||||||
		double rx = rightX[y];
 | 
							double rx = rightX[y];
 | 
				
			||||||
		int lxi = (int) floor(lx);
 | 
							int lxi = (int)Floor(lx);
 | 
				
			||||||
		int rxi = (int) floor(rx);
 | 
							int rxi = (int)Floor(rx);
 | 
				
			||||||
		DoubleColor rc = rightColors[y];
 | 
							DoubleColor rc = rightColors[y];
 | 
				
			||||||
		DoubleColor lc = leftColors[y];
 | 
							DoubleColor lc = leftColors[y];
 | 
				
			||||||
		// if the xdist is 0, don't draw anything.
 | 
							// if the xdist is 0, don't draw anything.
 | 
				
			||||||
@ -809,10 +809,10 @@ void ColorTriangle::Color(const QColor& col)
 | 
				
			|||||||
	double cy = (double) contentsRect().center().y();
 | 
						double cy = (double) contentsRect().center().y();
 | 
				
			||||||
	double innerRadius = outerRadius - (outerRadius / 5.0);
 | 
						double innerRadius = outerRadius - (outerRadius / 5.0);
 | 
				
			||||||
	double pointerRadius = outerRadius - (outerRadius / 10.0);
 | 
						double pointerRadius = outerRadius - (outerRadius / 10.0);
 | 
				
			||||||
	pa = QPointF(cx + (cos(a) * innerRadius), cy - (sin(a) * innerRadius));
 | 
						pa = QPointF(cx + (std::cos(a) * innerRadius), cy - (std::sin(a) * innerRadius));
 | 
				
			||||||
	pb = QPointF(cx + (cos(b) * innerRadius), cy - (sin(b) * innerRadius));
 | 
						pb = QPointF(cx + (std::cos(b) * innerRadius), cy - (std::sin(b) * innerRadius));
 | 
				
			||||||
	pc = QPointF(cx + (cos(c) * innerRadius), cy - (sin(c) * innerRadius));
 | 
						pc = QPointF(cx + (std::cos(c) * innerRadius), cy - (std::sin(c) * innerRadius));
 | 
				
			||||||
	pd = QPointF(cx + (cos(a) * pointerRadius), cy - (sin(a) * pointerRadius));
 | 
						pd = QPointF(cx + (std::cos(a) * pointerRadius), cy - (std::sin(a) * pointerRadius));
 | 
				
			||||||
	selectorPos = PointFromColor(curColor);
 | 
						selectorPos = PointFromColor(curColor);
 | 
				
			||||||
	update();
 | 
						update();
 | 
				
			||||||
	emit ColorChanged(curColor);
 | 
						emit ColorChanged(curColor);
 | 
				
			||||||
@ -862,7 +862,7 @@ double ColorTriangle::AngleAt(const QPointF& pos, const QRect& rect) const
 | 
				
			|||||||
	if (mouserad == 0.0)
 | 
						if (mouserad == 0.0)
 | 
				
			||||||
		return 0.0;
 | 
							return 0.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	double angle = acos(mousexdist / mouserad);
 | 
						double angle = std::acos(mousexdist / mouserad);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (mouseydist >= 0)
 | 
						if (mouseydist >= 0)
 | 
				
			||||||
		angle = TWOPI - angle;
 | 
							angle = TWOPI - angle;
 | 
				
			||||||
@ -899,8 +899,8 @@ inline double vprod(double x1, double y1, double x2, double y2)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/*! \internal
 | 
					/*! \internal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Returns true if the point cos(p),sin(p) is on the arc between
 | 
						Returns true if the point std::cos(p),sin(p) is on the arc between
 | 
				
			||||||
	cos(a1),sin(a1) and cos(a2),sin(a2); otherwise returns false.
 | 
						cos(a1),sin(a1) and std::cos(a2),sin(a2); otherwise returns false.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
bool angleBetweenAngles(double p, double a1, double a2)
 | 
					bool angleBetweenAngles(double p, double a1, double a2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -936,18 +936,18 @@ static bool pointAbovePoint(double x, double y, double px, double py,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	bool result = false;
 | 
						bool result = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (floor(ax) > floor(bx))
 | 
						if (Floor(ax) > Floor(bx))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (floor(ay) < floor(by))
 | 
							if (Floor(ay) < Floor(by))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// line is draw upright-to-downleft
 | 
								// line is draw upright-to-downleft
 | 
				
			||||||
			if (floor(x) < floor(px) || floor(y) < floor(py))
 | 
								if (Floor(x) < Floor(px) || Floor(y) < Floor(py))
 | 
				
			||||||
				result = true;
 | 
									result = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (floor(ay) > floor(by))
 | 
							else if (Floor(ay) > Floor(by))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// line is draw downright-to-upleft
 | 
								// line is draw downright-to-upleft
 | 
				
			||||||
			if (floor(x) > floor(px) || floor(y) < floor(py))
 | 
								if (Floor(x) > Floor(px) || Floor(y) < Floor(py))
 | 
				
			||||||
				result = true;
 | 
									result = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
@ -956,18 +956,18 @@ static bool pointAbovePoint(double x, double y, double px, double py,
 | 
				
			|||||||
			if (y < ay) result = true;
 | 
								if (y < ay) result = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (floor(ax) < floor(bx))
 | 
						else if (Floor(ax) < Floor(bx))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (floor(ay) < floor(by))
 | 
							if (Floor(ay) < Floor(by))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// line is draw upleft-to-downright
 | 
								// line is draw upleft-to-downright
 | 
				
			||||||
			if (floor(x) < floor(px) || floor(y) > floor(py))
 | 
								if (Floor(x) < Floor(px) || Floor(y) > Floor(py))
 | 
				
			||||||
				result = true;
 | 
									result = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (floor(ay) > floor(by))
 | 
							else if (Floor(ay) > Floor(by))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			// line is draw downleft-to-upright
 | 
								// line is draw downleft-to-upright
 | 
				
			||||||
			if (floor(x) > floor(px) || floor(y) > floor(py))
 | 
								if (Floor(x) > Floor(px) || Floor(y) > Floor(py))
 | 
				
			||||||
				result = true;
 | 
									result = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
@ -980,11 +980,11 @@ static bool pointAbovePoint(double x, double y, double px, double py,
 | 
				
			|||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// line is vertical
 | 
							// line is vertical
 | 
				
			||||||
		if (floor(ay) < floor(by))
 | 
							if (Floor(ay) < Floor(by))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (x < ax) result = true;
 | 
								if (x < ax) result = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if (floor(ay) > floor(by))
 | 
							else if (Floor(ay) > Floor(by))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (x > ax) result = true;
 | 
								if (x > ax) result = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -1029,7 +1029,7 @@ static int pointInLine(double x, double y, double ax, double ay,
 | 
				
			|||||||
			// line is draw downright-to-upleft
 | 
								// line is draw downright-to-upleft
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// If the line is flat, only use the x coordinate.
 | 
								// If the line is flat, only use the x coordinate.
 | 
				
			||||||
			if (floor(ay) == floor(by))
 | 
								if (Floor(ay) == Floor(by))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				// if (x is to the right of the rightmost point,
 | 
									// if (x is to the right of the rightmost point,
 | 
				
			||||||
				// return -1. otherwise if x is to the left of the
 | 
									// return -1. otherwise if x is to the left of the
 | 
				
			||||||
@ -1074,7 +1074,7 @@ static int pointInLine(double x, double y, double ax, double ay,
 | 
				
			|||||||
			// line is draw downleft-to-upright
 | 
								// line is draw downleft-to-upright
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// If the line is flat, only use the x coordinate.
 | 
								// If the line is flat, only use the x coordinate.
 | 
				
			||||||
			if (floor(ay) == floor(by))
 | 
								if (Floor(ay) == Floor(by))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (x <= ax)
 | 
									if (x <= ax)
 | 
				
			||||||
					return -1;
 | 
										return -1;
 | 
				
			||||||
@ -1128,7 +1128,7 @@ QPointF ColorTriangle::MovePointToTriangle(double x, double y, const Vertex& a,
 | 
				
			|||||||
	double v2yA = b.point.y() - a.point.y();
 | 
						double v2yA = b.point.y() - a.point.y();
 | 
				
			||||||
	double vpA = vprod(v1xA, v1yA, v2xA, v2yA);
 | 
						double vpA = vprod(v1xA, v1yA, v2xA, v2yA);
 | 
				
			||||||
	double cosA = vpA / (vlen(v1xA, v1yA) * vlen(v2xA, v2yA));
 | 
						double cosA = vpA / (vlen(v1xA, v1yA) * vlen(v2xA, v2yA));
 | 
				
			||||||
	double alphaA = acos(cosA);
 | 
						double alphaA = std::acos(cosA);
 | 
				
			||||||
	// Let v1B be the vector from x to b.
 | 
						// Let v1B be the vector from x to b.
 | 
				
			||||||
	// Let v2B be the vector from b to c.
 | 
						// Let v2B be the vector from b to c.
 | 
				
			||||||
	double v1xB = x - b.point.x();
 | 
						double v1xB = x - b.point.x();
 | 
				
			||||||
@ -1137,7 +1137,7 @@ QPointF ColorTriangle::MovePointToTriangle(double x, double y, const Vertex& a,
 | 
				
			|||||||
	double v2yB = c.point.y() - b.point.y();
 | 
						double v2yB = c.point.y() - b.point.y();
 | 
				
			||||||
	double vpB = vprod(v1xB, v1yB, v2xB, v2yB);
 | 
						double vpB = vprod(v1xB, v1yB, v2xB, v2yB);
 | 
				
			||||||
	double cosB = vpB / (vlen(v1xB, v1yB) * vlen(v2xB, v2yB));
 | 
						double cosB = vpB / (vlen(v1xB, v1yB) * vlen(v2xB, v2yB));
 | 
				
			||||||
	double alphaB = acos(cosB);
 | 
						double alphaB = std::acos(cosB);
 | 
				
			||||||
	// Let v1C be the vector from x to c.
 | 
						// Let v1C be the vector from x to c.
 | 
				
			||||||
	// Let v2C be the vector from c back to a.
 | 
						// Let v2C be the vector from c back to a.
 | 
				
			||||||
	double v1xC = x - c.point.x();
 | 
						double v1xC = x - c.point.x();
 | 
				
			||||||
@ -1146,7 +1146,7 @@ QPointF ColorTriangle::MovePointToTriangle(double x, double y, const Vertex& a,
 | 
				
			|||||||
	double v2yC = a.point.y() - c.point.y();
 | 
						double v2yC = a.point.y() - c.point.y();
 | 
				
			||||||
	double vpC = vprod(v1xC, v1yC, v2xC, v2yC);
 | 
						double vpC = vprod(v1xC, v1yC, v2xC, v2yC);
 | 
				
			||||||
	double cosC = vpC / (vlen(v1xC, v1yC) * vlen(v2xC, v2yC));
 | 
						double cosC = vpC / (vlen(v1xC, v1yC) * vlen(v2xC, v2yC));
 | 
				
			||||||
	double alphaC = acos(cosC);
 | 
						double alphaC = std::acos(cosC);
 | 
				
			||||||
	// Find the radian angles between the (1,0) vector and the points
 | 
						// Find the radian angles between the (1,0) vector and the points
 | 
				
			||||||
	// A, B, C and (x,y). Use this information to determine which of
 | 
						// A, B, C and (x,y). Use this information to determine which of
 | 
				
			||||||
	// the edges we should project (x,y) onto.
 | 
						// the edges we should project (x,y) onto.
 | 
				
			||||||
@ -1164,8 +1164,8 @@ QPointF ColorTriangle::MovePointToTriangle(double x, double y, const Vertex& a,
 | 
				
			|||||||
		// perpendicular projection from (x,y) onto a-b.
 | 
							// perpendicular projection from (x,y) onto a-b.
 | 
				
			||||||
		double pdist = std::sqrt(qsqr(x - a.point.x()) + qsqr(y - a.point.y()));
 | 
							double pdist = std::sqrt(qsqr(x - a.point.x()) + qsqr(y - a.point.y()));
 | 
				
			||||||
		// the length of all edges is always > 0
 | 
							// the length of all edges is always > 0
 | 
				
			||||||
		double p0x = a.point.x() + ((b.point.x() - a.point.x()) / vlen(v2xB, v2yB)) * cos(alphaA) * pdist;
 | 
							double p0x = a.point.x() + ((b.point.x() - a.point.x()) / vlen(v2xB, v2yB)) * std::cos(alphaA) * pdist;
 | 
				
			||||||
		double p0y = a.point.y() + ((b.point.y() - a.point.y()) / vlen(v2xB, v2yB)) * cos(alphaA) * pdist;
 | 
							double p0y = a.point.y() + ((b.point.y() - a.point.y()) / vlen(v2xB, v2yB)) * std::cos(alphaA) * pdist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// If (x,y) is above the a-b line, which basically means it's
 | 
							// If (x,y) is above the a-b line, which basically means it's
 | 
				
			||||||
		// outside the triangle, then return its projection onto a-b.
 | 
							// outside the triangle, then return its projection onto a-b.
 | 
				
			||||||
@ -1188,8 +1188,8 @@ QPointF ColorTriangle::MovePointToTriangle(double x, double y, const Vertex& a,
 | 
				
			|||||||
		// If (x,y) is in the b-c area, project onto the b-c vector.
 | 
							// If (x,y) is in the b-c area, project onto the b-c vector.
 | 
				
			||||||
		double pdist = std::sqrt(qsqr(x - b.point.x()) + qsqr(y - b.point.y()));
 | 
							double pdist = std::sqrt(qsqr(x - b.point.x()) + qsqr(y - b.point.y()));
 | 
				
			||||||
		// the length of all edges is always > 0
 | 
							// the length of all edges is always > 0
 | 
				
			||||||
		double p0x = b.point.x() + ((c.point.x() - b.point.x()) / vlen(v2xC, v2yC)) * cos(alphaB) * pdist;
 | 
							double p0x = b.point.x() + ((c.point.x() - b.point.x()) / vlen(v2xC, v2yC)) * std::cos(alphaB) * pdist;
 | 
				
			||||||
		double p0y = b.point.y() + ((c.point.y() - b.point.y()) / vlen(v2xC, v2yC)) * cos(alphaB) * pdist;
 | 
							double p0y = b.point.y() + ((c.point.y() - b.point.y()) / vlen(v2xC, v2yC)) * std::cos(alphaB) * pdist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (pointAbovePoint(x, y, p0x, p0y, b.point.x(), b.point.y(), c.point.x(), c.point.y()))
 | 
							if (pointAbovePoint(x, y, p0x, p0y, b.point.x(), b.point.y(), c.point.x(), c.point.y()))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@ -1208,8 +1208,8 @@ QPointF ColorTriangle::MovePointToTriangle(double x, double y, const Vertex& a,
 | 
				
			|||||||
		// If (x,y) is in the c-a area, project onto the c-a vector.
 | 
							// If (x,y) is in the c-a area, project onto the c-a vector.
 | 
				
			||||||
		double pdist = std::sqrt(qsqr(x - c.point.x()) + qsqr(y - c.point.y()));
 | 
							double pdist = std::sqrt(qsqr(x - c.point.x()) + qsqr(y - c.point.y()));
 | 
				
			||||||
		// the length of all edges is always > 0
 | 
							// the length of all edges is always > 0
 | 
				
			||||||
		double p0x = c.point.x() + ((a.point.x() - c.point.x()) / vlen(v2xA, v2yA)) * cos(alphaC) * pdist;
 | 
							double p0x = c.point.x() + ((a.point.x() - c.point.x()) / vlen(v2xA, v2yA)) * std::cos(alphaC) * pdist;
 | 
				
			||||||
		double p0y = c.point.y() + ((a.point.y() - c.point.y()) / vlen(v2xA, v2yA)) * cos(alphaC) * pdist;
 | 
							double p0y = c.point.y() + ((a.point.y() - c.point.y()) / vlen(v2xA, v2yA)) * std::cos(alphaC) * pdist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (pointAbovePoint(x, y, p0x, p0y, c.point.x(), c.point.y(), a.point.x(), a.point.y()))
 | 
							if (pointAbovePoint(x, y, p0x, p0y, c.point.x(), c.point.y(), a.point.x(), a.point.y()))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@ -1310,12 +1310,12 @@ QColor ColorTriangle::ColorFromPoint(const QPointF& p) const
 | 
				
			|||||||
	double cy = (double) contentsRect().center().y();
 | 
						double cy = (double) contentsRect().center().y();
 | 
				
			||||||
	// Find the a, b and c from their angles, the center of the rect
 | 
						// Find the a, b and c from their angles, the center of the rect
 | 
				
			||||||
	// and the radius of the hue gradient donut.
 | 
						// and the radius of the hue gradient donut.
 | 
				
			||||||
	QPointF pa(cx + (cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
						QPointF pa(cx + (std::cos(a) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
			   cy - (sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
								   cy - (std::sin(a) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
	QPointF pb(cx + (cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
						QPointF pb(cx + (std::cos(b) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
			   cy - (sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
								   cy - (std::sin(b) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
	QPointF pc(cx + (cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
						QPointF pc(cx + (std::cos(c) * (outerRadius - (outerRadius / 5.0))),
 | 
				
			||||||
			   cy - (sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
								   cy - (std::sin(c) * (outerRadius - (outerRadius / 5.0))));
 | 
				
			||||||
	// Find the hue value from the angle of the 'a' point.
 | 
						// Find the hue value from the angle of the 'a' point.
 | 
				
			||||||
	double angle = a - M_PI / 2.0;
 | 
						double angle = a - M_PI / 2.0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1325,7 +1325,7 @@ QColor ColorTriangle::ColorFromPoint(const QPointF& p) const
 | 
				
			|||||||
	// Create the color of the 'a' corner point. We know that b is
 | 
						// Create the color of the 'a' corner point. We know that b is
 | 
				
			||||||
	// black and c is white.
 | 
						// black and c is white.
 | 
				
			||||||
	QColor color;
 | 
						QColor color;
 | 
				
			||||||
	color.setHsv(360 - (int) floor(hue), 255, 255);
 | 
						color.setHsv(360 - (int)Floor(hue), 255, 255);
 | 
				
			||||||
	// See also drawTrigon(), which basically does exactly the same to
 | 
						// See also drawTrigon(), which basically does exactly the same to
 | 
				
			||||||
	// determine all colors in the trigon.
 | 
						// determine all colors in the trigon.
 | 
				
			||||||
	Vertex aa(color, pa);
 | 
						Vertex aa(color, pa);
 | 
				
			||||||
@ -1371,7 +1371,7 @@ QColor ColorTriangle::ColorFromPoint(const QPointF& p) const
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			leftx = p1->point.x();
 | 
								leftx = p1->point.x();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (floor(p1p2ydist) != 0.0)
 | 
								if (Floor(p1p2ydist) != 0.0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				leftx += (p1p2xdist * (p.y() - p1->point.y())) / p1p2ydist;
 | 
									leftx += (p1p2xdist * (p.y() - p1->point.y())) / p1p2ydist;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -1384,7 +1384,7 @@ QColor ColorTriangle::ColorFromPoint(const QPointF& p) const
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			leftx = p2->point.x();
 | 
								leftx = p2->point.x();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (floor(p2p3ydist) != 0.0)
 | 
								if (Floor(p2p3ydist) != 0.0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				leftx += (p2p3xdist * (p.y() - p2->point.y())) / p2p3ydist;
 | 
									leftx += (p2p3xdist * (p.y() - p2->point.y())) / p2p3ydist;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -1406,7 +1406,7 @@ QColor ColorTriangle::ColorFromPoint(const QPointF& p) const
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			rightx = p1->point.x();
 | 
								rightx = p1->point.x();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (floor(p1p2ydist) != 0.0)
 | 
								if (Floor(p1p2ydist) != 0.0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				rightx += (p1p2xdist * (p.y() - p1->point.y())) / p1p2ydist;
 | 
									rightx += (p1p2xdist * (p.y() - p1->point.y())) / p1p2ydist;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -1419,7 +1419,7 @@ QColor ColorTriangle::ColorFromPoint(const QPointF& p) const
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
			rightx = p2->point.x();
 | 
								rightx = p2->point.x();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (floor(p2p3ydist) != 0.0)
 | 
								if (Floor(p2p3ydist) != 0.0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				rightx += (p2p3xdist * (p.y() - p2->point.y())) / p2p3ydist;
 | 
									rightx += (p2p3xdist * (p.y() - p2->point.y())) / p2p3ydist;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -1437,7 +1437,7 @@ QColor ColorTriangle::ColorFromPoint(const QPointF& p) const
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (firstshorty)
 | 
						if (firstshorty)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (floor(p1p2ydist) != 0.0)
 | 
							if (Floor(p1p2ydist) != 0.0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			rshort  = p2->color.r * (p.y() - p1->point.y()) / p1p2ydist;
 | 
								rshort  = p2->color.r * (p.y() - p1->point.y()) / p1p2ydist;
 | 
				
			||||||
			gshort  = p2->color.g * (p.y() - p1->point.y()) / p1p2ydist;
 | 
								gshort  = p2->color.g * (p.y() - p1->point.y()) / p1p2ydist;
 | 
				
			||||||
@ -1482,7 +1482,7 @@ QColor ColorTriangle::ColorFromPoint(const QPointF& p) const
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (floor(p2p3ydist) != 0.0)
 | 
							if (Floor(p2p3ydist) != 0.0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			rshort  = p3->color.r * (p.y() - p2->point.y()) / p2p3ydist;
 | 
								rshort  = p3->color.r * (p.y() - p2->point.y()) / p2p3ydist;
 | 
				
			||||||
			gshort  = p3->color.g * (p.y() - p2->point.y()) / p2p3ydist;
 | 
								gshort  = p3->color.g * (p.y() - p2->point.y()) / p2p3ydist;
 | 
				
			||||||
@ -1582,9 +1582,9 @@ QColor ColorTriangle::ColorFromPoint(const QPointF& p) const
 | 
				
			|||||||
	// Now floor the color components and fit them into proper
 | 
						// Now floor the color components and fit them into proper
 | 
				
			||||||
	// boundaries. This again is to compensate for the error caused by
 | 
						// boundaries. This again is to compensate for the error caused by
 | 
				
			||||||
	// loss of precision.
 | 
						// loss of precision.
 | 
				
			||||||
	int ri = (int) floor(r);
 | 
						int ri = (int)Floor(r);
 | 
				
			||||||
	int gi = (int) floor(g);
 | 
						int gi = (int)Floor(g);
 | 
				
			||||||
	int bi = (int) floor(b);
 | 
						int bi = (int)Floor(b);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ri < 0) ri = 0;
 | 
						if (ri < 0) ri = 0;
 | 
				
			||||||
	else if (ri > 255) ri = 255;
 | 
						else if (ri > 255) ri = 255;
 | 
				
			||||||
 | 
				
			|||||||
@ -112,7 +112,7 @@ void PaletteEditor::SetPalette(const Palette<float>& palette)
 | 
				
			|||||||
/// Return a temporary copy of the xform color indices as a map.
 | 
					/// Return a temporary copy of the xform color indices as a map.
 | 
				
			||||||
/// The keys are the xform indices, and the values are the color indices.
 | 
					/// The keys are the xform indices, and the values are the color indices.
 | 
				
			||||||
/// </summary>
 | 
					/// </summary>
 | 
				
			||||||
/// <param name="palette">The color indices</param>
 | 
					/// <returns>The color indices</returns>
 | 
				
			||||||
map<size_t, float> PaletteEditor::GetColorIndices() const
 | 
					map<size_t, float> PaletteEditor::GetColorIndices() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return m_GradientColorView->GetColorIndices();
 | 
						return m_GradientColorView->GetColorIndices();
 | 
				
			||||||
@ -122,12 +122,32 @@ map<size_t, float> PaletteEditor::GetColorIndices() const
 | 
				
			|||||||
/// Assign the values of the xform color indices to the arrows.
 | 
					/// Assign the values of the xform color indices to the arrows.
 | 
				
			||||||
/// This will clear out any existing values first.
 | 
					/// This will clear out any existing values first.
 | 
				
			||||||
/// </summary>
 | 
					/// </summary>
 | 
				
			||||||
/// <param name="palette">The color indices to assign</param>
 | 
					/// <param name="indices">The color indices to assign</param>
 | 
				
			||||||
void PaletteEditor::SetColorIndices(const map<size_t, float>& indices)
 | 
					void PaletteEditor::SetColorIndices(const map<size_t, float>& indices)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	m_GradientColorView->SetColorIndices(indices);
 | 
						m_GradientColorView->SetColorIndices(indices);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Return the filename of the currently selected palette.
 | 
				
			||||||
 | 
					/// Note this will only be filled in if the user has clicked in the palette
 | 
				
			||||||
 | 
					/// table at least once.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					/// <returns>The palette filename</returns>
 | 
				
			||||||
 | 
					string PaletteEditor::GetPaletteFile() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return m_CurrentPaletteFilePath;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Set the selected palette file in the combo box.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					/// <param name="filename">The filename of the palette file to set to the current one</param>
 | 
				
			||||||
 | 
					void PaletteEditor::SetPaletteFile(const string& filename)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						ui->PaletteFilenameCombo->setCurrentText(QString::fromStdString(GetFilename(filename)));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// <summary>
 | 
					/// <summary>
 | 
				
			||||||
/// Add a new arrow using the current color.
 | 
					/// Add a new arrow using the current color.
 | 
				
			||||||
/// Called when the Add Color button is clicked.
 | 
					/// Called when the Add Color button is clicked.
 | 
				
			||||||
@ -574,7 +594,8 @@ void PaletteEditor::EnablePaletteControls()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	auto& palette = m_GradientColorView->GetPalette(256);
 | 
						auto& palette = m_GradientColorView->GetPalette(256);
 | 
				
			||||||
	bool b = !palette.m_SourceColors.empty();
 | 
						bool b = !palette.m_SourceColors.empty();
 | 
				
			||||||
	ui->OverwritePaletteButton->setEnabled(b);
 | 
						bool any = m_PaletteList->IsModifiable(m_CurrentPaletteFilePath);//At least one in the file is not fixed.
 | 
				
			||||||
 | 
						ui->OverwritePaletteButton->setEnabled(b && any);
 | 
				
			||||||
	ui->AddColorButton->setEnabled(b);
 | 
						ui->AddColorButton->setEnabled(b);
 | 
				
			||||||
	ui->DistributeColorsButton->setEnabled(b);
 | 
						ui->DistributeColorsButton->setEnabled(b);
 | 
				
			||||||
	ui->AutoDistributeCheckBox->setEnabled(b);
 | 
						ui->AutoDistributeCheckBox->setEnabled(b);
 | 
				
			||||||
 | 
				
			|||||||
@ -34,6 +34,8 @@ public:
 | 
				
			|||||||
	void SetPalette(const Palette<float>& palette);
 | 
						void SetPalette(const Palette<float>& palette);
 | 
				
			||||||
	map<size_t, float> GetColorIndices() const;
 | 
						map<size_t, float> GetColorIndices() const;
 | 
				
			||||||
	void SetColorIndices(const map<size_t, float>& indices);
 | 
						void SetColorIndices(const map<size_t, float>& indices);
 | 
				
			||||||
 | 
						string GetPaletteFile() const;
 | 
				
			||||||
 | 
						void SetPaletteFile(const string& filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Q_SIGNALS:
 | 
					Q_SIGNALS:
 | 
				
			||||||
	void PaletteChanged();
 | 
						void PaletteChanged();
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user