diff --git a/ChangeLog b/ChangeLog index 318c5a4a..7045bf2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2019-01-27 Markus Gans + * The print command can now have an FPoint object as a parameter + to set the cursor position + * Refactoring of the FProgressbar drawing methods + 2019-01-24 Markus Gans * Refactoring of some methods in FVTerm and FDialog diff --git a/examples/calculator.cpp b/examples/calculator.cpp index d57a28e0..9bbc4ac9 100644 --- a/examples/calculator.cpp +++ b/examples/calculator.cpp @@ -338,9 +338,7 @@ void Calc::drawDispay() if ( isMonochron() ) setReverse(false); - setPrintPos (FPoint(3, 3)); - print(display); - print(L' '); + print() << FPoint(3, 3) << display << ' '; setColor(wc.dialog_fg, wc.dialog_bg); if ( isMonochron() ) @@ -353,13 +351,10 @@ void Calc::drawDispay() wchar_t top_line = finalcut::fc::NF_border_line_upper; wchar_t right_line = finalcut::fc::NF_rev_border_line_right; wchar_t left_line = finalcut::fc::NF_border_line_left; - setPrintPos (FPoint(3, 2)); - print (finalcut::FString(33, bottom_line)); - setPrintPos (FPoint(2, 3)); - print (right_line); - setPrintPos (FPoint(36, 3)); - print (left_line); - setPrintPos (FPoint(3, 4)); + print() << FPoint(3, 2) << finalcut::FString(33, bottom_line); + print() << FPoint(2, 3) << right_line; + print() << FPoint(36, 3) << left_line; + print() << FPoint(3, 4); finalcut::FString top_bottom_line_5 (5, top_bottom_line); finalcut::FString top_line_2 (2, top_line); print ( top_bottom_line_5 + top_line_2 @@ -376,8 +371,7 @@ void Calc::drawDispay() finalcut::FString separator = finalcut::FString(vertical_and_right) + finalcut::FString(35, horizontal) + finalcut::FString(vertical_and_left); - setPrintPos (FPoint(1, 4)); - print(separator); + print() << FPoint(1, 4) << separator; } } diff --git a/examples/input-dialog.cpp b/examples/input-dialog.cpp index 60046c16..05b0950a 100644 --- a/examples/input-dialog.cpp +++ b/examples/input-dialog.cpp @@ -51,6 +51,7 @@ void cb_publish (finalcut::FWidget* widget, FDataPtr data) cbox2->unsetChecked(); cbox2->setDisable(); } + cbox2->redraw(); } diff --git a/examples/keyboard.cpp b/examples/keyboard.cpp index 8a2b728f..6b35f19e 100644 --- a/examples/keyboard.cpp +++ b/examples/keyboard.cpp @@ -79,8 +79,8 @@ void Keyboard::onAccel (finalcut::FAccelEvent* ev) //---------------------------------------------------------------------- void Keyboard::draw() { - setPrintPos (finalcut::FPoint(1, 1)); - print() << "---------------\n" + print() << finalcut::FPoint(1, 1) + << "---------------\n" << "Press Q to quit\n" << "---------------\n"; setAreaCursor (finalcut::FPoint(1, 4), true, vdesktop); diff --git a/examples/mandelbrot.cpp b/examples/mandelbrot.cpp index 694fc241..40e6211b 100644 --- a/examples/mandelbrot.cpp +++ b/examples/mandelbrot.cpp @@ -92,7 +92,7 @@ void Mandelbrot::draw() for (y0 = y_min; y0 < y_max && current_line < Lines; y0 += dY) { current_line++; - setPrintPos (FPoint(xoffset, yoffset + current_line)); + print() << FPoint(xoffset, yoffset + current_line); for (x0 = x_min; x0 < x_max; x0 += dX) { diff --git a/examples/mouse.cpp b/examples/mouse.cpp index a2858329..cf47ab6f 100644 --- a/examples/mouse.cpp +++ b/examples/mouse.cpp @@ -131,7 +131,7 @@ void ColorChooser::draw() for (FColor c = 0; c < 16; c++) { - setPrintPos (FPoint(2 + (c / 8) * 3, 3 + c % 8)); + print() << FPoint(2 + (c / 8) * 3, 3 + c % 8); if ( c < 6 ) setColor (finalcut::fc::LightGray, c); @@ -245,9 +245,8 @@ void Brushes::draw() setColor(); finalcut::FWidget::drawBorder (1, 2, 8, 4); setColor (fg_color, bg_color); - setPrintPos (FPoint(2, 3)); - print(" "); - print(finalcut::FString(3, finalcut::fc::MediumShade)); + print() << FPoint(2, 3) << " " + << finalcut::FString(3, finalcut::fc::MediumShade); if ( brush == L' ' ) pos = 0; @@ -255,10 +254,10 @@ void Brushes::draw() pos = 3; setColor(); - setPrintPos (FPoint(3 + pos, 2)); - print(finalcut::fc::BlackDownPointingTriangle); - setPrintPos (FPoint(3 + pos, 4)); - print(finalcut::fc::BlackUpPointingTriangle); + print() << FPoint(3 + pos, 2) + << finalcut::fc::BlackDownPointingTriangle + << FPoint(3 + pos, 4) + << finalcut::fc::BlackUpPointingTriangle; } //---------------------------------------------------------------------- @@ -428,26 +427,25 @@ void MouseDraw::draw() { for (int y = 2; y < y_max; y++) { - setPrintPos (FPoint(10, y)); - print (finalcut::fc::NF_rev_border_line_right); + print() << FPoint(10, y) + << finalcut::fc::NF_rev_border_line_right; } - setPrintPos (FPoint(10, y_max)); - print (finalcut::fc::NF_rev_border_corner_lower_right); + print() << FPoint(10, y_max) + << finalcut::fc::NF_rev_border_corner_lower_right; } else { - setPrintPos (FPoint(10, 2)); - print (finalcut::fc::BoxDrawingsDownAndHorizontal); + print() << FPoint(10, 2) + << finalcut::fc::BoxDrawingsDownAndHorizontal; for (int y = 3; y < y_max; y++) { - setPrintPos (FPoint(10, y)); - print (finalcut::fc::BoxDrawingsVertical); + print() << FPoint(10, y) << finalcut::fc::BoxDrawingsVertical; } - setPrintPos (FPoint(10, y_max)); - print (finalcut::fc::BoxDrawingsUpAndHorizontal); + print() << FPoint(10, y_max) + << finalcut::fc::BoxDrawingsUpAndHorizontal; } drawCanvas(); diff --git a/examples/scrollview.cpp b/examples/scrollview.cpp index 8b9c6579..b22ea30f 100644 --- a/examples/scrollview.cpp +++ b/examples/scrollview.cpp @@ -139,7 +139,7 @@ void Scrollview::draw() for (int y = 0; y < int(getScrollHeight()); y++) { - setPrintPos (FPoint(1, 1 + y)); + print() << FPoint(1, 1 + y); for (int x = 0; x < int(getScrollWidth()); x++) print (32 + ((x + y) % 0x5f)); diff --git a/examples/term-attributes.cpp b/examples/term-attributes.cpp index 5c4a7216..31dd2118 100644 --- a/examples/term-attributes.cpp +++ b/examples/term-attributes.cpp @@ -273,8 +273,7 @@ void AttribDemo::printAltCharset() if ( ! isMonochron() ) setColor (wc.label_fg, wc.label_bg); - setPrintPos (FPoint(1, 1)); - print("alternate charset: "); + print() << FPoint(1, 1) << "alternate charset: "; if ( parent->bgcolor == finalcut::fc::Default ) { @@ -440,7 +439,7 @@ void AttribDemo::draw() for (std::size_t y = 0; y < getParentWidget()->getHeight() - 7; y++) { - setPrintPos (FPoint(1, 2 + int(y))); + print() << FPoint(1, 2 + int(y)); if ( ! isMonochron() ) setColor (wc.label_fg, wc.label_bg); @@ -452,7 +451,7 @@ void AttribDemo::draw() if ( ! isMonochron() ) setColor(wc.label_fg, wc.label_bg); - setPrintPos (FPoint(1, 15)); + print() << FPoint(1, 15); FColor bg = static_cast(getParent())->bgcolor; print (" Background color:"); @@ -461,8 +460,7 @@ void AttribDemo::draw() else printf ( " %d", bg); - setPrintPos (FPoint(16, 17)); - print ("Change background color ->"); + print() << FPoint(16, 17) << "Change background color ->"; } diff --git a/examples/timer.cpp b/examples/timer.cpp index 68b3bfd2..afccfe94 100644 --- a/examples/timer.cpp +++ b/examples/timer.cpp @@ -59,8 +59,8 @@ Timer::Timer (finalcut::FWidget* parent) //---------------------------------------------------------------------- void Timer::draw() { - setPrintPos (finalcut::FPoint(1, 1)); - print() << "---------------\n" + print() << finalcut::FPoint(1, 1) + << "---------------\n" << "Press Q to quit\n" << "---------------\n"; setAreaCursor (finalcut::FPoint(1, 4), true, vdesktop); diff --git a/examples/transparent.cpp b/examples/transparent.cpp index 17f6b22e..efd93745 100644 --- a/examples/transparent.cpp +++ b/examples/transparent.cpp @@ -111,8 +111,7 @@ void Transparent::draw() for (int n = 1; n <= int(getClientHeight()); n++) { - setPrintPos (FPoint(2, 2 + n)); - print(line); + print() << FPoint(2, 2 + n) << line; } if ( type == shadow ) @@ -242,10 +241,8 @@ void MainWindow::draw() setReverse(true); setColor(); - setPrintPos (FPoint(2, 4)); - print(line1); - setPrintPos (FPoint(2, 5)); - print(line2); + print() << FPoint(2, 4) << line1; + print() << FPoint(2, 5) << line2; if ( isMonochron() ) setReverse(false); diff --git a/src/fbutton.cpp b/src/fbutton.cpp index 2b6285af..e7f7a678 100644 --- a/src/fbutton.cpp +++ b/src/fbutton.cpp @@ -253,8 +253,7 @@ void FButton::hide() for (std::size_t y = 0; y < getHeight() + s + (f << 1); y++) { - setPrintPos (FPoint(1 - int(f), 1 + int(y - f))); - print (blank); + print() << FPoint(1 - int(f), 1 + int(y - f)) << blank; } destroyBlankArray (blank); @@ -491,8 +490,7 @@ inline std::size_t FButton::clickAnimationIndent (FWidget* parent_widget) for (std::size_t y = 1; y <= getHeight(); y++) { - setPrintPos (FPoint(1, int(y))); - print (' '); // clear one left █ + print() << FPoint(1, int(y)) << ' '; // clear one left █ } return 1; @@ -514,8 +512,7 @@ inline void FButton::clearRightMargin (FWidget* parent_widget) if ( isMonochron() ) setReverse(true); // Light background - setPrintPos (FPoint(1 + int(getWidth()), y)); - print (' '); // clear right + print() << FPoint(1 + int(getWidth()), y) << ' '; // clear right if ( flags.active && isMonochron() ) setReverse(false); // Dark background @@ -531,7 +528,7 @@ inline void FButton::drawMarginLeft() for (std::size_t y = 0; y < getHeight(); y++) { - setPrintPos (FPoint(1 + int(indent), 1 + int(y))); + print() << FPoint(1 + int(indent), 1 + int(y)); if ( isMonochron() && active_focus && y == vcenter_offset ) print (fc::BlackRightPointingPointer); // ► @@ -547,7 +544,7 @@ inline void FButton::drawMarginRight() for (std::size_t y = 0; y < getHeight(); y++) { - setPrintPos (FPoint(int(getWidth() + indent), 1 + int(y))); + print() << FPoint(int(getWidth() + indent), 1 + int(y)); if ( isMonochron() && active_focus && y == vcenter_offset ) print (fc::BlackLeftPointingPointer); // ◄ @@ -566,7 +563,7 @@ inline void FButton::drawTopBottomBackground() for (std::size_t y = 0; y < vcenter_offset; y++) { - setPrintPos (FPoint(2 + int(indent), 1 + int(y))); + print() << FPoint(2 + int(indent), 1 + int(y)); for (std::size_t x = 1; x < getWidth() - 1; x++) print (space_char); // █ @@ -574,7 +571,7 @@ inline void FButton::drawTopBottomBackground() for (std::size_t y = vcenter_offset + 1; y < getHeight(); y++) { - setPrintPos (FPoint(2 + int(indent), 1 + int(y))); + print() << FPoint(2 + int(indent), 1 + int(y)); for (std::size_t x = 1; x < getWidth() - 1; x++) print (space_char); // █ @@ -585,7 +582,7 @@ inline void FButton::drawTopBottomBackground() inline void FButton::drawButtonTextLine (wchar_t button_text[]) { std::size_t pos; - setPrintPos (FPoint(2 + int(indent), 1 + int(vcenter_offset))); + print() << FPoint(2 + int(indent), 1 + int(vcenter_offset)); setColor (button_fg, button_bg); if ( getWidth() < txtlength + 1 ) @@ -643,8 +640,7 @@ inline void FButton::drawButtonTextLine (wchar_t button_text[]) if ( txtlength >= getWidth() - 1 ) { // Print ellipsis - setPrintPos (FPoint(int(getWidth() + indent) - 2, 1)); - print (L".."); + print() << FPoint(int(getWidth() + indent) - 2, 1) << ".."; } if ( active_focus && (isMonochron() || getMaxColor() < 16) ) diff --git a/src/fcheckbox.cpp b/src/fcheckbox.cpp index 50afe06a..469a1601 100644 --- a/src/fcheckbox.cpp +++ b/src/fcheckbox.cpp @@ -72,7 +72,7 @@ void FCheckBox::drawCheckButton() if ( ! isVisible() ) return; - setPrintPos (FPoint(1, 1)); + print() << FPoint(1, 1); setColor(); if ( isMonochron() ) diff --git a/src/fdialog.cpp b/src/fdialog.cpp index 1c3cb5de..97d271ab 100644 --- a/src/fdialog.cpp +++ b/src/fdialog.cpp @@ -924,24 +924,20 @@ void FDialog::drawBorder() { for (int y = y1; y < y2; y++) { - setPrintPos (FPoint(x1, y)); - // Border left ⎸ - print (fc::NF_border_line_left); - setPrintPos (FPoint(x2, y)); - // Border right⎹ - print (fc::NF_rev_border_line_right); + print() << FPoint(x1, y) // Border left ⎸ + << fc::NF_border_line_left; + print() << FPoint(x2, y) // Border right⎹ + << fc::NF_rev_border_line_right; } - setPrintPos (FPoint(x1, y2)); - // Lower left corner border ⎣ - print (fc::NF_border_corner_lower_left); + print() << FPoint(x1, y2) // Lower left corner border ⎣ + << fc::NF_border_corner_lower_left; for (std::size_t x = 1; x < getWidth() - 1; x++) // low line _ print (fc::NF_border_line_bottom); - setPrintPos (FPoint(x2, y2)); - // Lower right corner border ⎦ - print (fc::NF_rev_border_corner_lower_right); + print() << FPoint(x2, y2) // Lower right corner border ⎦ + << fc::NF_rev_border_corner_lower_right; } else { @@ -966,7 +962,7 @@ void FDialog::drawTitleBar() if ( PRINT_WIN_NUMBER ) { // Print the number of window in stack - setPrintPos (FPoint(int(getWidth()) - 2, 1)); + print() << FPoint(int(getWidth()) - 2, 1); printf ("(%d)", getWindowLayer(this)); } #endif // DEBUG @@ -976,7 +972,7 @@ void FDialog::drawTitleBar() void FDialog::drawBarButton() { // Print the title button - setPrintPos (FPoint(1, 1)); + print() << FPoint(1, 1); if ( dialog_menu && dialog_menu->isShown() ) setColor (wc.titlebar_button_focus_fg, wc.titlebar_button_focus_bg); diff --git a/src/flabel.cpp b/src/flabel.cpp index 9bf2e00b..0bcd6674 100644 --- a/src/flabel.cpp +++ b/src/flabel.cpp @@ -480,7 +480,7 @@ void FLabel::drawMultiLine() else std::wcsncpy(dest, src, length); - setPrintPos (FPoint(1, 1 + int(y))); + print() << FPoint(1, 1 + int(y)); if ( hotkeypos != NOT_SET ) { @@ -522,7 +522,7 @@ void FLabel::drawSingleLine() if ( hotkeypos != NOT_SET ) length--; - setPrintPos (FPoint(1, 1)); + print() << FPoint(1, 1); align_offset = getAlignOffset(length); printLine (label_text, length, hotkeypos, align_offset); delete[] label_text; diff --git a/src/flineedit.cpp b/src/flineedit.cpp index 21cdb768..89fdd4f9 100644 --- a/src/flineedit.cpp +++ b/src/flineedit.cpp @@ -678,7 +678,7 @@ void FLineEdit::drawInputField() std::size_t x; FString show_text; bool isActiveFocus = flags.active && flags.focus; - setPrintPos (FPoint(1, 1)); + print() << FPoint(1, 1); if ( isMonochron() ) { diff --git a/src/flistbox.cpp b/src/flistbox.cpp index e9f927ad..9f240709 100644 --- a/src/flistbox.cpp +++ b/src/flistbox.cpp @@ -315,8 +315,7 @@ void FListBox::clear() for (int y = 0; y < int(getHeight()) - 2; y++) { - setPrintPos (FPoint(2, 2 + y)); - print (blank); + print() << FPoint(2, 2 + y) << blank; } destroyBlankArray (blank); @@ -819,8 +818,8 @@ void FListBox::draw() for (int y = 2; y < int(getHeight()); y++) { - setPrintPos (FPoint(int(getWidth()), y)); - print (' '); // clear right side of the scrollbar + print() << FPoint(int(getWidth()), y) + << ' '; // clear right side of the scrollbar } } @@ -854,7 +853,7 @@ void FListBox::drawHeadline() FString txt = " " + text + " "; std::size_t length = txt.getLength(); - setPrintPos (FPoint(2, 1)); + print() << FPoint(2, 1); if ( isEnabled() ) setColor(wc.label_emphasis_fg, wc.label_bg); @@ -1060,7 +1059,7 @@ inline void FListBox::setLineAttributes ( int y { bool isCurrentLine = bool(y + yoffset + 1 == int(current)); std::size_t inc_len = inc_search.getLength(); - setPrintPos (FPoint(2, 2 + int(y))); + print() << FPoint(2, 2 + int(y)); if ( isLineSelected ) { diff --git a/src/flistview.cpp b/src/flistview.cpp index bd74cc18..a360d556 100644 --- a/src/flistview.cpp +++ b/src/flistview.cpp @@ -1469,8 +1469,8 @@ void FListView::draw() for (int y = 2; y < int(getHeight()); y++) { - setPrintPos (FPoint(int(getWidth()), y)); - print (' '); // clear right side of the scrollbar + print() << FPoint(int(getWidth()), y) + << ' '; // clear right side of the scrollbar } } @@ -1543,8 +1543,7 @@ void FListView::drawHeadlines() last = h.begin() + len; } - setPrintPos (FPoint(2, 1)); - print() << std::vector(first, last); + print() << FPoint(2, 1) << std::vector(first, last); } //---------------------------------------------------------------------- @@ -1563,7 +1562,7 @@ void FListView::drawList() const auto item = static_cast(*iter); int tree_offset = ( tree_view ) ? int(item->getDepth() << 1) + 1 : 0; int checkbox_offset = ( item->isCheckable() ) ? 1 : 0; - setPrintPos (FPoint(2, 2 + int(y))); + print() << FPoint(2, 2 + int(y)); // Draw one FListViewItem drawListLine (item, flags.focus, is_current_line); @@ -1589,8 +1588,8 @@ void FListView::drawList() // Clean empty space after last element while ( y < uInt(getClientHeight()) ) { - setPrintPos (FPoint(2, 2 + int(y))); - print (FString(std::size_t(getClientWidth()), ' ')); + print() << FPoint(2, 2 + int(y)) + << FString(std::size_t(getClientWidth()), ' '); y++; } } @@ -1667,7 +1666,7 @@ void FListView::drawListLine ( const FListViewItem* item std::size_t i; for (i = 0; i < len; i++) - *this << element_str[i]; + print() << element_str[i]; for (; i < getWidth() - nf_offset - 2; i++) print (' '); diff --git a/src/fmenu.cpp b/src/fmenu.cpp index 645d8293..dcf97f08 100644 --- a/src/fmenu.cpp +++ b/src/fmenu.cpp @@ -1251,7 +1251,7 @@ void FMenu::drawItems() //---------------------------------------------------------------------- inline void FMenu::drawSeparator (int y) { - setPrintPos (FPoint(1, 2 + y)); + print() << FPoint(1, 2 + y); setColor (wc.menu_active_fg, wc.menu_active_bg); if ( isMonochron() ) @@ -1498,7 +1498,7 @@ inline void FMenu::setLineAttributes (FMenuItem* menuitem, int y) setReverse(true); } - setPrintPos (FPoint(2, 2 + y)); + print() << FPoint(2, 2 + y); setColor(); } diff --git a/src/fmenubar.cpp b/src/fmenubar.cpp index b4b86d88..148b6a49 100644 --- a/src/fmenubar.cpp +++ b/src/fmenubar.cpp @@ -66,8 +66,7 @@ void FMenuBar::hide() setColor (fg, bg); screenWidth = getDesktopWidth(); auto blank = createBlankArray (screenWidth + 1); - setPrintPos (FPoint(1, 1)); - print (blank); + print() << FPoint(1, 1) << blank; destroyBlankArray (blank); } @@ -501,7 +500,7 @@ void FMenuBar::drawItems() if ( item_list.empty() ) return; - setPrintPos (FPoint(1, 1)); + print() << FPoint(1, 1); if ( isMonochron() ) setReverse(true); @@ -664,16 +663,14 @@ inline void FMenuBar::drawEllipsis (const menuText& txtdata, std::size_t x) if ( txtdata.startpos < screenWidth ) { // Print ellipsis - setPrintPos (FPoint(int(screenWidth) - 1, 1)); - print (".."); + print() << FPoint(int(screenWidth) - 1, 1) << ".."; } else if ( txtdata.startpos - 1 <= screenWidth ) { // Hide first character from text - setPrintPos (FPoint(int(screenWidth), 1)); - print (' '); - } + print() << FPoint(int(screenWidth), 1) << ' '; } + } } //---------------------------------------------------------------------- diff --git a/src/fmessagebox.cpp b/src/fmessagebox.cpp index 5a522a6e..ca00bad4 100644 --- a/src/fmessagebox.cpp +++ b/src/fmessagebox.cpp @@ -359,8 +359,7 @@ void FMessageBox::draw() if ( center_text ) // center one line center_x = int((max_line_width - headline_length) / 2); - setPrintPos (FPoint(1 + msg_x + center_x, 4)); - print (headline_text); + print() << FPoint(1 + msg_x + center_x, 4) << headline_text; head_offset = 2; } @@ -373,8 +372,8 @@ void FMessageBox::draw() if ( center_text ) // center one line center_x = int((max_line_width - line_length) / 2); - setPrintPos (FPoint(1 + msg_x + center_x, 4 + head_offset + i)); - print(text_components[i]); + print() << FPoint(1 + msg_x + center_x, 4 + head_offset + i) + << text_components[i]; } if ( isMonochron() ) diff --git a/src/fprogressbar.cpp b/src/fprogressbar.cpp index 5df11618..00b61ac1 100644 --- a/src/fprogressbar.cpp +++ b/src/fprogressbar.cpp @@ -58,8 +58,8 @@ void FProgressbar::setPercentage (std::size_t percentage_value) if ( isShown() ) { - drawPercentage(); - drawBar(); + drawProgressLabel(); + drawProgressBar(); } updateTerminal(); @@ -100,8 +100,8 @@ void FProgressbar::hide() FWidget::hide(); FSize shadow = hasShadow() ? FSize(1, 1) : FSize(0, 0); hideSize (getSize() + shadow); - setPrintPos (FPoint(int(getWidth()) - 4, 0)); - print (" "); // hide percentage + print() << FPoint(int(getWidth()) - 4, 0) + << (" "); // hide percentage } //---------------------------------------------------------------------- @@ -111,8 +111,8 @@ void FProgressbar::reset() if ( isShown() ) { - drawPercentage(); - drawBar(); + drawProgressLabel(); + drawProgressBar(); } updateTerminal(); @@ -123,8 +123,8 @@ void FProgressbar::reset() //---------------------------------------------------------------------- void FProgressbar::draw() { - drawPercentage(); - drawBar(); + drawProgressLabel(); + drawProgressBar(); if ( flags.shadow ) drawShadow (); @@ -133,7 +133,7 @@ void FProgressbar::draw() } //---------------------------------------------------------------------- -void FProgressbar::drawPercentage() +void FProgressbar::drawProgressLabel() { auto parent_widget = getParentWidget(); @@ -146,7 +146,7 @@ void FProgressbar::drawPercentage() if ( isMonochron() ) setReverse(true); - setPrintPos (FPoint(int(getWidth()) - 3, 0)); + print() << FPoint(int(getWidth()) - 3, 0); if ( percentage > 100 ) print ("--- %"); @@ -158,62 +158,16 @@ void FProgressbar::drawPercentage() } //---------------------------------------------------------------------- -void FProgressbar::drawBar() +void FProgressbar::drawProgressBar() { - std::size_t i = 0; - double length; - setPrintPos (FPoint(1, 1)); - setColor ( wc.progressbar_bg - , wc.progressbar_fg ); + std::size_t len = 0; + print() << FPoint(1, 1); + setColor (wc.progressbar_bg, wc.progressbar_fg); - if ( percentage == NOT_SET ) - length = double(-0/100); - else - length = double(bar_length * percentage) / 100; + if ( percentage > 0 && percentage <= 100 ) + len = drawProgressIndicator(); - if ( isMonochron() ) - setReverse(false); - - for (; i < trunc(length); i++) - print (' '); - - if ( isMonochron() ) - setReverse(true); - - if ( percentage > 0 && percentage <= 100 && trunc(length) < bar_length ) - { - if ( round(length) > trunc(length) || getMaxColor() < 16 ) - { - if ( isMonochron() ) - { - setReverse(false); - print (' '); - setReverse(true); - } - else - print (' '); - } - else - { - setColor (wc.progressbar_fg, wc.progressbar_bg); - print (fc::LeftHalfBlock); // ▌ - } - - i++; - } - - setColor (wc.progressbar_fg, wc.progressbar_bg); - - if ( getMaxColor() < 16 ) - { - for (; i < bar_length; i++) - print (fc::MediumShade); // ▒ - } - else - { - for (; i < bar_length; i++) - print (' '); - } + drawProgressBackground(len); if ( isMonochron() ) setReverse(false); @@ -222,4 +176,56 @@ void FProgressbar::drawBar() flush_out(); } +//---------------------------------------------------------------------- +std::size_t FProgressbar::drawProgressIndicator() +{ + // Draw the progress indicator + + if ( isMonochron() ) + setReverse(false); + + double length = double(bar_length * percentage) / 100; + auto len = std::size_t(trunc(length)); + print() << FString (len, L' '); + + if ( isMonochron() ) + setReverse(true); + + if ( len >= bar_length ) + return len; + + if ( round(length) > len || getMaxColor() < 16 ) + { + if ( isMonochron() ) + setReverse(false); + + print(' '); + + if ( isMonochron() ) + setReverse(true); + } + else + { + setColor (wc.progressbar_fg, wc.progressbar_bg); + print (fc::LeftHalfBlock); // ▌ + } + + len++; + return len; +} + +//---------------------------------------------------------------------- +void FProgressbar::drawProgressBackground (std::size_t len) +{ + // Draw the progress background + + std::size_t bg_len = bar_length - len; + setColor (wc.progressbar_fg, wc.progressbar_bg); + + if ( getMaxColor() < 16 ) + print() << FString (bg_len, fc::MediumShade); // ▒ + else + print() << FString (bg_len, L' '); +} + } // namespace finalcut diff --git a/src/fradiobutton.cpp b/src/fradiobutton.cpp index 459d1f6d..93e9867a 100644 --- a/src/fradiobutton.cpp +++ b/src/fradiobutton.cpp @@ -73,7 +73,7 @@ void FRadioButton::drawRadioButton() if ( ! isVisible() ) return; - setPrintPos (FPoint(1, 1)); + print() << FPoint(1, 1); setColor(); if ( isMonochron() ) diff --git a/src/fscrollbar.cpp b/src/fscrollbar.cpp index f378b33a..dd7149a3 100644 --- a/src/fscrollbar.cpp +++ b/src/fscrollbar.cpp @@ -240,7 +240,7 @@ void FScrollbar::drawVerticalBar() for (z = 1; z <= slider_pos; z++) { - setPrintPos (FPoint(1, 1 + z)); + print() << FPoint(1, 1 + z); if ( isNewFont() ) { @@ -263,7 +263,7 @@ void FScrollbar::drawVerticalBar() for (z = 1; z <= int(slider_length); z++) { - setPrintPos (FPoint(1, 1 + slider_pos + z)); + print() << FPoint(1, 1 + slider_pos + z); if ( isNewFont() ) print (' '); @@ -278,7 +278,7 @@ void FScrollbar::drawVerticalBar() for (z = slider_pos + int(slider_length) + 1; z <= int(bar_length); z++) { - setPrintPos (FPoint(1, 1 + z)); + print() << FPoint(1, 1 + z); if ( isNewFont() ) { @@ -305,9 +305,9 @@ void FScrollbar::drawHorizontalBar() setColor (wc.scrollbar_fg, wc.scrollbar_bg); if ( isNewFont() ) - setPrintPos (FPoint(3, 1)); + print() << FPoint(3, 1); else - setPrintPos (FPoint(2, 1)); + print() << FPoint(2, 1); for (z = 0; z < slider_pos; z++) { @@ -590,43 +590,43 @@ void FScrollbar::drawButtons() if ( isNewFont() ) { - setPrintPos (FPoint(1, 1)); + print() << FPoint(1, 1); if ( bar_orientation == fc::vertical ) { - print (fc::NF_rev_up_arrow1); - print (fc::NF_rev_up_arrow2); - setPrintPos (FPoint(1, int(length))); - print (fc::NF_rev_down_arrow1); - print (fc::NF_rev_down_arrow2); + print() << fc::NF_rev_up_arrow1 + << fc::NF_rev_up_arrow2 + << FPoint(1, int(length)) + << fc::NF_rev_down_arrow1 + << fc::NF_rev_down_arrow2; } else // horizontal { - print (fc::NF_rev_left_arrow1); - print (fc::NF_rev_left_arrow2); - setPrintPos (FPoint(int(length) - 1, 1)); - print (fc::NF_rev_right_arrow1); - print (fc::NF_rev_right_arrow2); + print() << fc::NF_rev_left_arrow1 + << fc::NF_rev_left_arrow2 + << FPoint(int(length) - 1, 1) + << fc::NF_rev_right_arrow1 + << fc::NF_rev_right_arrow2; } } else { - setPrintPos (FPoint(1, 1)); + print() << FPoint(1, 1); if ( isMonochron() ) setReverse(true); if ( bar_orientation == fc::vertical ) { - print (fc::BlackUpPointingTriangle); // ▲ - setPrintPos (FPoint(1, int(length))); - print (fc::BlackDownPointingTriangle); // ▼ + print() << fc::BlackUpPointingTriangle // ▲ + << FPoint(1, int(length)) + << fc::BlackDownPointingTriangle; // ▼ } else // horizontal { - print (fc::BlackLeftPointingPointer); // ◄ - setPrintPos (FPoint(int(length), 1)); - print (fc::BlackRightPointingPointer); // ► + print() << fc::BlackLeftPointingPointer // ◄ + << FPoint(int(length), 1) + << fc::BlackRightPointingPointer; // ► } if ( isMonochron() ) diff --git a/src/fstatusbar.cpp b/src/fstatusbar.cpp index feb2d1a6..2cdaf1c7 100644 --- a/src/fstatusbar.cpp +++ b/src/fstatusbar.cpp @@ -178,8 +178,7 @@ void FStatusBar::hide() setColor (fg, bg); screenWidth = getDesktopWidth(); auto blank = createBlankArray(screenWidth + 1); - setPrintPos (FPoint(1, 1)); - print (blank); + print() << FPoint(1, 1) << blank; destroyBlankArray (blank); } @@ -541,7 +540,7 @@ void FStatusBar::drawKeys() return; } - setPrintPos (FPoint(1, 1)); + print() << FPoint(1, 1); if ( isMonochron() ) setReverse(true); diff --git a/src/fswitch.cpp b/src/fswitch.cpp index 1eadffd9..7d7658a9 100644 --- a/src/fswitch.cpp +++ b/src/fswitch.cpp @@ -127,7 +127,7 @@ void FSwitch::drawCheckButton() if ( ! isVisible() ) return; - setPrintPos (FPoint(1 + int(switch_offset_pos), 1)); + print() << FPoint(1 + int(switch_offset_pos), 1); if ( checked ) drawChecked(); diff --git a/src/ftextview.cpp b/src/ftextview.cpp index 8edce4ff..15a24a43 100644 --- a/src/ftextview.cpp +++ b/src/ftextview.cpp @@ -297,8 +297,7 @@ void FTextView::clear() for (int y = 0; y < int(getTextHeight()); y++) { - setPrintPos (FPoint(2, 2 - nf_offset + y)); - print (blank); + print() << FPoint(2, 2 - nf_offset + y) << blank; } destroyBlankArray (blank); @@ -695,7 +694,7 @@ void FTextView::drawText() { std::size_t i; FString line; - setPrintPos (FPoint(2, 2 - nf_offset + int(y))); + print() << FPoint(2, 2 - nf_offset + int(y)); line = data[y + std::size_t(yoffset)].mid ( std::size_t(1 + xoffset) , getTextWidth() ); const auto line_str = line.wc_str(); diff --git a/src/ftogglebutton.cpp b/src/ftogglebutton.cpp index 6d33506b..5b5f1069 100644 --- a/src/ftogglebutton.cpp +++ b/src/ftogglebutton.cpp @@ -445,7 +445,7 @@ void FToggleButton::drawLabel() if ( hotkeypos != NOT_SET ) length--; - setPrintPos (FPoint(1 + int(label_offset_pos), 1)); + print() << FPoint(1 + int(label_offset_pos), 1); drawText (LabelText, hotkeypos, length); delete[] LabelText; } diff --git a/src/ftooltip.cpp b/src/ftooltip.cpp index 8fad6953..7ef2469c 100644 --- a/src/ftooltip.cpp +++ b/src/ftooltip.cpp @@ -87,8 +87,7 @@ void FToolTip::draw() for (std::size_t i = 0; i < text_num_lines; i++) { - setPrintPos (FPoint(3, 2 + int(i))); - print(text_components[i]); + print() << FPoint(3, 2 + int(i)) << text_components[i]; } unsetBold(); diff --git a/src/fvterm.cpp b/src/fvterm.cpp index 14167d25..3755b5de 100644 --- a/src/fvterm.cpp +++ b/src/fvterm.cpp @@ -150,14 +150,10 @@ void FVTerm::hideCursor (bool enable) //---------------------------------------------------------------------- void FVTerm::setPrintCursor (const FPoint& pos) { - int x = pos.getX(); - int y = pos.getY(); - auto win = getPrintArea(); - - if ( win ) + if ( auto win = getPrintArea() ) { - win->cursor_x = x - win->offset_left; - win->cursor_y = y - win->offset_top; + win->cursor_x = pos.getX() - win->offset_left; + win->cursor_y = pos.getY() - win->offset_top; } } @@ -315,7 +311,9 @@ int FVTerm::printf (const FString format, ...) //---------------------------------------------------------------------- int FVTerm::print (const FString& s) { - assert ( ! s.isNull() ); + if ( s.isNull() ) + return -1; + auto area = getPrintArea(); if ( ! area ) @@ -332,9 +330,7 @@ int FVTerm::print (const FString& s) //---------------------------------------------------------------------- int FVTerm::print (term_area* area, const FString& s) { - assert ( ! s.isNull() ); - - if ( ! area ) + if ( s.isNull() || ! area ) return -1; std::vector term_string; @@ -561,6 +557,13 @@ int FVTerm::print (term_area* area, charData& term_char) return 1; } +//---------------------------------------------------------------------- +void FVTerm::print (const FPoint& p) +{ + setPrintCursor (p); +} + + // protected methods of FVTerm //---------------------------------------------------------------------- FVTerm::term_area* FVTerm::getPrintArea() diff --git a/src/fwidget.cpp b/src/fwidget.cpp index 59abf634..696afeeb 100644 --- a/src/fwidget.cpp +++ b/src/fwidget.cpp @@ -1273,14 +1273,13 @@ void FWidget::clearShadow() { for (std::size_t y = 1; y <= getHeight(); y++) { - setPrintPos (FPoint(w + 1, int(y))); - print (' '); // clear █ + print() << FPoint(w + 1, int(y)) << ' '; // clear █ } } if ( h <= offset.getY2() ) { - setPrintPos (FPoint(2, h + 1)); + print() << FPoint(2, h + 1); for (std::size_t i = 1; i <= getWidth(); i++) print (' '); // clear ▀ @@ -1308,7 +1307,7 @@ void FWidget::drawFlatBorder() for (std::size_t y = 0; y < getHeight(); y++) { - setPrintPos (FPoint(x1 - 1, y1 + int(y) + 1)); + print() << FPoint(x1 - 1, y1 + int(y) + 1); if ( double_flatline_mask.left[uLong(y)] ) // left+right line (on left side) @@ -1318,7 +1317,7 @@ void FWidget::drawFlatBorder() print (fc::NF_rev_border_line_right); } - setPrintPos (FPoint(x2, y1 + 1)); + print() << FPoint(x2, y1 + 1); for (std::size_t y = 0; y < getHeight(); y++) { @@ -1329,10 +1328,10 @@ void FWidget::drawFlatBorder() // left line (on right side) print (fc::NF_border_line_left); - setPrintPos (FPoint(x2, y1 + int(y) + 2)); + print() << FPoint(x2, y1 + int(y) + 2); } - setPrintPos (FPoint(x1, y1)); + print() << FPoint(x1, y1); for (std::size_t x = 0; x < getWidth(); x++) { @@ -1344,7 +1343,7 @@ void FWidget::drawFlatBorder() print (fc::NF_border_line_bottom); } - setPrintPos (FPoint(x1, y2)); + print() << FPoint(x1, y2); for (std::size_t x = 0; x < getWidth(); x++) { @@ -1376,7 +1375,7 @@ void FWidget::clearFlatBorder() // clear on left side for (std::size_t y = 0; y < getHeight(); y++) { - setPrintPos (FPoint(x1 - 1, y1 + int(y) + 1)); + print() << FPoint(x1 - 1, y1 + int(y) + 1); if ( double_flatline_mask.left[y] ) print (fc::NF_border_line_left); @@ -1387,7 +1386,7 @@ void FWidget::clearFlatBorder() // clear on right side for (std::size_t y = 0; y < getHeight(); y++) { - setPrintPos (FPoint(x2, y1 + int(y) + 1)); + print() << FPoint(x2, y1 + int(y) + 1); if ( double_flatline_mask.right[y] ) print (fc::NF_rev_border_line_right); @@ -1396,7 +1395,7 @@ void FWidget::clearFlatBorder() } // clear at top - setPrintPos (FPoint(x1, y1)); + print() << FPoint(x1, y1); for (std::size_t x = 0; x < getWidth(); x++) { @@ -1407,7 +1406,7 @@ void FWidget::clearFlatBorder() } // clear at bottom - setPrintPos (FPoint(x1, y2)); + print() << FPoint(x1, y2); for (std::size_t x = 0; x < getWidth(); x++) { @@ -1646,8 +1645,7 @@ void FWidget::hideSize (const FSize& size) for (int y = 0; y < int(size.getWidth()); y++) { - setPrintPos (FPoint(1, 1 + y)); - print (blank); + print() << FPoint(1, 1 + y) << blank; } destroyBlankArray (blank); @@ -2230,9 +2228,9 @@ void FWidget::drawChildren() void FWidget::drawTransparentShadow (int x1, int y1, int x2, int y2) { // transparent shadow - setPrintPos (FPoint(x2 + 1, y1)); + setTransparent(); - print (" "); + print() << FPoint(x2 + 1, y1) << " "; unsetTransparent(); setColor (wc.shadow_bg, wc.shadow_fg); @@ -2240,14 +2238,12 @@ void FWidget::drawTransparentShadow (int x1, int y1, int x2, int y2) for (std::size_t y = 1; y < getHeight(); y++) { - setPrintPos (FPoint(x2 + 1, y1 + int(y))); - print (" "); + print() << FPoint(x2 + 1, y1 + int(y)) << " "; } unsetTransShadow(); - setPrintPos (FPoint(x1, y2 + 1)); setTransparent(); - print (" "); + print() << FPoint(x1, y2 + 1) << " "; unsetTransparent(); setColor (wc.shadow_bg, wc.shadow_fg); @@ -2266,12 +2262,12 @@ void FWidget::drawTransparentShadow (int x1, int y1, int x2, int y2) void FWidget::drawBlockShadow (int x1, int y1, int x2, int y2) { // non-transparent shadow - int block; + wchar_t block; if ( ! hasShadowCharacter() ) return; - setPrintPos (FPoint(x2 + 1, y1)); + print() << FPoint(x2 + 1, y1); if ( isWindowWidget() ) { @@ -2289,11 +2285,10 @@ void FWidget::drawBlockShadow (int x1, int y1, int x2, int y2) for (std::size_t y = 1; y < getHeight(); y++) { - setPrintPos (FPoint(x2 + 1, y1 + int(y))); - print (block); // █ + print() << FPoint(x2 + 1, y1 + int(y)) << block; // █ } - setPrintPos (FPoint(x1 + 1, y2 + 1)); + print() << FPoint(x1 + 1, y2 + 1); if ( isWindowWidget() ) setInheritBackground(); @@ -2310,36 +2305,34 @@ inline void FWidget::drawBox (int x1, int y1, int x2, int y2) { // Use box-drawing characters to draw a border - setPrintPos (FPoint(x1, y1)); - print (fc::BoxDrawingsDownAndRight); // ┌ + print() << FPoint(x1, y1) << fc::BoxDrawingsDownAndRight; // ┌ for (int x = x1 + 1; x < x2; x++) - print (fc::BoxDrawingsHorizontal); // ─ + print (fc::BoxDrawingsHorizontal); // ─ - print (fc::BoxDrawingsDownAndLeft); // ┐ + print (fc::BoxDrawingsDownAndLeft); // ┐ for (int y = y1 + 1; y < y2; y++) { - setPrintPos (FPoint(x1, y)); - print (fc::BoxDrawingsVertical); // │ - setPrintPos (FPoint(x2, y)); - print (fc::BoxDrawingsVertical); // │ + print() << FPoint(x1, y) + << fc::BoxDrawingsVertical // │ + << FPoint(x2, y) + << fc::BoxDrawingsVertical; // │ } - setPrintPos (FPoint(x1, y2)); - print (fc::BoxDrawingsUpAndRight); // └ + print() << FPoint(x1, y2) << fc::BoxDrawingsUpAndRight; // └ for (int x = x1 + 1; x < x2; x++) - print (fc::BoxDrawingsHorizontal); // ─ + print (fc::BoxDrawingsHorizontal); // ─ - print (fc::BoxDrawingsUpAndLeft); // ┘ + print (fc::BoxDrawingsUpAndLeft); // ┘ for (int x = x1 + 1; x < x2; x++) { - setPrintPos (FPoint(x, y1)); - print (fc::BoxDrawingsHorizontal); // ─ - setPrintPos (FPoint(x, y2)); - print (fc::BoxDrawingsHorizontal); // ─ + print() << FPoint(x, y1) + << fc::BoxDrawingsHorizontal // ─ + << FPoint(x, y2) + << fc::BoxDrawingsHorizontal; // ─ } } @@ -2348,24 +2341,24 @@ inline void FWidget::drawNewFontBox (int x1, int y1, int x2, int y2) { // Use new graphical font characters to draw a border - setPrintPos (FPoint(x1, y1)); - print (fc::NF_border_corner_middle_upper_left); // ┌ + print() << FPoint(x1, y1) + << fc::NF_border_corner_middle_upper_left; // ┌ for (int x = x1 + 1; x < x2; x++) - print (fc::BoxDrawingsHorizontal); // ─ + print (fc::BoxDrawingsHorizontal); // ─ - print (fc::NF_border_corner_middle_upper_right); // ┐ + print (fc::NF_border_corner_middle_upper_right); // ┐ for (int y = y1 + 1; y <= y2; y++) { - setPrintPos (FPoint(x1, y)); - print (fc::NF_border_line_left); // border left ⎸ - setPrintPos (FPoint(x2, y)); - print (fc::NF_rev_border_line_right); // border right⎹ + print() << FPoint(x1, y) + << fc::NF_border_line_left // border left ⎸ + << FPoint(x2, y) + << fc::NF_rev_border_line_right; // border right⎹ } - setPrintPos (FPoint(x1, y2)); - print (fc::NF_border_corner_middle_lower_left); // └ + print() << FPoint(x1, y2) + << fc::NF_border_corner_middle_lower_left; // └ for (int x = x1 + 1; x < x2; x++) print (fc::BoxDrawingsHorizontal); // ─ diff --git a/src/fwindow.cpp b/src/fwindow.cpp index 649dc5f7..f8d7e790 100644 --- a/src/fwindow.cpp +++ b/src/fwindow.cpp @@ -251,8 +251,7 @@ void FWindow::drawBorder() , y1 = 1 , y2 = 1 + int(getHeight()) - 1; - setPrintPos (FPoint(x1, y1)); - print (fc::NF_border_corner_upper_left); // ⎡ + print() << FPoint(x1, y1) << fc::NF_border_corner_upper_left; // ⎡ for (int x = x1 + 1; x < x2; x++) print (fc::NF_border_line_upper); // ¯ @@ -261,24 +260,20 @@ void FWindow::drawBorder() for (int y = y1 + 1; y < y2; y++) { - setPrintPos (FPoint(x1, y)); - // border left ⎸ - print (fc::NF_border_line_left); - setPrintPos (FPoint(x2, y)); - // border right⎹ - print (fc::NF_rev_border_line_right); + print() << FPoint(x1, y) // border left ⎸ + << fc::NF_border_line_left + << FPoint(x2, y) // border right⎹ + << fc::NF_rev_border_line_right; } - setPrintPos (FPoint(x1, y2)); - // lower left corner border ⎣ - print (fc::NF_border_corner_lower_left); + print() << FPoint(x1, y2) // lower left corner border ⎣ + << fc::NF_border_corner_lower_left; for (std::size_t x = 2; x < getWidth(); x++) // low line _ print (fc::NF_border_line_bottom); - setPrintPos (FPoint(x2, y2)); - // lower right corner border ⎦ - print (fc::NF_rev_border_corner_lower_right); + print() << FPoint(x2, y2) // lower right corner border ⎦ + << fc::NF_rev_border_corner_lower_right; } else { diff --git a/src/include/final/fprogressbar.h b/src/include/final/fprogressbar.h index ec2a1ad3..cb9053f3 100644 --- a/src/include/final/fprogressbar.h +++ b/src/include/final/fprogressbar.h @@ -101,8 +101,10 @@ class FProgressbar : public FWidget // Methods virtual void draw() override; - void drawPercentage(); - void drawBar(); + void drawProgressLabel(); + void drawProgressBar(); + std::size_t drawProgressIndicator(); + void drawProgressBackground (std::size_t); // Data Members std::size_t percentage{NOT_SET}; diff --git a/src/include/final/fvterm.h b/src/include/final/fvterm.h index 9d166fe1..98261647 100644 --- a/src/include/final/fvterm.h +++ b/src/include/final/fvterm.h @@ -132,6 +132,7 @@ class FVTerm template FVTerm& operator << (const type&); FVTerm& operator << (const std::vector&); + FVTerm& operator << (const FPoint&); // Accessors virtual const char* getClassName() const; @@ -294,7 +295,8 @@ class FVTerm int print (term_area*, wchar_t); int print (charData&); int print (term_area*, charData&); - FVTerm& print(); + virtual void print (const FPoint&); + virtual FVTerm& print(); static void beep(); static void redefineDefaultColors (bool); static char* moveCursor (int, int, int, int); @@ -550,6 +552,13 @@ inline FVTerm& FVTerm::operator << \ return *this; } +//---------------------------------------------------------------------- +inline FVTerm& FVTerm::operator << (const FPoint& pos) +{ + print (pos); + return *this; +} + //---------------------------------------------------------------------- inline const char* FVTerm::getClassName() const { return "FVTerm"; } diff --git a/src/include/final/fwidget.h b/src/include/final/fwidget.h index 9e5efe56..35652746 100644 --- a/src/include/final/fwidget.h +++ b/src/include/final/fwidget.h @@ -129,6 +129,7 @@ class FWidget : public FVTerm, public FObject public: // Using-declaration using FVTerm::setColor; + using FVTerm::print; struct accelerator { @@ -325,6 +326,7 @@ class FWidget : public FVTerm, public FObject virtual bool focusLastChild(); FPoint termToWidgetPos (const FPoint&); void detectTermSize(); + virtual void print (const FPoint& p) override; virtual void move (const FPoint&); void drawShadow(); void clearShadow(); @@ -920,6 +922,12 @@ inline FPoint FWidget::termToWidgetPos (const FPoint& tPos) , tPos.getY() + 1 - offset.getY1() - adjust_wsize.getY() ); } +//---------------------------------------------------------------------- +inline void FWidget::print (const FPoint& pos) +{ + setPrintPos (pos); +} + //---------------------------------------------------------------------- inline void FWidget::drawBorder() { drawBorder (1, 1, int(getWidth()), int(getHeight())); }