From 91db627a81a1438ca4e02f0b27c6f17ceac1051c Mon Sep 17 00:00:00 2001 From: Tom Sutcliffe Date: Sun, 5 Sep 2021 13:59:45 +0100 Subject: [PATCH 1/7] mac: Don't interpret single-touch scroll events as pan gestures To handle the Magic Mouse, whose single-finger touch gestures should be interpreted as scrollwheel events rather than pan gestures. --- src/platform/guimac.mm | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/platform/guimac.mm b/src/platform/guimac.mm index 67d1eb97..91a197d3 100644 --- a/src/platform/guimac.mm +++ b/src/platform/guimac.mm @@ -372,6 +372,7 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { double rotationGestureCurrent; Point2d trackpadPositionShift; bool inTrackpadScrollGesture; + int numTouches; Platform::Window::Kind kind; } @@ -397,6 +398,8 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { editor.action = @selector(didEdit:); inTrackpadScrollGesture = false; + numTouches = 0; + self.acceptsTouchEvents = YES; kind = aKind; if(kind == Platform::Window::Kind::TOPLEVEL) { NSGestureRecognizer *mag = [[NSMagnificationGestureRecognizer alloc] initWithTarget:self @@ -573,7 +576,9 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { using Platform::MouseEvent; MouseEvent event = [self convertMouseEvent:nsEvent]; - if(nsEvent.subtype == NSEventSubtypeTabletPoint && kind == Platform::Window::Kind::TOPLEVEL) { + // Check for number of touches to exclude single-finger scrolling on Magic Mouse + bool isTrackpadEvent = numTouches >= 2 && nsEvent.subtype == NSEventSubtypeTabletPoint; + if(isTrackpadEvent && kind == Platform::Window::Kind::TOPLEVEL) { // This is how Cocoa represents 2 finger trackpad drag gestures, rather than going via // NSPanGestureRecognizer which is how you might expect this to work... We complicate this // further by also handling shift-two-finger-drag to mean rotate. Fortunately we're using @@ -626,6 +631,23 @@ MenuBarRef GetOrCreateMainMenu(bool *unique) { receiver->onMouseEvent(event); } +- (void)touchesBeganWithEvent:(NSEvent *)event { + numTouches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self].count; + [super touchesBeganWithEvent:event]; +} +- (void)touchesMovedWithEvent:(NSEvent *)event { + numTouches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self].count; + [super touchesMovedWithEvent:event]; +} +- (void)touchesEndedWithEvent:(NSEvent *)event { + numTouches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self].count; + [super touchesEndedWithEvent:event]; +} +- (void)touchesCancelledWithEvent:(NSEvent *)event { + numTouches = 0; + [super touchesCancelledWithEvent:event]; +} + - (void)mouseExited:(NSEvent *)nsEvent { using Platform::MouseEvent; From 2450010bbfa20a1ffbf5fd90b85c4b941f56cb16 Mon Sep 17 00:00:00 2001 From: ruevs Date: Sun, 12 Dec 2021 20:12:20 +0200 Subject: [PATCH 2/7] Update REAMDE.md - point IRC to Libera chat. ... change Solvespace.com URL to https. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e9a9d38d..890e5b4c 100644 --- a/README.md +++ b/README.md @@ -9,20 +9,20 @@ SolveSpace This repository contains the source code of [SolveSpace][], a parametric 2d/3d CAD. -[solvespace]: http://solvespace.com +[solvespace]: https://solvespace.com Community --------- The official SolveSpace [website][sswebsite] has [tutorials][sstutorial], [reference manual][ssref] and a [forum][ssforum]; there is also an official -IRC channel [#solvespace at irc.freenode.net][ssirc]. +IRC channel [#solvespace at web.libera.chat][ssirc]. [sswebsite]: http://solvespace.com/ [ssref]: http://solvespace.com/ref.pl [sstutorial]: http://solvespace.com/tutorial.pl [ssforum]: http://solvespace.com/forum.pl -[ssirc]: https://webchat.freenode.net/?channels=solvespace +[ssirc]: https://web.libera.chat/#solvespace Installation ------------ From e07b082eb810d2088c92b97d04e864a4ab95816f Mon Sep 17 00:00:00 2001 From: ruevs Date: Thu, 16 Dec 2021 18:51:27 +0200 Subject: [PATCH 3/7] Fix hang when trying to display characters missing from the embedded font MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When SolveSpace tries to display an Unicode code point (e.g. U+EA00 ) that does not exist in the embedded vector font (unifont.hex.gz) it hangs in an endless loop in `const BitmapFont::Glyph &BitmapFont::GetGlyph(char32_t codepoint)`. The reason is that the binary search through the text file unifont-8.0.01.hex that does the "lazy loading" of glyphs does not end. Here is a short excerpt from the file: ``` D7FE:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61866FBE638E6FBE6F867FFE0000 D7FF:00007FFE63866DF66DEE6DDE63DE7FFE7FFE61866FBE638E6FBE6FBE7FFE0000 F900:0080108810881FF8100800007FFE00000FF008100FF00810042002447FFE0000 F901:00047FFE008010841FFE10841FFC10841FFC10840880050003000CC0703E0000 ``` When searching for `0xEA00` after some iterations of the while loop https://github.com/solvespace/solvespace/blob/2450010bbfa20a1ffbf5fd90b85c4b941f56cb16/src/resource.cpp#L567 both `first` and `last` end up pointing to F900. After that on each consecutive iteration of the loop `last` ends up pointing to the LF (0x0A) just before F900 https://github.com/solvespace/solvespace/blob/2450010bbfa20a1ffbf5fd90b85c4b941f56cb16/src/resource.cpp#L585 and then `mid` ends up back on F900 here https://github.com/solvespace/solvespace/blob/2450010bbfa20a1ffbf5fd90b85c4b941f56cb16/src/resource.cpp#L570 and this will repeat enlessly. The solution is to do ``` first++; ``` here https://github.com/solvespace/solvespace/blob/2450010bbfa20a1ffbf5fd90b85c4b941f56cb16/src/resource.cpp#L591, which will make `first==last` and change whe while loop contition to `while(first < last) {` thiw will allow the while loop to exit. Tested with - 0xEA00 - non existent, not found in 16 iterations. - 0xF900 - exists but takes exactly 16 iterations of the binary search to finish - 0x0000 - found in 16 iterations - 0xFFFD - the replacement Unicode code point for non-existing glyphs. Also the end of the font. - 0xFFFFF - a codepoint beyond the end, not found and does not cause an exception The lazy parsing of the vector front was introduced here. https://github.com/solvespace/solvespace/commit/645c2d90ace3e48c639c49512fe1d7a43beb1755 Fixes #1150 --- src/resource.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/resource.cpp b/src/resource.cpp index 7b19081e..258c73a4 100644 --- a/src/resource.cpp +++ b/src/resource.cpp @@ -564,7 +564,7 @@ const BitmapFont::Glyph &BitmapFont::GetGlyph(char32_t codepoint) { // Find the hex representation in the (sorted) Unifont file. auto first = unifontData.cbegin(), last = unifontData.cend(); - while(first <= last) { + while(first < last) { auto mid = first + (last - first) / 2; while(mid != unifontData.cbegin()) { if(*mid == '\n') { @@ -588,7 +588,10 @@ const BitmapFont::Glyph &BitmapFont::GetGlyph(char32_t codepoint) { if(foundCodepoint < codepoint) { first = mid + 1; while(first != unifontData.cend()) { - if(*first == '\n') break; + if(*first == '\n') { + first++; + break; + } first++; } continue; // and last stays the same From b86e0dec84bb07e4ae422a8b968b827402a3372f Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Wed, 22 Dec 2021 10:58:25 -0600 Subject: [PATCH 4/7] readme: remove outdated build instructions --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 890e5b4c..c2daac03 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ is built as `build/bin/solvespace-cli`. It is possible to build only the command Ubuntu will require 20.04 or above. Cross-compiling with WSL is also confirmed to work. -You will need the usual build tools, CMake, a Windows cross-compiler, and flatc. On a Debian derivative (e.g. Ubuntu) these can be installed with: +You will need the usual build tools, CMake, and a Windows cross-compiler. On a Debian derivative (e.g. Ubuntu) these can be installed with: apt-get install git build-essential cmake mingw-w64 @@ -140,8 +140,7 @@ Build 64-bit SolveSpace with the following: mkdir build cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake \ - -DCMAKE_BUILD_TYPE=Release \ - -DFLATC=$(which flatc) + -DCMAKE_BUILD_TYPE=Release make The graphical interface is built as `build/bin/solvespace.exe`, and the command-line interface From 71c6492d6de798166e0c09d1529dffed745f6fbf Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Wed, 22 Dec 2021 11:07:09 -0600 Subject: [PATCH 5/7] readme: Clean up, fix nearly all markdownlint complaints --- README.md | 246 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 139 insertions(+), 107 deletions(-) diff --git a/README.md b/README.md index c2daac03..554e4fca 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ +# SolveSpace + SolveSpace Logo -SolveSpace -========== [![Build Status](https://github.com/solvespace/solvespace/workflows/CD/badge.svg)](https://github.com/solvespace/solvespace/actions) [![solvespace](https://snapcraft.io/solvespace/badge.svg)](https://snapcraft.io/solvespace) [![solvespace](https://snapcraft.io/solvespace/trending.svg?name=0)](https://snapcraft.io/solvespace) @@ -11,8 +11,7 @@ This repository contains the source code of [SolveSpace][], a parametric [solvespace]: https://solvespace.com -Community ---------- +## Community The official SolveSpace [website][sswebsite] has [tutorials][sstutorial], [reference manual][ssref] and a [forum][ssforum]; there is also an official @@ -24,14 +23,13 @@ IRC channel [#solvespace at web.libera.chat][ssirc]. [ssforum]: http://solvespace.com/forum.pl [ssirc]: https://web.libera.chat/#solvespace -Installation ------------- +## Installation ### Via official binary packages -_Official_ release binary packages for macOS (>=10.6 64-bit) and Windows (>=Vista 32-bit) are -available via [GitHub releases][rel]. These packages are automatically built by -the SolveSpace maintainers for each stable release. +_Official_ release binary packages for macOS (>=10.6 64-bit) and Windows +(>=Vista 32-bit) are available via [GitHub releases][rel]. These packages are +automatically built by the SolveSpace maintainers for each stable release. [rel]: https://github.com/solvespace/solvespace/releases @@ -39,150 +37,177 @@ the SolveSpace maintainers for each stable release. Official releases can be installed from the `stable` channel. -Builds from master are automatically released to the `edge` channel in the Snap Store. Those packages contain the latest improvements, but receive less testing than release builds. +Builds from master are automatically released to the `edge` channel in the Snap +Store. Those packages contain the latest improvements, but receive less testing +than release builds. [![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/solvespace) Or install from a terminal: -``` +```sh # for the latest stable release: -snap install solvespace +snap install solvespace + # for the bleeding edge builds from master: snap install solvespace --edge ``` ### Via third-party binary packages -_Third-party_ nightly binary packages for Debian and Ubuntu are available -via [notesalexp.org][notesalexp]. These packages are automatically built from non-released -source code. The SolveSpace maintainers do not control the contents of these packages -and cannot guarantee their functionality. +_Third-party_ nightly binary packages for Debian and Ubuntu are available via +[notesalexp.org][notesalexp]. These packages are automatically built from +non-released source code. The SolveSpace maintainers do not control the contents +of these packages and cannot guarantee their functionality. [notesalexp]: https://notesalexp.org/packages/en/source/solvespace/ ### Via automated edge builds -> :warning: **Edge builds might be unstable or contain severe bugs!** +> :warning: **Edge builds might be unstable or contain severe bugs!** > They are intended for experienced users to test new features or verify bugfixes. -Cutting edge builds from the latest master commit are available as zip archives from the -following links: +Cutting edge builds from the latest master commit are available as zip archives +from the following links: - [macOS](https://nightly.link/solvespace/solvespace/workflows/cd/master/macos.zip) - [Windows](https://nightly.link/solvespace/solvespace/workflows/cd/master/windows.zip) - [Windows with OpenMP enabled](https://nightly.link/solvespace/solvespace/workflows/cd/master/windows-openmp.zip) -Extract the downloaded archive and install or execute the contained file as is appropriate for your platform. +Extract the downloaded archive and install or execute the contained file as is +appropriate for your platform. ### Via source code See below. -Building on Linux ------------------ +## Building on Linux ### Building for Linux -You will need the usual build tools, CMake, zlib, libpng, cairo, freetype. -To build the GUI, you will need fontconfig, gtkmm 3.0 (version 3.16 or later), pangomm 1.4, -OpenGL and OpenGL GLU, and optionally, the Space Navigator client library. -On a Debian derivative (e.g. Ubuntu) these can be installed with: +You will need the usual build tools, CMake, zlib, libpng, cairo, freetype. To +build the GUI, you will need fontconfig, gtkmm 3.0 (version 3.16 or later), +pangomm 1.4, OpenGL and OpenGL GLU, and optionally, the Space Navigator client +library. On a Debian derivative (e.g. Ubuntu) these can be installed with: - sudo apt install git build-essential cmake zlib1g-dev libpng-dev \ - libcairo2-dev libfreetype6-dev libjson-c-dev \ - libfontconfig1-dev libgtkmm-3.0-dev libpangomm-1.4-dev \ - libgl-dev libglu-dev libspnav-dev +```sh +sudo apt install git build-essential cmake zlib1g-dev libpng-dev \ + libcairo2-dev libfreetype6-dev libjson-c-dev \ + libfontconfig1-dev libgtkmm-3.0-dev libpangomm-1.4-dev \ + libgl-dev libglu-dev libspnav-dev +``` -On a Redhat derivative (e.g. Fedora) the dependencies can be installed with: +On a RedHat derivative (e.g. Fedora) the dependencies can be installed with: - sudo dnf install git gcc-c++ cmake zlib-devel libpng-devel \ - cairo-devel freetype-devel json-c-devel \ - fontconfig-devel gtkmm30-devel pangomm-devel \ - mesa-libGL-devel mesa-libGLU-devel libspnav-devel +```sh +sudo dnf install git gcc-c++ cmake zlib-devel libpng-devel \ + cairo-devel freetype-devel json-c-devel \ + fontconfig-devel gtkmm30-devel pangomm-devel \ + mesa-libGL-devel mesa-libGLU-devel libspnav-devel +``` Before building, check out the project and the necessary submodules: - git clone https://github.com/solvespace/solvespace - cd solvespace - git submodule update --init extlib/libdxfrw extlib/mimalloc +```sh +git clone https://github.com/solvespace/solvespace +cd solvespace +git submodule update --init extlib/libdxfrw extlib/mimalloc +``` After that, build SolveSpace as following: - mkdir build - cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENMP=ON - make - sudo make install +```sh +mkdir build +cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENMP=ON +make -Link Time Optimization is supported by adding -DENABLE_LTO=ON to cmake at the +# Optionally +sudo make install +``` + +Link Time Optimization is supported by adding `-DENABLE_LTO=ON` to cmake at the expense of longer build time. -The graphical interface is built as `build/bin/solvespace`, and the command-line interface -is built as `build/bin/solvespace-cli`. It is possible to build only the command-line interface by passing the `-DENABLE_GUI=OFF` flag to the cmake invocation. +The graphical interface is built as `build/bin/solvespace`, and the command-line +interface is built as `build/bin/solvespace-cli`. It is possible to build only +the command-line interface by passing the `-DENABLE_GUI=OFF` flag to the cmake +invocation. ### Building for Windows -Ubuntu will require 20.04 or above. Cross-compiling with WSL is also confirmed to work. +Ubuntu will require 20.04 or above. Cross-compiling with WSL is also confirmed +to work. -You will need the usual build tools, CMake, and a Windows cross-compiler. On a Debian derivative (e.g. Ubuntu) these can be installed with: +You will need the usual build tools, CMake, and a Windows cross-compiler. On a +Debian derivative (e.g. Ubuntu) these can be installed with: - apt-get install git build-essential cmake mingw-w64 +```sh +apt-get install git build-essential cmake mingw-w64 +``` Before building, check out the project and the necessary submodules: - git clone https://github.com/solvespace/solvespace - cd solvespace - git submodule update --init +```sh +git clone https://github.com/solvespace/solvespace +cd solvespace +git submodule update --init +``` Build 64-bit SolveSpace with the following: - mkdir build - cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake \ - -DCMAKE_BUILD_TYPE=Release - make +```sh +mkdir build +cd build +cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake \ + -DCMAKE_BUILD_TYPE=Release +make +``` -The graphical interface is built as `build/bin/solvespace.exe`, and the command-line interface -is built as `build/bin/solvespace-cli.exe`. +The graphical interface is built as `build/bin/solvespace.exe`, and the +command-line interface is built as `build/bin/solvespace-cli.exe`. Space Navigator support will not be available. -If using Ubuntu to cross-compile, Ubuntu 17.10 or newer (or, alternatively, MinGW from the Ubuntu -17.10 repositories) is required. - -Building on macOS ------------------ +## Building on macOS You will need git, XCode tools and CMake. Git and CMake can be installed via [Homebrew][]: - brew install git cmake +```sh +brew install git cmake +``` XCode has to be installed via AppStore or [the Apple website][appledeveloper]; it requires a free Apple ID. Before building, check out the project and the necessary submodules: - git clone https://github.com/solvespace/solvespace - cd solvespace - git submodule update --init +```sh +git clone https://github.com/solvespace/solvespace +cd solvespace +git submodule update --init +``` After that, build SolveSpace as following: - mkdir build - cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENMP=ON - make +```sh +mkdir build +cd build +cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_OPENMP=ON +make +``` -Link Time Optimization is supported by adding -DENABLE_LTO=ON to cmake at the +Link Time Optimization is supported by adding `-DENABLE_LTO=ON` to cmake at the expense of longer build time. Alternatively, generate an XCode project, open it, and build the "Release" scheme: - mkdir build - cd build - cmake .. -G Xcode +```sh +mkdir build +cd build +cmake .. -G Xcode +``` The application is built in `build/bin/SolveSpace.app`, the graphical interface executable is `build/bin/SolveSpace.app/Contents/MacOS/SolveSpace`, and the command-line interface executable @@ -191,26 +216,32 @@ is `build/bin/SolveSpace.app/Contents/MacOS/solvespace-cli`. [homebrew]: https://brew.sh/ [appledeveloper]: https://developer.apple.com/download/ -Building on OpenBSD -------------------- +## Building on OpenBSD You will need git, cmake, libexecinfo, libpng, gtk3mm and pangomm. These can be installed from the ports tree: - pkg_add -U git cmake libexecinfo png json-c gtk3mm pangomm +```sh +pkg_add -U git cmake libexecinfo png json-c gtk3mm pangomm +``` Before building, check out the project and the necessary submodules: - git clone https://github.com/solvespace/solvespace - cd solvespace - git submodule update --init extlib/libdxfrw extlib/mimalloc +```sh +git clone https://github.com/solvespace/solvespace +cd solvespace +git submodule update --init extlib/libdxfrw extlib/mimalloc +``` After that, build SolveSpace as following: - mkdir build - cd build - cmake .. -DCMAKE_BUILD_TYPE=Release - make +```sh +mkdir build +cd build +cmake .. -DCMAKE_BUILD_TYPE=Release +make +sudo make install +``` Unfortunately, on OpenBSD, the produced executables are not filesystem location independent and must be installed before use. By default, the graphical interface is installed to @@ -218,8 +249,7 @@ and must be installed before use. By default, the graphical interface is install `/usr/local/bin/solvespace-cli`. It is possible to build only the command-line interface by passing the `-DENABLE_GUI=OFF` flag to the cmake invocation. -Building on Windows -------------------- +## Building on Windows You will need [git][gitwin], [cmake][cmakewin] and a C++ compiler (either Visual C++ or MinGW). If using Visual C++, Visual Studio 2015 @@ -234,17 +264,19 @@ Visual C++ and build it. ### Building with Visual Studio in a command prompt -First, ensure that git and cl (the Visual C++ compiler driver) are in your +First, ensure that `git` and `cl` (the Visual C++ compiler driver) are in your `%PATH%`; the latter is usually done by invoking `vcvarsall.bat` from your Visual Studio install. Then, run the following in cmd or PowerShell: - git clone https://github.com/solvespace/solvespace - cd solvespace - git submodule update --init - mkdir build - cd build - cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release - nmake +```bat +git clone https://github.com/solvespace/solvespace +cd solvespace +git submodule update --init +mkdir build +cd build +cmake .. -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release +nmake +``` ### Building with MinGW @@ -254,25 +286,25 @@ Space Navigator support will be disabled. First, ensure that git and gcc are in your `$PATH`. Then, run the following in bash: - git clone https://github.com/solvespace/solvespace - cd solvespace - git submodule update --init - mkdir build - cd build - cmake .. -DCMAKE_BUILD_TYPE=Release - make +```sh +git clone https://github.com/solvespace/solvespace +cd solvespace +git submodule update --init +mkdir build +cd build +cmake .. -DCMAKE_BUILD_TYPE=Release +make +``` [gitwin]: https://git-scm.com/download/win [cmakewin]: http://www.cmake.org/download/#latest [mingw]: http://www.mingw.org/ -Contributing ------------- +## Contributing See the [guide for contributors](CONTRIBUTING.md) for the best way to file issues, contribute code, and debug SolveSpace. -License -------- +## License SolveSpace is distributed under the terms of the [GPL v3](COPYING.txt) or later. From 6d40eface2de42137a6b1040ca2a0a3573235206 Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Wed, 22 Dec 2021 14:00:53 -0600 Subject: [PATCH 6/7] importidf: Fix uninitialized variable --- src/importidf.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/importidf.cpp b/src/importidf.cpp index 8ca3432a..3cd501c8 100644 --- a/src/importidf.cpp +++ b/src/importidf.cpp @@ -332,8 +332,9 @@ bool LinkIDF(const Platform::Path &filename, EntityList *el, SMesh *m, SShell *s double board_thickness = 10.0; double scale = 1.0; //mm - bool topEntities, bottomEntities; - + bool topEntities = false; + bool bottomEntities = false; + Quaternion normal = Quaternion::From(Vector::From(1,0,0), Vector::From(0,1,0)); hEntity hnorm = newNormal(el, &entityCount, normal); From a1e18b83cb990734b5c88e0dc73ad241f0019ff9 Mon Sep 17 00:00:00 2001 From: Ryan Pavlik Date: Wed, 22 Dec 2021 17:06:28 -0600 Subject: [PATCH 7/7] Normalize namespaces: includes all at global/root namespace. Should improve the quality of suggestions, etc. we get from tooling. --- src/platform/gui.h | 2 ++ src/platform/platform.h | 4 +++- src/resource.h | 13 +++++++++++++ src/solvespace.h | 7 ++++--- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/platform/gui.h b/src/platform/gui.h index 1608a6f2..f63fa80b 100644 --- a/src/platform/gui.h +++ b/src/platform/gui.h @@ -7,6 +7,7 @@ #ifndef SOLVESPACE_GUI_H #define SOLVESPACE_GUI_H +namespace SolveSpace { class RgbaColor; namespace Platform { @@ -386,5 +387,6 @@ void ExitGui(); void ClearGui(); } +} // namespace SolveSpace #endif diff --git a/src/platform/platform.h b/src/platform/platform.h index 21c2b2bf..1ad5e175 100644 --- a/src/platform/platform.h +++ b/src/platform/platform.h @@ -7,6 +7,7 @@ #ifndef SOLVESPACE_PLATFORM_H #define SOLVESPACE_PLATFORM_H +namespace SolveSpace { namespace Platform { // UTF-8 ⟷ UTF-16 conversion, for Windows. @@ -80,6 +81,7 @@ void DebugPrint(const char *fmt, ...); void *AllocTemporary(size_t size); void FreeAllTemporary(); -} +} // namespace Platform +} // namespace SolveSpace #endif diff --git a/src/resource.h b/src/resource.h index 18c1e582..d5c2e3f0 100644 --- a/src/resource.h +++ b/src/resource.h @@ -7,11 +7,23 @@ #ifndef SOLVESPACE_RESOURCE_H #define SOLVESPACE_RESOURCE_H +#include +#include +#include +#include +#include +#include + +namespace SolveSpace { + class Camera; class Point2d; class Pixmap; class Vector; class RgbaColor; +namespace Platform { + class Path; +} // namespace Platform std::string LoadString(const std::string &name); std::string LoadStringFromGzip(const std::string &name); @@ -109,4 +121,5 @@ public: const std::function &traceEdge, const Camera &camera); }; +} #endif diff --git a/src/solvespace.h b/src/solvespace.h index 8a922167..7305b8a8 100644 --- a/src/solvespace.h +++ b/src/solvespace.h @@ -7,6 +7,10 @@ #ifndef SOLVESPACE_H #define SOLVESPACE_H +#include "resource.h" +#include "platform/platform.h" +#include "platform/gui.h" + #include #include #include @@ -122,9 +126,6 @@ static constexpr double LENGTH_EPS = 1e-6; static constexpr double VERY_POSITIVE = 1e10; static constexpr double VERY_NEGATIVE = -1e10; -#include "platform/platform.h" -#include "platform/gui.h" -#include "resource.h" using Platform::AllocTemporary; using Platform::FreeAllTemporary;