diff --git a/build.sh b/build.sh index 0e19f63d..72d5b5f9 100755 --- a/build.sh +++ b/build.sh @@ -59,7 +59,7 @@ case "$1" in ;; "--fulldebug"|"fulldebug") - if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -Weffc++ -pedantic -pedantic-errors -Wextra -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpadded -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -fstack-protector -Wstrict-aliasing -Wstrict-aliasing=3 -Wswitch -Wswitch-enum -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wsign-promo -Woverloaded-virtual -Wstrict-null-sentinel -fext-numeric-literals -Wreorder -Wnoexcept -Wnarrowing -Wliteral-suffix -Wctor-dtor-privacy -ftree-loop-distribute-patterns -Wmemset-transposed-args" + if ! ./configure --prefix="$PREFIX" CPPFLAGS="-DDEBUG" CXXFLAGS="-g -O0 -DDEBUG -W -Wall -Weffc++ -pedantic -pedantic-errors -Wextra -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimport -Winit-self -Winvalid-pch -Wlong-long -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -fstack-protector -Wstrict-aliasing -Wstrict-aliasing=3 -Wswitch -Wswitch-enum -Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wsign-promo -Woverloaded-virtual -Wstrict-null-sentinel -fext-numeric-literals -Wreorder -Wnoexcept -Wnarrowing -Wliteral-suffix -Wctor-dtor-privacy -ftree-loop-distribute-patterns -Wmemset-transposed-args" then echo "${RED}Configure failed!${NORMAL}" 1>&2 exit 255 diff --git a/examples/opti-move.cpp b/examples/opti-move.cpp index 9151716b..0b1e3263 100644 --- a/examples/opti-move.cpp +++ b/examples/opti-move.cpp @@ -26,9 +26,6 @@ #include -// Global FVTerm object -static finalcut::FVTerm* terminal; - // Global FApplication object static finalcut::FApplication* app{nullptr}; @@ -145,7 +142,6 @@ int main (int argc, char* argv[]) finalcut::FApplication TermApp(argc, argv); // Pointer to the global virtual terminal object - terminal = static_cast(&TermApp); app = &TermApp; // Get screen dimension diff --git a/examples/termcap.cpp b/examples/termcap.cpp index b017d93a..32e240a2 100644 --- a/examples/termcap.cpp +++ b/examples/termcap.cpp @@ -28,9 +28,6 @@ namespace fc = finalcut::fc; -// Global FVTerm object -static finalcut::FVTerm* terminal; - // Function prototype void tcapBoolean (const std::string&, bool); void tcapNumeric (const std::string&, int); @@ -309,9 +306,6 @@ int main (int argc, char* argv[]) bool disable_alt_screen{true}; finalcut::FApplication TermApp (argc, argv, disable_alt_screen); - // Pointer to the global virtual terminal object - terminal = static_cast(&TermApp); - std::cout << "--------\r\nFTermcap\r\n--------\r\n\n"; std::cout << "Terminal: " << TermApp.getTermType() << "\r\n"; diff --git a/src/fbutton.cpp b/src/fbutton.cpp index 6732a484..8529e40d 100644 --- a/src/fbutton.cpp +++ b/src/fbutton.cpp @@ -586,7 +586,7 @@ inline void FButton::drawButtonTextLine (wchar_t button_text[]) setBold(); for ( std::size_t z{0} - ; pos < center_offset + txtlength && z < getWidth() - 2 + ; pos < center_offset + txtlength && z + 2 < getWidth() ; z++, pos++) { if ( z == hotkeypos && getFlags().active ) @@ -615,7 +615,7 @@ inline void FButton::drawButtonTextLine (wchar_t button_text[]) } } - if ( txtlength >= getWidth() - 1 ) + if ( txtlength + 1 >= getWidth() ) { // Print ellipsis print() << FPoint(int(getWidth() + indent) - 2, 1) << ".."; diff --git a/src/flineedit.cpp b/src/flineedit.cpp index 0576ec45..31f42523 100644 --- a/src/flineedit.cpp +++ b/src/flineedit.cpp @@ -284,7 +284,7 @@ void FLineEdit::setCursorPosition (std::size_t pos) if ( cursor_pos > text.getLength() ) keyEnd(); - else if ( cursor_pos >= getWidth() - 1 ) + else if ( cursor_pos + 1 >= getWidth() ) text_offset = text.getLength() - getWidth() + 2; else text_offset = 0; @@ -534,7 +534,7 @@ void FLineEdit::onTimer (FTimerEvent*) break; case FLineEdit::scrollRight: - if ( len < getWidth() - 2 + if ( len + 2 < getWidth() || text_offset == len - getWidth() + 2 ) { drag_scroll = FLineEdit::noScroll; @@ -744,7 +744,7 @@ void FLineEdit::drawInputField() std::size_t x = show_text.getLength(); - while ( x < getWidth() - 1 ) + while ( x + 1 < getWidth() ) { print (' '); x++; @@ -784,7 +784,7 @@ inline void FLineEdit::keyRight() if ( cursor_pos < len ) cursor_pos++; - if ( cursor_pos - text_offset >= getWidth() - 2 + if ( cursor_pos - text_offset + 2 >= getWidth() && text_offset <= len - getWidth() + 1 ) text_offset++; } @@ -802,7 +802,7 @@ inline void FLineEdit::keyEnd() std::size_t len = text.getLength(); cursor_pos = len; - if ( cursor_pos >= getWidth() - 1 ) + if ( cursor_pos + 1 >= getWidth() ) text_offset = len - getWidth() + 2; else text_offset = 0; @@ -822,7 +822,7 @@ inline void FLineEdit::keyDel() if ( cursor_pos >= len ) cursor_pos = len; - if ( text_offset > 0 && len - text_offset < getWidth() - 1 ) + if ( text_offset > 0 && len - text_offset + 1 < getWidth() ) text_offset--; } @@ -888,7 +888,7 @@ inline bool FLineEdit::keyInput (FKey key) cursor_pos++; - if ( cursor_pos >= getWidth() - 1 ) + if ( cursor_pos + 1 >= getWidth() ) text_offset++; processChanged(); diff --git a/src/flistbox.cpp b/src/flistbox.cpp index e744f80f..10107e90 100644 --- a/src/flistbox.cpp +++ b/src/flistbox.cpp @@ -259,7 +259,7 @@ void FListBox::remove (std::size_t item) if ( hbar->isShown() && isHorizontallyScrollable() ) hbar->hide(); - int vmax = ( element_count > getHeight() - 2 ) + int vmax = ( element_count + 2 > getHeight() ) ? int(element_count - getHeight()) + 2 : 0; vbar->setMaximum (vmax); @@ -721,7 +721,7 @@ void FListBox::adjustSize() vbar->setHeight (height, false); vbar->resize(); - int hmax = ( max_line_width > width - 2 ) + int hmax = ( max_line_width + 2 > width ) ? int(max_line_width - width + 2) : 0; hbar->setMaximum (hmax); @@ -956,7 +956,7 @@ inline void FListBox::drawListLine ( int y std::size_t inc_len = inc_search.getLength(); const FWidgetColors& wc = getFWidgetColors(); bool isCurrentLine = bool(y + yoffset + 1 == int(current)); - FString element (getString(iter).mid ( std::size_t(1 + xoffset) + FString element (getString(iter).mid ( std::size_t(xoffset) + 1 , getWidth() - nf_offset - 4 )); const wchar_t* const& element_str = element.wc_str(); std::size_t len = element.getLength(); @@ -1215,7 +1215,7 @@ void FListBox::recalculateHorizontalBar (std::size_t len, bool has_brackets) //---------------------------------------------------------------------- void FListBox::recalculateVerticalBar (std::size_t element_count) { - int vmax = ( element_count > getHeight() - 2 ) + int vmax = ( element_count + 2 > getHeight() ) ? int(element_count - getHeight() + 2) : 0; vbar->setMaximum (vmax); @@ -1314,7 +1314,7 @@ void FListBox::wheelUp (int pagesize) if ( yoffset < 0 ) { - current -= std::size_t(pagesize + yoffset); + current -= std::size_t(pagesize) + std::size_t(yoffset); yoffset = 0; } else @@ -1515,7 +1515,7 @@ void FListBox::scrollToY (int val) if ( yoffset < 0 ) yoffset = 0; - current = std::size_t(yoffset + c); + current = std::size_t(yoffset) + std::size_t(c); if ( current < std::size_t(yoffset) ) current = std::size_t(yoffset); @@ -1700,7 +1700,7 @@ inline bool FListBox::keyInsert() if ( current > element_count ) current = element_count; - if ( current - std::size_t(yoffset) >= getHeight() - 1 ) + if ( current - std::size_t(yoffset) + 1 >= getHeight() ) yoffset++; return true; @@ -1871,8 +1871,7 @@ void FListBox::cb_VBarChange (FWidget*, FDataPtr) if ( isShown() ) drawList(); - if ( scrollType >= FScrollbar::scrollStepBackward - && scrollType <= FScrollbar::scrollWheelDown ) + if ( scrollType >= FScrollbar::scrollStepBackward ) { vbar->setValue (yoffset); @@ -1936,8 +1935,7 @@ void FListBox::cb_HBarChange (FWidget*, FDataPtr) flush_out(); } - if ( scrollType >= FScrollbar::scrollStepBackward - && scrollType <= FScrollbar::scrollWheelDown ) + if ( scrollType >= FScrollbar::scrollStepBackward ) { hbar->setValue (xoffset); diff --git a/src/flistview.cpp b/src/flistview.cpp index 53707db6..4dda2224 100644 --- a/src/flistview.cpp +++ b/src/flistview.cpp @@ -715,7 +715,7 @@ void FListView::setColumnSortType (int column, fc::sorting_type type) if ( column < 1 || header.empty() || column > int(header.size()) ) return; - std::size_t size = std::size_t(column + 1); + std::size_t size = std::size_t(column) + 1; if ( sort_type.empty() || sort_type.size() < size ) sort_type.resize(size); @@ -2010,7 +2010,7 @@ void FListView::recalculateHorizontalBar (std::size_t len) //---------------------------------------------------------------------- void FListView::recalculateVerticalBar (std::size_t element_count) { - int vmax = ( element_count > getHeight() - 2 ) + int vmax = ( element_count + 2 > getHeight() ) ? int(element_count - getHeight() + 2) : 0; vbar->setMaximum (vmax); @@ -2679,8 +2679,7 @@ void FListView::cb_HBarChange (FWidget*, FDataPtr) flush_out(); } - if ( scrollType >= FScrollbar::scrollStepBackward - && scrollType <= FScrollbar::scrollWheelDown ) + if ( scrollType >= FScrollbar::scrollStepBackward ) { hbar->setValue (xoffset); diff --git a/src/fmenuitem.cpp b/src/fmenuitem.cpp index 08c43ec1..ef498a1d 100644 --- a/src/fmenuitem.cpp +++ b/src/fmenuitem.cpp @@ -597,9 +597,7 @@ void FMenuItem::updateSuperMenuDimensions() return; auto menu_ptr = static_cast(super_menu); - - if ( menu_ptr ) - menu_ptr->calculateDimensions(); + menu_ptr->calculateDimensions(); } //---------------------------------------------------------------------- diff --git a/src/fmessagebox.cpp b/src/fmessagebox.cpp index c0bcc0c8..ec96fdc3 100644 --- a/src/fmessagebox.cpp +++ b/src/fmessagebox.cpp @@ -426,7 +426,7 @@ void FMessageBox::adjustButtons() btn_width += button[n]->getWidth() + gap; } - if ( btn_width >= getWidth() - 4 ) + if ( btn_width + 4 >= getWidth() ) { std::size_t max_width; auto root_widget = getRootWidget(); diff --git a/src/frect.cpp b/src/frect.cpp index 1e6ad413..a183e049 100644 --- a/src/frect.cpp +++ b/src/frect.cpp @@ -346,8 +346,8 @@ FRect operator - (const FRect& r, const FSize& s) { return FRect ( r.X1 , r.Y1 - , std::size_t(r.X2 - r.X1 + 1) - s.getWidth() - , std::size_t(r.Y2 - r.Y1 + 1) - s.getHeight() ); + , std::size_t(r.X2 - r.X1) + 1 - s.getWidth() + , std::size_t(r.Y2 - r.Y1) + 1 - s.getHeight() ); } //---------------------------------------------------------------------- diff --git a/src/fscrollview.cpp b/src/fscrollview.cpp index 6b662558..c89e4645 100644 --- a/src/fscrollview.cpp +++ b/src/fscrollview.cpp @@ -917,8 +917,7 @@ void FScrollView::cb_VBarChange (FWidget*, FDataPtr) int distance{1}; int wheel_distance{4}; - if ( scrollType >= FScrollbar::scrollStepBackward - && scrollType <= FScrollbar::scrollWheelDown ) + if ( scrollType >= FScrollbar::scrollStepBackward ) { update_scrollbar = true; } @@ -969,8 +968,7 @@ void FScrollView::cb_HBarChange (FWidget*, FDataPtr) int distance{1}; int wheel_distance{4}; - if ( scrollType >= FScrollbar::scrollStepBackward - && scrollType <= FScrollbar::scrollWheelDown ) + if ( scrollType >= FScrollbar::scrollStepBackward ) { update_scrollbar = true; } diff --git a/src/ftextview.cpp b/src/ftextview.cpp index e308f70a..fe869087 100644 --- a/src/ftextview.cpp +++ b/src/ftextview.cpp @@ -707,7 +707,7 @@ void FTextView::drawText() { std::size_t i{}; std::size_t n = y + std::size_t(yoffset); - std::size_t x = std::size_t(1 + xoffset); + std::size_t x = std::size_t(xoffset) + 1; FString line(data[n].mid (x, getTextWidth())); const auto line_str = line.wc_str(); const auto len = line.getLength(); @@ -750,15 +750,10 @@ void FTextView::cb_VBarChange (FWidget*, FDataPtr) int distance{1}; int wheel_distance{4}; - if ( scrollType >= FScrollbar::scrollStepBackward - && scrollType <= FScrollbar::scrollWheelDown ) - { + if ( scrollType >= FScrollbar::scrollStepBackward ) update_scrollbar = true; - } else - { update_scrollbar = false; - } switch ( scrollType ) { @@ -806,15 +801,10 @@ void FTextView::cb_HBarChange (FWidget*, FDataPtr) int distance{1}; int wheel_distance{4}; - if ( scrollType >= FScrollbar::scrollStepBackward - && scrollType <= FScrollbar::scrollWheelDown ) - { + if ( scrollType >= FScrollbar::scrollStepBackward ) update_scrollbar = true; - } else - { update_scrollbar = false; - } switch ( scrollType ) { diff --git a/src/fvterm.cpp b/src/fvterm.cpp index 9bb21c94..be7886db 100644 --- a/src/fvterm.cpp +++ b/src/fvterm.cpp @@ -687,15 +687,17 @@ void FVTerm::resizeArea ( const FRect& box } bool realloc_success{false}; - std::size_t area_size = std::size_t((width + rsw) * (height + bsh)); + std::size_t full_width = std::size_t(width) + std::size_t(rsw); + std::size_t full_height = std::size_t(height) + std::size_t(bsh); + std::size_t area_size = full_width * full_height; - if ( area->height + area->bottom_shadow != height + bsh ) + if ( area->height + area->bottom_shadow != int(full_height) ) { realloc_success = reallocateTextArea ( area - , std::size_t(height + bsh) + , full_height , area_size ); } - else if ( area->width + area->right_shadow != width + rsw ) + else if ( area->width + area->right_shadow != int(full_width) ) { realloc_success = reallocateTextArea (area, area_size); } @@ -713,7 +715,7 @@ void FVTerm::resizeArea ( const FRect& box area->bottom_shadow = bsh; area->has_changes = false; - FSize size(std::size_t(width + rsw), std::size_t(height + bsh)); + FSize size(full_width, full_height); setTextToDefault (area, size); } @@ -827,9 +829,6 @@ void FVTerm::restoreVTerm (const FRect& box) if ( y < 0 ) y = 0; - if ( w < 0 || h < 0 ) - return; - if ( x + w > vterm->width ) w = vterm->width - x; @@ -892,8 +891,8 @@ FVTerm::covered_state FVTerm::isCovered ( const FPoint& pos int win_y = win->offset_top; FRect geometry ( win_x , win_y - , std::size_t(win->width + win->right_shadow) - , std::size_t(win->height + win->bottom_shadow) ); + , std::size_t(win->width) + std::size_t(win->right_shadow) + , std::size_t(win->height) + std::size_t(win->bottom_shadow) ); if ( found && geometry.contains(pos) ) { @@ -1677,8 +1676,8 @@ charData FVTerm::generateCharacter (const FPoint& pos) int win_y = win->offset_top; FRect geometry ( win_x , win_y - , std::size_t(win->width + win->right_shadow) - , std::size_t(win->height + win->bottom_shadow) ); + , std::size_t(win->width) + std::size_t(win->right_shadow) + , std::size_t(win->height) + std::size_t(win->bottom_shadow) ); // Window is visible and contains current character if ( geometry.contains(x, y) ) @@ -1778,8 +1777,8 @@ charData FVTerm::getCharacter ( character_type char_type FRect geometry ( win->offset_left , win->offset_top - , std::size_t(win->width + win->right_shadow) - , std::size_t(win->height + win->bottom_shadow) ); + , std::size_t(win->width) + std::size_t(win->right_shadow) + , std::size_t(win->height) + std::size_t(win->bottom_shadow) ); // Window visible and contains current character if ( geometry.contains(x, y) ) diff --git a/src/fwidget.cpp b/src/fwidget.cpp index ea3dafc5..87bd2278 100644 --- a/src/fwidget.cpp +++ b/src/fwidget.cpp @@ -47,7 +47,7 @@ FWidget::widgetList* FWidget::window_list{nullptr}; FWidget::widgetList* FWidget::dialog_list{nullptr}; FWidget::widgetList* FWidget::always_on_top_list{nullptr}; FWidget::widgetList* FWidget::close_widget{nullptr}; -FWidgetColors FWidget::wc{}; +FWidgetColors FWidget::wcolors{}; bool FWidget::init_desktop{false}; bool FWidget::hideable{false}; uInt FWidget::modal_dialog_counter{}; @@ -86,7 +86,7 @@ FWidget::FWidget (FWidget* parent, bool disable_alt_screen) else { flags.visible_cursor = ! hideable; - offset = parent->client_offset; + woffset = parent->wclient_offset; double_flatline_mask.top.resize (getWidth(), false); double_flatline_mask.right.resize (getHeight(), false); double_flatline_mask.bottom.resize (getWidth(), false); @@ -109,7 +109,8 @@ FWidget::~FWidget() // destructor if ( flags.focus ) { if ( auto window = FWindow::getWindowWidget(this) ) - window->setWindowFocusWidget(nullptr); + if ( window != this ) + window->setWindowFocusWidget(nullptr); } // unset the global widget focus @@ -217,8 +218,8 @@ FWidget* FWidget::getLastFocusableWidget (FObjectList list) FPoint FWidget::getPrintPos() { const auto cur = getPrintCursor(); - return FPoint ( cur.getX() - offset.getX1() - getX() + 1 - , cur.getY() - offset.getY1() - getY() + 1 ); + return FPoint ( cur.getX() - woffset.getX1() - getX() + 1 + , cur.getY() - woffset.getY1() - getY() + 1 ); } //---------------------------------------------------------------------- @@ -466,7 +467,7 @@ void FWidget::setTopPadding (int top, bool adjust) if ( isRootWidget() ) { auto r = rootObject; - r->client_offset.setY1 (r->padding.top); + r->wclient_offset.setY1 (r->padding.top); adjustSizeGlobal(); } else @@ -487,7 +488,7 @@ void FWidget::setLeftPadding (int left, bool adjust) if ( isRootWidget() ) { auto r = rootObject; - r->client_offset.setX1 (r->padding.left); + r->wclient_offset.setX1 (r->padding.left); adjustSizeGlobal(); } else @@ -508,7 +509,7 @@ void FWidget::setBottomPadding (int bottom, bool adjust) if ( isRootWidget() ) { auto r = rootObject; - r->client_offset.setY2 (int(r->getHeight()) - 1 - r->padding.bottom); + r->wclient_offset.setY2 (int(r->getHeight()) - 1 - r->padding.bottom); adjustSizeGlobal(); } else @@ -529,7 +530,7 @@ void FWidget::setRightPadding (int right, bool adjust) if ( isRootWidget() ) { auto r = rootObject; - r->client_offset.setX2 (int(r->getWidth()) - 1 - r->padding.right); + r->wclient_offset.setX2 (int(r->getWidth()) - 1 - r->padding.right); adjustSizeGlobal(); } else @@ -543,7 +544,7 @@ void FWidget::setParentOffset() auto p = getParentWidget(); if ( p ) - offset = p->client_offset; + woffset = p->wclient_offset; } //---------------------------------------------------------------------- @@ -552,17 +553,17 @@ void FWidget::setTermOffset() auto r = getRootWidget(); int w = int(r->getWidth()); int h = int(r->getHeight()); - offset.setCoordinates (0, 0, w - 1, h - 1); + woffset.setCoordinates (0, 0, w - 1, h - 1); } //---------------------------------------------------------------------- void FWidget::setTermOffsetWithPadding() { auto r = getRootWidget(); - offset.setCoordinates ( r->getLeftPadding() - , r->getTopPadding() - , int(r->getWidth()) - 1 - r->getRightPadding() - , int(r->getHeight()) - 1 - r->getBottomPadding() ); + woffset.setCoordinates ( r->getLeftPadding() + , r->getTopPadding() + , int(r->getWidth()) - 1 - r->getRightPadding() + , int(r->getHeight()) - 1 - r->getBottomPadding() ); } //---------------------------------------------------------------------- @@ -614,10 +615,10 @@ void FWidget::setGeometry (const FPoint& p, const FSize& s, bool adjust) int term_x = getTermX(); int term_y = getTermY(); - client_offset.setCoordinates ( term_x - 1 + padding.left - , term_y - 1 + padding.top - , term_x - 2 + int(getWidth()) - padding.right - , term_y - 2 + int(getHeight()) - padding.bottom ); + wclient_offset.setCoordinates ( term_x - 1 + padding.left + , term_y - 1 + padding.top + , term_x - 2 + int(getWidth()) - padding.right + , term_y - 2 + int(getHeight()) - padding.bottom ); double_flatline_mask.top.resize (getWidth(), false); double_flatline_mask.right.resize (getHeight(), false); @@ -645,17 +646,17 @@ bool FWidget::setCursorPos (const FPoint& pos) if ( area->widget ) { - int widget_offsetX = getTermX() - area->widget->getTermX(); - int widget_offsetY = getTermY() - area->widget->getTermY(); + int woffsetX = getTermX() - area->widget->getTermX(); + int woffsetY = getTermY() - area->widget->getTermY(); if ( isChildPrintArea() ) { - widget_offsetX += (1 - area->widget->getLeftPadding()); - widget_offsetY += (1 - area->widget->getTopPadding()); + woffsetX += (1 - area->widget->getLeftPadding()); + woffsetY += (1 - area->widget->getTopPadding()); } - setAreaCursor ( FPoint ( widget_offsetX + pos.getX() - , widget_offsetY + pos.getY() ) + setAreaCursor ( FPoint ( woffsetX + pos.getX() + , woffsetY + pos.getY() ) , flags.visible_cursor , area ); return true; @@ -667,8 +668,8 @@ bool FWidget::setCursorPos (const FPoint& pos) //---------------------------------------------------------------------- void FWidget::setPrintPos (const FPoint& pos) { - FPoint p{ offset.getX1() + getX() + pos.getX() - 1, - offset.getY1() + getY() + pos.getY() - 1 }; + FPoint p{ woffset.getX1() + getX() + pos.getX() - 1, + woffset.getY1() + getY() + pos.getY() - 1 }; setPrintCursor(p); } @@ -999,7 +1000,7 @@ void FWidget::redraw() { startTerminalUpdate(); // clean desktop - setColor (wc.term_fg, wc.term_bg); + setColor (wcolors.term_fg, wcolors.term_bg); clearArea (getVirtualDesktop()); } else if ( ! isShown() ) @@ -1219,8 +1220,8 @@ void FWidget::detectTermSize() auto r = rootObject; FTerm::detectTermSize(); r->adjust_wsize.setRect (1, 1, getDesktopWidth(), getDesktopHeight()); - r->offset.setRect (0, 0, getDesktopWidth(), getDesktopHeight()); - r->client_offset.setCoordinates + r->woffset.setRect (0, 0, getDesktopWidth(), getDesktopHeight()); + r->wclient_offset.setCoordinates ( r->padding.left, r->padding.top, @@ -1277,13 +1278,13 @@ void FWidget::clearShadow() if ( isWindowWidget() ) { - setColor (wc.shadow_fg, wc.shadow_bg); + setColor (wcolors.shadow_fg, wcolors.shadow_bg); setInheritBackground(); // current background color will be ignored } else if ( auto p = getParentWidget() ) - setColor (wc.shadow_fg, p->getBackgroundColor()); + setColor (wcolors.shadow_fg, p->getBackgroundColor()); - if ( w <= offset.getX2() ) + if ( w <= woffset.getX2() ) { for (std::size_t y{1}; y <= getHeight(); y++) { @@ -1291,7 +1292,7 @@ void FWidget::clearShadow() } } - if ( h <= offset.getY2() ) + if ( h <= woffset.getY2() ) { print() << FPoint(2, h + 1); @@ -1315,9 +1316,9 @@ void FWidget::drawFlatBorder() , y2 = int(getHeight()) + 1; if ( auto p = getParentWidget() ) - setColor (wc.dialog_fg, p->getBackgroundColor()); + setColor (wcolors.dialog_fg, p->getBackgroundColor()); else - setColor (wc.dialog_fg, wc.dialog_bg); + setColor (wcolors.dialog_fg, wcolors.dialog_bg); for (std::size_t y{0}; y < getHeight(); y++) { @@ -1382,9 +1383,9 @@ void FWidget::clearFlatBorder() , y2 = int(getHeight()) + 1; if ( auto p = getParentWidget() ) - setColor (wc.dialog_fg, p->getBackgroundColor()); + setColor (wcolors.dialog_fg, p->getBackgroundColor()); else - setColor (wc.dialog_fg, wc.dialog_bg); + setColor (wcolors.dialog_fg, wcolors.dialog_bg); // clear on left side for (std::size_t y{0}; y < getHeight(); y++) @@ -1542,17 +1543,17 @@ void FWidget::adjustSize() if ( ignore_padding && ! isDialogWidget() ) setTermOffset(); else - offset = rootObject->client_offset; + woffset = rootObject->wclient_offset; } else if ( ignore_padding && p ) { - offset.setCoordinates ( p->getTermX() - 1 + woffset.setCoordinates ( p->getTermX() - 1 , p->getTermY() - 1 , p->getTermX() + int(p->getWidth()) - 2 , p->getTermY() + int(p->getHeight()) - 2 ); } else if ( p ) - offset = p->client_offset; + woffset = p->wclient_offset; adjust_wsize = wsize; } @@ -1561,7 +1562,7 @@ void FWidget::adjustSize() if ( ! hasChildPrintArea() ) insufficientSpaceAdjust(); - client_offset.setCoordinates + wclient_offset.setCoordinates ( getTermX() - 1 + padding.left, getTermY() - 1 + padding.top, @@ -1620,8 +1621,8 @@ void FWidget::hideArea (const FSize& size) } else { - fg = wc.dialog_fg; - bg = wc.dialog_bg; + fg = wcolors.dialog_fg; + bg = wcolors.dialog_bg; } setColor (fg, bg); @@ -1965,8 +1966,8 @@ void FWidget::init() detectTermSize(); wsize.setRect(1, 1, getDesktopWidth(), getDesktopHeight()); adjust_wsize = wsize; - offset.setRect(0, 0, getDesktopWidth(), getDesktopHeight()); - client_offset = offset; + woffset.setRect(0, 0, getDesktopWidth(), getDesktopHeight()); + wclient_offset = woffset; double_flatline_mask.top.resize (getWidth(), false); double_flatline_mask.right.resize (getHeight(), false); @@ -1977,8 +1978,8 @@ void FWidget::init() setColorTheme(); // Default foreground and background color of the desktop/terminal - foreground_color = wc.term_fg; - background_color = wc.term_bg; + foreground_color = wcolors.term_fg; + background_color = wcolors.term_bg; init_desktop = false; // Create the root object accelerator list @@ -2022,7 +2023,7 @@ inline void FWidget::insufficientSpaceAdjust() return; // move left if not enough space - while ( getTermX() + int(getWidth()) - padding.right > offset.getX2() + 2 ) + while ( getTermX() + int(getWidth()) - padding.right > woffset.getX2() + 2 ) { adjust_wsize.x1_ref()--; adjust_wsize.x2_ref()--; @@ -2032,7 +2033,7 @@ inline void FWidget::insufficientSpaceAdjust() } // move up if not enough space - while ( getTermY() + int(getHeight()) - padding.bottom > offset.getY2() + 2 ) + while ( getTermY() + int(getHeight()) - padding.bottom > woffset.getY2() + 2 ) { adjust_wsize.y1_ref()--; adjust_wsize.y2_ref()--; @@ -2042,7 +2043,7 @@ inline void FWidget::insufficientSpaceAdjust() } // reduce the width if not enough space - while ( offset.getX1() + int(getWidth()) - 1 > offset.getX2() ) + while ( woffset.getX1() + int(getWidth()) - 1 > woffset.getX2() ) adjust_wsize.x2_ref()--; if ( getWidth() < size_hints.min_width ) @@ -2052,7 +2053,7 @@ inline void FWidget::insufficientSpaceAdjust() adjust_wsize.setWidth(1); // reduce the height if not enough space - while ( offset.getY1() + int(getHeight()) - 1 > offset.getY2() ) + while ( woffset.getY1() + int(getHeight()) - 1 > woffset.getY2() ) adjust_wsize.y2_ref()--; if ( getHeight() < size_hints.min_height ) @@ -2228,7 +2229,7 @@ void FWidget::drawTransparentShadow (int x1, int y1, int x2, int y2) print() << FPoint(x2 + 1, y1) << " "; unsetTransparent(); - setColor (wc.shadow_bg, wc.shadow_fg); + setColor (wcolors.shadow_bg, wcolors.shadow_fg); setTransShadow(); for (std::size_t y{1}; y < getHeight(); y++) @@ -2241,7 +2242,7 @@ void FWidget::drawTransparentShadow (int x1, int y1, int x2, int y2) print() << FPoint(x1, y2 + 1) << " "; unsetTransparent(); - setColor (wc.shadow_bg, wc.shadow_fg); + setColor (wcolors.shadow_bg, wcolors.shadow_fg); setTransShadow(); for (std::size_t x{2}; x <= getWidth() + 1; x++) @@ -2266,11 +2267,11 @@ void FWidget::drawBlockShadow (int x1, int y1, int x2, int y2) if ( isWindowWidget() ) { - setColor (wc.shadow_fg, wc.shadow_bg); + setColor (wcolors.shadow_fg, wcolors.shadow_bg); setInheritBackground(); // current background color will be ignored } else if ( auto p = getParentWidget() ) - setColor (wc.shadow_fg, p->getBackgroundColor()); + setColor (wcolors.shadow_fg, p->getBackgroundColor()); block = fc::FullBlock; // █ print (fc::LowerHalfBlock); // ▄ @@ -2301,9 +2302,9 @@ void FWidget::setColorTheme() // Sets the default color theme if ( getMaxColor() < 16 ) // for 8 color mode - wc.set8ColorTheme(); + wcolors.set8ColorTheme(); else - wc.set16ColorTheme(); + wcolors.set16ColorTheme(); } @@ -2371,7 +2372,7 @@ std::size_t getHotkeyPos (wchar_t src[], wchar_t dest[], std::size_t length) for (std::size_t i{0}; i < length; i++) { - if ( i < length && txt[i] == L'&' && hotkeypos == NOT_SET ) + if ( txt[i] == L'&' && hotkeypos == NOT_SET ) { hotkeypos = i; i++; diff --git a/src/include/final/flistbox.h b/src/include/final/flistbox.h index 5385cfdf..42ac2ab4 100644 --- a/src/include/final/flistbox.h +++ b/src/include/final/flistbox.h @@ -533,7 +533,7 @@ void FListBox::insert ( const ItemT& item //---------------------------------------------------------------------- inline bool FListBox::isHorizontallyScrollable() -{ return bool( max_line_width >= getClientWidth() - 1 ); } +{ return bool( max_line_width + 1 >= getClientWidth() ); } //---------------------------------------------------------------------- inline bool FListBox::isVerticallyScrollable() diff --git a/src/include/final/ftypes.h b/src/include/final/ftypes.h index f7194ed7..69cc2f75 100644 --- a/src/include/final/ftypes.h +++ b/src/include/final/ftypes.h @@ -138,7 +138,8 @@ typedef struct // Attribute byte #2 uInt8 no_changes : 1; // no changes required uInt8 printed : 1; // is printed to VTerm - uInt8 : 6; // padding bits + uInt8 char_with : 2; // Number of character cells on screen + uInt8 : 4; // padding bits // Attribute byte #3 uInt8 : 8; // padding byte } bit; diff --git a/src/include/final/fwidget.h b/src/include/final/fwidget.h index bb8d8f02..018e4dc0 100644 --- a/src/include/final/fwidget.h +++ b/src/include/final/fwidget.h @@ -484,9 +484,9 @@ class FWidget : public FVTerm, public FObject FRect adjust_wsize_shadow{}; FRect adjust_wsize_term_shadow{}; // widget offset - FRect offset{}; + FRect woffset{}; // offset of the widget client area - FRect client_offset{}; + FRect wclient_offset{}; // widget shadow size (on the right and bottom side) FSize wshadow{0, 0}; @@ -512,7 +512,7 @@ class FWidget : public FVTerm, public FObject static widgetList* dialog_list; static widgetList* always_on_top_list; static widgetList* close_widget; - static FWidgetColors wc; + static FWidgetColors wcolors; static uInt modal_dialog_counter; static bool init_desktop; static bool hideable; @@ -602,11 +602,11 @@ inline const FPoint FWidget::getPos() const // position relative to the widget //---------------------------------------------------------------------- inline int FWidget::getTermX() const // x-position on terminal -{ return offset.getX1() + adjust_wsize.getX(); } +{ return woffset.getX1() + adjust_wsize.getX(); } //---------------------------------------------------------------------- inline int FWidget::getTermY() const // y-position on terminal -{ return offset.getY1() + adjust_wsize.getY(); } +{ return woffset.getY1() + adjust_wsize.getY(); } //---------------------------------------------------------------------- inline const FPoint FWidget::getTermPos() const // position on terminal @@ -642,19 +642,19 @@ inline int FWidget::getRightPadding() const //---------------------------------------------------------------------- inline std::size_t FWidget::getClientWidth() const -{ return client_offset.getWidth(); } +{ return wclient_offset.getWidth(); } //---------------------------------------------------------------------- inline std::size_t FWidget::getClientHeight() const -{ return client_offset.getHeight(); } +{ return wclient_offset.getHeight(); } //---------------------------------------------------------------------- inline std::size_t FWidget::getMaxWidth() const -{ return offset.getWidth(); } +{ return woffset.getWidth(); } //---------------------------------------------------------------------- inline std::size_t FWidget::getMaxHeight() const -{ return offset.getHeight(); } +{ return woffset.getHeight(); } //---------------------------------------------------------------------- inline const FSize& FWidget::getShadow() const @@ -683,10 +683,10 @@ inline const FRect& FWidget::getTermGeometry() { adjust_wsize_term.setCoordinates ( - adjust_wsize.x1_ref() + offset.x1_ref(), - adjust_wsize.y1_ref() + offset.y1_ref(), - adjust_wsize.x2_ref() + offset.x1_ref(), - adjust_wsize.y2_ref() + offset.y1_ref() + adjust_wsize.x1_ref() + woffset.x1_ref(), + adjust_wsize.y1_ref() + woffset.y1_ref(), + adjust_wsize.x2_ref() + woffset.x1_ref(), + adjust_wsize.y2_ref() + woffset.y1_ref() ); return adjust_wsize_term; @@ -697,10 +697,10 @@ inline const FRect& FWidget::getTermGeometryWithShadow() { adjust_wsize_term_shadow.setCoordinates ( - adjust_wsize.x1_ref() + offset.x1_ref(), - adjust_wsize.y1_ref() + offset.y1_ref(), - adjust_wsize.x2_ref() + offset.x1_ref() + int(wshadow.width_ref()), - adjust_wsize.y2_ref() + offset.y1_ref() + int(wshadow.height_ref()) + adjust_wsize.x1_ref() + woffset.x1_ref(), + adjust_wsize.y1_ref() + woffset.y1_ref(), + adjust_wsize.x2_ref() + woffset.x1_ref() + int(wshadow.width_ref()), + adjust_wsize.y2_ref() + woffset.y1_ref() + int(wshadow.height_ref()) ); return adjust_wsize_term_shadow; @@ -945,8 +945,8 @@ inline void FWidget::delAccelerator() //---------------------------------------------------------------------- inline FPoint FWidget::termToWidgetPos (const FPoint& tPos) { - return FPoint ( tPos.getX() + 1 - offset.getX1() - adjust_wsize.getX() - , tPos.getY() + 1 - offset.getY1() - adjust_wsize.getY() ); + return FPoint ( tPos.getX() + 1 - woffset.getX1() - adjust_wsize.getX() + , tPos.getY() + 1 - woffset.getY1() - adjust_wsize.getY() ); } //---------------------------------------------------------------------- @@ -963,7 +963,7 @@ inline void FWidget::drawBorder() //---------------------------------------------------------------------- inline const FWidgetColors& FWidget::getFWidgetColors() const -{ return wc; } +{ return wcolors; } //---------------------------------------------------------------------- inline uInt FWidget::getModalDialogCounter() @@ -983,7 +983,7 @@ inline FWidget::widgetList*& FWidget::getWidgetCloseList() //---------------------------------------------------------------------- inline FWidgetColors& FWidget::setFWidgetColors() -{ return wc; } +{ return wcolors; } //---------------------------------------------------------------------- inline uInt& FWidget::setModalDialogCounter()