simple main loop for testing
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,6 +3,7 @@
|
|||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
result
|
result
|
||||||
|
compile_commands.json
|
||||||
|
|
||||||
build/
|
build/
|
||||||
build-wasm/
|
build-wasm/
|
||||||
|
|||||||
@@ -32,11 +32,9 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
|||||||
|
|
||||||
set(ASSET_DIR ${CMAKE_SOURCE_DIR}/assets)
|
set(ASSET_DIR ${CMAKE_SOURCE_DIR}/assets)
|
||||||
|
|
||||||
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
install(TARGETS ${PROJECT_NAME} DESTINATION bin)
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
||||||
${ASSET_DIR} $<TARGET_FILE_DIR:${PROJECT_NAME}>/assets
|
|
||||||
COMMENT "Copying assets to build output"
|
|
||||||
)
|
|
||||||
|
|
||||||
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
|
|
||||||
install(DIRECTORY ${ASSET_DIR} DESTINATION bin)
|
install(DIRECTORY ${ASSET_DIR} DESTINATION bin)
|
||||||
|
|
||||||
|
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||||
|
ASSETS_DIR="${CMAKE_SOURCE_DIR}/bin/assets"
|
||||||
|
)
|
||||||
|
|||||||
267
assets/main.rcss
Normal file
267
assets/main.rcss
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
RCSS User Agent Defaults (Plain HTML Style)
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/* Core Application Window Foundation */
|
||||||
|
body {
|
||||||
|
display: block;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
font-family: "rmlui-debugger-font";
|
||||||
|
font-size: 16px;
|
||||||
|
background-color: #ffffff00;
|
||||||
|
color: #ffffff;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Generic Structural Layout Defaults */
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
div, section, article, header, footer, main, nav, aside {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
span, em, strong, a {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Typographic Defaults */
|
||||||
|
p {
|
||||||
|
display: block;
|
||||||
|
margin: 1em 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
display: block;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 0.83em 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 { font-size: 2em; }
|
||||||
|
h2 { font-size: 1.5em; }
|
||||||
|
h3 { font-size: 1.17em; }
|
||||||
|
h4 { font-size: 1em; }
|
||||||
|
h5 { font-size: 0.83em; }
|
||||||
|
h6 { font-size: 0.67em; }
|
||||||
|
|
||||||
|
em {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #0000ee;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #551a8b;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
display: block;
|
||||||
|
margin: 1em 40px;
|
||||||
|
padding-left: 10px;
|
||||||
|
border-left: 2px #cccccc;
|
||||||
|
color: #555555;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
font-family: "rmlui-debugger-font";
|
||||||
|
background-color: #606060;
|
||||||
|
color: #000000;
|
||||||
|
padding: 3px;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
display: block;
|
||||||
|
white-space: pre;
|
||||||
|
margin: 1em 0px;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lists */
|
||||||
|
ul, ol {
|
||||||
|
display: block;
|
||||||
|
margin: 1em 0px;
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Tables
|
||||||
|
========================================================================== */
|
||||||
|
table {
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr {
|
||||||
|
display: table-row;
|
||||||
|
}
|
||||||
|
|
||||||
|
td, th {
|
||||||
|
display: table-cell;
|
||||||
|
padding: 4px 8px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: #eaeaea;
|
||||||
|
}
|
||||||
|
|
||||||
|
col {
|
||||||
|
display: table-column;
|
||||||
|
}
|
||||||
|
|
||||||
|
colgroup {
|
||||||
|
display: table-column-group;
|
||||||
|
}
|
||||||
|
|
||||||
|
thead, tbody, tfoot {
|
||||||
|
display: table-row-group;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Form Inputs & Interactive UI Components
|
||||||
|
========================================================================== */
|
||||||
|
button, input, select, textarea {
|
||||||
|
display: inline-block;
|
||||||
|
font-family: "rmlui-debugger-font";
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 2px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Traditional gray bevel button style */
|
||||||
|
button, input[type="submit"], input[type="button"] {
|
||||||
|
padding: 4px 12px;
|
||||||
|
min-width: 40px;
|
||||||
|
background-color: #e1e1e1;
|
||||||
|
color: #000000;
|
||||||
|
border: 1px #767676;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover, input[type="submit"]:hover, input[type="button"]:hover {
|
||||||
|
background-color: #d0d0d0;
|
||||||
|
border: 1px #4f4f4f;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:active, input[type="submit"]:active, input[type="button"]:active {
|
||||||
|
background-color: #b5b5b5;
|
||||||
|
border: 1px #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Standard text field styling */
|
||||||
|
input[type="text"], input[type="password"], textarea {
|
||||||
|
padding: 4px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: #000000;
|
||||||
|
border: 1px #767676;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"]:focus, input[type="password"]:focus, textarea:focus {
|
||||||
|
border: 1px #005aff;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
display: block;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
width: 300px;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Select Box & Dropdowns */
|
||||||
|
select {
|
||||||
|
padding: 4px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: #000000;
|
||||||
|
border: 1px #767676;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
RmlUi Specific Elements (Tabsets, Progress Bars, etc.)
|
||||||
|
========================================================================== */
|
||||||
|
tabset {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
tabset tabs {
|
||||||
|
display: block;
|
||||||
|
border-bottom: 1px #cccccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Simple default layout style for built-in tabs */
|
||||||
|
tab {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 6px 12px;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
border: 1px #cccccc;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tab:selected {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-bottom: 1px #ffffff; /* Overlap the bottom border line */
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
panel {
|
||||||
|
display: block;
|
||||||
|
padding: 10px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Standard HTML5 / RmlUi Progress Bar Fallback */
|
||||||
|
progress {
|
||||||
|
display: inline-block;
|
||||||
|
width: 160px;
|
||||||
|
height: 20px;
|
||||||
|
background-color: #e6e6e6;
|
||||||
|
border: 1px #b0b0b0;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress-value {
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #0078d7; /* Classic Windows Blue fill */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Utility & Modern Layout Helpers
|
||||||
|
========================================================================== */
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-row {
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-col {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.justify-center {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-center {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
9
assets/main.rml
Normal file
9
assets/main.rml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<rml>
|
||||||
|
<head>
|
||||||
|
<title>RmlUi Raylib</title>
|
||||||
|
<link type="text/rcss" href="main.rcss" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Hello from RmlUi</h1>
|
||||||
|
</body>
|
||||||
|
</rml>
|
||||||
55
src/main.cpp
55
src/main.cpp
@@ -0,0 +1,55 @@
|
|||||||
|
#include <RmlUi/Core/Core.h>
|
||||||
|
#include <RmlUi/Core/Math.h>
|
||||||
|
#include <RmlUi/Debugger/Debugger.h>
|
||||||
|
#include <raylib.h>
|
||||||
|
#include <RmlUi/Core.h>
|
||||||
|
#include <RmlUi/Debugger.h>
|
||||||
|
#include <RmlUi/Core/Context.h>
|
||||||
|
|
||||||
|
#include "backend/RaylibRenderInterface.h"
|
||||||
|
#include "backend/RaylibSystemInterface.h"
|
||||||
|
#include "backend/RaylibInput.h"
|
||||||
|
|
||||||
|
static RaylibSystemInterface system_interface;
|
||||||
|
static RaylibRenderInterface render_interface;
|
||||||
|
static Rml::Context *ctx;
|
||||||
|
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
SetConfigFlags(FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE);
|
||||||
|
InitWindow(600, 800, "Raylib + RmlUi");
|
||||||
|
SetTargetFPS(60);
|
||||||
|
|
||||||
|
Rml::SetSystemInterface(&system_interface);
|
||||||
|
Rml::SetRenderInterface(&render_interface);
|
||||||
|
Rml::Initialise();
|
||||||
|
|
||||||
|
ctx = Rml::CreateContext("main", Rml::Vector2i(600, 800));
|
||||||
|
Rml::Debugger::Initialise(ctx);
|
||||||
|
|
||||||
|
auto doc = ctx->LoadDocument("assets/main.rml");
|
||||||
|
doc->Show();
|
||||||
|
|
||||||
|
while (!WindowShouldClose()) {
|
||||||
|
|
||||||
|
if (IsWindowResized()) {
|
||||||
|
ctx->SetDimensions(Rml::Vector2i(GetScreenWidth(), GetScreenHeight()));
|
||||||
|
}
|
||||||
|
|
||||||
|
ForwardInputToRml(ctx);
|
||||||
|
ctx->Update();
|
||||||
|
|
||||||
|
|
||||||
|
BeginDrawing();
|
||||||
|
ClearBackground(BLACK);
|
||||||
|
DrawFPS(10, 10);
|
||||||
|
DrawText("Hello!", GetScreenWidth()/2, GetScreenHeight()/2, 10, RAYWHITE);
|
||||||
|
ctx->Render();
|
||||||
|
EndDrawing();
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseWindow();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user