srctree

Robin Linden parent 9443d041 da492d7e
render: Stop using the gfx::Painter abstraction

inlinesplit
browser/gui/app.cpp added: 38, removed: 50, total 0
@@ -8,7 +8,6 @@
#include "dom/dom.h"
#include "gfx/color.h"
#include "gfx/opengl_canvas.h"
#include "gfx/painter.h"
#include "render/render.h"
#include "uri/uri.h"
 
@@ -539,11 +538,10 @@ void App::render_layout() {
return;
}
 
gfx::Painter painter(*canvas_);
if (render_debug_) {
render::debug::render_layout_depth(painter, *layout);
render::debug::render_layout_depth(*canvas_, *layout);
} else {
render::render_layout(painter, *layout);
render::render_layout(*canvas_, *layout);
}
}
 
 
render/render.cpp added: 38, removed: 50, total 0
@@ -69,7 +69,7 @@ gfx::FontStyle to_gfx(std::vector<style::TextDecorationLine> const &decorations)
return style;
}
 
void render_text(gfx::Painter &painter, layout::LayoutBox const &layout, dom::Text const &text) {
void render_text(gfx::ICanvas &painter, layout::LayoutBox const &layout, dom::Text const &text) {
auto font_families = layout.get_property<css::PropertyId::FontFamily>();
auto fonts = [&font_families] {
std::vector<gfx::Font> fs;
@@ -84,7 +84,7 @@ void render_text(gfx::Painter &painter, layout::LayoutBox const &layout, dom::Te
painter.draw_text(layout.dimensions.content.position(), text.text, fonts, font_size, style, color);
}
 
void render_element(gfx::Painter &painter, layout::LayoutBox const &layout) {
void render_element(gfx::ICanvas &painter, layout::LayoutBox const &layout) {
auto background_color = layout.get_property<css::PropertyId::BackgroundColor>();
auto const &border_size = layout.dimensions.border;
 
@@ -115,7 +115,7 @@ void render_element(gfx::Painter &painter, layout::LayoutBox const &layout) {
}
}
 
void do_render(gfx::Painter &painter, layout::LayoutBox const &layout) {
void do_render(gfx::ICanvas &painter, layout::LayoutBox const &layout) {
if (auto const *text = try_get_text(layout)) {
render_text(painter, layout, *text);
} else {
@@ -129,7 +129,7 @@ bool should_render(layout::LayoutBox const &layout) {
 
} // namespace
 
void render_layout(gfx::Painter &painter, layout::LayoutBox const &layout) {
void render_layout(gfx::ICanvas &painter, layout::LayoutBox const &layout) {
if (should_render(layout)) {
do_render(painter, layout);
}
@@ -141,7 +141,7 @@ void render_layout(gfx::Painter &painter, layout::LayoutBox const &layout) {
 
namespace debug {
 
void render_layout_depth(gfx::Painter &painter, layout::LayoutBox const &layout) {
void render_layout_depth(gfx::ICanvas &painter, layout::LayoutBox const &layout) {
painter.fill_rect(layout.dimensions.padding_box(), {0xFF, 0xFF, 0xFF, 0x30});
for (auto const &child : layout.children) {
render_layout_depth(painter, child);
 
render/render.h added: 38, removed: 50, total 0
@@ -5,15 +5,15 @@
#ifndef RENDER_RENDER_H_
#define RENDER_RENDER_H_
 
#include "gfx/painter.h"
#include "gfx/icanvas.h"
#include "layout/layout.h"
 
namespace render {
 
void render_layout(gfx::Painter &, layout::LayoutBox const &);
void render_layout(gfx::ICanvas &, layout::LayoutBox const &);
 
namespace debug {
void render_layout_depth(gfx::Painter &, layout::LayoutBox const &);
void render_layout_depth(gfx::ICanvas &, layout::LayoutBox const &);
} // namespace debug
} // namespace render
 
 
render/render_test.cpp added: 38, removed: 50, total 0
@@ -37,8 +37,7 @@ int main() {
};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
 
expect_eq(
saver.take_commands(), CanvasCommands{gfx::DrawTextWithFontOptionsCmd{{0, 0}, "hello", {"arial"}, 10}});
@@ -64,8 +63,7 @@ int main() {
};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
 
expect_eq(saver.take_commands(),
CanvasCommands{
@@ -86,8 +84,7 @@ int main() {
};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
 
geom::Rect expected_rect{10, 20, 100, 100};
gfx::Color expected_color{0xA, 0xB, 0xC};
@@ -109,8 +106,7 @@ int main() {
};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
 
expect_eq(saver.take_commands(), CanvasCommands{});
});
@@ -129,8 +125,7 @@ int main() {
};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
 
geom::Rect expected_rect{0, 0, 20, 40};
gfx::Color expected_color{0xA, 0xB, 0xC};
@@ -158,8 +153,7 @@ int main() {
};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
 
geom::Rect expected_rect{0, 0, 20, 40};
gfx::Color expected_color{0, 0, 0, 0};
@@ -188,8 +182,7 @@ int main() {
};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
 
auto cmd = gfx::DrawRectCmd{
.rect{0, 0, 20, 20},
@@ -208,30 +201,29 @@ int main() {
};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
 
// #rgba
styled.properties = {{css::PropertyId::BackgroundColor, "#abcd"}};
auto cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{gfx::Color{0xaa, 0xbb, 0xcc, 0xdd}}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// #rrggbbaa
styled.properties = {{css::PropertyId::BackgroundColor, "#12345678"}};
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{gfx::Color{0x12, 0x34, 0x56, 0x78}}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// #rgb
styled.properties = {{css::PropertyId::BackgroundColor, "#abc"}};
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{gfx::Color{0xaa, 0xbb, 0xcc}}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// #rrggbb
styled.properties = {{css::PropertyId::BackgroundColor, "#123456"}};
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{gfx::Color{0x12, 0x34, 0x56}}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
});
 
@@ -245,65 +237,64 @@ int main() {
};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
 
// rgb, working
styled.properties = {{css::PropertyId::BackgroundColor, "rgb(1, 2, 3)"}};
auto cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{gfx::Color{1, 2, 3}}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// rgb, rgba should be an alias of rgb
styled.properties = {{css::PropertyId::BackgroundColor, "rgba(100, 200, 255)"}};
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{gfx::Color{100, 200, 255}}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// rgb, with alpha
styled.properties = {{css::PropertyId::BackgroundColor, "rgb(1, 2, 3, 0.5)"}};
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{gfx::Color{1, 2, 3, 127}}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// rgb, with alpha
styled.properties = {{css::PropertyId::BackgroundColor, "rgb(1, 2, 3, 0.2)"}};
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{gfx::Color{1, 2, 3, 51}}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// rgb, alpha out of range
styled.properties = {{css::PropertyId::BackgroundColor, "rgb(1, 2, 3, 2)"}};
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{gfx::Color{1, 2, 3, 0xFF}}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// rgb, garbage values in alpha
styled.properties = {{css::PropertyId::BackgroundColor, "rgb(1, 2, 3, blergh)"}};
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{kInvalidColor}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// rgb, missing closing paren
styled.properties = {{css::PropertyId::BackgroundColor, "rgb(1, 2, 3"}};
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{kInvalidColor}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// rgb, value out of range
styled.properties = {{css::PropertyId::BackgroundColor, "rgb(-1, 2, 3)"}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{kInvalidColor}};
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// rgb, wrong number of arguments
styled.properties = {{css::PropertyId::BackgroundColor, "rgb(1, 2)"}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{kInvalidColor}};
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
 
// rgb, garbage value
styled.properties = {{css::PropertyId::BackgroundColor, "rgb(a, 2, 3)"}};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
cmd = gfx::DrawRectCmd{.rect{0, 0, 20, 20}, .color{kInvalidColor}};
expect_eq(saver.take_commands(), CanvasCommands{std::move(cmd)});
});
@@ -319,8 +310,7 @@ int main() {
auto layout = layout::LayoutBox{.node = &styled};
 
gfx::CanvasCommandSaver saver;
gfx::Painter painter{saver};
render::render_layout(painter, layout);
render::render_layout(saver, layout);
 
expect_eq(saver.take_commands(),
CanvasCommands{gfx::DrawTextWithFontOptionsCmd{
@@ -335,7 +325,7 @@ int main() {
styled.properties[0].second = "underline";
styled.properties.push_back({css::PropertyId::FontStyle, "italic"});
 
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(),
CanvasCommands{gfx::DrawTextWithFontOptionsCmd{
{0, 0},
@@ -348,7 +338,7 @@ int main() {
 
styled.properties[0].second = "blink";
 
render::render_layout(painter, layout);
render::render_layout(saver, layout);
expect_eq(saver.take_commands(),
CanvasCommands{gfx::DrawTextWithFontOptionsCmd{
{0, 0},