Skip to content

Commit e8ef33d

Browse files
authored
Add atan2 and improve accuracy of atan (#45)
2 parents cb31cd2 + 1ccb389 commit e8ef33d

File tree

101 files changed

+1718
-1094
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

101 files changed

+1718
-1094
lines changed

.idea/editor.xml

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CMakeLists.txt

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,21 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.20)
2424
PROJECT(Steppable)
2525

2626
# Ensure that Python is available to run the development scripts, and build with bindings.
27-
set(Python_FIND_VIRTUALENV FIRST)
27+
SET(Python_FIND_VIRTUALENV FIRST)
2828

29-
find_package(
30-
Python
31-
COMPONENTS Development Interpreter
32-
REQUIRED)
29+
FIND_PACKAGE(
30+
Python
31+
COMPONENTS Development Interpreter
32+
REQUIRED
33+
)
3334

34-
find_package(
35-
Python3
36-
COMPONENTS Development Interpreter
37-
REQUIRED)
35+
FIND_PACKAGE(
36+
Python3
37+
COMPONENTS Development Interpreter
38+
REQUIRED
39+
)
3840

39-
SET(CMAKE_CXX_STANDARD 20)
41+
SET(CMAKE_CXX_STANDARD 23)
4042
SET(CMAKE_C_STANDARD 20)
4143
SET(CMAKE_CXX_EXTENSIONS OFF)
4244
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -90,27 +92,36 @@ FUNCTION(capitalize IN OUT)
9092
ENDFUNCTION()
9193

9294
SET(COMPONENTS
93-
abs
94-
add
95-
baseConvert
96-
subtract
97-
multiply
98-
decimalConvert
99-
comparison
100-
power
101-
division
102-
root
103-
factorial
104-
trig
105-
hyp
106-
log)
95+
base::baseConvert
96+
base::decimalConvert
97+
calc::abs
98+
calculus::nInt
99+
calc::add
100+
calc::atan2
101+
calc::comparison
102+
calc::division
103+
calc::factorial
104+
calc::hyp
105+
calc::log
106+
calc::multiply
107+
calc::power
108+
calc::root
109+
calc::subtract
110+
calc::trig
111+
)
107112
# NEW_COMPONENT: PATCH Do NOT remove the previous comment.
108113

109114
SET(TARGETS ${COMPONENTS} util)
110115
SET(TEST_TARGETS_TEMP util fraction number factors format ${COMPONENTS})
111116

112117
FOREACH(TEST_TARGET IN LISTS TEST_TARGETS_TEMP)
113118
SET(TARGET_NAME "test")
119+
STRING(REPLACE "::" ";" COMPONENT_PARTS ${TEST_TARGET})
120+
LIST(LENGTH COMPONENT_PARTS LEN)
121+
IF(LEN EQUAL 2)
122+
LIST(GET COMPONENT_PARTS 1 TEST_TARGET)
123+
ENDIF()
124+
114125
CAPITALIZE(${TEST_TARGET} FILE_NAME)
115126
STRING(CONCAT TARGET_NAME ${TARGET_NAME} ${FILE_NAME})
116127
LIST(APPEND TEST_TARGETS ${TARGET_NAME})

Steppable.sln

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ VisualStudioVersion = 17.11.35017.193
44
MinimumVisualStudioVersion = 10.0.40219.1
55
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "calc", "calc.vcxproj", "{0A900AAA-AC12-48CF-85CF-8BB0C0130512}"
66
EndProject
7-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "add", "src\add\add.vcxproj", "{50F5EB82-9639-40D9-A6A1-62BE499E4528}"
7+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "add", "src\calc\add\add.vcxproj", "{50F5EB82-9639-40D9-A6A1-62BE499E4528}"
88
EndProject
99
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "util", "util.vcxproj", "{F6AF63F8-9E0F-4DA2-89B3-3096B56BA251}"
1010
EndProject
11-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "subtract", "src\subtract\subtract.vcxproj", "{8F1DF35F-1D30-4703-8B94-B1A3753D60C4}"
11+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "subtract", "src\calc\subtract\subtract.vcxproj", "{8F1DF35F-1D30-4703-8B94-B1A3753D60C4}"
1212
EndProject
13-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comparison", "src\comparison\comparison.vcxproj", "{7666B097-5666-4F12-863A-F7BAACFEDB4E}"
13+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "comparison", "src\calc\comparison\comparison.vcxproj", "{7666B097-5666-4F12-863A-F7BAACFEDB4E}"
1414
EndProject
15-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiply", "src\multiply\multiply.vcxproj", "{D2D485AA-9E2E-4D6E-8D8A-0C82A6538BFA}"
15+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiply", "src\calc\multiply\multiply.vcxproj", "{D2D485AA-9E2E-4D6E-8D8A-0C82A6538BFA}"
1616
EndProject
17-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "division", "src\division\division.vcxproj", "{348481F3-C3A4-4D76-A801-54888CB569C4}"
17+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "division", "src\calc\division\division.vcxproj", "{348481F3-C3A4-4D76-A801-54888CB569C4}"
1818
EndProject
19-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "power", "src\power\power.vcxproj", "{0C2C224A-06F4-44F2-847F-B3870608F1EF}"
19+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "power", "src\calc\power\power.vcxproj", "{0C2C224A-06F4-44F2-847F-B3870608F1EF}"
2020
EndProject
2121
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testAdd", "tests\testAdd.vcxproj", "{C11E7406-C105-44A5-91DD-71FD0ED96D2A}"
2222
EndProject
@@ -51,7 +51,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
5151
README.md = README.md
5252
EndProjectSection
5353
EndProject
54-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "abs", "src\abs\abs.vcxproj", "{B0C1EC9C-06CC-47B2-9B93-CD046FC0EF34}"
54+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "abs", "src\calc\abs\abs.vcxproj", "{B0C1EC9C-06CC-47B2-9B93-CD046FC0EF34}"
5555
EndProject
5656
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "base.vcxproj", "{867A7B37-C961-4581-AE5B-067FD464CC7C}"
5757
EndProject
@@ -67,15 +67,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testDecimalConvert", "tests
6767
EndProject
6868
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "base Source", "base Source", "{254B33CA-1687-41C5-9060-FBF4EF09FECD}"
6969
EndProject
70-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "baseConvert", "src\baseConvert\baseConvert.vcxproj", "{00B3E92A-8C55-4D70-8A27-8F0AEBF5872D}"
70+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "baseConvert", "src\base\baseConvert\baseConvert.vcxproj", "{00B3E92A-8C55-4D70-8A27-8F0AEBF5872D}"
7171
EndProject
72-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "decimalConvert", "src\decimalConvert\decimalConvert.vcxproj", "{55A00CFD-37B4-4618-A8D3-445A05DA759A}"
72+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "decimalConvert", "src\base\decimalConvert\decimalConvert.vcxproj", "{55A00CFD-37B4-4618-A8D3-445A05DA759A}"
7373
EndProject
74-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "factorial", "src\factorial\factorial.vcxproj", "{C6B85BA3-8B2A-4778-BAB9-CF7BE46F12DB}"
74+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "factorial", "src\calc\factorial\factorial.vcxproj", "{C6B85BA3-8B2A-4778-BAB9-CF7BE46F12DB}"
7575
EndProject
76-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "root", "src\root\root.vcxproj", "{127594DF-529C-426F-AE9B-C46EC403CDBA}"
76+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "root", "src\calc\root\root.vcxproj", "{127594DF-529C-426F-AE9B-C46EC403CDBA}"
7777
EndProject
78-
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "trig", "src\trig\trig.vcxproj", "{2B7A46CF-F3C3-4EAE-91EB-96B8DB2A2CD2}"
78+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "trig", "src\calc\trig\trig.vcxproj", "{2B7A46CF-F3C3-4EAE-91EB-96B8DB2A2CD2}"
7979
EndProject
8080
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testRoot", "tests\testRoot.vcxproj", "{09060239-6270-4BE5-BB4E-FDD22EA3C49D}"
8181
EndProject

gui/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ FUNCTION(ADD_GUI SOURCE)
99
TARGET_INCLUDE_DIRECTORIES(${NAME} PRIVATE "${STP_BASE_DIRECTORY}/include/imgui")
1010

1111
# Link Steppable stuff
12-
TARGET_LINK_LIBRARIES(${NAME} PRIVATE calc util)
12+
TARGET_LINK_LIBRARIES(${NAME} PRIVATE func impl)
1313
TARGET_INCLUDE_DIRECTORIES(${NAME} PRIVATE ${STP_BASE_DIRECTORY}/include)
1414

1515
if(FREETYPE_FOUND)
@@ -24,5 +24,12 @@ IF (STP_BUILD_GUI EQUAL 1)
2424
# Find and link SDL2 and OpenGL
2525
FIND_PACKAGE(SDL2 REQUIRED)
2626
FIND_PACKAGE(OpenGL REQUIRED)
27+
ADD_LIBRARY(impl STATIC impl/gui.cpp impl/window.cpp)
28+
TARGET_LINK_LIBRARIES(impl PRIVATE ${SDL2_LIBRARIES} ${OPENGL_LIBRARIES} imgui)
29+
TARGET_INCLUDE_DIRECTORIES(impl PRIVATE
30+
${SDL2_INCLUDE_DIRS}
31+
"${STP_BASE_DIRECTORY}/include/imgui"
32+
"${STP_BASE_DIRECTORY}/include")
33+
2734
ADD_GUI(test.cpp)
2835
ENDIF()

gui/impl/gui.cpp

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
#include "gui.hpp"
2+
3+
#include "output.hpp"
4+
5+
#ifdef MACOSX
6+
#include <CoreFoundation/CoreFoundation.h>
7+
#endif
8+
9+
namespace steppable::gui::__internals
10+
{
11+
12+
bool isDarkModeEnabled()
13+
{
14+
#ifdef MACOSX
15+
bool isDarkMode = false;
16+
CFPreferencesAppSynchronize(CFSTR("AppleInterfaceStyle"));
17+
CFPropertyListRef value = CFPreferencesCopyAppValue(CFSTR("AppleInterfaceStyle"), kCFPreferencesAnyApplication);
18+
if (value != nullptr)
19+
{
20+
const auto* interfaceStyle = static_cast<CFStringRef>(value);
21+
if (CFStringCompare(interfaceStyle, CFSTR("Dark"), 0) == kCFCompareEqualTo)
22+
isDarkMode = true;
23+
CFRelease(value);
24+
}
25+
return isDarkMode;
26+
#elif defined(LINUX)
27+
return std::filesystem::exists("/usr/share/themes/Adwaita-dark/gtk-3.0");
28+
#elif defined(WINDOWS)
29+
HKEY key;
30+
if (RegOpenKeyExA(HKEY_CURRENT_USER,
31+
"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",
32+
0,
33+
KEY_QUERY_VALUE,
34+
&key) == ERROR_SUCCESS)
35+
{
36+
DWORD value = 0;
37+
DWORD size = sizeof(DWORD);
38+
if (RegQueryValueExA(key, "AppsUseLightTheme", nullptr, nullptr, reinterpret_cast<LPBYTE>(&value), &size) ==
39+
ERROR_SUCCESS)
40+
return value == 0;
41+
}
42+
return false;
43+
#else
44+
return false;
45+
#endif
46+
}
47+
48+
void addFontIfExistent(const ImGuiIO* io,
49+
const std::filesystem::path& path,
50+
const ImFontConfig* config,
51+
const ImWchar* ranges) noexcept
52+
{
53+
if (io->Fonts->Fonts.empty() and config->MergeMode)
54+
config = nullptr;
55+
if (std::filesystem::exists(path))
56+
{
57+
#ifdef DEBUG
58+
output::info("addIfExistent"s, "Added font {0}"s, { path });
59+
#endif
60+
io->Fonts->AddFontFromFileTTF(path.c_str(), 15.0F, config, ranges);
61+
}
62+
}
63+
64+
void loadFonts(const ImGuiIO* io) noexcept
65+
{
66+
ImFontConfig config;
67+
config.MergeMode = true;
68+
#ifdef WINDOWS
69+
// WINDOWS fonts
70+
// -------------
71+
// Chinese -> Microsoft YaHei
72+
// Cyrillic -> Segoe UI -----------------+
73+
// Greek -> Segoe UI -----------------|
74+
// Japanese -> Meiryo |
75+
// Korean -> Malgun Gothic +--> Top-priority
76+
// Thai -> Leelawadee |
77+
// Vietnamese -> Segoe UI -----------------+
78+
79+
// Load top-priority fonts
80+
addIfExistent(io, "C:/Windows/Fonts/segoeui.ttf", &config, io->Fonts->GetGlyphRangesCyrillic());
81+
addIfExistent(io, "C:/Windows/Fonts/segoeui.ttf", &config, io->Fonts->GetGlyphRangesDefault());
82+
addIfExistent(io, "C:/Windows/Fonts/segoeui.ttf", &config, io->Fonts->GetGlyphRangesGreek());
83+
addIfExistent(io, "C:/Windows/Fonts/segoeui.ttf", &config, io->Fonts->GetGlyphRangesVietnamese());
84+
85+
// Load Chinese fonts
86+
addIfExistent(io, "C:/Windows/Fonts/msyh.ttc", &config, io->Fonts->GetGlyphRangesChineseFull());
87+
88+
// Load Japanese fonts
89+
addIfExistent(io, "C:/Windows/Fonts/meiryo.ttc", &config, io->Fonts->GetGlyphRangesJapanese());
90+
91+
// Load Korean fonts
92+
addIfExistent(io, "C:/Windows/Fonts/malgun.ttf", &config, io->Fonts->GetGlyphRangesKorean());
93+
94+
// Load Thai fonts
95+
addIfExistent(io, "C:/Windows/Fonts/leelawad.ttf", &config, io->Fonts->GetGlyphRangesThai());
96+
#elif defined(MACOSX)
97+
// MACOS fonts
98+
// -------------
99+
// Chinese -> PingFang SC (*)
100+
// Cyrillic -> SF Pro -----------------+
101+
// Greek -> SF Pro -----------------|
102+
// Japanese -> Hiragino Sans |
103+
// Korean -> Apple SD Gothic Neo +--> Top-priority
104+
// Thai -> Thonburi |
105+
// Vietnamese -> SF Pro -----------------+
106+
//
107+
// (*) NOTE: PingFang may not be available on all systems, but STHeiti Medium is a good alternative.
108+
109+
// Load top-priority fonts
110+
addFontIfExistent(io, "/Library/Fonts/SF-Pro.ttf", &config, io->Fonts->GetGlyphRangesCyrillic());
111+
addFontIfExistent(io, "/Library/Fonts/SF-Pro.ttf", &config, io->Fonts->GetGlyphRangesDefault());
112+
addFontIfExistent(io, "/Library/Fonts/SF-Pro.ttf", &config, io->Fonts->GetGlyphRangesGreek());
113+
addFontIfExistent(io, "/Library/Fonts/SF-Pro.ttf", &config, io->Fonts->GetGlyphRangesVietnamese());
114+
115+
// Load Chinese fonts
116+
addFontIfExistent(io, "/System/Library/Fonts/PingFang.ttc", &config, io->Fonts->GetGlyphRangesChineseFull());
117+
addFontIfExistent(
118+
io, "/System/Library/Fonts/STHeiti Medium.ttc", &config, io->Fonts->GetGlyphRangesChineseFull());
119+
120+
// Load Japanese fonts
121+
addFontIfExistent(io, "/System/Library/Fonts/Hiragino.ttc", &config, io->Fonts->GetGlyphRangesJapanese());
122+
123+
// Load Korean fonts
124+
addFontIfExistent(io, "/System/Library/Fonts/AppleSDGothicNeo.ttc", &config, io->Fonts->GetGlyphRangesKorean());
125+
126+
// Load Thai fonts
127+
addFontIfExistent(io, "/System/Library/Fonts/Thonburi.ttf", &config, io->Fonts->GetGlyphRangesThai());
128+
addFontIfExistent(
129+
io, "/System/Library/Fonts/Supplemental/Ayuthaya.ttf", &config, io->Fonts->GetGlyphRangesThai());
130+
#elif defined(LINUX)
131+
// LINUX fonts
132+
// -------------
133+
// Chinese -> WenQuanYi Zen Hei
134+
// Cyrillic -> DejaVu Sans -----------------+
135+
// Greek -> DejaVu Sans -----------------|
136+
// Japanese -> Takao Gothic |
137+
// Korean -> Nanum Gothic +--> Top-priority
138+
// Thai -> Garuda |
139+
// Vietnamese -> DejaVu Sans -----------------+
140+
141+
// Load top-priority fonts
142+
addIfExistent(io, "/usr/share/fonts/TTF/DejaVuSans-Bold.ttf", &config, io->Fonts->GetGlyphRangesCyrillic());
143+
addIfExistent(io, "/usr/share/fonts/TTF/DejaVuSans-Bold.ttf", &config, io->Fonts->GetGlyphRangesDefault());
144+
addIfExistent(io, "/usr/share/fonts/TTF/DejaVuSans-Bold.ttf", &config, io->Fonts->GetGlyphRangesGreek());
145+
addIfExistent(io, "/usr/share/fonts/TTF/DejaVuSans-Bold.ttf", &config, io->Fonts->GetGlyphRangesVietnamese());
146+
147+
// Load Chinese fonts
148+
addIfExistent(io, "/usr/share/fonts/TTF/wqy-zenhei.ttc", &config, io->Fonts->GetGlyphRangesChineseFull());
149+
150+
// Load Japanese fonts
151+
addIfExistent(io, "/usr/share/fonts/TTF/takao-mincho.ttf", &config, io->Fonts->GetGlyphRangesJapanese());
152+
153+
// Load Korean fonts
154+
addIfExistent(io, "/usr/share/fonts/TTF/NanumGothic.ttf", &config, io->Fonts->GetGlyphRangesKorean());
155+
156+
// Load Thai fonts
157+
addIfExistent(io, "/usr/share/fonts/TTF/garuda.ttf", &config, io->Fonts->GetGlyphRangesThai());
158+
#endif
159+
// Add the default font as well.
160+
io->Fonts->AddFontDefault(&config);
161+
io->Fonts->Build();
162+
}
163+
} // namespace steppable::gui::__internals

0 commit comments

Comments
 (0)