Adding horizontal and vertical scrollability checks in FTextView

This commit is contained in:
Markus Gans 2018-12-29 19:01:47 +01:00
parent 250c04cefd
commit bd3b2b31bb
4 changed files with 25 additions and 7 deletions

View File

@ -1,3 +1,6 @@
2018-12-28 Markus Gans <guru.mail@muenster.de>
* Text scrolling in FTextView was broken since February 17th!
2018-12-28 Markus Gans <guru.mail@muenster.de>
* Add the assignment operator (=) for FButton to set the button text
* Corrected shortening of overlong texts in the title bar of FDialog

View File

@ -30,7 +30,7 @@
using namespace finalcut;
// Global application object
static std::shared_ptr<FString> temp_str { nullptr };
static std::weak_ptr<FString> temp_str;
// Function prototypes
@ -57,13 +57,15 @@ void doubleToItem ( FListBoxItem& item
// Import converter functions
FString& doubleToString (std::list<double>::const_iterator iter)
{
return temp_str->setNumber(*iter);
auto temp = temp_str.lock();
return temp->setNumber(*iter);
}
FString& mapToString ( std::map<FString
, FString>::const_iterator iter )
{
return *temp_str = iter->first + ": " + iter->second;
auto temp = temp_str.lock();
return *temp = iter->first + ": " + iter->second;
}
@ -106,7 +108,8 @@ class Listbox : public FDialog
Listbox::Listbox (FWidget* parent)
: FDialog(parent)
{
temp_str = std::make_shared<FString>();
auto temp = std::make_shared<FString>();
temp_str = temp;
// listbox 1
//----------

View File

@ -143,7 +143,7 @@ void FTextView::scrollTo (int x, int y)
if ( ! isVisible() || ! (changeX || changeY) )
return;
if ( xoffset != x )
if ( changeX && isHorizontallyScrollable() )
{
int xoffset_end = int(maxLineWidth - getTextWidth());
xoffset = x;
@ -151,7 +151,7 @@ void FTextView::scrollTo (int x, int y)
if ( xoffset < 0 )
xoffset = 0;
if ( xoffset > xoffset_end )
if ( xoffset > xoffset_end && xoffset_end >= 0 )
xoffset = xoffset_end;
if ( update_scrollbar )
@ -161,7 +161,7 @@ void FTextView::scrollTo (int x, int y)
}
}
if ( yoffset != y )
if ( changeY && isVerticallyScrollable() )
{
int yoffset_end = int(getRows() - getTextHeight());
yoffset = y;

View File

@ -137,6 +137,10 @@ class FTextView : public FWidget
std::size_t getTextHeight();
std::size_t getTextWidth();
// Inquiry
bool isHorizontallyScrollable();
bool isVerticallyScrollable();
// Methods
void init();
virtual void draw();
@ -191,6 +195,14 @@ inline void FTextView::deleteRange (int from, int to)
inline void FTextView::deleteLine (int pos)
{ deleteRange (pos, pos); }
//----------------------------------------------------------------------
inline bool FTextView::isHorizontallyScrollable()
{ return bool( maxLineWidth > getTextWidth() ); }
//----------------------------------------------------------------------
inline bool FTextView::isVerticallyScrollable()
{ return bool( getRows() > getTextHeight() ); }
} // namespace finalcut
#endif // FTEXTVIEW_H