C++ GUI, 2D Graphics
다른 라이브러리의 인터페이스를 강제시켜서 로직 코드의 변경을 최대한 줄일 수 있게 해주는 라이브러리.
- CodeAdapter : 강제시킨 인터페이스가 될 라이브러리.
- CodeAdapterSFML : SFML 라이브러리의 인터페이스를 강제시킨 예제.
- TestLab : 테스트 및 데모 프로젝트.
- 2D Graphics
- GUI
- Scene System
- Audio
- Add more GUI controls.
- Upgrade demo project.
- Network
- Audio
- System time and date
- File stream
/*
* main.cpp
*/
#include <CodeAdapter\EasyCA.h>
#include <CodeAdapterSFML\SFMLFactory.h>
#include "HelloScene.h"
int main()
{
initializeCA<SFMLFactory>();
auto window = caFactory->createWindow();
window->create(caDraw::Size(1024, 768), caUtil::String("Hello, World!"), false);
window->setFramerate(60);
auto sceneManager = canew<caUtil::SceneManager>();
sceneManager->replaceScene(*window, canew<HelloScene>());
window->setSceneManager(sceneManager);
while (window->isRunning())
{
caTouch->update();
caKeyboard->update(*window);
if (sceneManager->hasScene() == false
|| caKeyboard->isKeyDown(caSys::Keys::Escape))
{
window->exit();
}
window->update();
window->draw(caDraw::Color(230, 230, 230));
}
return 0;
}
/*
* HelloScene.h
*/
#ifndef __HELLO_SCENE_H__
#define __HELLO_SCENE_H__
#include "CodeAdapter\EasyCA.h"
class HelloScene : public caUtil::Scene
{
public:
HelloScene();
virtual ~HelloScene();
protected:
caDraw::PanelPtr m_panel;
caDraw::FontPtr m_font;
caDraw::FontPtr m_font2;
caDraw::FontPtr m_font3;
caDraw::TexturePtr m_texLogo;
caDraw::DrawableTexturePtr m_sprLogo;
caUI::LabelPtr m_logo;
caUI::LabelPtr m_logo2;
caUI::LabelPtr m_logo3;
caUI::ButtonPtr m_buttonNext;
caUI::VerticalScrollBarPtr m_scrollOpacity;
public:
virtual void onInitialize(caDraw::Window& owner) override;
virtual void onRelease() override;
virtual void onUpdate(caDraw::Window& owner) override;
virtual void onDrawBack(caDraw::Graphics& g) override;
virtual void onDrawFront(caDraw::Graphics& g) override;
};
#endif
/*
* HelloScene.cpp
*/
#include "HelloScene.h"
HelloScene::HelloScene()
{
}
HelloScene::~HelloScene()
{
}
//###########################################################################
void HelloScene::onInitialize(caDraw::Window& owner)
{
auto winSize = owner.getSize();
m_panel = caFactory->createPanel();
m_panel->transform.position = { 0, 0 };
m_panel->size = static_cast<caDraw::SizeF>(winSize);
m_font = caFactory->createFont();
m_font->loadFromFile("NanumGothic.ttf");
m_font->setCharacterSize(64);
m_font->setStyle(caDraw::FontStyles::Bold);
m_font2 = caFactory->createFont();
m_font2->loadFromFile("NanumGothic.ttf");
m_font2->setCharacterSize(64);
m_font2->setStyle(caDraw::FontStyles::Bold | caDraw::FontStyles::Underline);
m_font3 = caFactory->createFont();
m_font3->loadFromFile("NanumGothic.ttf");
m_font3->setCharacterSize(64);
m_font3->setStyle(caDraw::FontStyles::StrikeOut | caDraw::FontStyles::Italic);
m_texLogo = caFactory->createTexture();
m_texLogo->loadFromFile("neurowhai.png");
m_sprLogo = canew<caDraw::DrawableTexture>();
m_sprLogo->setTexture(m_texLogo);
m_sprLogo->location.setLocation(static_cast<f32>(winSize.width / 2 - 555),
static_cast<f32>(winSize.height / 2 - 555));
m_logo = canew<caUI::Label>();
m_logo->setFont(m_font);
m_logo->setText(L"NeuroWhAI");
m_logo->setTextMargin({ 8, 0 });
m_logo->setBackColor(caDraw::Color::Transparent);
m_logo->setPosition({ 128, 164 });
m_logo->setSize({ 330, 128 });
m_logo2 = canew<caUI::Label>(*m_logo);
m_logo2->setFont(m_font2);
m_logo2->setPosition({ 128, 164 + 70 });
m_logo3 = canew<caUI::Label>(*m_logo);
m_logo3->setFont(m_font3);
m_logo3->setPosition({ 128, 164 + 70 * 2 });
m_buttonNext = canew<caUI::Button>();
m_buttonNext->setFont(m_font);
m_buttonNext->setText(L"Next page");
m_buttonNext->setBackColor(caDraw::Color::Gray);
m_buttonNext->setPosition({ static_cast<f32>(winSize.width / 2 - 165), 600 });
m_buttonNext->setSize({ 330, 100 });
m_buttonNext->WhenClick = [me = this](const caUI::EventArgs& args)
{
me->reserveNextScene(nullptr);
};
m_scrollOpacity = canew<caUI::VerticalScrollBar>();
m_scrollOpacity->setPosition({ 0, 0 });
m_scrollOpacity->setSize({ 24.0f, static_cast<f32>(winSize.height) });
m_scrollOpacity->setMaxValue(255);
m_scrollOpacity->setValue(255);
m_scrollOpacity->setMinBarLength(64);
m_scrollOpacity->WhenValueChanged =
[&logo = m_sprLogo](const caUI::ValueFEventArgs& args)
{
logo->color.a = static_cast<i32>(args.value);
};
m_panel->addDrawable(m_sprLogo);
m_panel->addControl(m_logo);
m_panel->addControl(m_logo2);
m_panel->addControl(m_logo3);
m_panel->addControl(m_scrollOpacity);
addPanel(m_panel);
}
void HelloScene::onRelease()
{
}
void HelloScene::onUpdate(caDraw::Window& owner)
{
}
void HelloScene::onDrawBack(caDraw::Graphics& g)
{
}
void HelloScene::onDrawFront(caDraw::Graphics& g)
{
}