diff --git a/projects/linux/ee.creator.user b/projects/linux/ee.creator.user index 11ab5c845..201468689 100644 --- a/projects/linux/ee.creator.user +++ b/projects/linux/ee.creator.user @@ -1,10 +1,10 @@ - + EnvironmentId - {d43f4693-30c1-436c-b1d1-498aab2c2f8c} + {b6114084-39c2-4cd0-b9e2-d8803dc6b446} ProjectExplorer.Project.ActiveTarget @@ -19,7 +19,7 @@ Cpp - Spartan + CppGlobal @@ -45,7 +45,7 @@ 2 false true - false + true 0 true false @@ -106,7 +106,7 @@ Desktop Desktop Desktop - {6d057187-158a-4883-8d5b-d470a6b6b025} + {388e5431-b31b-42b3-b9ad-9002d279d75d} 10 0 20 @@ -1433,8 +1433,8 @@ ProjectExplorer.Project.Target.1 Desktop - Imported Kit - Imported Kit + Replacement for "Imported Kit" + Replacement for "Imported Kit" {c0864b34-7205-4013-af48-71ab04d386b1} 0 0 diff --git a/projects/linux/ee.files b/projects/linux/ee.files index 8c493bf7e..56ab07621 100644 --- a/projects/linux/ee.files +++ b/projects/linux/ee.files @@ -1140,8 +1140,8 @@ ../../src/tools/eterm/system/ipipe.hpp ../../src/tools/eterm/system/iprocess.hpp ../../src/tools/eterm/system/iprocessfactory.hpp +../../src/tools/eterm/system/pipe.cpp ../../src/tools/eterm/system/pipe.hpp -../../src/tools/eterm/system/pipe.win32.cpp ../../src/tools/eterm/system/process.cpp ../../src/tools/eterm/system/process.hpp ../../src/tools/eterm/system/processfactory.cpp diff --git a/src/tools/eterm/eterm.cpp b/src/tools/eterm/eterm.cpp index 157e15408..624ad36e2 100644 --- a/src/tools/eterm/eterm.cpp +++ b/src/tools/eterm/eterm.cpp @@ -21,7 +21,7 @@ void inputCallback( InputEvent* event ) { } case InputEvent::MouseButtonUp: { terminal->onMouseUp( win->getInput()->getMousePos(), - win->getInput()->getReleaseTrigger() ); + win->getInput()->getReleaseTrigger() ); break; } case InputEvent::Window: { @@ -39,6 +39,9 @@ void inputCallback( InputEvent* event ) { terminal->onTextInput( event->text.text ); break; } + case InputEvent::VideoExpose: + terminal->invalidate(); + break; case InputEvent::VideoResize: { terminal->setPosition( { 0, 0 } ); terminal->setSize( win->getSize().asFloat() ); @@ -69,13 +72,14 @@ EE_MAIN_FUNC int main( int, char*[] ) { displayManager->enableMouseFocusClickThrough(); displayManager->disableBypassCompositor(); + Sizei winSize( 1280, 720 ); win = Engine::instance()->createWindow( - WindowSettings( 1280, 720, "eterm", WindowStyle::Default, WindowBackend::Default, 32, - "assets/icon/ee.png" ), + WindowSettings( winSize.getWidth(), winSize.getHeight(), "eterm", WindowStyle::Default, + WindowBackend::Default, 32, "assets/icon/ee.png", + currentDisplay->getPixelDensity() ), ContextSettings( true ) ); if ( win->isOpen() ) { - PixelDensity::setPixelDensity( currentDisplay->getPixelDensity() ); win->setClearColor( RGB( 0, 0, 0 ) ); FontTrueType* fontMono = FontTrueType::New( "monospace" ); diff --git a/src/tools/eterm/eterminaldisplay.cpp b/src/tools/eterm/eterminaldisplay.cpp index a2b16ffa8..77a1f0226 100644 --- a/src/tools/eterm/eterminaldisplay.cpp +++ b/src/tools/eterm/eterminaldisplay.cpp @@ -474,7 +474,7 @@ void ETerminalDisplay::DrawLine( Line line, int x1, int y, int x2 ) { } void ETerminalDisplay::DrawCursor( int cx, int cy, TerminalGlyph g, int, int, TerminalGlyph ) { - if ( m_cursor != Vector2i(cx, cy) || m_cursorg != g ) { + if ( m_cursor != Vector2i( cx, cy ) || m_cursorg != g ) { m_cursor.x = cx; m_cursor.y = cy; m_cursorg = g; @@ -482,8 +482,7 @@ void ETerminalDisplay::DrawCursor( int cx, int cy, TerminalGlyph g, int, int, Te } } -void ETerminalDisplay::DrawEnd() { -} +void ETerminalDisplay::DrawEnd() {} void ETerminalDisplay::Draw( bool hasFocus ) { bool modeFocus = mMode & MODE_FOCUSED; @@ -764,9 +763,10 @@ void ETerminalDisplay::Draw( Vector2f pos ) { drawcol = GetCol( mEmulator->GetDefaultReverseCursorColor(), m_colors ); } } else { - drawcol = GetCol( mEmulator->IsSelected( m_cursor.x, m_cursor.y ) ? - mEmulator->GetDefaultReverseCursorColor() : - mEmulator->GetDefaultCursorColor(), m_colors ); + drawcol = GetCol( mEmulator->IsSelected( m_cursor.x, m_cursor.y ) + ? mEmulator->GetDefaultReverseCursorColor() + : mEmulator->GetDefaultCursorColor(), + m_colors ); } Vector2f a{}, b{}, c{}, d{}; @@ -857,8 +857,25 @@ void ETerminalDisplay::onTextInput( const Uint32& chr ) { m_terminal->Write( utf8Input.c_str(), utf8Input.size() ); } +static Uint32 sanitizeMod( const Uint32& mod ) { + Uint32 smod = 0; + if ( mod & KEYMOD_CTRL ) + smod |= KEYMOD_CTRL; + if ( mod & KEYMOD_SHIFT ) + smod |= KEYMOD_SHIFT; + if ( mod & KEYMOD_META ) + smod |= KEYMOD_META; + if ( mod & KEYMOD_LALT ) + smod |= KEYMOD_LALT; + if ( mod & KEYMOD_RALT ) + smod |= KEYMOD_RALT; + return smod; +} + void ETerminalDisplay::onKeyDown( const Keycode& keyCode, const Uint32& /*chr*/, const Uint32& mod, const Scancode& scancode ) { + Uint32 smod = sanitizeMod( mod ); + if ( mod & KEYMOD_CTRL ) { // I really dont like this, as it depends on the undelying backend implementation (SDL in // this case) @@ -877,50 +894,41 @@ void ETerminalDisplay::onKeyDown( const Keycode& keyCode, const Uint32& /*chr*/, } } - for ( auto& kv : terminalKeyMap.Shortcuts() ) { - Keycode key = kv.first; - if ( keyCode == key ) { - for ( auto& k : kv.second ) { - if ( ( k.mask == KEYMOD_CTRL_SHIFT_ALT_META || k.mask == mod ) && - ( k.appkey == 0 || k.appkey < 0 ) && - ( k.appcursor == 0 || k.appcursor > 0 ) ) { - Action( k.action ); + auto scIt = terminalKeyMap.Shortcuts().find( keyCode ); + if ( scIt != terminalKeyMap.Shortcuts().end() ) { + for ( auto& k : scIt->second ) { + if ( ( k.mask == KEYMOD_CTRL_SHIFT_ALT_META || k.mask == smod ) && + ( k.appkey == 0 || k.appkey < 0 ) && ( k.appcursor == 0 || k.appcursor > 0 ) ) { + Action( k.action ); + return; + } + } + } + + auto kvIt = terminalKeyMap.KeyMap().find( keyCode ); + if ( kvIt != terminalKeyMap.KeyMap().end() ) { + for ( auto& k : kvIt->second ) { + if ( ( k.mask == KEYMOD_CTRL_SHIFT_ALT_META || k.mask == smod ) && + ( k.appkey == 0 || k.appkey < 0 ) && ( k.appcursor == 0 || k.appcursor > 0 ) ) { + if ( k.string.size() > 0 ) { + m_terminal->Write( k.string.c_str(), k.string.size() ); return; } + break; } } } - for ( auto& kv : terminalKeyMap.KeyMap() ) { - Keycode key = kv.first; - if ( key == keyCode ) { - for ( auto& k : kv.second ) { - if ( ( k.mask == KEYMOD_CTRL_SHIFT_ALT_META || k.mask == mod ) && - ( k.appkey == 0 || k.appkey < 0 ) && - ( k.appcursor == 0 || k.appcursor > 0 ) ) { - if ( k.string.size() > 0 ) { - m_terminal->Write( k.string.c_str(), k.string.size() ); - return; - } - break; - } - } - } - } - - for ( auto& kv : terminalKeyMap.PlatformKeyMap() ) { - Scancode keyIndex = kv.first; - if ( keyIndex == scancode ) { - for ( auto& k : kv.second ) { - if ( ( k.mask == KEYMOD_CTRL_SHIFT_ALT_META || k.mask == mod ) && - ( k.appkey == 0 || k.appkey < 0 ) && - ( k.appcursor == 0 || k.appcursor > 0 ) ) { - if ( k.string.size() > 0 ) { - m_terminal->Write( k.string.c_str(), k.string.size() ); - return; - } - break; + auto pkmIt = terminalKeyMap.PlatformKeyMap().find( scancode ); + if ( pkmIt != terminalKeyMap.PlatformKeyMap().end() ) { + for ( auto& k : pkmIt->second ) { + if ( ( k.mask == KEYMOD_CTRL_SHIFT_ALT_META || k.mask == smod ) && + ( k.appkey == 0 || k.appkey < 0 ) && ( k.appcursor == 0 || k.appcursor > 0 ) ) { + if ( k.string.size() > 0 ) { + m_terminal->Write( k.string.c_str(), k.string.size() ); + return; } + break; } } } @@ -953,4 +961,6 @@ void ETerminalDisplay::setSize( const Sizef& size ) { } } -void ETerminalDisplay::invalidate() { m_dirty = true; } +void ETerminalDisplay::invalidate() { + m_dirty = true; +} diff --git a/src/tools/eterm/system/pipe.win32.cpp b/src/tools/eterm/system/pipe.cpp similarity index 100% rename from src/tools/eterm/system/pipe.win32.cpp rename to src/tools/eterm/system/pipe.cpp diff --git a/src/tools/eterm/system/process.cpp b/src/tools/eterm/system/process.cpp index 6b915b12e..f85d1ac24 100644 --- a/src/tools/eterm/system/process.cpp +++ b/src/tools/eterm/system/process.cpp @@ -36,8 +36,8 @@ #if defined( __linux ) #include #elif defined( __OpenBSD__ ) || defined( __NetBSD__ ) || defined( __APPLE__ ) -#include #include +#include #elif defined( __FreeBSD__ ) || defined( __DragonFly__ ) #include #include diff --git a/src/tools/eterm/terminal/pseudoterminal.cpp b/src/tools/eterm/terminal/pseudoterminal.cpp index 78d97defa..77ad21774 100644 --- a/src/tools/eterm/terminal/pseudoterminal.cpp +++ b/src/tools/eterm/terminal/pseudoterminal.cpp @@ -231,7 +231,8 @@ std::unique_ptr PseudoTerminal::Create( int columns, int rows ) assert( ptySize.X > 0 ); assert( ptySize.Y > 0 ); - hr = CreatePseudoConsole( ptySize, (HANDLE)hPipePTYIn.Get(), (HANDLE)hPipePTYOut.Get(), 0, &hPC ); + hr = CreatePseudoConsole( ptySize, (HANDLE)hPipePTYIn.Get(), (HANDLE)hPipePTYOut.Get(), 0, + &hPC ); } if ( hr != S_OK ) { diff --git a/src/tools/eterm/terminal/terminaldisplay.hpp b/src/tools/eterm/terminal/terminaldisplay.hpp index bc7ed96c3..b26ff6d7e 100644 --- a/src/tools/eterm/terminal/terminaldisplay.hpp +++ b/src/tools/eterm/terminal/terminaldisplay.hpp @@ -62,7 +62,8 @@ class TerminalDisplay { virtual bool DrawBegin( int columns, int rows ) = 0; virtual void DrawLine( Line line, int x1, int y, int x2 ) = 0; - virtual void DrawCursor( int cx, int cy, TerminalGlyph g, int ox, int oy, TerminalGlyph og ) = 0; + virtual void DrawCursor( int cx, int cy, TerminalGlyph g, int ox, int oy, + TerminalGlyph og ) = 0; virtual void DrawEnd() = 0; };