/*
 * Copyright 2022 Rive
 */

#include "gm.hpp"

#ifdef WITH_RIVE_TEXT

#include "assets/roboto_flex.ttf.hpp"
#include "assets/montserrat.ttf.hpp"
#include "common/testing_window.hpp"
#include "rive/text/font_hb.hpp"
#include "rive/text/raw_text.hpp"

using namespace rivegm;

class RawTextGM : public GM
{
public:
  RawTextGM() : GM(400, 335) {}

  void onDraw(rive::Renderer* renderer) override
  {
    auto roboto = HBFont::Decode(assets::roboto_flex_ttf());
    auto montserrat = HBFont::Decode(assets::montserrat_ttf());

    auto black = TestingWindow::Get()->factory()->makeRenderPaint();
    black->color(0xff000000);

    auto red = TestingWindow::Get()->factory()->makeRenderPaint();
    red->color(0x88ff0000);

    rive::RawText text(TestingWindow::Get()->factory());
    text.maxWidth(400);
    text.sizing(rive::TextSizing::fixed);
    text.append("Hello world!\n", black, roboto, 72.0f);
    text.append("Moon's cool too.\n", black, montserrat, 64.0f);
    text.append("Mars is red.\n", red, roboto, 72.0f);
    text.render(renderer);
  }
};

GMREGISTER(rawtext, return new RawTextGM)

#endif
