<root> / Text.cpp (88ec6fb82f89f10a0e982388cdb9efcd5da55462) (2,114B) (mode 100644) [raw]
// libcursed -- C++ classes for dealing with curses
// Copyright (C) 2019 xaizek <xaizek@posteo.net>
//
// This file is part of libcursed.
//
// libcursed is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// libcursed is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with libcursed.  If not, see <https://www.gnu.org/licenses/>.

#include "Text.hpp"

#include <string>
#include <utility>
#include <vector>

using namespace cursed;
using namespace cursed::guts;

Text::Text() : top(0), height(0)
{ }

int
Text::getHeight() const
{ return height; }

void
Text::setLines(std::vector<ColorTree> newLines)
{
    lines = std::move(newLines);
    scrollToTop();
}

void
Text::scrollToTop()
{
    top = 0;
}

void
Text::scrollToBottom()
{
    top = static_cast<int>(lines.size()) - height;
    if (top < 0) {
        top = 0;
    }
}

void
Text::scrollDown()
{
    ++top;
    if (top > static_cast<int>(lines.size()) - height) {
        top = static_cast<int>(lines.size()) - height;
        if (top < 0) {
            top = 0;
        }
    }
}

void
Text::scrollUp()
{
    --top;
    if (top < 0) {
        top = 0;
    }
}

void
Text::draw()
{
    win.erase();
    int line = 0;
    for (int i = top; i < top + height; ++i, ++line) {
        if (i == static_cast<int>(lines.size())) {
            break;
        }

        wmove(win, line, 0);
        wclrtoeol(win);
        wmove(win, line, 1);
        win.print(lines[i]);
    }
    wnoutrefresh(win);
}

int
Text::desiredHeight()
{
    return -1;
}

int
Text::desiredWidth()
{
    return -1;
}

void
Text::placed(Pos newPos, Size newSize)
{
    WindowWidget::placed(newPos, newSize);
    height = newSize.lines;
}
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/libcursed

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/libcursed

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master