summary refs log blame commit diff stats
path: root/gui/radio-receiver.c
blob: 136b45fcca592d9b785b049760d708d8b8c10cdd (plain) (tree)















































                                                                                        


















                                                                                           

                                   











                                                                      


                                                  



                                                                     

















                                                                                 
                                                              











                                                                    
                                                              












                                                                                 
                                                             



                      
#include <stdio.h>

enum logger_level : int {
	LOG_TRACE = 0,
	LOG_DEBUG = 10,
	LOG_INFO = 20,
	LOG_WARN = 30,
	LOG_ERROR = 40,
};

[[clang::import_module("logger")]] [[clang::import_name("log")]]
extern void logger_log(void);
[[clang::import_module("logger")]] [[clang::import_name("log-message")]]
extern void logger_log_message(char *message);
[[clang::import_module("logger")]] [[clang::import_name("add-argument-int")]]
extern void logger_add_argument_int(int arg);
[[clang::import_module("logger")]] [[clang::import_name("begin")]]
extern void logger_log_begin(enum logger_level level);

[[clang::import_module("screen")]] [[clang::import_name("set-background-size")]]
extern void set_background_size(int width, int height);
[[clang::import_module("screen")]] [[clang::import_name("set-background-texture-size")]]
extern void set_background_texture_size(int width, int height);

[[clang::import_module("text")]] [[clang::import_name("free")]]
extern void text_free(int handle);
[[clang::import_module("text")]] [[clang::import_name("literal")]]
extern int text_literal(char *text);
[[clang::import_module("text")]] [[clang::import_name("translatable")]]
extern int text_translatable(char *key);
[[clang::import_module("text")]] [[clang::import_name("translatable-arguments")]]
extern int text_arguments(char *key, int size, int *args);
[[clang::import_module("screen")]] [[clang::import_name("render-text-object")]]
extern void render_text_object(int handle, int x, int y, int color, bool shadow);

enum simulator_mode : int {
	SIMULATOR_FULL = 0,
	SIMULATOR_FAST = 1,
	SIMULATOR_DEAF = 2,
};

[[clang::import_module("simulator")]] [[clang::import_name("get-mode")]]
extern enum simulator_mode simulator_get_mode();
[[clang::import_module("simulator")]] [[clang::import_name("get-volume")]]
extern int simulator_get_volume();
[[clang::import_module("simulator")]] [[clang::import_name("get-frequency")]]
extern int simulator_get_frequency();

[[clang::import_module("screen")]] [[clang::import_name("get-width")]]
extern int screen_get_width();
[[clang::import_module("screen")]] [[clang::import_name("get-height")]]
extern int screen_get_height();

[[clang::import_module("volume-plus-widget")]] [[clang::import_name("set-dimensions")]]
extern void vp_set_dimensions(int x, int y, int width, int height);
[[clang::import_module("volume-minus-widget")]] [[clang::import_name("set-dimensions")]]
extern void vm_set_dimensions(int x, int y, int width, int height);
[[clang::import_module("frequency-plus-widget")]] [[clang::import_name("set-dimensions")]]
extern void fp_set_dimensions(int x, int y, int width, int height);
[[clang::import_module("frequency-minus-widget")]] [[clang::import_name("set-dimensions")]]
extern void fm_set_dimensions(int x, int y, int width, int height);
[[clang::import_module("toggle-widget")]] [[clang::import_name("set-dimensions")]]
extern void mode_set_dimensions(int x, int y, int width, int height);

#define BACKGROUND_WIDTH 200
#define BACKGROUND_HEIGHT 100

void init() {
	logger_log_begin(LOG_INFO);
	logger_log_message("placeholder radio skin.");
	set_background_size(BACKGROUND_WIDTH, BACKGROUND_HEIGHT);

	int width = screen_get_width();
	int height = screen_get_height();
	int base_x = (width - BACKGROUND_WIDTH) / 2;
	int base_y = (height - BACKGROUND_HEIGHT) / 2;
	fp_set_dimensions(base_x + 100 - 40, base_y, 20, 20);
	fm_set_dimensions(base_x + 120 - 40, base_y, 20, 20);
	vp_set_dimensions(base_x + 100 - 40, base_y + 20, 20, 20);
	vm_set_dimensions(base_x + 120 - 40, base_y + 20, 20, 20);
	mode_set_dimensions(base_x + 100 - 100, base_y + 40, 100, 20);
}

void render(int mouseX, int mouseY, float delta) {
	int width = screen_get_width();
	int height = screen_get_height();
	int base_x = (width - BACKGROUND_WIDTH) / 2 + 100;
	int base_y = (height - BACKGROUND_HEIGHT) / 2 + (20 - 9) / 2;
	int t1;
	switch (simulator_get_mode()) {
		case SIMULATOR_FAST:
			{
				t1 = text_translatable("pirate-radio.mode.fast");
				break;
			}
		case SIMULATOR_DEAF:
			{
				t1 = text_translatable("pirate-radio.mode.deaf");
				break;
			}
		default:
			{
				t1 = text_translatable("pirate-radio.mode.full");
			}
	}
	int t2 = text_arguments("pirate-radio.mode.selected", 1, &t1);
	render_text_object(t2, base_x, base_y + 40, -1, true);
	text_free(t1);
	text_free(t2);

	int volume = simulator_get_volume();
	if (volume == 0) {
		t1 = text_translatable("pirate-radio.volume.off");
	} else {
		char volume_text[30];
		sprintf(volume_text, "%d", volume);
		t1 = text_literal(volume_text);
	}
	t2 = text_arguments("pirate-radio.volume.selected", 1, &t1);
	render_text_object(t2, base_x, base_y + 20, -1, true);
	text_free(t1);
	text_free(t2);

	int frequency = simulator_get_frequency();
	int freq_mhz = frequency/10;
	int freq_step = frequency%10;
	char freq_text[30];
	sprintf(freq_text, "%d", freq_mhz);
	t1 = text_literal(freq_text);
	sprintf(freq_text, "%d", freq_step);
	t2 = text_literal(freq_text);
	int freq_args[2] = {t1, t2};
	int t3 = text_arguments("pirate-radio.frequency.selected", 2, freq_args);
	render_text_object(t3, base_x, base_y + 0, -1, true);
	text_free(t1);
	text_free(t2);
	text_free(t3);
}