void Game::game_loop(){ sf::Clock clock; while(this->window.isOpen()){ sf::Time elapsed = clock.restart(); float dt = elapsed.asSeconds(); if(peek_state() == NULL) continue; peek_state()->handle_input(); peek_state()->update(dt); this->window.clear(); peek_state()->draw(dt); this->window.display(); } }
static void text_handler (GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { ParseInfo *info = user_data; TextSpan *span; if (all_whitespace (text, text_len) && peek_state (info) != STATE_MARKUP && peek_state (info) != STATE_TAG && peek_state (info) != STATE_UNKNOWN) return; switch (peek_state (info)) { case STATE_START: g_assert_not_reached (); /* gmarkup shouldn't do this */ break; case STATE_MARKUP: case STATE_TAG: case STATE_UNKNOWN: if (text_len == 0) return; span = g_new0 (TextSpan, 1); span->text = g_strndup (text, text_len); span->tags = g_slist_copy (info->tag_stack); info->spans = g_list_prepend (info->spans, span); break; default: g_assert_not_reached (); break; } }
static void parse_tag_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, ParseInfo *info, GError **error) { GtkTextTag *tag; const gchar *attribute_name = NULL; const gchar *attribute_value = NULL; g_assert (peek_state (info) == STATE_MARKUP || peek_state (info) == STATE_TAG || peek_state (info) == STATE_UNKNOWN); if (attribute_names) attribute_name = attribute_names[0]; if (attribute_values) attribute_value = attribute_values[0]; tag = gimp_text_buffer_name_to_tag (GIMP_TEXT_BUFFER (info->register_buffer), element_name, attribute_name, attribute_value); if (tag) { info->tag_stack = g_slist_prepend (info->tag_stack, tag); push_state (info, STATE_TAG); } else { push_state (info, STATE_UNKNOWN); } }
static void start_element_handler (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { ParseInfo *info = user_data; switch (peek_state (info)) { case STATE_START: if (! strcmp (element_name, "markup")) { if (! check_no_attributes (context, element_name, attribute_names, attribute_values, error)) return; push_state (info, STATE_MARKUP); break; } else { set_error (error, context, G_MARKUP_ERROR, G_MARKUP_ERROR_PARSE, _("Outermost element in text must be <markup> not <%s>"), element_name); } break; case STATE_MARKUP: case STATE_TAG: case STATE_UNKNOWN: parse_tag_element (context, element_name, attribute_names, attribute_values, info, error); break; default: g_assert_not_reached (); break; } }
static void end_element_handler (GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { ParseInfo *info = user_data; switch (peek_state (info)) { case STATE_UNKNOWN: pop_state (info); g_assert (peek_state (info) == STATE_UNKNOWN || peek_state (info) == STATE_TAG || peek_state (info) == STATE_MARKUP); break; case STATE_TAG: pop_state (info); g_assert (peek_state (info) == STATE_UNKNOWN || peek_state (info) == STATE_TAG || peek_state (info) == STATE_MARKUP); /* Pop tag */ info->tag_stack = g_slist_delete_link (info->tag_stack, info->tag_stack); break; case STATE_MARKUP: pop_state (info); g_assert (peek_state (info) == STATE_START); info->spans = g_list_reverse (info->spans); break; default: g_assert_not_reached (); break; } }