From 680ed3a1adc29624dc4b45c6cd4228222b20788f Mon Sep 17 00:00:00 2001 From: yukun Date: Wed, 18 Dec 2019 13:26:59 +0100 Subject: [PATCH 1/2] dev --- main/main.cpp | 46 ++++++++++++++++++++++++++----------- src/Terminal.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++-- src/Terminal.h | 7 +++++- 3 files changed, 96 insertions(+), 16 deletions(-) diff --git a/main/main.cpp b/main/main.cpp index 6d9c9b8..205182d 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -9,78 +9,98 @@ int main() { vkvm::initialize(0); Terminal terminal = Terminal(); + terminal.init(); + std::cout << terminal.getString() << std::endl; vkvm::registerEvent(vkvm::KeyDown, [&terminal]() { vkvm::KeyCode keycode = vkvm::getLastPressedKey(); std::cout << keycode << std::endl; - if(((vkvm::KeyCode::ShiftLeft & 0xfff) == keycode) ||((vkvm::KeyCode::ShiftRight & 0xfff) == keycode)){ + if((vkvm::KeyCode::ShiftLeft == keycode) ||(vkvm::KeyCode::ShiftRight == keycode)){ terminal.shiftpressed(); } - if(((vkvm::KeyCode::Zero & 0xfff) <= keycode) && (keycode <= (vkvm::Nine & 0xfff))){ - char ch = keycode - (vkvm::KeyCode::Zero & 0xfff) + '0'; + if((vkvm::KeyCode::Zero <= keycode) && (keycode <=vkvm::Nine)){ + char ch = keycode - vkvm::KeyCode::Zero + '0'; std::cout << ch << std::endl; terminal.setString(ch); vkvm::setText(terminal.getString()); + std::cout << terminal.getString() << std::endl; std::cout<< vkvm::getText()<< std::endl; vkvm::callEvent(vkvm::EventType::RenderText); } - if(((vkvm::KeyCode::A & 0xfff) <= keycode) && (keycode <= (vkvm::KeyCode::Z & 0xfff))){ + if((vkvm::KeyCode::A <= keycode) && (keycode <= vkvm::KeyCode::Z)){ int status = terminal.getstatus(); char ch; if(status == 0){ - ch = keycode - (vkvm::KeyCode::A & 0xfff) + 'a'; + ch = keycode - vkvm::KeyCode::A + 'a'; } else{ - ch = keycode - (vkvm::KeyCode::A & 0xfff) + 'A'; + ch = keycode - vkvm::KeyCode::A + 'A'; } std::cout << ch << std::endl; terminal.setString(ch); vkvm::setText(terminal.getString()); + std::cout << terminal.getString() << std::endl; std::cout<< vkvm::getText()<< std::endl; vkvm::callEvent(vkvm::EventType::RenderText); } - if((vkvm::KeyCode::Space & 0xfff) == keycode){ - char ch = keycode - (vkvm::KeyCode::Space & 0xfff) + ' '; + if(vkvm::KeyCode::Space == keycode){ + char ch = keycode - vkvm::KeyCode::Space + ' '; std::cout << ch << std::endl; terminal.setString(ch); vkvm::setText(terminal.getString()); + std::cout << terminal.getString() << std::endl; std::cout<< vkvm::getText()<< std::endl; vkvm::callEvent(vkvm::EventType::RenderText); } - if((vkvm::KeyCode::Backspace & 0xfff) == keycode){ - char ch = keycode - (vkvm::KeyCode::Backspace & 0xfff) + ' '; + if(vkvm::KeyCode::Backspace == keycode){ + char ch = keycode - vkvm::KeyCode::Backspace + ' '; std::cout << ch << std::endl; terminal.subString(); vkvm::setText(terminal.getString()); + std::cout << terminal.getString() << std::endl; std::cout<< vkvm::getText()<< std::endl; vkvm::callEvent(vkvm::EventType::RenderText); } - if((vkvm::KeyCode::Tab & 0xfff) == keycode){ - char ch = keycode - (vkvm::KeyCode::Tab & 0xfff) + ' '; + if(vkvm::KeyCode::Tab == keycode){ + char ch = keycode - vkvm::KeyCode::Tab + ' '; for(int i = 0; i < 3; i++) { std::cout << ch << std::endl; terminal.setString(ch); } vkvm::setText(terminal.getString()); + std::cout << terminal.getString() << std::endl; std::cout<< vkvm::getText()<< std::endl; vkvm::callEvent(vkvm::EventType::RenderText); } - if((vkvm::KeyCode::Enter & 0xfff) == keycode){ + if(vkvm::KeyCode::Enter == keycode){ char ch = '\n'; std::cout << ch << std::endl; terminal.setString(ch); vkvm::setText(terminal.getString()); + std::cout << terminal.getString() << std::endl; std::cout<< vkvm::getText()<< std::endl; vkvm::callEvent(vkvm::EventType::RenderText); } + if(vkvm::KeyCode::Arrow_Left == keycode){ + terminal.moveleft(); + std::cout << terminal.getString() << std::endl; + } + + if(vkvm::KeyCode::Arrow_Right == keycode){ + terminal.moveright(); + std::cout << terminal.getString() << std::endl; + } + + + }); diff --git a/src/Terminal.cpp b/src/Terminal.cpp index 1ad63ff..525644e 100644 --- a/src/Terminal.cpp +++ b/src/Terminal.cpp @@ -1,6 +1,7 @@ // // Created by yukun on 29.11.19. // +#include #include "vkvm.hpp" #include "Terminal.h" @@ -8,12 +9,41 @@ std::string Terminal::getString() { return s; } +void Terminal::init(){ + s = s + cursor; +} + void Terminal::setString(char c) { - s = s + c; +// s.erase(s.end() - 1); +// s = s + c + cursor; + int i = s.find(cursor); + std::cout << i << std::endl; + std::cout<< s.length() -1 < i + 1; l--){ + s[l] = s[l-1]; + } + s[i+1] = c; + } + else{ + s = s + cursor; + std::cout << "else1 " + s << std::endl; + s[s.length()-2] = c; + std::cout << "else2 " + s << std::endl; + + } } void Terminal::subString(){ - s = s.substr(0, s.length() - 1); +// if(s.length() > 1) +// s.erase(s.end() - 1); +// s.erase(s.end() - 1); +// s = s + cursor; + int i = s.find(cursor); + s.erase(i-1, 1); + } void Terminal::shiftpressed() { @@ -30,3 +60,28 @@ int Terminal::getstatus() { return status; } +void Terminal::moveleft(){ + int i = s.find(cursor); + if(i > 0){ + char c = s[i-1]; + s[i-1] = cursor; + s[i] = c; + } +} + +void Terminal::moveright() { + int i = s.find(cursor); + if(i < (s.length() - 1)){ + char c = s[i+1]; + s[i+1] = cursor; + s[i] = c; + } +} + +void Terminal::movedown() { + +} + +void Terminal::moveup() { + +} diff --git a/src/Terminal.h b/src/Terminal.h index 7ad1ed7..2ef05ae 100644 --- a/src/Terminal.h +++ b/src/Terminal.h @@ -9,15 +9,20 @@ class Terminal { public: + void init(); std::string getString(); void setString(char c); void subString(); void shiftpressed(); void shiftup(); int getstatus(); - + void moveleft(); + void moveright(); + void moveup(); + void movedown(); private: std::string s=""; int status = 0; + char cursor = -127; }; #endif //TERMINAL_TERMINAL_H From 4cb4fcd5623853ed578168c3d4bb142c94b22621 Mon Sep 17 00:00:00 2001 From: yukun Date: Wed, 18 Dec 2019 13:46:36 +0100 Subject: [PATCH 2/2] dev --- CMakeLists.txt | 2 +- src/Bitmap.cpp | 63 ---------------------------------------- src/Bitmap.h | 67 ------------------------------------------ src/Font.cpp | 79 -------------------------------------------------- src/Font.h | 51 -------------------------------- 5 files changed, 1 insertion(+), 261 deletions(-) delete mode 100644 src/Bitmap.cpp delete mode 100644 src/Bitmap.h delete mode 100644 src/Font.cpp delete mode 100644 src/Font.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e26241..0d3419f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ include_directories(lib/toml) set(LIB_PATH "${CMAKE_SOURCE_DIR}/../library") include_directories(${LIB_PATH}/include) -add_executable(Terminal ${SOURCES} ${HEADERS} main/main.cpp src/Terminal.h src/Terminal.cpp src/Bitmap.cpp src/Bitmap.h src/Font.cpp src/Font.h) +add_executable(Terminal ${SOURCES} ${HEADERS} main/main.cpp src/Terminal.h src/Terminal.cpp) target_link_libraries(Terminal ${LIB_PATH}/lib/liblibrary.a) diff --git a/src/Bitmap.cpp b/src/Bitmap.cpp deleted file mode 100644 index a264e50..0000000 --- a/src/Bitmap.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "Bitmap.h" -#include -#include - -Bitmap::Bitmap() { - offset = 0; - width = 0; - height = 0; - bpp = 0; -} - -Bitmap::Bitmap(const std::string &file) { - offset = 0; - width = 0; - height = 0; - bpp = 0; - load(file); -} - -void Bitmap::load(const std::string &file) { - std::ifstream stream; - stream.open(file); - if(stream.is_open()){ - std::string str((std::istreambuf_iterator(stream)),std::istreambuf_iterator()); - data.resize(str.size()); - for(int i = 0; i < str.size();i++){ - data[i] = str[i]; - } - - offset = (int)*(unsigned int*)(&data[10]); - width = (int)*(unsigned int*)(&data[18]); - height = (int)*(unsigned int*)(&data[22]); - bpp = (int)*(unsigned short*)(&data[28]); - } -} - -int Bitmap::getWidth() { - return width; -} - -int Bitmap::getHeight() { - return height; -} - -char *Bitmap::getData() { - return &data[offset]; -} - -int Bitmap::getBitsPerPixel() { - return bpp; -} - -unsigned int Bitmap::getPixel(int x, int y) { - unsigned int pixel = 0; - char *ptr = getData() + ((getHeight() - 1 - y) * getWidth() + x) * (getBitsPerPixel() / 8); - for(int i = 0; i < getBitsPerPixel() / 8;i++){ - *((char*)&pixel+i) = ptr[i]; - } - if(pixel != 0){ - return pixel; - } - return pixel; -} diff --git a/src/Bitmap.h b/src/Bitmap.h deleted file mode 100644 index e1b61a9..0000000 --- a/src/Bitmap.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef TERMINAL_BITMAP_H -#define TERMINAL_BITMAP_H - -#include -#include - -/** - * @author: Julian Hinxlage - * @since: v0.0.0 - * @brief: Used to load a Bitmap from a file. - */ -class Bitmap { -public: - Bitmap(); - explicit Bitmap(const std::string &file); - - /** - * @author: Julian Hinxlage - * @since: v0.0.0 - * @brief: Used to load a Bitmap from a file. - */ - void load(const std::string &file); - - /** - * @author: Julian Hinxlage - * @since: v0.0.0 - * @return: the width of the image. - */ - int getWidth(); - - /** - * @author: Julian Hinxlage - * @since: v0.0.0 - * @return: the height of the image - */ - int getHeight(); - - /** - * @author: Julian Hinxlage - * @since: v0.0.0 - * @return: the pixel data as an byte array - */ - char *getData(); - - /** - * @author: Julian Hinxlage - * @since: v0.0.0 - * @return: the number of bits uses per pixel - */ - int getBitsPerPixel(); - - /** - * @author: Julian Hinxlage - * @since: v0.0.0 - * @return: the pixel value by coordinates, (0,0) is on the top left - */ - unsigned int getPixel(int x, int y); - -private: - int width; - int height; - int offset; - int bpp; - std::vector data; -}; - -#endif //TERMINAL_BITMAP_H diff --git a/src/Font.cpp b/src/Font.cpp deleted file mode 100644 index e9cb8ea..0000000 --- a/src/Font.cpp +++ /dev/null @@ -1,79 +0,0 @@ -#include "Font.h" -#include - - -Font::Font() { - xOffset = 0; - yOffset = 0; - xSize = 0; - ySize = 0; - xCount = 0; - yCount = 0; - xStart = 0; - yStart = 0; - fillValue = 0; - firstChar = ' '; -} - -Font::Font(const std::string &file, const std::string &configFile) : Font() { - load(file, configFile); -} - -void Font::load(const std::string &file, const std::string &configFile) { - bitmap.load(file); - auto config = cpptoml::parse_file(configFile); - xOffset = config->get_as("xOffset").value_or(0); - yOffset = config->get_as("yOffset").value_or(0); - xSize = config->get_as("xSize").value_or(0); - ySize = config->get_as("ySize").value_or(0); - xCount = config->get_as("xCount").value_or(0); - yCount = config->get_as("yOffset").value_or(0); - xStart = config->get_as("xStart").value_or(0); - yStart = config->get_as("yStart").value_or(0); - fillValue = config->get_as("fillValue").value_or(0); - firstChar = (char)config->get_as("firstChar").value_or(0); - pixelSize = config->get_as("pixelSize").value_or(0); - gap = config->get_as("gap").value_or(-1); - invertedColors = config->get_as("invertedColors").value_or(0); -} - -int Font::width() { - return xSize; -} - -int Font::height() { - return ySize; -} - -bool Font::getPixel(char character, int x, int y) { - //index of character(x and y) - int index = (character - firstChar); - - if(gap != -1){ - if (index >= gap){ - index++; - } - } - - int xIndex = index % xCount; - int yIndex = index / xCount; - - if(index < 0){ - yIndex--; - xIndex += xCount; - } - - //character index to pixel index conversion - int xPos = xIndex * (xSize + xOffset) + xStart; - int yPos = yIndex * (ySize + yOffset) + yStart; - - bool value = bitmap.getPixel((xPos + x) * pixelSize, (yPos + y) * pixelSize) == fillValue; - if(invertedColors){ - return !value; - }else{ - return value; - } -} - - - diff --git a/src/Font.h b/src/Font.h deleted file mode 100644 index 8274834..0000000 --- a/src/Font.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// Created by yukun on 05.12.19. -// - -#ifndef TERMINAL_FONT_H -#define TERMINAL_FONT_H -#include "Bitmap.h" - -/** - * @author: Julian Hinxlage - * @since: v0.0.0 - * @brief: this class provides pixel access based on characters - */ -class Font { -public: - Bitmap bitmap; - - //space between characters - int xOffset; - int yOffset; - - //size of a character - int xSize; - int ySize; - - //count of characters per row - int xCount; - //count of rows - int yCount; - - //pixel offset of first character - int xStart; - int yStart; - - unsigned int fillValue; - char firstChar; - int pixelSize; - int gap; - - bool invertedColors; - - Font(); - explicit Font(const std::string &file, const std::string &configFile); - void load(const std::string &file, const std::string &configFile); - - int width(); - int height(); - bool getPixel(char character, int x, int y); -}; - -#endif //TERMINAL_FONT_H