summaryrefslogtreecommitdiff
path: root/flogo.cpp
blob: 28b754bf72a5f9dbb5caae64aadf208a2e929733 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <cmath>
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Multiline_Input.H>
#include <FL/Fl_Scroll.H>
#include <FL/Fl_Image.H>
#include <FL/Fl_Select_Browser.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_draw.H>

#include "engine.h"

using namespace std;

const int WIDTH=1000,HEIGHT=1000;


Fl_Window *window;
Fl_Scroll *drawscroll;
Fl_Box *drawimagebox,*turtleimagebox;
Fl_RGB_Image *drawimage,*turtleimage;
Fl_Select_Browser *histbrowser;
Fl_Input *cmdinput;
Fl_Button *evaluatebutton;

uchar *imagebuf,*turtlebuf;


const uchar* someimg(void){
	uchar *buf=new uchar[3*WIDTH*HEIGHT];
	int x,y;
	for(y=0;y<HEIGHT;y++){
		for(x=0;x<WIDTH;x++){
			buf[(WIDTH*y+x)*3+0]=(int)sqrt((999-x)*(999-x)+y*y)/100*20;
			buf[(WIDTH*y+x)*3+1]=(int)sqrt(x*x+y*y)/100*20;
			buf[(WIDTH*y+x)*3+2]=(int)sqrt((500-x)*(500-x)+(0-y)*(0-y))/100*20;
		}
	}
	return buf;
}

void maincallback(Fl_Widget*,void*){
	if(Fl::event()==FL_SHORTCUT&&Fl::event_key()==FL_Escape)return;
	exit(0);
}

void cmdinputcallback(Fl_Widget *wid){
	Fl_Input *inp=(Fl_Input*)wid;
	histbrowser->insert(histbrowser->size(),inp->value());
	histbrowser->bottomline(histbrowser->size());
	logocommand(inp->value());
	inp->value(NULL);
}

void evaluatebuttoncallback(Fl_Widget*){
	histbrowser->insert(histbrowser->size(),cmdinput->value());
	histbrowser->bottomline(histbrowser->size());
	logocommand(cmdinput->value());
	cmdinput->value(NULL);
}

void histcallback(Fl_Widget *wid){
	Fl_Select_Browser *br=(Fl_Select_Browser*)wid;
	cmdinput->value(br->text(br->value()));
}

int main(int argc,char **argv){
	window=new Fl_Window(1016,700,"FLogo");
	Fl_Group::current(0); //manual adding to widgets

	imagebuf=new uchar[WIDTH*HEIGHT*3]; //RGB
	memset(imagebuf,255,WIDTH*HEIGHT*3*sizeof(uchar));
	turtlebuf=new uchar[WIDTH*HEIGHT*2]; //GA
	memset(turtlebuf,0,WIDTH*HEIGHT*2*sizeof(uchar));

	drawscroll=new Fl_Scroll(0,0,window->w(),window->h()-150);
		drawimagebox=new Fl_Box(0,0,WIDTH,HEIGHT);
			drawimage=new Fl_RGB_Image(imagebuf,WIDTH,HEIGHT);
			drawimagebox->image(drawimage);
		drawscroll->add(drawimagebox);
		turtleimagebox=new Fl_Box(0,0,WIDTH,HEIGHT);
			turtleimage=new Fl_RGB_Image(turtlebuf,WIDTH,HEIGHT,2);
			turtleimagebox->image(turtleimage);
		drawscroll->add(turtleimagebox);
	window->add(drawscroll);

	cmdinput=new Fl_Input(0,window->h()-25,window->w()-150,25);
		cmdinput->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED);
		cmdinput->callback(cmdinputcallback);
	window->add(cmdinput);

	evaluatebutton=new Fl_Button(cmdinput->x()+cmdinput->w(),cmdinput->y(),80,cmdinput->h(),"Evaluate");
		evaluatebutton->callback(evaluatebuttoncallback);
	window->add(evaluatebutton);

	histbrowser=new Fl_Select_Browser(0,drawscroll->y()+drawscroll->h(),cmdinput->w(),cmdinput->y()-(drawscroll->y()+drawscroll->h()));
		histbrowser->callback(histcallback);
	window->add(histbrowser);
	histbrowser->add(""); //add blank line

	window->resizable(drawscroll);

	window->end();
	Fl::visual(FL_RGB);
	//window->callback(maincallback); //disable esc window closing
	window->show(argc,argv);
	return Fl::run();
}