Skip to content

Latest commit

 

History

History
871 lines (672 loc) · 28.8 KB

Docs.md

File metadata and controls

871 lines (672 loc) · 28.8 KB

Графические виджеты (Elems)

Класс Button (Buttons.hpp)

Для чего нужен класс?

  • Создание кнопок
  • Так же используется в других классах (Slider , InputField)

Возможности класса

  • Создание простейших кнопок
  • Настройка цвета нажатия, удержания и наведения
  • Настройка call-back функций на каждый вид взаимодействия
  • Настройка фигуры заднего фона (с помощью Figure, или обычного прямоугольника)
  • Возможность сделать кнопку невидимой (для интеграции в другие виджеты)
  • Добавление текста для кнопки (не Text)
  • Добавление изображения на фон

Класс Figure (Figure.hpp)

Для чего нужен класс?

  • Создание разных фигур (rectangle, circle, line, circled-rectangle)

Возможности класса

  • Настройка типа фигуры
  • Отрисовка фигур

Класс Image (Image.hpp)

Для чего нужен класс?

  • Создание изображений

Возможности класса

  • Настройка основного цвета изображения (например цвет (100, 100, 100) - снизит яркость изображения)
  • Установка размера изображения
  • Установка видимого квадрата изображения

Класс InputField (InputField.hpp)

Для чего нужен класс?

  • Установка поля ввода

Возможности класса

  • Установка начального текста и его цвета
  • Установка текста и его цвета
  • Установка обработчика входного текста
  • Установка типа расположения текста

Класс Slider (Slider.hpp)

Для чего нужен класс?

  • Класс выполняет роль ползунка

Возможности класса

  • Настройка call-back функции
  • Настройка вида ползунка (линия-круг или квадрат-квадрат)
  • Получение значения позунка от 0 до 1

Класс Text (Text.hpp)

Для чего нужен класс?

  • Вывод текста с фоновой фигурой или без

Возможности класса

  • Создание многострочного текста (также роддержка символов табуляции и переноса строки)
  • Задавание шрифта, размера шрифта и цвета тектса
  • Задавние заднего фона как обычным прямоугольником, так и классом Figure

Системные классы

Класс Empty (Empty.hpp)

Для чего нужен класс?

  • Для использования в качестве пустого виджета
  • Может послужить шаблоном для нового виджета

Возможности класса

  • Настройка имени, позиции и положения

Класс Layer и Container (Layer.hpp, Container.hpp)

Для чего нужны эти два класса?

  • Функцианал у обоих классов одинаковый
  • Классы нужны для объединения группы элементов в единое целое
  • Класс Layer используется в качестве слоев для элементов, при добавлении слоев в приложение, порядок отрисовки изменен не будет (от первого до последнего). Первый слой (mainlayer) будет на самом заднем фоне.

Возможности классов

  • Добавление и получение доступа к элементам
  • Возможность добавления классов в классы (Layer в Layer и Container в Container)

Класс Animator (Animator.hpp)

Для чего нужен класс?

  • Создание анимаций для виджетов

Возможности класса

  • Динамическое изменение параметров (анимация движения и изменине размера)

Класс GUIApp (GUIApp.hpp)

Для чего нужен класс?

  • Создание приложения и добавление элемнтов. Корень кажжого приложения

AllGUIelems - файл включающий в себя все виджеты



API (функции классов)

Класс Button

Конструкторы

Button()

Стнадартный конструктор класса


Button(string name_, 
       vec2 size_, 
       vec2 pos_, 
       vec3 color_)

Конструктор класса, принимается:

  • имя кнопки
  • размер кнопки
  • цвет кнопки

Button(string name_, 
       vec2 size_, 
       vec2 pos_, 
       vec3 color_, 
       vec3 clickColor_, 
       vec3 holdColor_, 
       vec3 hoverColor_)

Конструктор класса, принимается:

  • имя кнопки
  • размер кнопки
  • цвет кнопки
  • цвет кнопки при нажатии
  • цвет кнопки при удержании
  • цвет кнопки при наведении

Button(string name_, 
       vec2 size_, 
       vec2 pos_, 
       string text_, 
       string font_, 
       vec3 texColor_, 
       vec3 color_, 
       vec3 clickColor_, 
       vec3 holdColor_, 
       vec3 hoverColor_, 
       int fontSize_ = 20)

Конструктор класса, принимается:

  • имя кнопки
  • размер кнопки
  • текст кнопки (в виде std::string)
  • путь до шрифта текста кнопки (в виде std::string)
  • цвет текста
  • цвет кнопки
  • цвет кнопки при нажатии
  • цвет кнопки при удержании
  • цвет кнопки при наведении

Методы

void setFigure(Figure f)

Устанавливает фигуру на зданий фон кнопки. Принимает на вход фигуру Figure. Позиция и размер фигуры подгоняется под параметры кнопки. Обратите внимание, что изначально нет фигуры, только обычный квадрат


void setImage(string path)

Устанавливает изображение на задний фон. На вход принимается путь до картинки в виде std::string. Обратите внимание что это не устанавливает на фон класс Image


void updateText(string text_)

Устанавливает текст кнопки. На вход принимается новый текст в виде std::string.


void updateFont(string font_)

Устанавливает шрифт текста кнопки. На вход принимается новый путь до шрифта в виде std::string.


void addText(string textString_, 
             string fontString, 
             vec3 textColor, 
             int fontSize_ = 20)

Совмещает в себе 2 предыдущих метода. На вход принимается новый текст и шрифт в виде std::string, принимается цвет текста. Необязательным параметром служит размер текста, изначально - 20


void setCallback(CallbackType callback_, 
                 string type)

Добавляет по указанному типу call-back функцию для кнопки. Доступно 3 вида типов:

  • onClick - устанавливает функцию на событие нажатия кнопки
  • onHold - устанавливает функцию на событие удержания кнопки. Вызывается каждый тик пока кнопка зажата.
  • onHover - устанавливает функцию на событие наведения на кнопку. Вызывается каждый тик пока на кнопку наведена мышка.

Примечание: тип CallbackType - это любая функция с сигнатурой void(Button*)


void setStyle(sf::Text::Style style_)

Устанавливает стиль текста. Не рекомендуется к использованию.


bool isHovered(vec2 point)

Возвращает true когда точка находится в квадрате кнопки, иначе возвращает false. На вход принимает позицию точки.


bool isHolded(vec2 point, int ind)

Возвращает true когда кнопка удерживается кнопкой мыши с индексом ind, иначе возвращает false. На вход принимает позицию мыши и индекс кнопки мыши.


bool isClicked(vec2 point, int ind, MouseData &mdata)

Возвращает true когда точка является позицией мыши и кнопка мыши с индексом ind нажата, иначе возвращает false. На вход принимает позицию мыши, индекс кнопки мыши и информацию о мыши (MouseData).


bool isClickedOutside(vec2 point, int ind, MouseData &mdata)

Возвращает true когда кнопка мыши с индексом ind нажата вне кнопки. На принимает вход позицию мыши, индекс кнопки мыши и класс информациющий о мыши


void draw(RenderWindow &window, MouseData &mdata, int tick)

Функция для отрисовки кнопки. Может быть вызвана из друго класса, например если кнопка является частью другого виджета. На вход принимается окно для отрисовки, информация о мыши и тик (эталонным счистается тик из класса GUIApp)


Класс Figure

Конструкторы

Figure()

Стандартный конструктор класса


Figure(string name, 
       FigureType type, 
       vec2 pos, 
       vec2 size, 
       vec3 color)

Конструктор класса, принимается:

  • имя фигуры
  • тип фигуры (один из 5: rectangle, circle, line, circled-rectangle, circled-line)
  • позицию фигуры
  • размер фигуры
  • цвет фигуры

Методы

void setRadius(int radius)

Устанавливает радиус круга. На вход принимается радиус круга


void setPoint2(vec2 point2)

Устанавливает вторую точку для линии относительно позиции. На вход принимается 2ая точка для линии


void setSmoothnes(float v)

Устанавливает на сколько будет скруглена фигура. На вход принимается коофициент скругления.


void draw(RenderWindow& window)

Отрисовывает фигуру. На вход принимается окно отрисовки. Эталонное окно отрисовки имеется у класса GUIApp, и передается в функции update

Примечание: вы не сможете установить вторую точку для круга или задать скругление для обычного прямоугольника. Указываете верный тип фигуры

Класс Image

Конструкторы

Image()

Стандартный конструктор класса


Image(string name_, 
      string fileName, 
      vec2 pos_, 
      vec2 size_, 
      vec3 color_ = vec3(255,255,255))

Конструктор класса, принимается:

  • имя изображения
  • путь до изображения
  • позиция изображения
  • размер изображения. Именно размер, а не видимую часть. Изображение масштабируется под этот размер
  • необязательный парметр. Цвет, указывает основной цвет изображения. Пример: если цвет будет красным, то изображение тоже станет красным.

Методы

void update(string fileName, vec2 trp = vec2(-1, -1), vec2 trs = vec2(-1, -1))

Обновляем данные об изображении. Принимаемые параметры:

  • путь до изображения
  • необязательный параметр. Позиция видимого квадрата
  • необязательный параметр. Размер видимого квадрата

void setSize(vec2 size)

Масштабирует изображение под новый размер. На вход принимается размер картинки.


void draw(sf::RenderWindow& window)

Отрисовывает изображение. На вход принимается окно отрисовки. Эталонное окно отрисовки имеется у класса GUIApp, и передается в функции update


Класс InputField

Конструкторы

InputField(){}

Стандартный контруктор класса.


InputField(string name, 
           wstring startText, 
           GUIlib::Text text, 
           vec2 size, 
           vec2 textSize, 
           vec2 padding_, 
           vec3 startTextColor, 
           bool isMultiLine = false)

Конструктор класса, принимается:

  • имя поля ввода
  • стартовый текст. Обратите внимание на то, что это не std::string. При задавании парметра нужно поставить L перед скобками: L"Пример"
  • класс текста. От него берется положение поля ввода.
  • размер поля ввода
  • размер поля ввода в символах. Если указать {10, 1}, то можно будет написать только 1 ряд в 10 букв
  • отступ текста от позиции поля
  • цвет стартого текста
  • необязательный параметр. Задает тип поля, если true, то можно будет писать больше 1ой строчки (по умолчанию 1 строчка)

Методы

void setCharHandler(function<char(InputField*, char)> charHandler)

Устанавливает обработчик нажатых букв. На вход подается функция с сигнатурой char(InputField*, char). Второй парметр функции это символ который был введен с клавиатуры. Может быть полезен например при создании поля ввода паролей. Вот пример:

char passwordHandler(InputField* inpf, char inc){
    return '*'
}

void setTextType(int type)

Устанавливает тип поля ввода. По умолчанию 0 (текст выравнивается по центру. Указанная позиция текста будет центром), тип 1 четко задает в какой позиции начинается текст.


void setFigure(Figure f)

Устанавливает фигуру на задний фон. Позиция и размер фигуры подгоняются под парметры поля ввода. По умолчанию используется обычный прямоугольник (без класса Figure)


void setText(wstring newText)

Устанавливает новый текст. На вход подается новый текст


void setButton(vec2 size)

Устанавливает размер кликабельной зоны (зоны относительно позиции по нажатию которой, поле ввода станет активным)


void update(RenderWindow& window, MouseData &mdata, KeyboardData &kdata, int tick)

Обновляет и отрисовывает поле ввода. Все парметры можно получить из класса GUIApp


Класс Slider

Конструкторы

Slider(){}

Стандартный конструктор.


Slider(string name, 
       vec2 posPoint1, 
       vec2 posPoint2, 
       vec3 colorLine, 
       vec3 circleColor, 
       float circleRadius)

Конструктор принимает:

  • имя слайдера
  • позиция первой точки
  • позиция второй точки
  • цвет основной линии
  • цвет кружка-ползунка
  • радиус ползунка

Slider(string name, 
       vec2 posPoint1, 
       vec2 posPoint2, 
       vec3 colorLine, 
       vec3 rectColor, 
       float rectLen, 
       float height)

Конструктор принимает:

  • имя слайдера
  • позиция первой точки
  • позиция второй точки
  • цвет основной линии
  • цвет линии-ползунка
  • длинна ползунка
  • высота ползунка

Методы

void setFunc(function<void(Slider*, vec2&)> func)

Устанавливает call-back фуекцию на слайдер с сигнатурой void(Slider*, vec2&). Функция срабатывает при изменении значения ползунка


void getValue()

Вычисляет значение слайдера


vec2 &returnValue()

возвращает значение


float getRightValue()

Возвращает значение которое соответствует положению слайдера


void draw(RenderWindow &window, MouseData &mdata)

Обновляет и отрисовывает ползунок. Все параметры могут быть получены из класса GUIApp


Класс Text

Конструкторы

Text(){}

Стандартный конструктор


Text(string name, 
     wstring text, 
     vec3 textColor, 
     vec3 backColor, 
     vec2 bgSize, 
     vec2 pos, 
     string font, 
     int size = 20)

Конструктор принимает:

  • имя текста
  • текст. Перед набором текста в кавычки, надо поставить перед ними L : L"Hello"
  • цвет текста
  • цвет фона
  • размер фона
  • расположение текста
  • путь до шрифта
  • необязательный праметр, размер текста

Text(string name, 
     wstring text, 
     vec3 textColor, 
     vec2 pos, 
     string font, 
     int size = 20)

Конструктор принимает:

  • имя текста
  • текст. Перед набором текста в кавычки, надо поставить перед ними L : L"Hello"
  • цвет текста
  • расположение текста
  • путь до шрифта
  • необязательный праметр, размер текста

Методы

void setFigure(Figure f)

Устанавливает в качестве заднего фона фигуру


void changeText(wstring text)

Изменяет текст


void enableLines(bool enable)

Включает или выключает многострочность. Также, вместо многострочности можно использовать знак переноса строки \n


void addLine(wstring line)

Если включена многострочность, добовляет новую строку текста


void changeLine(int index, wstring newLine)

Если включена многострочность, изменяет строку под индексом index на строку newLine


void removeLine(int index)

Если включена многострочность, удаляет строку под индексом index


wstring getLine(int index)

Если включена многострочность, возвращает копию строки под индексом index


void draw(sf::RenderWindow& window, int tick)

Отрисовывает текст на окне рендеринга. Все параметры могут быть получены из класса GUIApp


Класс Empty

Конструкторы

Empty(string name, vec2 pos, vec2 size)

Конструктор принимает:

  • имя виджета
  • позицию виджета
  • размер виджета

Методы

Нет


Класс Container

Конструкторы

Container(){}

Стандартный конструктор класса


Container(string name)

Конструктор принимает только имя контейнера

Методы

Методы класса делятся на 3 типа:

  • Добавить элемент
  • Получить ссылку на элемент
  • Администраторские

В классе есть все элементы кроме класса Layer Получить любой виджет можно по такой функции:

Widget &getWidget(string name)

А добавить по такой:

void addWidget(Widget widget)

Примечание: вместо Widget вы должны подставить имя класса элемента, например Button

void changePos(vec2 newPos)

Изменяет позицию контейнера.


void update(RenderWindow& window, MouseData &mData, KeyboardData &kData, int tick)

Обновляет данные для всех элементов контейнера, а также отрисовывает их. Передается данные мыши и клавиатуры. Все параметры можно получить из класса GUIApp

Класс Layer

Конструкторы

Layer(){}

Стандартный конструктор класса


Layer(string name)

Конструктор принимает только имя контейнера

Методы

Методы класса делятся на 3 типа:

  • Добавить элемент
  • Получить ссылку на элемент
  • Администраторские

В классе есть все элементы кроме класса Container Получить любой виджет можно по такой функции:

Widget &getWidget(string name)

А добавить по такой:

void addWidget(Widget widget)

Примечание: вместо Widget вы должны подставить имя класса элемента, например Button

void changePos(vec2 newPos)

Изменяет позицию контейнера.


void update(RenderWindow& window, MouseData &mData, KeyboardData &kData, int tick)

Обновляет данные для всех элементов контейнера, а также отрисовывает их. Передается данные мыши и клавиатуры. Все параметры можно получить из класса GUIApp


Класс GUIApp

Конструкторы

GUIApp(){}

Стандартный конструктор


GUIApp(string name_, vec2 res_, vec3 bgColor_)

Конструктор принимающий параметры окна и цвет фона. Так же можно задать имя.


Методы

void addLayer(string name)

Добавляет новый слой в приложение. Принимает на вход имя слоя по которому можно будет получить этот слой


Layer &getLayer(string name)

Возвращает ссылку на слой по его имени


void setUpdateFunction(function<void(GUIApp*)> updateFunction_)

Устанавливает дополнительную функцию обновления. Она обновляется самой первой, до виджетов и после очистки экрана


void update(RenderWindow &window, bool fullControl = false)

Обновляет приложение. Также обновляются все виджеты, для нормальной работы приложения необхдимо поставить fullControl на true


Файл HIDhandler.hpp

Функции

bool isKeyPressed(char key)

bool isKeyPressed(Keyboard::Key key)
  • 1ая функция принимает символ который соответсвует клавише (только цифры, символы и латинские буквы) и возвращает нажата ли эта клавиша на клавиатуре
  • 2ая функция принимает код клавиши например Keyboard::Key::Escape, возвращает нажата ли эта клавиша на клавиатуре.

bool isButtonPressed(int ind)

Возвращает нажата ли кнопка на мыши под индексом ind. Есть 3 индекса:

  • 0 - ЛКМ
  • 1 - ПКМ
  • 2 - СКМ

vec2 getMousePos(Window &window)

Возвращает позицию мыши в окне window. На вход также может подоваться RenderWindow. Указатель на RenderWindow есть в классе GUIApp

Классы

Класс MouseData

Информация из класса

  • bool pressedButtons[3] - массив нажатых кнопок
  • int wheelData - информация о прокрутке колесика мыши:
    • Больше 0 - вверх
    • Меньше 0 - вниз
    • Равно 0 - не крутиться
  • Есть метод clear - он устанавливает все позиции в массиве нажатых кнопок на false

Класс KeyboardData

Информация из класса

  • vector<Keyboard::Key> pressedKeys - вектор нажатых клавиш на клавиатуре
  • char charKey - символ клавиши нажатой на клавиатуре
  • bool typed - показывает, была ли нажата клавиша с валидным кодом (те не спецклавиша) на клавиатуре
  • unsigned int unicode - код нажатого валидного символа в юникод
  • Есть метод clear - он очищает вектор нажатых клавиш на клавиатуре

Пример пустой программы:

#include <GUIlib/GUIApp.hpp>

GUIApp app;

void appUpdate(GUIApp *gapp){
       cout<<"Updated!";
}

int main(int argc, char *argv[]) {
    RenderWindow window(VideoMode(1500, 900), "Hello world");
    window.setFramerateLimit(60);

    app.setUpdateFunction(&appUpdate);
    app.bgColor = {200, 200, 200};
    app.res = {1500, 900};

    
    while(window.isOpen()){
        app.update(window, true);
    }

    return 0;
}