From ebe1bc18566d500f9b0e2a49fc4d2916063abe0f Mon Sep 17 00:00:00 2001 From: jazzpi Date: Thu, 19 May 2022 20:07:15 +0200 Subject: [PATCH] Initial commit --- .clang-format | 137 +++++++++++++++++++++++++ .gitignore | 2 + CMakeLists.txt | 60 +++++++++++ cmake/FindSDL2IMAGE.cmake | 163 ++++++++++++++++++++++++++++++ cmake/FindSDL2TTF.cmake | 163 ++++++++++++++++++++++++++++++ include/AMI.h | 20 ++++ include/App.h | 45 +++++++++ include/util.h | 13 +++ include/widgets.h | 57 +++++++++++ resources/Avenir-Book.ttf | Bin 0 -> 143268 bytes resources/Fasttube_Logo-white.bmp | Bin 0 -> 1198218 bytes resources/Fasttube_Logo-white.png | Bin 0 -> 18549 bytes src/AMI.cpp | 17 ++++ src/App.cpp | 89 ++++++++++++++++ src/main.cpp | 6 ++ src/util.cpp | 34 +++++++ src/widgets.cpp | 75 ++++++++++++++ 17 files changed, 881 insertions(+) create mode 100644 .clang-format create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 cmake/FindSDL2IMAGE.cmake create mode 100644 cmake/FindSDL2TTF.cmake create mode 100644 include/AMI.h create mode 100644 include/App.h create mode 100644 include/util.h create mode 100644 include/widgets.h create mode 100644 resources/Avenir-Book.ttf create mode 100644 resources/Fasttube_Logo-white.bmp create mode 100644 resources/Fasttube_Logo-white.png create mode 100644 src/AMI.cpp create mode 100644 src/App.cpp create mode 100644 src/main.cpp create mode 100644 src/util.cpp create mode 100644 src/widgets.cpp diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..eb1167f --- /dev/null +++ b/.clang-format @@ -0,0 +1,137 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveMacros: false +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 80 +CommentPragmas: "^ IWYU pragma:" +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DeriveLineEnding: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Regroup +IncludeCategories: + - Regex: '^[<"](fmt|SDL2)/' + Priority: 3 + SortPriority: 0 + - Regex: "^<" + Priority: 4 + SortPriority: 0 + - Regex: ".*" + Priority: 1 + SortPriority: 0 +IncludeIsMainRegex: "(Test)?$" +IncludeIsMainSourceRegex: "" +IndentCaseLabels: false +IndentGotoLabels: true +IndentPPDirectives: None +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: "" +MacroBlockEnd: "" +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +ReflowComments: true +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: false +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInConditionalStatement: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpaceBeforeSquareBrackets: false +Standard: Latest +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 8 +UseCRLF: false +UseTab: Never +--- + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..01f9cb9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build/ +.vscode/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f7dc952 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,60 @@ +cmake_minimum_required(VERSION 3.10) + +project("FT22 Steering Wheel Display") + +list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") + +set(CMAKE_CXX_STANDARD 17) + +# DEPENDENCIES {{{ + +find_package(SDL2 REQUIRED) +find_package(SDL2TTF REQUIRED) +find_package(SDL2IMAGE REQUIRED) + +include(FetchContent) + +# fmtlib +set(stw_display_orig_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) +set(BUILD_SHARED_LIBS ON) +FetchContent_Declare( + fmt + GIT_REPOSITORY https://github.com/fmtlib/fmt.git + GIT_TAG 8.1.1 +) +if (NOT fmt_POPULATED) + FetchContent_MakeAvailable(fmt) +endif() +if (NOT DEFINED fmt_INCLUDE_DIR) + set(fmt_INCLUDE_DIR ${fmt_SOURCE_DIR}/${FMT_INC_DIR}) +endif() +set(BUILD_SHARED_LIBS ${lhotse_orig_BUILD_SHARED_LIBS}) + +# }}} + +add_compile_options(-Wall -Wextra -Wimplicit-fallthrough) + +add_executable( + stw-display + src/main.cpp + src/App.cpp + src/AMI.cpp + src/widgets.cpp + src/util.cpp +) +target_include_directories( + stw-display PUBLIC + "include" +) +target_include_directories( + stw-display PRIVATE + ${SDL2_INCLUDE_DIRS} + ${fmt_INCLUDE_DIR} +) +target_link_libraries( + stw-display + ${SDL2_LIBRARIES} + ${SDL2TTF_LIBRARY} + ${SDL2IMAGE_LIBRARY} + fmt) +add_dependencies(stw-display fmt) \ No newline at end of file diff --git a/cmake/FindSDL2IMAGE.cmake b/cmake/FindSDL2IMAGE.cmake new file mode 100644 index 0000000..1656c01 --- /dev/null +++ b/cmake/FindSDL2IMAGE.cmake @@ -0,0 +1,163 @@ +# Locate SDL2 library +# This module defines +# SDL2_LIBRARY, the name of the library to link against +# SDL2_FOUND, if false, do not try to link to SDL2 +# SDL2_INCLUDE_DIR, where to find SDL.h +# +# This module responds to the the flag: +# SDL2_BUILDING_LIBRARY +# If this is defined, then no SDL2main will be linked in because +# only applications need main(). +# Otherwise, it is assumed you are building an application and this +# module will attempt to locate and set the the proper link flags +# as part of the returned SDL2_LIBRARY variable. +# +# Don't forget to include SDLmain.h and SDLmain.m your project for the +# OS X framework based version. (Other versions link to -lSDL2main which +# this module will try to find on your behalf.) Also for OS X, this +# module will automatically add the -framework Cocoa on your behalf. +# +# +# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration +# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library +# (SDL2.dll, libsdl2.so, SDL2.framework, etc). +# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again. +# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value +# as appropriate. These values are used to generate the final SDL2_LIBRARY +# variable, but when these values are unset, SDL2_LIBRARY does not get created. +# +# +# $SDL2DIR is an environment variable that would +# correspond to the ./configure --prefix=$SDL2DIR +# used in building SDL2. +# l.e.galup 9-20-02 +# +# Modified by Eric Wing. +# Added code to assist with automated building by using environmental variables +# and providing a more controlled/consistent search behavior. +# Added new modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). +# Also corrected the header search path to follow "proper" SDL guidelines. +# Added a search for SDL2main which is needed by some platforms. +# Added a search for threads which is needed by some platforms. +# Added needed compile switches for MinGW. +# +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDL2_LIBRARY to override this selection or set the CMake environment +# CMAKE_INCLUDE_PATH to modify the search paths. +# +# Note that the header path has changed from SDL2/SDL.h to just SDL.h +# This needed to change because "proper" SDL convention +# is #include "SDL.h", not . This is done for portability +# reasons because not all systems place things in SDL2/ (see FreeBSD). + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(SDL2IMAGE_SEARCH_PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +FIND_PATH(SDL2IMAGE_INCLUDE_DIR SDL_image.h + HINTS + $ENV{SDL2IMAGEDIR} + PATH_SUFFIXES include/SDL2 include + PATHS ${SDL2IMAGE_SEARCH_PATHS} +) + +FIND_LIBRARY(SDL2IMAGE_LIBRARY_TEMP + NAMES SDL2_image + HINTS + $ENV{SDL2IMAGEDIR} + PATH_SUFFIXES lib64 lib + PATHS ${SDL2IMAGE_SEARCH_PATHS} +) + +IF(NOT SDL2IMAGE_BUILDING_LIBRARY) + IF(NOT ${SDL2IMAGE_INCLUDE_DIR} MATCHES ".framework") + # Non-OS X framework versions expect you to also dynamically link to + # SDL2IMAGEmain. This is mainly for Windows and OS X. Other (Unix) platforms + # seem to provide SDL2IMAGEmain for compatibility even though they don't + # necessarily need it. + FIND_LIBRARY(SDL2IMAGEMAIN_LIBRARY + NAMES SDL2_image + HINTS + $ENV{SDL2IMAGEDIR} + PATH_SUFFIXES lib64 lib + PATHS ${SDL2IMAGE_SEARCH_PATHS} + ) + ENDIF(NOT ${SDL2IMAGE_INCLUDE_DIR} MATCHES ".framework") +ENDIF(NOT SDL2IMAGE_BUILDING_LIBRARY) + +# SDL2IMAGE may require threads on your system. +# The Apple build may not need an explicit flag because one of the +# frameworks may already provide it. +# But for non-OSX systems, I will use the CMake Threads package. +IF(NOT APPLE) + FIND_PACKAGE(Threads) +ENDIF(NOT APPLE) + +# MinGW needs an additional library, mwindows +# It's total link flags should look like -lmingw32 -lSDL2IMAGEmain -lSDL2IMAGE -lmwindows +# (Actually on second look, I think it only needs one of the m* libraries.) +IF(MINGW) + SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") +ENDIF(MINGW) + +IF(SDL2IMAGE_LIBRARY_TEMP) + # For SDL2IMAGEmain + IF(NOT SDL2IMAGE_BUILDING_LIBRARY) + IF(SDL2IMAGEMAIN_LIBRARY) + SET(SDL2IMAGE_LIBRARY_TEMP ${SDL2IMAGEMAIN_LIBRARY} ${SDL2IMAGE_LIBRARY_TEMP}) + ENDIF(SDL2IMAGEMAIN_LIBRARY) + ENDIF(NOT SDL2IMAGE_BUILDING_LIBRARY) + + # For OS X, SDL2IMAGE uses Cocoa as a backend so it must link to Cocoa. + # CMake doesn't display the -framework Cocoa string in the UI even + # though it actually is there if I modify a pre-used variable. + # I think it has something to do with the CACHE STRING. + # So I use a temporary variable until the end so I can set the + # "real" variable in one-shot. + IF(APPLE) + SET(SDL2IMAGE_LIBRARY_TEMP ${SDL2IMAGE_LIBRARY_TEMP} "-framework Cocoa") + ENDIF(APPLE) + + # For threads, as mentioned Apple doesn't need this. + # In fact, there seems to be a problem if I used the Threads package + # and try using this line, so I'm just skipping it entirely for OS X. + IF(NOT APPLE) + SET(SDL2IMAGE_LIBRARY_TEMP ${SDL2IMAGE_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) + ENDIF(NOT APPLE) + + # For MinGW library + IF(MINGW) + SET(SDL2IMAGE_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2IMAGE_LIBRARY_TEMP}) + ENDIF(MINGW) + + # Set the final string here so the GUI reflects the final state. + SET(SDL2IMAGE_LIBRARY ${SDL2IMAGE_LIBRARY_TEMP} CACHE STRING "Where the SDL2IMAGE Library can be found") + # Set the temp variable to INTERNAL so it is not seen in the CMake GUI + SET(SDL2IMAGE_LIBRARY_TEMP "${SDL2IMAGE_LIBRARY_TEMP}" CACHE INTERNAL "") +ENDIF(SDL2IMAGE_LIBRARY_TEMP) + +INCLUDE(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2IMAGE REQUIRED_VARS SDL2IMAGE_LIBRARY SDL2IMAGE_INCLUDE_DIR) \ No newline at end of file diff --git a/cmake/FindSDL2TTF.cmake b/cmake/FindSDL2TTF.cmake new file mode 100644 index 0000000..be8e7bc --- /dev/null +++ b/cmake/FindSDL2TTF.cmake @@ -0,0 +1,163 @@ +# Locate SDL2 library +# This module defines +# SDL2_LIBRARY, the name of the library to link against +# SDL2_FOUND, if false, do not try to link to SDL2 +# SDL2_INCLUDE_DIR, where to find SDL.h +# +# This module responds to the the flag: +# SDL2_BUILDING_LIBRARY +# If this is defined, then no SDL2main will be linked in because +# only applications need main(). +# Otherwise, it is assumed you are building an application and this +# module will attempt to locate and set the the proper link flags +# as part of the returned SDL2_LIBRARY variable. +# +# Don't forget to include SDLmain.h and SDLmain.m your project for the +# OS X framework based version. (Other versions link to -lSDL2main which +# this module will try to find on your behalf.) Also for OS X, this +# module will automatically add the -framework Cocoa on your behalf. +# +# +# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration +# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library +# (SDL2.dll, libsdl2.so, SDL2.framework, etc). +# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again. +# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value +# as appropriate. These values are used to generate the final SDL2_LIBRARY +# variable, but when these values are unset, SDL2_LIBRARY does not get created. +# +# +# $SDL2DIR is an environment variable that would +# correspond to the ./configure --prefix=$SDL2DIR +# used in building SDL2. +# l.e.galup 9-20-02 +# +# Modified by Eric Wing. +# Added code to assist with automated building by using environmental variables +# and providing a more controlled/consistent search behavior. +# Added new modifications to recognize OS X frameworks and +# additional Unix paths (FreeBSD, etc). +# Also corrected the header search path to follow "proper" SDL guidelines. +# Added a search for SDL2main which is needed by some platforms. +# Added a search for threads which is needed by some platforms. +# Added needed compile switches for MinGW. +# +# On OSX, this will prefer the Framework version (if found) over others. +# People will have to manually change the cache values of +# SDL2_LIBRARY to override this selection or set the CMake environment +# CMAKE_INCLUDE_PATH to modify the search paths. +# +# Note that the header path has changed from SDL2/SDL.h to just SDL.h +# This needed to change because "proper" SDL convention +# is #include "SDL.h", not . This is done for portability +# reasons because not all systems place things in SDL2/ (see FreeBSD). + +#============================================================================= +# Copyright 2003-2009 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +SET(SDL2TTF_SEARCH_PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local + /usr + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +FIND_PATH(SDL2TTF_INCLUDE_DIR SDL_ttf.h + HINTS + $ENV{SDL2TTFDIR} + PATH_SUFFIXES include/SDL2 include + PATHS ${SDL2TTF_SEARCH_PATHS} +) + +FIND_LIBRARY(SDL2TTF_LIBRARY_TEMP + NAMES SDL2_ttf + HINTS + $ENV{SDL2TTFDIR} + PATH_SUFFIXES lib64 lib + PATHS ${SDL2TTF_SEARCH_PATHS} +) + +IF(NOT SDL2TTF_BUILDING_LIBRARY) + IF(NOT ${SDL2TTF_INCLUDE_DIR} MATCHES ".framework") + # Non-OS X framework versions expect you to also dynamically link to + # SDL2TTFmain. This is mainly for Windows and OS X. Other (Unix) platforms + # seem to provide SDL2TTFmain for compatibility even though they don't + # necessarily need it. + FIND_LIBRARY(SDL2TTFMAIN_LIBRARY + NAMES SDL2_ttf + HINTS + $ENV{SDL2TTFDIR} + PATH_SUFFIXES lib64 lib + PATHS ${SDL2TTF_SEARCH_PATHS} + ) + ENDIF(NOT ${SDL2TTF_INCLUDE_DIR} MATCHES ".framework") +ENDIF(NOT SDL2TTF_BUILDING_LIBRARY) + +# SDL2TTF may require threads on your system. +# The Apple build may not need an explicit flag because one of the +# frameworks may already provide it. +# But for non-OSX systems, I will use the CMake Threads package. +IF(NOT APPLE) + FIND_PACKAGE(Threads) +ENDIF(NOT APPLE) + +# MinGW needs an additional library, mwindows +# It's total link flags should look like -lmingw32 -lSDL2TTFmain -lSDL2TTF -lmwindows +# (Actually on second look, I think it only needs one of the m* libraries.) +IF(MINGW) + SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") +ENDIF(MINGW) + +IF(SDL2TTF_LIBRARY_TEMP) + # For SDL2TTFmain + IF(NOT SDL2TTF_BUILDING_LIBRARY) + IF(SDL2TTFMAIN_LIBRARY) + SET(SDL2TTF_LIBRARY_TEMP ${SDL2TTFMAIN_LIBRARY} ${SDL2TTF_LIBRARY_TEMP}) + ENDIF(SDL2TTFMAIN_LIBRARY) + ENDIF(NOT SDL2TTF_BUILDING_LIBRARY) + + # For OS X, SDL2TTF uses Cocoa as a backend so it must link to Cocoa. + # CMake doesn't display the -framework Cocoa string in the UI even + # though it actually is there if I modify a pre-used variable. + # I think it has something to do with the CACHE STRING. + # So I use a temporary variable until the end so I can set the + # "real" variable in one-shot. + IF(APPLE) + SET(SDL2TTF_LIBRARY_TEMP ${SDL2TTF_LIBRARY_TEMP} "-framework Cocoa") + ENDIF(APPLE) + + # For threads, as mentioned Apple doesn't need this. + # In fact, there seems to be a problem if I used the Threads package + # and try using this line, so I'm just skipping it entirely for OS X. + IF(NOT APPLE) + SET(SDL2TTF_LIBRARY_TEMP ${SDL2TTF_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) + ENDIF(NOT APPLE) + + # For MinGW library + IF(MINGW) + SET(SDL2TTF_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2TTF_LIBRARY_TEMP}) + ENDIF(MINGW) + + # Set the final string here so the GUI reflects the final state. + SET(SDL2TTF_LIBRARY ${SDL2TTF_LIBRARY_TEMP} CACHE STRING "Where the SDL2TTF Library can be found") + # Set the temp variable to INTERNAL so it is not seen in the CMake GUI + SET(SDL2TTF_LIBRARY_TEMP "${SDL2TTF_LIBRARY_TEMP}" CACHE INTERNAL "") +ENDIF(SDL2TTF_LIBRARY_TEMP) + +INCLUDE(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2TTF REQUIRED_VARS SDL2TTF_LIBRARY SDL2TTF_INCLUDE_DIR) \ No newline at end of file diff --git a/include/AMI.h b/include/AMI.h new file mode 100644 index 0000000..02bab54 --- /dev/null +++ b/include/AMI.h @@ -0,0 +1,20 @@ +#pragma once + +#include "widgets.h" + +#include + +constexpr const char* FT_LOGO_PATH = "resources/Fasttube_Logo-white.bmp"; + +class AMI { +public: + AMI(SDL_Renderer* renderer); + + void draw(); + +private: + SDL_Renderer* renderer; + + ImageWidget ft_logo; + TextWidget choose; +}; \ No newline at end of file diff --git a/include/App.h b/include/App.h new file mode 100644 index 0000000..6980a3d --- /dev/null +++ b/include/App.h @@ -0,0 +1,45 @@ +#pragma once + +#include "AMI.h" + +#include + +#include + +constexpr int SCREEN_WIDTH = 480; +constexpr int SCREEN_HEIGHT = 320; + +enum class AppView { AMI, DRIVER, TESTING }; + +class SDLManager { +public: + SDLManager(); + ~SDLManager(); +}; + +class App { +public: + App(); + ~App(); + + int run(); + +private: + void init_sdl(); + + void handle_events(); + void render(); + + // The SDLManager initializes & quits SDL and its subsystems. Thus, it must be + // the first member of the class, so that its constructor is called before the + // others and its destructor is called after the others. + SDLManager sdl_manager; + + std::unique_ptr ami; + + bool running; + AppView view; + + SDL_Window* window; + SDL_Renderer* renderer; +}; \ No newline at end of file diff --git a/include/util.h b/include/util.h new file mode 100644 index 0000000..c104e41 --- /dev/null +++ b/include/util.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +#include + +namespace util { + +SDL_Texture* load_img(SDL_Renderer* renderer, const std::string& path); +TTF_Font* load_font(const std::string& path, int pt); + +} \ No newline at end of file diff --git a/include/widgets.h b/include/widgets.h new file mode 100644 index 0000000..aa00708 --- /dev/null +++ b/include/widgets.h @@ -0,0 +1,57 @@ +#pragma once + +#include +#include + +#include +#include + +class Widget { +public: + Widget(SDL_Renderer* renderer, SDL_Rect dest_rect); + + virtual void update_rect(SDL_Rect new_rect); + + virtual void draw() = 0; + +protected: + SDL_Renderer* renderer; + SDL_Rect dest_rect; +}; + +class TextureWidget : public Widget { +public: + TextureWidget(SDL_Renderer* renderer, SDL_Rect dest_rect, + std::optional texture); + ~TextureWidget(); + + virtual void draw() override; + + void update_texture(SDL_Texture* new_texture); + +private: + std::optional texture; +}; + +class ImageWidget : public TextureWidget { +public: + ImageWidget(SDL_Renderer* renderer, SDL_Rect dest_rect, + const std::string& path); +}; + +class TextWidget : public TextureWidget { +public: + TextWidget(SDL_Renderer* renderer, SDL_Rect dest_rect, + const std::string& font_path, + const std::string& initial_text = ""); + ~TextWidget(); + + void update_text(const std::string& new_text); + +protected: + TTF_Font* font; + + std::string text; + + SDL_Texture* generate_text(const std::string& text); +}; \ No newline at end of file diff --git a/resources/Avenir-Book.ttf b/resources/Avenir-Book.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96da4d7ca50719b69d7debf9408f3912ed6de8cb GIT binary patch literal 143268 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%0DwT*>!RH=@dGt!9O4Mygm; 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 z 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 literal 0 HcmV?d00001 diff --git a/resources/Fasttube_Logo-white.bmp b/resources/Fasttube_Logo-white.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c18bb185842f91c9ae56113c60bf5adbf9afd91f GIT binary patch literal 1198218 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 +#include + +#include + +App::App() : view{AppView::AMI} { init_sdl(); } + +App::~App() { + // Destroy window + SDL_DestroyRenderer(renderer); + renderer = nullptr; + SDL_DestroyWindow(window); + window = nullptr; +} + +void App::init_sdl() { + window = SDL_CreateWindow("FT22 STW Display", SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, + SCREEN_HEIGHT, SDL_WINDOW_SHOWN); + if (window == nullptr) { + throw std::runtime_error( + fmt::format("Couldn't create window: {}", SDL_GetError())); + } + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if (renderer == nullptr) { + throw std::runtime_error( + fmt::format("Couldn't create renderer: {}", SDL_GetError())); + } +} + +int App::run() { + ami = std::make_unique(renderer); + + running = true; + + while (running) { + handle_events(); + render(); + SDL_Delay(1); + } + + return 0; +} + +void App::handle_events() { + SDL_Event e; + while (SDL_PollEvent(&e) != 0) { + if (e.type == SDL_QUIT) { + running = false; + } + } +} + +void App::render() { + switch (view) { + case AppView::AMI: + ami->draw(); + break; + default: + throw std::runtime_error(fmt::format("Unknown view: {}", (int)view)); + } + SDL_RenderPresent(renderer); +} + +SDLManager::SDLManager() { + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + throw std::runtime_error( + fmt::format("Couldn't initialize SDL: {}", SDL_GetError())); + } + if (TTF_Init() == -1) { + throw std::runtime_error( + fmt::format("Couldn't initialize SDL_ttf: {}", TTF_GetError())); + } + int img_flags = IMG_INIT_PNG; + if (!(IMG_Init(img_flags) & img_flags)) { + throw std::runtime_error( + fmt::format("Couldn't initialitze SDL_image: {}", IMG_GetError())); + } +} + +SDLManager::~SDLManager() { + IMG_Quit(); + TTF_Quit(); + SDL_Quit(); +} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..2b60725 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,6 @@ +#include "App.h" + +int main() { + App app; + return app.run(); +} \ No newline at end of file diff --git a/src/util.cpp b/src/util.cpp new file mode 100644 index 0000000..ed95a6c --- /dev/null +++ b/src/util.cpp @@ -0,0 +1,34 @@ +#include "util.h" + +#include +#include + +#include + +namespace util { + +SDL_Texture* load_img(SDL_Renderer* renderer, const std::string& path) { + SDL_Surface* loaded = IMG_Load(path.c_str()); + if (loaded == nullptr) { + throw std::runtime_error( + fmt::format("Unable to load image {}: {}", path, IMG_GetError())); + } + SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, loaded); + if (texture == nullptr) { + throw std::runtime_error(fmt::format( + "Unable to convert image {} to texture: {}", path, IMG_GetError())); + } + SDL_FreeSurface(loaded); + return texture; +} + +TTF_Font* load_font(const std::string& path, int pt) { + TTF_Font* font = TTF_OpenFont(path.c_str(), pt); + if (font == nullptr) { + throw std::runtime_error( + fmt::format("Unable to load font {}: {}", path, TTF_GetError())); + } + return font; +} + +} // namespace util diff --git a/src/widgets.cpp b/src/widgets.cpp new file mode 100644 index 0000000..27f61af --- /dev/null +++ b/src/widgets.cpp @@ -0,0 +1,75 @@ +#include "widgets.h" + +#include "util.h" + +#include +#include + +#include + +Widget::Widget(SDL_Renderer* renderer, SDL_Rect rect) + : renderer{renderer}, dest_rect{rect} {} + +void Widget::update_rect(SDL_Rect new_rect) { dest_rect = new_rect; } + +TextureWidget::TextureWidget(SDL_Renderer* renderer, SDL_Rect dest_rect, + std::optional texture) + : Widget{renderer, dest_rect}, texture{texture} {} + +TextureWidget::~TextureWidget() { + if (texture) { + SDL_DestroyTexture(*texture); + texture = nullptr; + } +} + +void TextureWidget::draw() { + if (texture) { + SDL_RenderCopy(renderer, *texture, NULL, &dest_rect); + } +} + +void TextureWidget::update_texture(SDL_Texture* new_texture) { + if (texture) { + SDL_DestroyTexture(*texture); + } + texture = new_texture; +} + +ImageWidget::ImageWidget(SDL_Renderer* renderer, SDL_Rect dest_rect, + const std::string& path) + : TextureWidget{renderer, dest_rect, util::load_img(renderer, path)} {} + +TextWidget::TextWidget(SDL_Renderer* renderer, SDL_Rect dest_rect, + const std::string& font_path, + const std::string& initial_text) + : TextureWidget{renderer, dest_rect, std::nullopt}, + font{util::load_font(font_path, 28)}, text{initial_text} { + if (text != "") { + update_texture(generate_text(text)); + } +} + +TextWidget::~TextWidget() { TTF_CloseFont(font); } + +void TextWidget::update_text(const std::string& new_text) { + if (text != new_text) { + update_texture(generate_text(new_text)); + text = new_text; + } +} + +SDL_Texture* TextWidget::generate_text(const std::string& text) { + SDL_Surface* surf = + TTF_RenderText_Solid(font, text.c_str(), {0xFF, 0xFF, 0XFF, 0xFF}); + if (surf == nullptr) { + throw std::runtime_error( + fmt::format("Unable to render text surface: {}", TTF_GetError())); + } + SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surf); + if (texture == nullptr) { + throw std::runtime_error(fmt::format( + "Unable to create texture from text surface: {}", SDL_GetError())); + } + return texture; +} \ No newline at end of file