/*
* This source file is part of RmlUi, the HTML/CSS Interface Middleware
*
* For the latest information, see http://github.com/mikke89/RmlUi
*
* Copyright (c) 2008-2010 Nuno Silva
* Copyright (c) 2019 The RmlUi Team, and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*/
#include
#include
#include
#include
#include
#include
#include "SystemInterfaceSDL2.h"
#include "RenderInterfaceSDL2.h"
#ifdef RMLUI_PLATFORM_WIN32
#include
#endif
#include
int main(int /*argc*/, char** /*argv*/)
{
#ifdef RMLUI_PLATFORM_WIN32
AllocConsole();
#endif
int window_width = 1024;
int window_height = 768;
SDL_Init( SDL_INIT_VIDEO );
SDL_Window * screen = SDL_CreateWindow("RmlUi SDL2 with SDL_Renderer test", 20, 20, window_width, window_height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
/*
* Force a specific back-end
SDL_SetHint(SDL_HINT_RENDER_BATCHING, "1");
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software");
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengles2");
*/
SDL_Renderer * renderer = SDL_CreateRenderer(screen, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
RmlUiSDL2Renderer Renderer(renderer, screen);
RmlUiSDL2SystemInterface SystemInterface;
Rml::String root = Shell::FindSamplesRoot();
ShellFileInterface FileInterface(root);
Rml::SetFileInterface(&FileInterface);
Rml::SetRenderInterface(&Renderer);
Rml::SetSystemInterface(&SystemInterface);
if (!Rml::Initialise())
return 1;
struct FontFace {
Rml::String filename;
bool fallback_face;
};
FontFace font_faces[] = {
{ "LatoLatin-Regular.ttf", false },
{ "LatoLatin-Italic.ttf", false },
{ "LatoLatin-Bold.ttf", false },
{ "LatoLatin-BoldItalic.ttf", false },
{ "NotoEmoji-Regular.ttf", true },
};
for (const FontFace& face : font_faces)
{
Rml::LoadFontFace("assets/" + face.filename, face.fallback_face);
}
Rml::Context* Context = Rml::CreateContext("default",
Rml::Vector2i(window_width, window_height));
Rml::Debugger::Initialise(Context);
Rml::ElementDocument* Document = Context->LoadDocument("assets/demo.rml");
if (Document)
{
Document->Show();
fprintf(stdout, "\nDocument loaded");
}
else
{
fprintf(stdout, "\nDocument is nullptr");
}
bool done = false;
while (!done)
{
SDL_Event event;
SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
SDL_RenderClear(renderer);
Context->Render();
SDL_RenderPresent(renderer);
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
done = true;
break;
case SDL_MOUSEMOTION:
Context->ProcessMouseMove(event.motion.x, event.motion.y, SystemInterface.GetKeyModifiers());
break;
case SDL_MOUSEBUTTONDOWN:
Context->ProcessMouseButtonDown(SystemInterface.TranslateMouseButton(event.button.button), SystemInterface.GetKeyModifiers());
break;
case SDL_MOUSEBUTTONUP:
Context->ProcessMouseButtonUp(SystemInterface.TranslateMouseButton(event.button.button), SystemInterface.GetKeyModifiers());
break;
case SDL_MOUSEWHEEL:
Context->ProcessMouseWheel(float(event.wheel.y), SystemInterface.GetKeyModifiers());
break;
case SDL_KEYDOWN:
{
// Intercept F8 key stroke to toggle RmlUi's visual debugger tool
if (event.key.keysym.sym == SDLK_F8)
{
Rml::Debugger::SetVisible(!Rml::Debugger::IsVisible());
break;
}
Context->ProcessKeyDown(SystemInterface.TranslateKey(event.key.keysym.sym), SystemInterface.GetKeyModifiers());
break;
}
default:
break;
}
}
Context->Update();
}
Rml::Shutdown();
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(screen);
SDL_Quit();
return 0;
}