Example #1
0
/* Test al_ustr_append_chr. */
static void t20(void)
{
   ALLEGRO_USTR *us = al_ustr_new("");

   CHECK(al_ustr_append_chr(us, 'a') == 1);
   CHECK(al_ustr_append_chr(us, U_ae) == 2);
   CHECK(al_ustr_append_chr(us, U_euro) == 3);
   CHECK(0 == strcmp(al_cstr(us), "aæ€"));

   /* Invalid code points. */
   CHECK(al_ustr_append_chr(us, -1) == 0);
   CHECK(al_ustr_append_chr(us, 0x110000) == 0);

   al_ustr_free(us);
}
Example #2
0
static ALLEGRO_USTR *create_filter_string(const ALLEGRO_USTR *patterns)
{
   ALLEGRO_USTR *filter = al_ustr_new("");
   bool filter_all = false;
   int start, end;

   if (0 == strcmp(al_cstr(patterns), "*.*")) {
      filter_all = true;
   }
   else {
      al_ustr_append_cstr(filter, "All Supported Files");
      al_ustr_append_chr(filter, '\0');
      start = al_ustr_size(filter);
      al_ustr_append(filter, patterns);

      /* Remove all instances of "*.*", which will be added separately. */
      for (;;) {
         int pos = al_ustr_find_cstr(filter, start, "*.*;");
         if (pos == -1)
            break;
         if (pos == start || al_ustr_get(filter, pos - 1) == ';') {
            filter_all = true;
            al_ustr_remove_range(filter, pos, pos + 4);
            start = pos;
         }
         else {
            start = pos + 4;
         }
      }
      while (al_ustr_has_suffix_cstr(filter, ";*.*")) {
         filter_all = true;
         end = al_ustr_size(filter);
         al_ustr_remove_range(filter, end - 4, end);
      }

      al_ustr_append_chr(filter, '\0');
   }

   if (filter_all) {
      al_ustr_append_cstr(filter, "All Files");
      al_ustr_append_chr(filter, '\0');
      al_ustr_append_cstr(filter, "*.*");
      al_ustr_append_chr(filter, '\0');
   }

   al_ustr_append_chr(filter, '\0');
   return filter;
}
Example #3
0
static void ensure_trailing_slash(ALLEGRO_USTR *us)
{
   int pos = al_ustr_size(us);
   if (al_ustr_prev_get(us, &pos) != '/') {
      al_ustr_append_chr(us, '/');
   }
}
Example #4
0
static void path_to_ustr(const ALLEGRO_PATH *path, int32_t delim,
   ALLEGRO_USTR *str)
{
   unsigned i;

   al_ustr_assign(str, path->drive);

   for (i = 0; i < _al_vector_size(&path->segments); i++) {
      al_ustr_append(str, get_segment(path, i));
      al_ustr_append_chr(str, delim);
   }

   al_ustr_append(str, path->filename);
}
Example #5
0
bool InputField::Input(ALLEGRO_EVENT &ev, float &scalex, float &scaley)
{
    int unichar = 0;

    detectingbutton->Input(ev, scalex, scaley);

    if(detectingbutton->is_button_clicked() == true && detectingbutton->is_mouse_in_it() == false &&
       ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN && ev.mouse.button == 1)
    {
        detectingbutton->unclick();
    }
    else if(detectingbutton->is_button_clicked() == true)
    {
        if(ev.type == ALLEGRO_EVENT_KEY_CHAR && (ev.keyboard.keycode == ALLEGRO_KEY_BACKSPACE || ev.keyboard.keycode == ALLEGRO_KEY_ENTER))
        {
            switch(ev.keyboard.keycode)
            {
                case ALLEGRO_KEY_BACKSPACE :
                    if(al_ustr_length(al_text) > 0)
                    {
                        al_ustr_remove_chr(al_text, al_ustr_length(al_text)-1);
                    }
                    break;
                case ALLEGRO_KEY_ENTER :
                    detectingbutton->unclick();
                    break;
            }
        }
        else if(ev.type == ALLEGRO_EVENT_KEY_CHAR)
        {
            if(lenght_limit == true && (int)text.size() >= max_lenght)
            {
                return true;
            }
            unichar = ev.keyboard.unichar;

            if(unichar >= 32)
            {
                al_ustr_append_chr(al_text, unichar);
            }
        }
    }

    text = al_cstr_dup(al_text);
    text_width = al_get_text_width(font, text.c_str()) + 7;


    return true;
}
Example #6
0
/* Event callbacks
 * */
void allua_keyboard_event_callback(lua_State * L, ALLEGRO_EVENT * event)
{
   Set_literal("keycode", event->keyboard.keycode, -3);
   allua_pushdisplay(L, event->keyboard.display);
   lua_setfield(L, -2, "display");
   if (event->type == ALLEGRO_EVENT_KEY_CHAR) {
      const char *cstr;
      ALLEGRO_USTR *us = al_ustr_new("");
      al_ustr_append_chr(us, event->keyboard.unichar);
      cstr = al_cstr(us);
      lua_pushstring(L, cstr);
      lua_setfield(L, -2, "string");

      Set_literal("unichar", event->keyboard.unichar, -3);
      Set_literal("modifiers", event->keyboard.modifiers, -3);

      lua_pushboolean(L, event->keyboard.repeat);
      lua_setfield(L, -2, "repeated");
   }
}
Example #7
0
void TextEdit::EventOccured( Event* e )
{
	UString keyname;

	Control::EventOccured( e );

	if( e->Type == EVENT_FORM_INTERACTION )
	{
		if( e->Data.Forms.RaisedBy == this )
		{
			if( e->Data.Forms.EventFlag == FormEventType::GotFocus || e->Data.Forms.EventFlag == FormEventType::MouseClick || e->Data.Forms.EventFlag == FormEventType::KeyDown )
			{
				editting = true;
				//e->Handled = true;
			}
			if( e->Data.Forms.EventFlag == FormEventType::LostFocus )
			{
				editting = false;
				RaiseEvent( FormEventType::TextEditFinish );
				//e->Handled = true;
			}
		} else if( e->Data.Forms.EventFlag == FormEventType::MouseClick ) {
			editting = false;
			RaiseEvent( FormEventType::TextEditFinish );
		}

		if( e->Data.Forms.EventFlag == FormEventType::KeyPress && editting )
		{
			switch( e->Data.Forms.KeyInfo.KeyCode )
			{
				case ALLEGRO_KEY_BACKSPACE:
					if( SelectionStart > 0 )
					{
						text.remove(SelectionStart, 1);
						SelectionStart--;
						RaiseEvent( FormEventType::TextChanged );
					}
					e->Handled = true;
					break;
				case ALLEGRO_KEY_DELETE:
					if( SelectionStart < text.length() )
					{
						text.remove(SelectionStart+1, 1);
						RaiseEvent( FormEventType::TextChanged );
					}
					e->Handled = true;
					break;
				case ALLEGRO_KEY_LEFT:
					if( SelectionStart > 0 )
					{
						SelectionStart--;
					}
					e->Handled = true;
					break;
				case ALLEGRO_KEY_RIGHT:
					if( SelectionStart < text.length() )
					{
						SelectionStart++;
					}
					e->Handled = true;
					break;
				case ALLEGRO_KEY_LSHIFT:
				case ALLEGRO_KEY_RSHIFT:
					editShift = true;
					break;
				case ALLEGRO_KEY_ALTGR:
					editAltGr = true;
					break;

				case ALLEGRO_KEY_HOME:
					SelectionStart = 0;
					e->Handled = true;
					break;
				case ALLEGRO_KEY_END:
					SelectionStart = text.length();
					e->Handled = true;
					break;

				case ALLEGRO_KEY_ENTER:
					editting = false;
					RaiseEvent( FormEventType::TextEditFinish );
					break;

				default:
					ALLEGRO_USTR* convert = al_ustr_new("");
					al_ustr_append_chr( convert, e->Data.Forms.KeyInfo.UniChar );
					if( convert->slen == 1 && al_cstr(convert)[0] != 0 )
					{
						text.insert( SelectionStart, al_cstr(convert) );
						SelectionStart++;
						RaiseEvent( FormEventType::TextChanged );
					}
			}
		}

		if( e->Data.Forms.EventFlag == FormEventType::KeyUp && editting )
		{

			switch( e->Data.Forms.KeyInfo.KeyCode )
			{
				case ALLEGRO_KEY_LSHIFT:
				case ALLEGRO_KEY_RSHIFT:
					editShift = false;
					e->Handled = true;
					break;
				case ALLEGRO_KEY_ALTGR:
					editAltGr = false;
					e->Handled = true;
					break;
			}
		}
	}

}
Example #8
0
int main(int argc, char **argv)
{
	InitAllegro();

	ALLEGRO_KEYBOARD_STATE klawiatura;
	ALLEGRO_MOUSE_STATE mysz;
	ALLEGRO_EVENT_QUEUE* event_queue = al_create_event_queue();
	ALLEGRO_EVENT_QUEUE* key_queue = al_create_event_queue();
	ALLEGRO_DISPLAY* okno = al_create_display(WINDOW_WIDTH, WINDOW_HEIGHT);
	ALLEGRO_FONT* defaultFont = al_create_builtin_font();
	ALLEGRO_TIMER* timer = al_create_timer(1.0 / 60.0);

	al_register_event_source(key_queue, al_get_display_event_source(okno));
	al_register_event_source(event_queue, al_get_display_event_source(okno));
	al_register_event_source(key_queue, al_get_keyboard_event_source());
	al_register_event_source(event_queue, al_get_timer_event_source(timer));

	al_set_window_title(okno, "Fraktale");
	al_set_target_bitmap(al_get_backbuffer(okno));
	
	Menu* menu = new Menu(WINDOW_WIDTH, WINDOW_HEIGHT);
	Mandelbrot* mandelbrot = new Mandelbrot(WINDOW_WIDTH, WINDOW_HEIGHT, defaultFont);
	Julia* julia = new Julia(WINDOW_WIDTH, WINDOW_HEIGHT, defaultFont);
	Window* window = new Window(menu, mandelbrot, julia);
	menu->SetWindow(window);
	mandelbrot->SetWindow(window);
	julia->SetWindow(window);

	const ALLEGRO_COLOR backgroundColor = al_map_rgb(255, 255, 255);
	const ALLEGRO_COLOR frameColor = al_map_rgb(255, 255, 255);
	const int frameThickness = 2;

	ALLEGRO_USTR* str = al_ustr_new("");
	int pos = (int)al_ustr_size(str);

	ALLEGRO_EVENT ev;

	double blokadaKlikniecia = al_get_time();
	
	int poczX = -1, poczY = -1, poprzedniStan = window->stanOkna;
	bool petla = true, klikniecieMyszy = false, klawiszWcisniety = false, wpisywanieIteracji = false;

	double screenRatio = static_cast<double>(WINDOW_HEIGHT) / static_cast<double>(WINDOW_WIDTH);

	while (petla)
	{
		if (poprzedniStan != window->stanOkna)
		{
			blokadaKlikniecia = al_get_time();
		}

		poprzedniStan = window->stanOkna;

		al_get_next_event(event_queue, &ev);
		al_get_mouse_state(&mysz);

		int mx = mysz.x;
		int my = mysz.y;

		bool koniecKlikniecia = false;

		if (mysz.buttons & 1 && klikniecieMyszy == false && al_get_time() > blokadaKlikniecia + 0.3)
		{
			klikniecieMyszy = true;

			if (window->CzyFraktal())
			{
				poczX = mx;
				poczY = my;
			}
		}
		else if (!(mysz.buttons & 1) && klikniecieMyszy == true && al_get_time() > blokadaKlikniecia + 0.3)
		{
			klikniecieMyszy = false;

			int pp = window->stanOkna;

			int respond = window->Click(mx, my);
			if (respond == Responds_t::RESPOND_CLOSE_WINDOW)
				petla = false;

			if (window->CzyFraktal() && (pp == WINDOWSTATE_MANDELBROT || pp == WINDOWSTATE_JULIA))
			{
				koniecKlikniecia = true;
			}

			if (pp == WINDOWSTATE_MENU && window->CzyFraktal())
			{
				window->ZaladujFraktal();
			}
		}

		if (koniecKlikniecia)
		{
			if (window->CzyFraktal())
			{
				Fraktal* fraktal = window->AktualnyFraktal();
				fraktal->Powieksz(poczX, mx, poczY, SkalujY(poczY, screenRatio, poczX, mx));
			}
			poczX = -1, poczY = -1;
		}

		al_get_next_event(key_queue, &ev);

		if (ev.type == ALLEGRO_EVENT_KEY_DOWN && klawiszWcisniety == false && window->CzyFraktal())
		{
			int kod = ev.keyboard.keycode;
			klawiszWcisniety = true;

			if (kod == 9)
			{
				wpisywanieIteracji = true;
			}
			else if (kod == 10)
			{
				Fraktal* fraktal = window->AktualnyFraktal();
				fraktal->Resetuj();
			}
			else if (kod >= 27 && kod <= 36 && wpisywanieIteracji)
			{
				pos += al_ustr_append_chr(str, kod + 21);
			}
			else if (kod == ALLEGRO_KEY_ENTER)
			{
				if (wpisywanieIteracji == true)
					wpisywanieIteracji = false;
				unsigned char* tmp = str->data;
				int t = atoi((const char*)tmp);
				window->SetIteracje(t);
			}
			else if (kod == ALLEGRO_KEY_BACKSPACE)
			{
				if (al_ustr_prev(str, &pos))
					al_ustr_truncate(str, pos);
			}
			else if (kod == ALLEGRO_KEY_ESCAPE)
			{
				window->stanOkna = WINDOWSTATE_MENU;
			}
		}
		else if (ev.type == ALLEGRO_EVENT_KEY_UP)
		{
			klawiszWcisniety = false;
		}

		al_clear_to_color(backgroundColor);

		if (wpisywanieIteracji)
			window->Draw(str);
		else
			window->Draw(NULL);

		if(poczX != -1)
			al_draw_rectangle(poczX, poczY, mx, SkalujY(poczY, screenRatio, poczX, mx), frameColor, frameThickness);
		al_flip_display();
	}
	al_destroy_display(okno);
	return 0;
}
Example #9
0
	//down arrow up arrow per vector items....enter to submit or esc to leave menu/submenu so  (menutype - 1)...title = 0, options = 1 dunno yet
	STATES Menu::KeyPress(ALLEGRO_EVENT *ev)
	{
		BOOL doneflag = false;
		STATES val = STATES::NONE;

		if (ev->type == ALLEGRO_EVENT_KEY_DOWN)
		{
			switch (ev->keyboard.keycode)
			{
			case ALLEGRO_KEY_UP://choose later....
				currentSelection_--;
				while (doneflag == false)//helps to loop and to not select untarGetable items
				{
					if (currentSelection_ < 0)
					{
						currentSelection_ = GetMenuItems().size() - 1;
					}
					//////////////////////Check this maybe refucktor the while and if
					//Matt-TODO:
					if (GetMenuItems()[currentSelection_]->GetMenuItemTargetable() == true)
					{
						doneflag = true;
					}
					while (GetMenuItems()[currentSelection_]->GetMenuItemTargetable() == false)
					{
						currentSelection_--;
						if (currentSelection_ < 0)
						{
							currentSelection_ = GetMenuItems().size() - 1;
						}
					}
				}
				break;
			case ALLEGRO_KEY_DOWN://choose later....
				currentSelection_++;
				while (doneflag == false)//helps to loop and to not select untarGetable items
				{
					if (currentSelection_ >= GetMenuItems().size())
					{
						currentSelection_ = 0;
					}
					if (GetMenuItems()[currentSelection_]->GetMenuItemTargetable() == true)
					{
						doneflag = true;
					}
					while (GetMenuItems()[currentSelection_]->GetMenuItemTargetable() == false)
					{
						currentSelection_++;
						if (currentSelection_ >= GetMenuItems().size())
						{
							currentSelection_ = 0;
						}
					}
				}
				break;

			case ALLEGRO_KEY_ENTER://choose later....
				val = GetMenuItems()[currentSelection_]->GetId();
				break;
			default:
				break;
			}
		}
		else if (ev->type == ALLEGRO_EVENT_KEY_CHAR)
		{
			if (GetMenuItems()[currentSelection_]->GetMenuItemProperty() != nullptr && ev->keyboard.unichar > 0)
			{
				ALLEGRO_USTR *test = al_ustr_new("");
				al_ustr_append_chr(test, ev->keyboard.unichar);
				GetMenuItems()[currentSelection_]->SetMenuItemProperty(test);
				al_ustr_free(test);
			}
		}



		if (ev->type == ALLEGRO_EVENT_KEY_UP)
		{
			switch (ev->keyboard.keycode)
			{
			case ALLEGRO_KEY_ESCAPE:
				//quit
				val = STATES::RETURN;
				break;
			}
		}




		return val;
	}