/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
 * drivers/display/minui/render_api.c
 *
 * Copyright (C) 2020 Amlogic, Inc. All rights reserved.
 *
 */

#include "render_api.h"
#include "minui_log.h"
#include "graphics.h"
#include "minui.h"

int in_fastboot_mode = 0;

void set_fastboot_flag(int flag)
{
	/* 1: in fastboot mode, 0: in other mode */
	in_fastboot_mode = flag;
}

int screen_init(void)
{
	int ret = -1;
	ret = gr_init();
	if (ret < 0)
		ui_loge("screen_init: fail.\n");
	else
		ui_logd("screen_init: success.\n");

	return ret;
}

void screen_uninit(void)
{
	gr_exit();
}

int gr_init_ext_font(const char* font, GRFont** dest)
{
	int res = -1;

	if (!font)
		return -1;
	ui_logd("read font: %s\n", font);
	res = gr_init_bmp_font(font, dest);
	if (res < 0) {
		ui_loge("gr_init_ext_font: load font %s fail\n", font);
		return res;
	}

	ui_logd("font char_width=%d, char_height=%d\n",
			(*dest)->char_width, (*dest)->char_height);
	return 0;
}

int surface_loadbmp(GRSurface** surface, const char* filename)
{
	int ret = -1;

	ret = res_create_display_surface(filename, surface);
	if (ret < 0)
		ui_loge("surface_loadbmp: load %s fail.\n", filename);
	else
		ui_logd("surface_loadbmp: load %s success.\n", filename);

	return ret;
}

void surface_disaplay(GRSurface* surface, int sx, int sy, int dx, int dy)
{
	if (surface)
		gr_blit(surface, sx, sy, surface->width, surface->height, dx, dy);
}

void screen_setcolor(unsigned int color)
{
	gr_color(((color & 0xFF000000) >> 24), ((color & 0x00FF0000) >> 16),
			((color & 0x0000FF00) >> 8), ((color & 0x000000FF) >> 0));
}

void screen_drawtextline(const GRFont* font, int x, int y, const char *s, bool bold)
{
	gr_text(font, x, y, s, bold);
}

void screen_fillrect(int x, int y, int w, int h)
{
	gr_fill(x, y, x+w, y+h);
}

void screen_update(void)
{
	gr_flip();
}
