Add the ability to stream text into a widget's virtual window with print() or *this
This commit is contained in:
parent
f67537fba4
commit
386e91563a
|
@ -1,3 +1,7 @@
|
|||
2016-12-26 Markus Gans <guru.mail@muenster.de>
|
||||
* Add the ability to stream text into a widget's virtual window
|
||||
with print() << '#' << 5; or *this << ...
|
||||
|
||||
2016-12-22 Markus Gans <guru.mail@muenster.de>
|
||||
* VTerm marks printed characters for a correct determination
|
||||
of unchanged characters
|
||||
|
|
|
@ -403,8 +403,7 @@ void FVTerm::updateTerminalLine (uInt y)
|
|||
print_char->printed = true;
|
||||
|
||||
// skip character with no changes
|
||||
if ( ! terminal_update_pending
|
||||
&& print_char->no_changes )
|
||||
if ( print_char->no_changes )
|
||||
{
|
||||
uInt count = 1;
|
||||
|
||||
|
|
19
src/fvterm.h
19
src/fvterm.h
|
@ -27,6 +27,7 @@
|
|||
#define _FVTERM_H
|
||||
|
||||
#include "fterm.h"
|
||||
#include <sstream> // std::stringstream
|
||||
|
||||
// class forward declaration
|
||||
class FWidget;
|
||||
|
@ -85,6 +86,9 @@ class FVTerm : public FObject, public FTerm
|
|||
// Destructor
|
||||
~FVTerm();
|
||||
|
||||
// Overloaded operators
|
||||
template<class type> FVTerm& operator << (const type&);
|
||||
|
||||
// Accessors
|
||||
virtual const char* getClassName() const;
|
||||
static short getTermForegroundColor();
|
||||
|
@ -218,6 +222,7 @@ class FVTerm : public FObject, public FTerm
|
|||
int print (term_area*, FString&);
|
||||
int print (int);
|
||||
int print (term_area*, int);
|
||||
FVTerm& print();
|
||||
static void newFontChanges (char_data*&);
|
||||
static void charsetChanges (char_data*&);
|
||||
static void appendCharacter (char_data*&);
|
||||
|
@ -350,6 +355,16 @@ class FVTerm : public FObject, public FTerm
|
|||
#pragma pack(pop)
|
||||
|
||||
// FVTerm inline functions
|
||||
//----------------------------------------------------------------------
|
||||
template<class type>
|
||||
inline FVTerm& FVTerm::operator << (const type& s)
|
||||
{
|
||||
std::ostringstream outstream;
|
||||
outstream << s;
|
||||
print (outstream.str());
|
||||
return *this;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline const char* FVTerm::getClassName() const
|
||||
{ return "FVTerm"; }
|
||||
|
@ -672,6 +687,10 @@ inline bool FVTerm::isTransShadow()
|
|||
inline bool FVTerm::isInheritBackground()
|
||||
{ return next_attribute.inherit_bg; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline FVTerm& FVTerm::print()
|
||||
{ return *this; }
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
inline void FVTerm::setPrintArea (term_area* area)
|
||||
{ print_area = area; }
|
||||
|
|
|
@ -39,7 +39,8 @@ void keyboard::onKeyPress (FKeyEvent* ev)
|
|||
if ( getPrintPos().getY() == getLineNumber() )
|
||||
is_last_line = true;
|
||||
|
||||
printf ("Key %s (id %d)\n", getKeyName(key_id).c_str(), key_id);
|
||||
print() << "Key " << getKeyName(key_id).c_str()
|
||||
<< " (id " << key_id << ")\n";
|
||||
|
||||
if ( is_last_line )
|
||||
scrollAreaForward (vdesktop);
|
||||
|
@ -58,9 +59,9 @@ void keyboard::onAccel (FAccelEvent* ev)
|
|||
void keyboard::draw()
|
||||
{
|
||||
setPrintPos (1,1);
|
||||
print ("---------------\n");
|
||||
print ("Press Q to quit\n");
|
||||
print ("---------------\n");
|
||||
print() << "---------------\n"
|
||||
<< "Press Q to quit\n"
|
||||
<< "---------------\n";
|
||||
setAreaCursor (1, 4, true, vdesktop);
|
||||
}
|
||||
|
||||
|
|
|
@ -41,9 +41,9 @@ timer::timer (FWidget* parent)
|
|||
void timer::draw()
|
||||
{
|
||||
setPrintPos (1,1);
|
||||
print ("---------------\n");
|
||||
print ("Press Q to quit\n");
|
||||
print ("---------------\n");
|
||||
print() << "---------------\n"
|
||||
<< "Press Q to quit\n"
|
||||
<< "---------------\n";
|
||||
setAreaCursor (1, 4, true, vdesktop);
|
||||
}
|
||||
|
||||
|
@ -57,7 +57,7 @@ void timer::onTimer (FTimerEvent* ev)
|
|||
is_last_line = true;
|
||||
|
||||
setColor (short(1 + timer_id), fc::Default);
|
||||
printf ("timer event, id %d\n", timer_id );
|
||||
print() << "Timer event, id " << timer_id << '\n';
|
||||
|
||||
if ( is_last_line )
|
||||
scrollAreaForward (vdesktop);
|
||||
|
|
Loading…
Reference in New Issue