From 835dc3a55a8b8b791d9b02064fa475aa1af0ca3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Wed, 1 Jun 2022 01:21:21 -0300 Subject: [PATCH] Added shorthand: min-size and max-size. SyntaxDefinitionManager: Improved JSON. breeze theme improvements. ecode: Added mime-type icons (using nonicons). --- bin/assets/fonts/nonicons.ttf | Bin 0 -> 95440 bytes bin/assets/ui/breeze.css | 11 +++ docs/articles/cssspecification.md | 12 +++ include/eepp/ui/css/propertydefinition.hpp | 2 + include/eepp/ui/css/shorthanddefinition.hpp | 4 +- include/eepp/ui/uiiconthememanager.hpp | 2 + src/eepp/ui/css/stylesheetspecification.cpp | 34 +++---- src/eepp/ui/doc/syntaxdefinitionmanager.cpp | 7 +- src/eepp/ui/models/filesystemmodel.cpp | 3 +- src/eepp/ui/uiiconthememanager.cpp | 10 +++ src/tools/ecode/ecode.cpp | 94 +++++++++++++++++++- 11 files changed, 155 insertions(+), 24 deletions(-) create mode 100644 bin/assets/fonts/nonicons.ttf diff --git a/bin/assets/fonts/nonicons.ttf b/bin/assets/fonts/nonicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c14aa53e9b9dafdc147af8831585915ab63e8d3d GIT binary patch literal 95440 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 HRZR4Mk( const ShorthandDefinition* shorthand, diff --git a/include/eepp/ui/uiiconthememanager.hpp b/include/eepp/ui/uiiconthememanager.hpp index 9019249ca..904facb7b 100644 --- a/include/eepp/ui/uiiconthememanager.hpp +++ b/include/eepp/ui/uiiconthememanager.hpp @@ -10,6 +10,8 @@ class UIThemeManager; class EE_API UIIconThemeManager { public: + static std::string getIconNameFromFileName( const std::string& fileName ); + static UIIconThemeManager* New(); ~UIIconThemeManager(); diff --git a/src/eepp/ui/css/stylesheetspecification.cpp b/src/eepp/ui/css/stylesheetspecification.cpp index 6b2e7edfa..56cbc3501 100644 --- a/src/eepp/ui/css/stylesheetspecification.cpp +++ b/src/eepp/ui/css/stylesheetspecification.cpp @@ -370,43 +370,45 @@ void StyleSheetSpecification::registerDefaultProperties() { registerProperty( "splitter-always-show", "true" ).setType( PropertyType::Bool ); // Shorthands - registerShorthand( "margin", {"margin-top", "margin-right", "margin-bottom", "margin-left"}, + registerShorthand( "margin", { "margin-top", "margin-right", "margin-bottom", "margin-left" }, "box" ); registerShorthand( "layout-margin", - {"margin-top", "margin-right", "margin-bottom", "margin-left"}, "box" ); + { "margin-top", "margin-right", "margin-bottom", "margin-left" }, "box" ); registerShorthand( "layout_margin", - {"margin-top", "margin-right", "margin-bottom", "margin-left"}, "box" ); - registerShorthand( "padding", - {"padding-top", "padding-right", "padding-bottom", "padding-left"}, "box" ); + { "margin-top", "margin-right", "margin-bottom", "margin-left" }, "box" ); + registerShorthand( + "padding", { "padding-top", "padding-right", "padding-bottom", "padding-left" }, "box" ); registerShorthand( "background", - {"background-color", "background-image", "background-repeat", "background-position"}, + { "background-color", "background-image", "background-repeat", "background-position" }, "background" ); registerShorthand( "foreground", - {"foreground-color", "foreground-image", "foreground-repeat", "foreground-position"}, + { "foreground-color", "foreground-image", "foreground-repeat", "foreground-position" }, "background" ); - registerShorthand( "box-margin", {"column-margin", "row-margin"}, "single-value-vector" ); - registerShorthand( "background-position", {"background-position-x", "background-position-y"}, + registerShorthand( "box-margin", { "column-margin", "row-margin" }, "single-value-vector" ); + registerShorthand( "background-position", { "background-position-x", "background-position-y" }, "background-position" ); - registerShorthand( "foreground-position", {"foreground-position-x", "foreground-position-y"}, + registerShorthand( "foreground-position", { "foreground-position-x", "foreground-position-y" }, "background-position" ); registerShorthand( "border-color", - {"border-top-color", "border-right-color", "border-bottom-color", "border-left-color"}, + { "border-top-color", "border-right-color", "border-bottom-color", "border-left-color" }, "border-box" ); registerShorthand( "border-width", - {"border-top-width", "border-right-width", "border-bottom-width", "border-left-width"}, + { "border-top-width", "border-right-width", "border-bottom-width", "border-left-width" }, "border-box" ); registerShorthand( "border-radius", - {"border-top-left-radius", "border-top-right-radius", - "border-bottom-right-radius", "border-bottom-left-radius"}, + { "border-top-left-radius", "border-top-right-radius", + "border-bottom-right-radius", "border-bottom-left-radius" }, "radius" ); registerShorthand( "rotation-origin-point", - {"rotation-origin-point-x", "rotation-origin-point-y"}, "vector2" ); - registerShorthand( "scale-origin-point", {"scale-origin-point-x", "scale-origin-point-y"}, + { "rotation-origin-point-x", "rotation-origin-point-y" }, "vector2" ); + registerShorthand( "scale-origin-point", { "scale-origin-point-x", "scale-origin-point-y" }, "vector2" ); + registerShorthand( "min-size", { "min-width", "min-height" }, "vector2" ); + registerShorthand( "max-size", { "max-width", "max-height" }, "vector2" ); } void StyleSheetSpecification::registerNodeSelector( const std::string& name, diff --git a/src/eepp/ui/doc/syntaxdefinitionmanager.cpp b/src/eepp/ui/doc/syntaxdefinitionmanager.cpp index f9422dc45..c4a751801 100644 --- a/src/eepp/ui/doc/syntaxdefinitionmanager.cpp +++ b/src/eepp/ui/doc/syntaxdefinitionmanager.cpp @@ -266,14 +266,17 @@ SyntaxDefinitionManager::SyntaxDefinitionManager() { add( { "JSON", { "%.json$", "%.cson$" }, { + { { "(\".-\")(:)" }, { "normal", "keyword", "operator" } }, { { "\"", "\"", "\\" }, "string" }, { { "'", "'", "\\" }, "string" }, { { "`", "`", "\\" }, "string" }, { { "0x[%da-fA-F]+" }, "number" }, { { "-?%d+[%d%.eE]*" }, "number" }, { { "-?%.?%d+" }, "number" }, + { { "[%[%]%{%}]" }, "operator" }, + { { "[%a_][%w_]*" }, "symbol" }, }, - {}, + { { "true", "literal" }, { "false", "literal" } }, "//" } ); // TypeScript @@ -1032,7 +1035,7 @@ SyntaxDefinitionManager::SyntaxDefinitionManager() { { { "[a-z]+" }, "symbol" } }, { { "true", "literal" }, { "false", "literal" } }, "#", - { "^%[.-%]" } } ); + { "^%[.-%]%f[^\n]" } } ); // Makefile add( { "Makefile", diff --git a/src/eepp/ui/models/filesystemmodel.cpp b/src/eepp/ui/models/filesystemmodel.cpp index 6fad20d14..dcf83e755 100644 --- a/src/eepp/ui/models/filesystemmodel.cpp +++ b/src/eepp/ui/models/filesystemmodel.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #ifndef INDEX_ALREADY_EXISTS @@ -26,7 +27,7 @@ FileSystemModel::Node::Node( FileInfo&& info, FileSystemModel::Node* parent ) : mInfoDirty = false; mName = FileSystem::fileNameFromPath( mInfo.getFilepath() ); if ( !mInfo.isDirectory() ) { - mMimeType = "filetype-" + FileSystem::fileExtension( mName ); + mMimeType = UIIconThemeManager::getIconNameFromFileName( mName ); } else { mMimeType = "folder"; } diff --git a/src/eepp/ui/uiiconthememanager.cpp b/src/eepp/ui/uiiconthememanager.cpp index 54169839d..db9391e1d 100644 --- a/src/eepp/ui/uiiconthememanager.cpp +++ b/src/eepp/ui/uiiconthememanager.cpp @@ -1,9 +1,19 @@ #include +#include #include #include namespace EE { namespace UI { +std::string UIIconThemeManager::getIconNameFromFileName( const std::string& fileName ) { + std::string ext( FileSystem::fileExtension( fileName ) ); + if ( !ext.empty() ) { + return "filetype-" + ext; + } else { + return "filetype-" + String::toLower( fileName ); + } +} + UIIconThemeManager* UIIconThemeManager::New() { return eeNew( UIIconThemeManager, () ); } diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index c01710b25..15708e664 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -2037,6 +2037,24 @@ void App::onCodeEditorCreated( UICodeEditor* editor, TextDocument& doc ) { updateEditorTabTitle( editor ); } ); + auto docChanged = [&]( const Event* event ) { + const DocEvent* synEvent = static_cast( event ); + UICodeEditor* editor = event->getNode()->asType(); + UIIcon* icon = mUISceneNode->findIcon( + UIIconThemeManager::getIconNameFromFileName( synEvent->getDoc()->getFilename() ) ); + if ( !icon ) + icon = mUISceneNode->findIcon( "file" ); + if ( !icon ) + return; + if ( editor->getData() ) { + UITab* tab = (UITab*)editor->getData(); + tab->setIcon( icon->getSize( mMenuIconSize ) ); + } + }; + + editor->addEventListener( Event::OnDocumentLoaded, docChanged ); + editor->addEventListener( Event::OnDocumentChanged, docChanged ); + editor->showMinimap( config.minimap ); if ( config.autoComplete && !mAutoCompletePlugin ) @@ -2800,6 +2818,9 @@ void App::init( std::string file, const Float& pidelDensity, const std::string& return; } + FontTrueType* mimeIconFont = + FontTrueType::New( "nonicons", mResPath + "fonts/nonicons.ttf" ); + SceneManager::instance()->add( mUISceneNode ); UITheme* theme = @@ -3011,7 +3032,7 @@ void App::init( std::string file, const Float& pidelDensity, const std::string& )html"; - UIIconTheme* iconTheme = UIIconTheme::New( "remixicon" ); + UIIconTheme* iconTheme = UIIconTheme::New( "ecode" ); mMenuIconSize = mConfig.ui.fontSize.asPixels( 0, Sizef(), mDisplayDPI ); std::unordered_map icons = { { "document-new", 0xecc3 }, @@ -3029,10 +3050,10 @@ void App::init( std::string file, const Float& pidelDensity, const std::string& { "split-horizontal", 0xf17a }, { "split-vertical", 0xf17b }, { "find-replace", 0xed2b }, - { "folder", 0xed54 }, - { "folder-open", 0xed70 }, + // { "folder", 0xed54 }, + // { "folder-open", 0xed70 }, { "folder-add", 0xed5a }, - { "file", 0xecc3 }, + // { "file", 0xecc3 }, { "file-add", 0xecc9 }, { "file-copy", 0xecd3 }, { "file-code", 0xecd1 }, @@ -3068,6 +3089,71 @@ void App::init( std::string file, const Float& pidelDensity, const std::string& for ( const auto& icon : icons ) iconTheme->add( UIGlyphIcon::New( icon.first, iconFont, icon.second ) ); + if ( mimeIconFont && mimeIconFont->loaded() ) { + std::unordered_map mimeIcons = { + { "filetype-lua", 61826 }, + { "filetype-c", 61718 }, + { "filetype-h", 61792 }, + { "filetype-cs", 61720 }, + { "filetype-cpp", 61719 }, + { "filetype-css", 61743 }, + { "filetype-conf", 61781 }, + { "filetype-cfg", 61781 }, + { "filetype-desktop", 61781 }, + { "filetype-service", 61781 }, + { "filetype-env", 61781 }, + { "filetype-properties", 61781 }, + { "filetype-ini", 61781 }, + { "filetype-dart", 61744 }, + { "filetype-diff", 61752 }, + { "filetype-zip", 61775 }, + { "filetype-go", 61789 }, + { "filetype-htm", 61799 }, + { "filetype-html", 61799 }, + { "filetype-java", 61809 }, + { "filetype-js", 61810 }, + { "filetype-json", 61811 }, + { "filetype-kt", 61814 }, + { "filetype-md", 61829 }, + { "filetype-perl", 61853 }, + { "filetype-php", 61855 }, + { "filetype-py", 61863 }, + { "filetype-pyc", 61863 }, + { "filetype-pyd", 61863 }, + { "filetype-swift", 61906 }, + { "filetype-rb", 61880 }, + { "filetype-rs", 61881 }, + { "filetype-ts", 61923 }, + { "filetype-yaml", 61945 }, + { "filetype-yml", 61945 }, + { "filetype-jpg", 61801 }, + { "filetype-png", 61801 }, + { "filetype-jpeg", 61801 }, + { "filetype-bmp", 61801 }, + { "filetype-tga", 61801 }, + { "filetype-sh", 61911 }, + { "filetype-bash", 61911 }, + { "filetype-fish", 61911 }, + { "filetype-scala", 61882 }, + { "filetype-r", 61866 }, + { "filetype-rake", 61880 }, + { "filetype-rss", 61879 }, + { "filetype-sql", 61746 }, + { "filetype-elm", 61763 }, + { "filetype-ex", 61971 }, + { "filetype-exs", 61971 }, + { "filetype-awk", 61971 }, + { "filetype-nim", 61734 }, + { "filetype-xml", 61769 }, + { "filetype-dockerfile", 61758 }, + { "file", 61766 }, + { "folder", 0xF23B }, + { "folder-open", 0xF23C }, + }; + for ( const auto& icon : mimeIcons ) + iconTheme->add( UIGlyphIcon::New( icon.first, mimeIconFont, icon.second ) ); + } + mUISceneNode->getUIIconThemeManager()->setCurrentTheme( iconTheme ); UIWidgetCreator::registerWidget( "searchbar", UISearchBar::New );