diff --git a/examples/term-attributes.cpp b/examples/term-attributes.cpp index 40ed4f22..276be06b 100644 --- a/examples/term-attributes.cpp +++ b/examples/term-attributes.cpp @@ -205,6 +205,19 @@ class AttribDemo : public FWidget // Methods void printColorLine(); void printAltCharset(); + void printDim(); + void printNormal(); + void printBold(); + void printBoldDim(); + void printItalic(); + void printUnderline(); + void printDblUnderline(); + void printCrossesOut(); + void printBlink(); + void printReverse(); + void printStandout(); + void printInvisible(); + void printProtected(); void draw(); // Data Member @@ -266,6 +279,124 @@ void AttribDemo::printAltCharset() print(" "); } +//---------------------------------------------------------------------- +void AttribDemo::printDim() +{ + print(" Dim: "); + setDim(); + printColorLine(); + unsetDim(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printNormal() +{ + print(" Normal: "); + setNormal(); + printColorLine(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printBold() +{ + print(" Bold: "); + setBold(); + printColorLine(); + unsetBold(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printBoldDim() +{ + print(" Bold+Dim: "); + setBold(); + setDim(); + printColorLine(); + unsetDim(); + unsetBold(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printItalic() +{ + print(" Italic: "); + setItalic(); + printColorLine(); + unsetItalic(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printUnderline() +{ + print(" Underline: "); + setUnderline(); + printColorLine(); + unsetUnderline(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printDblUnderline() +{ + print(" Double underline: "); + setDoubleUnderline(); + printColorLine(); + unsetDoubleUnderline(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printCrossesOut() +{ + print(" Crossed-out: "); + setCrossedOut(); + printColorLine(); + unsetCrossedOut(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printBlink() +{ + print(" Blink: "); + setBlink(); + printColorLine(); + unsetBlink(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printReverse() +{ + print(" Reverse: "); + setReverse(); + printColorLine(); + unsetReverse(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printStandout() +{ + print(" Standout: "); + setStandout(); + printColorLine(); + unsetStandout(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printInvisible() +{ + print(" Invisible: "); + setInvisible(); + printColorLine(); + unsetInvisible(); +} + +//---------------------------------------------------------------------- +void AttribDemo::printProtected() +{ + print(" Protected: "); + setProtected(); + printColorLine(); + unsetProtected(); +} + //---------------------------------------------------------------------- void AttribDemo::draw() { @@ -282,95 +413,55 @@ void AttribDemo::draw() switch (y) { case 0: - print(" Dim: "); - setDim(); - printColorLine(); - unsetDim(); + printDim(); break; case 1: - print(" Normal: "); - setNormal(); - printColorLine(); + printNormal(); break; case 2: - print(" Bold: "); - setBold(); - printColorLine(); - unsetBold(); + printBold(); break; case 3: - print(" Bold+Dim: "); - setBold(); - setDim(); - printColorLine(); - unsetDim(); - unsetBold(); + printBoldDim(); break; case 4: - print(" Italic: "); - setItalic(); - printColorLine(); - unsetItalic(); + printItalic(); break; case 5: - print(" Underline: "); - setUnderline(); - printColorLine(); - unsetUnderline(); + printUnderline(); break; case 6: - print(" Double underline: "); - setDoubleUnderline(); - printColorLine(); - unsetDoubleUnderline(); + printDblUnderline(); break; case 7: - print(" Crossed-out: "); - setCrossedOut(); - printColorLine(); - unsetCrossedOut(); + printCrossesOut(); break; case 8: - print(" Blink: "); - setBlink(); - printColorLine(); - unsetBlink(); + printBlink(); break; case 9: - print(" Reverse: "); - setReverse(); - printColorLine(); - unsetReverse(); + printReverse(); break; case 10: - print(" Standout: "); - setStandout(); - printColorLine(); - unsetStandout(); + printStandout(); break; case 11: - print(" Invisible: "); - setInvisible(); - printColorLine(); - unsetInvisible(); + printInvisible(); break; case 12: - print(" Protected: "); - setProtected(); - printColorLine(); - unsetProtected(); + printProtected(); break; } } diff --git a/examples/termcap.cpp b/examples/termcap.cpp index 25022b19..6c979d76 100644 --- a/examples/termcap.cpp +++ b/examples/termcap.cpp @@ -99,26 +99,15 @@ void tcapString (const std::string& name, const char* cap_str) std::cout << "\r\n"; } - //---------------------------------------------------------------------- -// main part -//---------------------------------------------------------------------- -int main (int argc, char* argv[]) +void debug (FApplication& TermApp) { - bool disable_alt_screen = true; - FApplication TermApp (argc, argv, disable_alt_screen); - - // Pointer to the global virtual terminal object - terminal = static_cast(&TermApp); - - FTermcap::tcap_map* tcap = 0; - tcap = FTermcap::getTermcapMap(); - - std::cout << "--------\r\nFTermcap\r\n--------\r\n\n"; - std::cout << "Terminal: " << TermApp.getTermType() << "\r\n"; - #if DEBUG std::cout << "\n.------------------- debug -------------------\r\n"; +#if defined(__linux__) + std::cout << "| Framebuffer bpp: " + << TermApp.framebuffer_bpp << "\r\n"; +#endif std::cout << "| after init_256colorTerminal(): " << TermApp.termtype_256color << "\r\n"; std::cout << "| after parseAnswerbackMsg(): " @@ -134,7 +123,11 @@ int main (int argc, char* argv[]) std::cout << "`------------------- debug -------------------\r\n"; #endif +} +//---------------------------------------------------------------------- +void booleans() +{ std::cout << "\r\n[Booleans]\r\n"; tcapBooleans ( "background_color_erase" , FTermcap::background_color_erase ); @@ -150,7 +143,11 @@ int main (int argc, char* argv[]) , FTermcap::osc_support ); tcapBooleans ( "no_utf8_acs_chars" , FTermcap::no_utf8_acs_chars ); +} +//---------------------------------------------------------------------- +void numeric() +{ std::cout << "\r\n[Numeric]\r\n"; tcapNumeric ("max_color" , FTermcap::max_color); @@ -158,7 +155,11 @@ int main (int argc, char* argv[]) , FTermcap::tabstop); tcapNumeric ("attr_without_color" , FTermcap::attr_without_color); +} +//---------------------------------------------------------------------- +void string(FTermcap::tcap_map*& tcap) +{ std::cout << "\r\n[String]\r\n"; tcapString ("t_bell" , tcap[fc::t_bell].string); @@ -325,3 +326,27 @@ int main (int argc, char* argv[]) tcapString ("t_key_mouse" , tcap[fc::t_key_mouse].string); } + +//---------------------------------------------------------------------- +// main part +//---------------------------------------------------------------------- +int main (int argc, char* argv[]) +{ + bool disable_alt_screen = true; + FApplication TermApp (argc, argv, disable_alt_screen); + + // Pointer to the global virtual terminal object + terminal = static_cast(&TermApp); + + FTermcap::tcap_map* tcap = 0; + tcap = FTermcap::getTermcapMap(); + + std::cout << "--------\r\nFTermcap\r\n--------\r\n\n"; + std::cout << "Terminal: " << TermApp.getTermType() << "\r\n"; + + debug (TermApp); + + booleans(); + numeric(); + string(tcap); +} diff --git a/examples/ui.cpp b/examples/ui.cpp index 95331749..d33ec68a 100644 --- a/examples/ui.cpp +++ b/examples/ui.cpp @@ -772,7 +772,7 @@ void MyDialog::cb_terminfo (FWidget*, data_ptr) , FString() << " Type: " << getTermType() << "\n" << " Name: " << getTermName() << "\n" - << " Mode: " << getEncoding() << "\n" + << " Mode: " << getEncodingString() << "\n" << " Size: " << x << wchar_t(fc::Times) << y << "\n" << "Colors: " << getMaxColor() diff --git a/include/final/fterm.h b/include/final/fterm.h index d8a7e9c9..997d5a2a 100644 --- a/include/final/fterm.h +++ b/include/final/fterm.h @@ -290,9 +290,10 @@ class FTerm static int UTF8decode (const char[]); #if DEBUG - static char termtype_256color[256]; - static char termtype_Answerback[256]; - static char termtype_SecDA[256]; + static char termtype_256color[256]; + static char termtype_Answerback[256]; + static char termtype_SecDA[256]; + static int framebuffer_bpp; #endif protected: diff --git a/src/fterm.cpp b/src/fterm.cpp index e1455dd3..57872a12 100644 --- a/src/fterm.cpp +++ b/src/fterm.cpp @@ -106,6 +106,7 @@ char FTerm::term_name[256] = {}; char FTerm::termtype_256color[256] = {}; char FTerm::termtype_Answerback[256] = {}; char FTerm::termtype_SecDA[256] = {}; +int FTerm::framebuffer_bpp = -1; #endif char* FTerm::locale_name = 0; @@ -2711,7 +2712,7 @@ void FTerm::detectTerminal() FTermcap::max_color = 16; } - // Initialize Linux console + // Initialize Linux console #if defined(__linux__) #if defined(__x86_64__) || defined(__i386) || defined(__arm__) // Enable 16 background colors @@ -2730,10 +2731,18 @@ void FTerm::detectTerminal() if ( linux_terminal ) { + // Underline cursor setLinuxConsoleCursorStyle (fc::underscore_cursor, true); - if ( getFramebuffer_bpp() >= 4 ) + // Framebuffer color depth in bits per pixel + int bpp = getFramebuffer_bpp(); + + if ( bpp >= 4 ) FTermcap::max_color = 16; + +#if DEBUG + framebuffer_bpp = bpp; +#endif } #endif #endif