* Example program for the Allegro library, by Peter Wang.
*
* Test text justification routines.
*/
#include <string>
#include "allegro5/allegro.h"
#include "allegro5/allegro_font.h"
#include "allegro5/allegro_image.h"
#include "allegro5/allegro_ttf.h"
#include <allegro5/allegro_primitives.h>
#include "nihgui.hpp"
#include "common.c"
ALLEGRO_FONT *font;
ALLEGRO_FONT *font_gui;
class Prog {
private:
Dialog d;
Label text_label;
Label width_label;
Label diff_label;
TextEntry text_entry;
HSlider width_slider;
HSlider diff_slider;
public:
Prog(const Theme & theme, ALLEGRO_DISPLAY *display);
void run();
void draw_text();
};
Prog::Prog(const Theme & theme, ALLEGRO_DISPLAY *display) :
d(Dialog(theme, display, 10, 20)),
text_label(Label("Text")),
width_label(Label("Width")),
diff_label(Label("Diff")),
text_entry(TextEntry("Lorem ipsum dolor sit amet")),
width_slider(HSlider(400, al_get_display_width(display))),
diff_slider(HSlider(100, al_get_display_width(display)))
{
d.add(text_label, 0, 10, 1, 1);
d.add(text_entry, 1, 10, 8, 1);
d.add(width_label, 0, 12, 1, 1);
d.add(width_slider, 1, 12, 8, 1);
d.add(diff_label, 0, 14, 1, 1);
d.add(diff_slider, 1, 14, 8, 1);
}
void Prog::run()
{
d.prepare();
while (!d.is_quit_requested()) {
if (d.is_draw_requested()) {
al_clear_to_color(al_map_rgb(128, 128, 128));
draw_text();
d.draw();
al_flip_display();
}
d.run_step(true);
}
}
void Prog::draw_text()
{
ALLEGRO_BITMAP *target = al_get_target_bitmap();
const int cx = al_get_bitmap_width(target) / 2;
const int x1 = cx - width_slider.get_cur_value() / 2;
const int x2 = cx + width_slider.get_cur_value() / 2;
const int diff = diff_slider.get_cur_value();
const int th = al_get_font_line_height(font);
al_draw_justified_text(font, al_map_rgb_f(1, 1, 1), x1, x2, 50, diff,
ALLEGRO_ALIGN_INTEGER, text_entry.get_text());
al_draw_rectangle(x1, 50, x2, 50 + th, al_map_rgb(0, 0, 255), 0);
al_draw_line(cx - diff / 2, 53 + th, cx + diff / 2, 53 + th,
al_map_rgb(0, 255, 0), 0);
}
int main(int argc, char *argv[])
{
ALLEGRO_DISPLAY *display;
(void)argc;
(void)argv;
if (!al_init()) {
abort_example("Could not init Allegro\n");
}
al_init_primitives_addon();
al_install_keyboard();
al_install_mouse();
al_init_image_addon();
al_init_font_addon();
al_init_ttf_addon();
init_platform_specific();
al_set_new_display_flags(ALLEGRO_GENERATE_EXPOSE_EVENTS);
display = al_create_display(640, 480);
if (!display) {
abort_example("Unable to create display\n");
}
#if 1
font = al_load_font("data/DejaVuSans.ttf", 24, 0);
if (!font) {
abort_example("Failed to load data/DejaVuSans.ttf\n");
}
#else
font = al_load_font("data/font.tga", 0, 0);
if (!font) {
abort_example("Failed to load data/font.tga\n");
}
#endif
font_gui = al_load_font("data/DejaVuSans.ttf", 14, 0);
if (!font_gui) {
abort_example("Failed to load data/DejaVuSans.ttf\n");
}
{
Theme theme(font_gui);
Prog prog(theme, display);
prog.run();
}
al_destroy_font(font);
al_destroy_font(font_gui);
return 0;
}