diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e792b9..c7b5496 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,7 +172,7 @@ if(KolibriLib_BUILD_DOCS) include(Doxygen) - ADD_DOCUMENTATION(doc ${CMAKE_CURRENT_SOURCE_DIR}/Docs/Doxyfile) + ADD_DOCUMENTATION(doc) endif() diff --git a/cmake/CMakeDetermineKOS32Compiler.cmake b/cmake/CMakeDetermineKOS32Compiler.cmake index 3ccdfdf..3d32466 100644 --- a/cmake/CMakeDetermineKOS32Compiler.cmake +++ b/cmake/CMakeDetermineKOS32Compiler.cmake @@ -26,7 +26,7 @@ include_directories( ) -set(CMAKE_C_LINK_EXECUTABLE " -o -L${TOOLCHAIN_DIR}/lib -L${SDK_DIR}/lib --subsystem native --start-group -lgcc -lc.dll --end-group ") -set(CMAKE_CXX_LINK_EXECUTABLE " -o -L${TOOLCHAIN_DIR}/lib -L${TOOLCHAIN_DIR}/mingw32/lib -L${SDK_DIR}/lib --subsystem native --start-group -lgcc -lc.dll -lstdc++ -lsupc++ --end-group ") +set(CMAKE_C_LINK_EXECUTABLE " -o --start-group -lgcc -lc.dll --end-group ") +set(CMAKE_CXX_LINK_EXECUTABLE " -o --start-group -lgcc -lc.dll -lstdc++ -lsupc++ --end-group ") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -S --image-base 0 -nostdlib -T${NEWLIB_DIR}/app.lds") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -S --image-base 0 -nostdlib -T${NEWLIB_DIR}/app.lds -L${TOOLCHAIN_DIR}/lib -L${TOOLCHAIN_DIR}/mingw32/lib -L${SDK_DIR}/lib --subsystem native") diff --git a/cmake/Doxygen.cmake b/cmake/Doxygen.cmake index 237ae79..f2cf765 100644 --- a/cmake/Doxygen.cmake +++ b/cmake/Doxygen.cmake @@ -7,8 +7,9 @@ MACRO(ADD_DOCUMENTATION) IF(DOXYGEN_FOUND) set(DOXYGEN_GENERATE_HTML YES) set(DOXYGEN_PROJECT_NUMBER ${PROJECT_NUMBER}) - set(DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Docs) - doxygen_add_docs(doc ${CMAKE_SOURCE_DIR}) + set(DOXYGEN_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/Docs) + set(DOXYGEN_IMAGE_PATH ${DOXYGEN_OUTPUT_DIRECTORY}/media) + doxygen_add_docs(doc ${CMAKE_SOURCE_DIR} ) ELSE(DOXYGEN_FOUND) MESSAGE(STATUS "Doxygen not found. Documentation will not be generated") diff --git a/examples/Readme.md b/examples/Readme.md index 0a9c398..07d230e 100644 --- a/examples/Readme.md +++ b/examples/Readme.md @@ -1,3 +1,14 @@ -# Это папка с примерами использования библиотеки +# примеры использования библиотеки -Makefile нужно подредактировать, чтобы у вас всё нормально скомпилировалось. Посмотри его, там инструкции все есть. \ No newline at end of file +Просто посмотрите исходники, скомпилируйте и запустите примеры и всё станет понятнее + +## Hello world + +Просто окно с написью и кнопкой. + + +по нажатию на у надписи меняется цвет текста. + +## Mouse Position + +показывает координаты мыши diff --git a/include/kolibriLib/UI/BaseEditor.hpp b/include/kolibriLib/UI/BaseEditor.hpp index 72fec07..d28e46a 100644 --- a/include/kolibriLib/UI/BaseEditor.hpp +++ b/include/kolibriLib/UI/BaseEditor.hpp @@ -14,7 +14,8 @@ namespace KolibriLib { namespace UI { - /// \brief Форма для ввода текста + /// @brief Форма для ввода текста + /// @warning не завершено class BaseEditor : public buttons::TextButton { public: diff --git a/include/kolibriLib/UI/Readme.md b/include/kolibriLib/UI/Readme.md index ffab440..408efbd 100644 --- a/include/kolibriLib/UI/Readme.md +++ b/include/kolibriLib/UI/Readme.md @@ -1,13 +1,14 @@ -# User Interface +# namespace UI Тут находятся элементы интерфейса Вот их список: + `UIElement` - Класс от которого наследуются все остальные -+ `Button` - кнопка + `TextLabel` - Текстовая метка -+ `Frame` - Фрейм, может хранить в себе другие элементы ++ `Button` - кнопка ++ `CheckBox` - Чекбокс ++ `TextButton` - кнопка с текстом, тоже что и TextLabel но кнопка ++ `ImageButton` - кнопка с картинкой, тоже что и Image но кнопка + `Image` - Просто изображение + `Form` - форма для ввода текста + `Menu` - Выпадающий список меню -+ 'CheckBox' - наследуется от кнопки \ No newline at end of file diff --git a/include/kolibriLib/UI/UI.hpp b/include/kolibriLib/UI/UI.hpp index 5d05bca..64abe4a 100644 --- a/include/kolibriLib/UI/UI.hpp +++ b/include/kolibriLib/UI/UI.hpp @@ -15,7 +15,8 @@ namespace KolibriLib { - // Элементы UI + /// @brief UI + /// @details Пространство имён в котором только UI namespace UI { diff --git a/include/kolibriLib/UI/buttons/TextButton.hpp b/include/kolibriLib/UI/buttons/TextButton.hpp index eefa834..e36a99c 100644 --- a/include/kolibriLib/UI/buttons/TextButton.hpp +++ b/include/kolibriLib/UI/buttons/TextButton.hpp @@ -11,7 +11,6 @@ namespace KolibriLib namespace buttons { /// \brief Класс для работы с кнопками - /// @example example.cpp class TextButton: public text::TextLabel, public BaseButton { public: diff --git a/include/kolibriLib/UI/buttons/baseButton.hpp b/include/kolibriLib/UI/buttons/baseButton.hpp index 883b866..4ad6870 100644 --- a/include/kolibriLib/UI/buttons/baseButton.hpp +++ b/include/kolibriLib/UI/buttons/baseButton.hpp @@ -18,10 +18,13 @@ namespace KolibriLib BaseButton(); + /// @brief Конструтор + /// @param id ID кнопки BaseButton(ButtonID id); BaseButton(const BaseButton &) = default; + /// @brief Деструктор ~BaseButton(); /// @brief Получить сосояние кнопки на момент последней обработки @@ -53,6 +56,10 @@ namespace KolibriLib /// @return true если у кнопки есть ID bool IsActive() const; + /// @brief Объявить кнопку + /// @param coord Координаты кнопки + /// @param size размер кнопки + /// @param color цвет кнокпи void Define(const Coord &coord, const Size &size, const Colors::Color &color = Globals::SystemColors.work_button) const; protected: diff --git a/include/kolibriLib/UI/buttons/buttonsBase.hpp b/include/kolibriLib/UI/buttons/buttonsBase.hpp index e15e45f..f794e1c 100644 --- a/include/kolibriLib/UI/buttons/buttonsBase.hpp +++ b/include/kolibriLib/UI/buttons/buttonsBase.hpp @@ -20,18 +20,21 @@ namespace KolibriLib /// @brief ID кнопки struct ButtonID { - uint32_t value; + /// @brief Значение + std::uint32_t value; ButtonID(unsigned val); /// @brief является ли этот ID пригодным /// @details ID кнопок могут быть только от 0 до 0x8000 (исключая сами числа) bool CheckIsValid() const; + + ButtonID &operator = (const ButtonID&) = default; ButtonID operator=(const unsigned &val); /// @brief - operator uint32_t() const; + operator std::uint32_t() const; }; const ButtonID ButtonIDNotSet = 0; @@ -48,7 +51,7 @@ namespace KolibriLib /// \brief Получить свободный номер id кнопки из списка /// \paragraph Эта функция может выполнятся очень долго, если вы уже создали довольно много кнопок. Это становится действительно важно когда у вас объявленно более 2000 кнопок /// \return номер кнопки из списка ButtonsIdList - ButtonID GetFreeButtonId(std::vector *ButtonsIdList, uint32_t startID = 2); + ButtonID GetFreeButtonId(std::vector *ButtonsIdList, std::uint32_t startID = 2); /// \brief Освободить номер кнопки /// \param id номер номер кнопки из списка ButtonsIdList @@ -110,16 +113,19 @@ namespace KolibriLib return ButtonID(_ksys_get_button()); } - typedef enum ButtonStyle + /// @brief Стиль кнопок + enum class ButtonStyle { /// @brief Плоские кнопки flat = 0, /// @brief Объёмные кнокпи volumetric = 1 - } buttonStyle; + }; - inline void SetButtonStyle(buttonStyle style) + /// @brief Измнить стиль кнопок + /// @param новый стиль кнопок + inline void SetButtonStyle(ButtonStyle style) { asm_inline( "int $0x40" ::"a"(48), "b"(1), "c"(style)); @@ -146,7 +152,7 @@ namespace KolibriLib /// @brief Список использованных id кнопок std::vector ButtonsIdList{/*CloseButton,*/ MinimizeButton}; - uint32_t _top = 2; + unsigned _top = 2; }; } // namespace buttons diff --git a/include/kolibriLib/UI/form.hpp b/include/kolibriLib/UI/form.hpp index 5211c12..06cee88 100644 --- a/include/kolibriLib/UI/form.hpp +++ b/include/kolibriLib/UI/form.hpp @@ -7,6 +7,7 @@ namespace KolibriLib { namespace UI { + /// @brief Форма для ввода текста class Form : public BaseEditor { public: diff --git a/include/kolibriLib/UI/text/textlabel.hpp b/include/kolibriLib/UI/text/textlabel.hpp index 00c4e92..d09d3fa 100644 --- a/include/kolibriLib/UI/text/textlabel.hpp +++ b/include/kolibriLib/UI/text/textlabel.hpp @@ -27,9 +27,7 @@ namespace KolibriLib namespace text { /// @brief Текстовая метка - /// @note Простая текстовая метка, ничего особенного. - /// @note Возможно важные сведения: текст всегда отрисовывается в середине - /// @example example.cpp + /// @details Простая текстовая метка, ничего особенного. class TextLabel: public Txt, public UI::UIElement { public: diff --git a/include/kolibriLib/color.hpp b/include/kolibriLib/color.hpp index 8df526f..d5c2339 100644 --- a/include/kolibriLib/color.hpp +++ b/include/kolibriLib/color.hpp @@ -9,37 +9,65 @@ namespace KolibriLib /// @brief Набор функций для работы с цветом namespace Colors { - + /// @brief rgb цвет + /// @details крутая оболочка для rgb_t из sys/ksys.h struct rgb: public rgb_t { rgb(rgb_t val); rgb(ksys_color_t val); + /// @brief Конструктор + /// @param r красная состовляющаяя + /// @param g зелёная rgb(std::uint8_t r, std::uint8_t g, std::uint8_t b); + /// @brief конструктор по умолчанию rgb() = default; rgb(const rgb&) = default; - rgb& operator=(const rgb&) = default; + rgb& operator = (const rgb&) = default; + + bool operator == (const rgb& color) const; + bool operator != (const rgb& color) const; operator ksys_color_t() const; + /// @brief Получить цвет в формате BBGGRR + /// @return цвет в формате BBGGRR std::uint32_t BBGGRR() const; + + /// @brief Получить цвет в формате BBGGRR + /// @return цвет в формате BBGGRR + std::uint32_t RRGGBB() const; + /// @brief Получить цвет в формате BBGGRR00 + /// @return BBGGRR00 std::uint32_t BBGGRR00() const; + + /// @brief Получить цвет в формате RRGGBB00 + /// @return цвет в формате RRGGBB00 + std::uint32_t RRGGBB00() const; + + /// @brief Получить цвет в формате 00RRGGBB + /// @return цвет в формате RRGGBB00 + std::uint32_t ZeroRRGGBB() const; }; /// @brief Цвет union Color { - Color():val(0xFFFFFFFF){}; + /// @brief Конструктор по умолчанию + Color() = default; + + ///Color(const Color *a); + Color(const Color &a) = default; /// @brief Конструктор /// @param a Color(const ksys_color_t& a); - //Color(const Color *a); - Color(const Color &a) = default; + + /// @brief Конструктор Color(const rgb_t &color); /// @brief Конструктор @@ -70,6 +98,7 @@ namespace KolibriLib bool operator != (const Color& a) const; + // Поля ksys_color_t val; @@ -114,10 +143,10 @@ namespace KolibriLib /// @param grabBar /// @param grabBarButton /// @param grabText - /// @param workArea + /// @param workArea цвет рабочей области окна /// @param workButton /// @param workButtonText - /// @param workText + /// @param workText цвет текста /// @param workGraph ColorsTable ( Color frameArea, @@ -131,7 +160,7 @@ namespace KolibriLib Color workGraph ); - ColorsTable& operator=(const ColorsTable&) = default; + ColorsTable& operator = (const ColorsTable&) = default; }; /// @brief Таблица цветов по умолчанию diff --git a/include/kolibriLib/graphic/Readme.md b/include/kolibriLib/graphic/Readme.md deleted file mode 100644 index 6ab3e24..0000000 --- a/include/kolibriLib/graphic/Readme.md +++ /dev/null @@ -1 +0,0 @@ -# Работа с графикой \ No newline at end of file diff --git a/include/kolibriLib/graphic/background.hpp b/include/kolibriLib/graphic/background.hpp index 83bd70f..8f476aa 100644 --- a/include/kolibriLib/graphic/background.hpp +++ b/include/kolibriLib/graphic/background.hpp @@ -63,8 +63,8 @@ namespace KolibriLib _ksys_bg_redraw_bar(coord.operator ksys_pos_t(), (coord + size).operator ksys_pos_t()); } - /// @brief - /// @param + /// @brief установить размер фонового изображения. + /// @param size размеры фоного изображения inline void SetSize(const Size &size) { _ksys_bg_set_size ( @@ -76,13 +76,13 @@ namespace KolibriLib /// @brief Постовить точку на фоне /// @param coord координаты точки /// @param color цвет точки - inline void DrawPoint(const Coord coord, const Colors::Color &color = Globals::SystemColors.work_graph) + inline void DrawPoint(const Coord &coord, const Colors::rgb &color = Globals::SystemColors.work_graph) { _ksys_bg_put_pixel ( static_cast(coord.x), static_cast(coord.y), static_cast(GetSize().x), - color.operator ksys_color_t() + color.RRGGBB() ); } @@ -92,12 +92,13 @@ namespace KolibriLib /// @param rgb inline void DrawImage(const Coord coord, rgb_t (&rgb)[N]) { - _ksys_bg_put_bitmap( + _ksys_bg_put_bitmap ( rgb, sizeof(rgb_t) * N, static_cast(coord.x), static_cast(coord.y), - static_cast(GetSize().x)); + static_cast(GetSize().x) + ); } /// @brief Вывести изображение(rgb) @@ -106,12 +107,13 @@ namespace KolibriLib /// @param N длинна массива rgb inline void DrawImage(const Coord &coord, rgb_t *rgb, std::size_t N) { - _ksys_bg_put_bitmap( + _ksys_bg_put_bitmap ( rgb, sizeof(rgb_t) * N, static_cast(coord.x), static_cast(coord.y), - static_cast(GetSize().x)); + static_cast(GetSize().x) + ); } /// @brief Нарисовать линию на фоне diff --git a/include/kolibriLib/graphic/graphic.hpp b/include/kolibriLib/graphic/graphic.hpp index 49cacac..29c0733 100644 --- a/include/kolibriLib/graphic/graphic.hpp +++ b/include/kolibriLib/graphic/graphic.hpp @@ -20,9 +20,16 @@ namespace KolibriLib /// @param a точка первая /// @param b точка вторая /// @param color Цвет линии - inline void DrawLine(const Coord &coord, const Coord &b, const Colors::Color &color = Globals::SystemColors.work_graph) + /// @note Конечная точка также рисуется. + inline void DrawLine(const Coord &coord, const Coord &b, const Colors::rgb &color = Globals::SystemColors.work_graph) { - _ksys_draw_line(coord.x, coord.y, b.x, b.y, color.val); + _ksys_draw_line ( + coord.x, + coord.y, + b.x, + b.y, + color.ZeroRRGGBB() + ); } /// @brief Нарисовать линию @@ -30,26 +37,27 @@ namespace KolibriLib /// @param lenght Длина линии /// @param angle Угол /// @param color Цвет линии - inline void DrawLine(const Coord &coord, unsigned lenght, unsigned short angle, const Colors::Color &color = Globals::SystemColors.work_graph) + /// @note Конечная точка также рисуется. + inline void DrawLine(const Coord &coord, unsigned lenght, unsigned short angle, const Colors::rgb &color = Globals::SystemColors.work_graph) { _ksys_draw_line ( coord.x, coord.y, coord.x + lround(lenght * std::cos(angle)), coord.y + lround(lenght * std::sin(angle)), - color.operator ksys_color_t() + color.ZeroRRGGBB() ); } /// @brief Закрасить пиксель точку /// @param position координаты /// @param color Цвет - inline void DrawPixel(const Coord &position, const Colors::Color &color = Globals::SystemColors.work_graph) + inline void DrawPixel(const Coord &position, const Colors::rgb &color = Globals::SystemColors.work_graph) { _ksys_draw_pixel ( static_cast(position.x), static_cast(position.y), - color.operator ksys_color_t() + color.ZeroRRGGBB() ); } @@ -69,29 +77,28 @@ namespace KolibriLib { asm_inline ( "int $0x40" - :: "a"(13), - "b"( (position.x << 16) + size.x ), - "c"( (position.y << 16) + size.y ), - "d"(color.BBGGRR00()) + :: "a"(13), + "b"( X_Y(position.x, size.x) ), + "c"( X_Y(position.y, size.y) ), + "d"(color.RRGGBB()) ); } - /// @brief Нарисовать закрашенный прямоугольник + /// @brief Нарисовать закрашенный прямоугольник градиентной заливки /// @param position позиция левого верхнего угла /// @param size Размеры /// @param color Цвет inline void DrawRectangleGradient(Coord position, Size size, Colors::rgb color = Globals::SystemColors.work_graph) { - Colors::Color ret = color; - ret._a = 0x80; + std::uint32_t val = color.ZeroRRGGBB(); + val |= 0x80000000; asm_inline ( "int $0x40" - : - : "a"(13), - "b"((position.x << 16) + size.x), - "c"((position.y << 16) + size.y), - "d"(ret.val) + :: "a"(13), + "b"( X_Y(position.x, size.x) ), + "c"( X_Y(position.y, size.y) ), + "d"(val) ); } @@ -133,8 +140,8 @@ namespace KolibriLib } /// @brief прочитать цвет точки - /// @param Point - /// @return + /// @param Point координаты точки + /// @return Цвет точки на экране inline Colors::Color ReadPoint(const Coord Point) { ksys_color_t c; @@ -143,7 +150,7 @@ namespace KolibriLib "int $0x40" : "=a"(c) : "a"(35), - "b"((Point.x * GetScreenSize().x + Point.y))); + "b"(Point.x * GetScreenSize().x + Point.y)); return Colors::Color(c); } @@ -151,7 +158,7 @@ namespace KolibriLib /// @brief Получить область /// @param coord /// @param size - /// @return + /// @return указатель на массив /// @note Не забудьте delete[] inline rgb_t* ReadArea(const Coord &coord, const Size &size) { @@ -169,7 +176,7 @@ namespace KolibriLib } /// @brief Вывести изображение - /// @param bitmap изображение + /// @param bitmap изображение в формате BBGGRR /// @param coord координаты /// @param size размер изображния inline void DrawBitmap(rgb_t *bitmap, const Coord &coord, const Size &size) @@ -178,7 +185,6 @@ namespace KolibriLib } } // namespace graphic - } // namespace KolibriLib diff --git a/include/kolibriLib/graphic/screen.hpp b/include/kolibriLib/graphic/screen.hpp index 7a87d7f..d512077 100644 --- a/include/kolibriLib/graphic/screen.hpp +++ b/include/kolibriLib/graphic/screen.hpp @@ -21,15 +21,16 @@ namespace KolibriLib inline Thread::Slot ScreenPointAffiliation(Coord POINT) { Thread::Slot s; + asm_inline ( "int $0x40" : "=a"(s) : "a"(34), "b"(POINT.x), "c"(POINT.y) ); + return s; - } - -} + } +} // namespace KolibriLib -#endif // __SCREEN_H__ \ No newline at end of file +#endif // __SCREEN_HPP__ \ No newline at end of file diff --git a/include/kolibriLib/input/clipboard.hpp b/include/kolibriLib/input/clipboard.hpp index e90a834..f241468 100644 --- a/include/kolibriLib/input/clipboard.hpp +++ b/include/kolibriLib/input/clipboard.hpp @@ -26,14 +26,14 @@ namespace KolibriLib struct clipboard_struct { - typedef enum Encodings + enum class Encoding { UTF8 = 0, CP866 = 1, CP1251 = 2 - } Encoding; + }; - typedef enum Types + enum class Type : std::uint32_t { /// @brief Текст Text = 0, @@ -46,31 +46,32 @@ namespace KolibriLib /// @brief Путь Filepath = 3 - } Type; + }; + + // Поля /// @brief Размер структуры - uint32_t size; + std::uint32_t size; /// @brief Тип структуры - uint32_t type; - + Type type; union { /// @brief Кодировка (если текст) - uint32_t encoding; + std::uint32_t encoding; /// @brief изображение struct { /// @brief Ширина изображения - uint32_t X; + std::uint32_t X; /// @brief Высота изображения - uint32_t Y; + std::uint32_t Y; /// @brief Глубина цвета (8, 16, 24, 32, 48, 64) - uint32_t depht; + std::uint32_t depht; /// @brief Указатель на палитру (смещение от начала файла) /// @details Если палитры нет то значение 0 @@ -78,29 +79,33 @@ namespace KolibriLib /// @brief Размер области палитры, максимальное значение 256*4=1024байт. /// @details Если палитры нет то значение 0 - uint32_t palleteSize; + std::uint32_t palleteSize; /// @brief Указатель на данные пикселей для R, G, B. rgb_t* image; /// @brief Размер области данных для пикселей - uint32_t imageSize; + std::uint32_t imageSize; }; struct { - uint16_t res; + std::uint16_t res; char filepath[0]; }; }; }; + /// @brief Буффер обмена class clipboard { public: clipboard() = default; + /// @brief Конструктор + /// @param text текст + /// @param filepath текст это файловый путь? clipboard(const std::string& text, bool filepath = false); clipboard(const UI::Images::img &image); @@ -108,7 +113,7 @@ namespace KolibriLib /// @brief Конструктор, для любых данных /// @tparam T тип данных которй будет скопирован /// @param data перемнная что будет скопированна - /// @note Не пихайте лучше сюда типы имеющи указатели, потому что будт скопирован только указатель + /// @note Не пихайте лучше сюда типы имеющи указатели, пsотому что будт скопирован только указатель template clipboard(T data); @@ -121,6 +126,8 @@ namespace KolibriLib /// @details Просто возращает указатель operator clipboard_struct*() const; + // Поля + clipboard_struct* _struct = nullptr; }; diff --git a/include/kolibriLib/input/keyboard.hpp b/include/kolibriLib/input/keyboard.hpp index d4fcbae..a674c4d 100644 --- a/include/kolibriLib/input/keyboard.hpp +++ b/include/kolibriLib/input/keyboard.hpp @@ -131,7 +131,7 @@ namespace KolibriLib /// @brief Запятая NUMPAD_COMMA = KSYS_SCANCODE_NUMPAD_COMMA, - BACKSPACE = static_cast(KSYS_SCANCODE_BACKSPACE) + BACKSPACE = KSYS_SCANCODE_BACKSPACE }; /// @brief Сканкод @@ -155,7 +155,7 @@ namespace KolibriLib }; /// @brief Ввод с клавиутры - /// @details В зависимости от режима возваржаются ASCII или Сканкоды + /// @details В зависимости от режима возваржаются ASCII или Сканкоды. /// По умолчанию ASCII /// Сканкоды возвращаются непосредственно клавиатурой и фиксированы. /// ASCII-коды получаются с использованием таблиц преобразования, которые можно установить @@ -168,6 +168,10 @@ namespace KolibriLib /// @details он просто есть Input(uint8_t i = 0) : ASCII(static_cast(i)) {} + Input& operator=(const Input&) = default; + + /// @brief Получить значение + operator std::uint8_t() const; operator char() const; operator Scancode() const; }; diff --git a/include/kolibriLib/sound.hpp b/include/kolibriLib/sound.hpp index ce8a1fa..fa91e06 100644 --- a/include/kolibriLib/sound.hpp +++ b/include/kolibriLib/sound.hpp @@ -9,6 +9,7 @@ namespace KolibriLib { + /// @brief Звук namespace Sound { /// @brief Получить состояние спикера(Вкл/выкл) diff --git a/include/kolibriLib/window/window.hpp b/include/kolibriLib/window/window.hpp index dc236a0..208e5c5 100644 --- a/include/kolibriLib/window/window.hpp +++ b/include/kolibriLib/window/window.hpp @@ -19,8 +19,6 @@ namespace KolibriLib { - - /// \brief Работа с окном namespace window { /// @brief просто класс полями для Window @@ -31,14 +29,19 @@ namespace KolibriLib Window_t(const std::string &Title, const Colors::ColorsTable &colors = Globals::SystemColors, WindowStyle style = WindowStyle::withSkin, WindowSettings WindowSettings = WindowSettings::RelativeCoord | WindowSettings::WindowHaveTitle); + /// @brief Изменить стиль окна + /// @param NewStyle новый стиль окна void SetStyle(WindowStyle NewStyle); + /// @brief Получить текущий стиль окна + /// @return Текущий стиль окна WindowStyle GetStyle() const; /// @brief /// @param NewSettgins void SetSettings(std::uint16_t NewSettgins); + std::string GetTitle() const; /// @brief Получить прошлый ивент @@ -57,15 +60,18 @@ namespace KolibriLib /// @brief Цвета окна Colors::ColorsTable _colors; - /// @brief + /// @brief Закешированные координаты окна + /// @details Зачем? а потому что для получения размера окна нужно вызывать Thread::GetThreadInfo() который вызывает -ое системное прерывание, что уже не очень(каждый раз теребонькать прерывания), кароч GetAbsoluteCoord и GetAbsoluteSize исползуются при рендере, элементов gui многа, и получается каждый раз теребонькать прерывания для рендера окна будет капец долгим mutable Coord _coord = DefaultWindowCoord; + /// @brief Закешированный размер окна + /// @details с.м. Window_t::_coord mutable Size _size = DefaultWindowSize; /// @brief Последняя нажатая кнопка UI::buttons::ButtonID _PressedButton = UI::buttons::ButtonIDNotSet; - /// @brief + /// @brief прошлый ивент OS::Event _lastEvent; /// @brief Стиль окна @@ -75,6 +81,7 @@ namespace KolibriLib WindowSettings _settings = WindowSettings::WindowHaveTitle; /// @brief Прозрачность окна + /// @warning Будет реализованно в будующем uint8_t _Transparency = 0; /// @brief Окно перерисовывается сейчас (да/нет) @@ -86,8 +93,6 @@ namespace KolibriLib /// @brief Класс для работы с окном /// @paragraph По простому: Окно остаётся привязаным к потоку, в которм бы вызван конструктор. Если вызывать методы из других потоков, то вести они себя будут неадекватно - /// @example example.cpp - /// @example checkboxExample.cpp class Window: public Window_t { public: @@ -125,6 +130,8 @@ namespace KolibriLib /// @param NewCoord void SetCoord(const UDim &NewCoord) override; + /// @brief + /// @param NewSize void SetSize(const Size &NewSize) override; /// @brief diff --git a/include/kolibriLib/window/windowBase.hpp b/include/kolibriLib/window/windowBase.hpp index 1f4bd77..418c297 100644 --- a/include/kolibriLib/window/windowBase.hpp +++ b/include/kolibriLib/window/windowBase.hpp @@ -22,7 +22,6 @@ namespace KolibriLib /// @brief Работа с окном namespace window { - /// @brief Размер окна поумолчанию const Size DefaultWindowSize = {600, 400}; @@ -52,11 +51,11 @@ namespace KolibriLib asm_inline( "int $0x40" :: - "a"(0), + "a"(0), "b"((coord.x << 16) | ((size.x - 1) & 0xFFFF)), "c"((coord.y << 16) | ((size.y - 1) & 0xFFFF)), - "d"( ((static_cast(settings) << 28) | (static_cast(style) << 24)) | (WorkColor.operator ksys_color_t() & 0xFFFFFF)), - "S"( (static_cast(settings) >> 8) | (TitleColor.operator ksys_color_t() & 0xFFFFFF)), + "d"( ((static_cast(settings) << 28) | (static_cast(style) << 24)) | (WorkColor.operator ksys_color_t() & 0xFFFFFF)), + "S"( (static_cast(settings) >> 8) | (TitleColor.operator ksys_color_t() & 0xFFFFFF)), "D"(title.c_str()) : "memory"); } diff --git a/src/KolibriLib/checkbox.cpp b/src/KolibriLib/checkbox.cpp index 2ba1015..569dcac 100644 --- a/src/KolibriLib/checkbox.cpp +++ b/src/KolibriLib/checkbox.cpp @@ -70,13 +70,13 @@ void CheckBox::Render() const switch (_style) { case CheckBox::style::Default: - graphic::DrawRectangleFill(absoluteCoord, - absoluteSize, + graphic::DrawRectangleFill(absoluteCoord + GetMargin(), + absoluteSize - (GetMargin() * 2), _BorderColor); break; case CheckBox::style::Circle: graphic::DrawCircle(absoluteCoord + point(absoluteSize.x / 2, absoluteSize.y / 2), - (static_cast(absoluteSize.x) / 2U) - GetMargin(), + static_cast(absoluteSize.x / 2) - GetMargin(), _BorderColor); break; case CheckBox::style::Smoth: diff --git a/src/KolibriLib/clipboard.cpp b/src/KolibriLib/clipboard.cpp index 8ec6959..86509b2 100644 --- a/src/KolibriLib/clipboard.cpp +++ b/src/KolibriLib/clipboard.cpp @@ -40,8 +40,8 @@ KolibriLib::Clipboard::clipboard::clipboard(const UI::Images::img &image) const std::size_t size = 4 + 4 + (4 * 4) + sizeof(void*) + sizeof(rgb_t*); _struct = (clipboard_struct *)malloc(size); - _struct->X = static_cast(image.GetSize().x); - _struct->Y = static_cast(image.GetSize().y); + _struct->X = static_cast(image.GetSize().x); + _struct->Y = static_cast(image.GetSize().y); _struct->size = size; _struct->type = clipboard_struct::Type::Image; _struct->depht = image.GetBuff()->color_bit; diff --git a/src/KolibriLib/color.cpp b/src/KolibriLib/color.cpp index 3710521..f0e169b 100644 --- a/src/KolibriLib/color.cpp +++ b/src/KolibriLib/color.cpp @@ -31,12 +31,27 @@ KolibriLib::Colors::rgb::operator ksys_color_t() const std::uint32_t KolibriLib::Colors::rgb::BBGGRR() const { - return RGBtoINT(*this); + return ((blue << 16) | (green << 8) | red ); } std::uint32_t KolibriLib::Colors::rgb::BBGGRR00() const { - return ((blue << 24) + (green << 16) + (red << 8)) & 0xFFFFFF00; + return ((blue << 24) | (green << 16) | (red << 8)) & 0xFFFFFF00; +} + +std::uint32_t KolibriLib::Colors::rgb::RRGGBB() const +{ + return ((red << 16) | (green << 8) | blue ); +} + +std::uint32_t KolibriLib::Colors::rgb::RRGGBB00() const +{ + return ((red << 24) | (green << 16) | (blue << 8)) & 0xFFFFFF00; +} + +std::uint32_t KolibriLib::Colors::rgb::ZeroRRGGBB() const +{ + return ((red << 16) | (green << 8) | blue ) | 0; } KolibriLib::Colors::Color::Color(const ksys_color_t &a) diff --git a/src/KolibriLib/keyboard.cpp b/src/KolibriLib/keyboard.cpp index e064712..9bda7c9 100644 --- a/src/KolibriLib/keyboard.cpp +++ b/src/KolibriLib/keyboard.cpp @@ -96,6 +96,11 @@ Input::operator char() const } } +Input::operator std::uint8_t() const +{ + return ASCII; +} + Input::operator Scancode() const { if(GetInputMode() == InputMode::ASCII) diff --git a/src/Readme.md b/src/Readme.md deleted file mode 100644 index 94942a7..0000000 --- a/src/Readme.md +++ /dev/null @@ -1 +0,0 @@ -# Папка с .cpp и .c файлами \ No newline at end of file