Adds scrolling.
This commit is contained in:
parent
a17b936cfb
commit
df83857843
3 changed files with 41 additions and 6 deletions
|
@ -28,18 +28,28 @@ private:
|
||||||
public:
|
public:
|
||||||
Console(Screen *screen);
|
Console(Screen *screen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Puts a character on the screen.
|
||||||
|
*/
|
||||||
void put(char c);
|
void put(char c);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts a line break and returns the cursor to the start.
|
||||||
|
*/
|
||||||
void newline();
|
void newline();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scrolls screen a line upwards
|
||||||
|
*/
|
||||||
|
void scroll();
|
||||||
|
|
||||||
inline Console operator << (char c)
|
inline Console & operator << (char c)
|
||||||
{
|
{
|
||||||
this->put(c);
|
this->put(c);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Console operator << (const char *str)
|
inline Console & operator << (const char *str)
|
||||||
{
|
{
|
||||||
while(*str) {
|
while(*str) {
|
||||||
*this << *str++;
|
*this << *str++;
|
||||||
|
@ -47,13 +57,13 @@ public:
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Console operator << (const FColor &color)
|
inline Console & operator << (const FColor &color)
|
||||||
{
|
{
|
||||||
this->fg = color.color;
|
this->fg = color.color;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Console operator << (const BColor &color)
|
inline Console & operator << (const BColor &color)
|
||||||
{
|
{
|
||||||
this->bg = color.color;
|
this->bg = color.color;
|
||||||
return *this;
|
return *this;
|
||||||
|
|
|
@ -3,11 +3,20 @@
|
||||||
#include "console.hpp"
|
#include "console.hpp"
|
||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
|
|
||||||
|
const char * numbers[] = {
|
||||||
|
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
|
||||||
|
};
|
||||||
|
|
||||||
extern "C" void init(void)
|
extern "C" void init(void)
|
||||||
{
|
{
|
||||||
|
//*
|
||||||
Console::main
|
Console::main
|
||||||
<< "Hello World!\n"
|
<< "Hello World!\n"
|
||||||
<< FColor(Color::Yellow) << "Hello color!" << FColor() << "\n"
|
<< FColor(Color::Yellow) << "Hello color!" << FColor() << "\n"
|
||||||
<< BColor(Color::Blue) << "Hello blue!" << BColor() << "\n"
|
<< BColor(Color::Blue) << "Hello blue!" << BColor() << "\n"
|
||||||
<< "Hello default color.";
|
<< "Hello default color.\n";
|
||||||
|
//*/
|
||||||
|
for(int i = 0; i < 22; i++) {
|
||||||
|
Console::main << "Line " << numbers[i%10] << "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ void Console::put(char c)
|
||||||
sc.bg = (int)this->bg;
|
sc.bg = (int)this->bg;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(this->x >= this->screen->width) {
|
if(this->x >= this->screen->height) {
|
||||||
this->newline();
|
this->newline();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,4 +33,20 @@ void Console::put(char c)
|
||||||
void Console::newline() {
|
void Console::newline() {
|
||||||
this->x = 0;
|
this->x = 0;
|
||||||
this->y += 1;
|
this->y += 1;
|
||||||
|
|
||||||
|
if(this->y >= this->screen->height) {
|
||||||
|
this->scroll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Console::scroll() {
|
||||||
|
if(this->y <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for(int i = 0; i <= this->y; i++) {
|
||||||
|
for(int j = 0; j < this->screen->width; j++) {
|
||||||
|
(*this->screen)(j, i) = (*this->screen)(j, i + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this->y -= 1;
|
||||||
}
|
}
|
Loading…
Reference in a new issue