void sh_rect::rotate(float angle) { angle *= torad; mat2x2 rot = mat2x2( cos(angle), -sin(angle), sin(angle), cos(angle) ); vec2 cur_cen = _center; move_position(-_center.x, -_center.y); _position = _position*rot; for(int i = 0; i < 6; i++) { data[i] = data[i]*rot; } move_position(cur_cen); _left = (_position.x - _width/2.0f); _right = (_position.x + _width/2.0f); _top = (_position.y + _height/2.0f); _bottom = (_position.y - _height/2.0f); // _rotation = _rotation*rot; glBindBuffer(GL_ARRAY_BUFFER, _vbo); glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(data), data); }
/** * Selects the attribute name. * * @param p0 the break flag * @param p1 the current position (Hand over as reference!) * @param p2 the remaining count */ void select_xml_attribute_name(void* p0, void* p1, void* p2) { log_terminated_message((void*) DEBUG_LEVEL_LOG_MODEL, (void*) L"Select xml attribute name."); // The comparison result. int r = *NUMBER_0_INTEGER_MEMORY_MODEL; if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { detect_array((void*) &r, p1, p2, (void*) ATTRIBUTE_VALUE_BEGIN_XML_NAME, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, (void*) ATTRIBUTE_VALUE_BEGIN_XML_NAME_COUNT, (void*) NUMBER_1_INTEGER_MEMORY_MODEL); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { // The attribute name end was found. // // CAUTION! The current position and remaining count were already // changed in the called function, to be processed further. // // The attribute count is left as it is. // Set break flag. copy_integer(p0, (void*) NUMBER_1_INTEGER_MEMORY_MODEL); } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { move_position(p1, p2, (void*) NUMBER_1_INTEGER_MEMORY_MODEL, (void*) WIDE_CHARACTER_INTEGRAL_TYPE_SIZE); } }
/** * Selects the xml definition. * * @param p0 the break flag * @param p1 the current position (Hand over as reference!) * @param p2 the remaining count */ void select_xml_definition(void* p0, void* p1, void* p2) { if (p2 != *NULL_POINTER_MEMORY_MODEL) { int* rem = (int*) p2; if (p1 != *NULL_POINTER_MEMORY_MODEL) { void** pos = (void**) p1; if (p0 != *NULL_POINTER_MEMORY_MODEL) { int* b = (int*) p0; log_terminated_message((void*) DEBUG_LEVEL_LOG_MODEL, (void*) L"Select xml definition."); // The comparison result. int r = *NUMBER_0_INTEGER_MEMORY_MODEL; if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { detect_array((void*) &r, p1, p2, (void*) DEFINITION_END_XML_NAME, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, (void*) DEFINITION_END_XML_NAME_COUNT, (void*) NUMBER_1_INTEGER_MEMORY_MODEL); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { // Set break flag. *b = *NUMBER_1_INTEGER_MEMORY_MODEL; } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { // None of the comparisons above delivered a positive (r != 0) result. // Therefore, increment the current position by one (pointer size). move_position(p1, p2, (void*) NUMBER_1_INTEGER_MEMORY_MODEL, (void*) WIDE_CHARACTER_INTEGRAL_TYPE_SIZE); } } else { log_terminated_message((void*) ERROR_LEVEL_LOG_MODEL, (void*) L"Could not select xml definition. The break flag is null."); } } else { log_terminated_message((void*) ERROR_LEVEL_LOG_MODEL, (void*) L"Could not select xml definition. The current position is null."); } } else { log_terminated_message((void*) ERROR_LEVEL_LOG_MODEL, (void*) L"Could not select xml definition. The remaining count is null."); } }
/** * Selects no resource http request uri. * * The request uri identifies the resource upon which to apply a request. * There are four options to specify a request uri: * * Request-URI = "*" | absoluteURI | abs_path | authority * * (1) No resource * * The asterisk "*" means that the request does not apply to a particular * resource, but to the server itself, and is only allowed when the method * used does not necessarily apply to a resource. Example: * * OPTIONS * HTTP/1.1 * * (2) Absolute URI * * The absoluteURI form is REQUIRED when the request is being made to * a proxy. The proxy is requested to forward the request or service it * from a valid cache, and return the response. Note that the proxy MAY * forward the request on to another proxy or directly to the server * specified by the absoluteURI. Example: * * GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 * * (3) Authority Form * * The authority form is only used by the CONNECT method. If a client * connects to a proxy using the CONNECT method, it has to specify * the hostname and, separated by a colon, the port number. Both of them * have to be specified. The host:port part is followed by a space and * a string specifying the HTTP version number. Example: * * CONNECT home.netscape.com:443 HTTP/1.0 * User-agent: Mozilla/1.1N * Proxy-authorization: basic aGVsbG86d29ybGQ= * * (4) Absolute Path * * The most common form is that used to identify a resource on an * origin server or gateway. In this case, the absolute path of the * uri MUST be transmitted as the request uri, and the network location * of the uri (authority) MUST be transmitted in a Host header field. * For example, a client wishing to retrieve the resource above directly * from the origin server would create a TCP connection to port 80 of * the host "www.w3.org" and send the lines: * * GET /pub/WWW/TheProject.html HTTP/1.1 * Host: www.w3.org * * followed by the remainder of the request. * Note that the absolute path cannot be empty; if none is present * in the original URI, it MUST be given as "/" (the server root). * * @param p0 the destination model (Hand over as reference!) * @param p1 the destination model count * @param p2 the destination model size * @param p3 the destination details (Hand over as reference!) * @param p4 the destination details count * @param p5 the destination details size * @param p6 the break flag * @param p7 the current position (Hand over as reference!) * @param p8 the remaining count */ void select_no_resource_http_request_uri(void* p0, void* p1, void* p2, void* p3, void* p4, void* p5, void* p6, void* p7, void* p8) { if (p6 != *NULL_POINTER_MEMORY_MODEL) { int* b = (int*) p6; log_terminated_message((void*) DEBUG_LEVEL_LOG_MODEL, (void*) L"Select no resource http request uri."); // // CAUTION! The order of the comparisons is IMPORTANT! Do NOT change it easily! // // The comparison result. int r = *NUMBER_0_INTEGER_MEMORY_MODEL; if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { detect_array((void*) &r, p7, p8, (void*) NO_RESOURCE_HTTP_REQUEST_URI_NAME, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, (void*) NO_RESOURCE_HTTP_REQUEST_URI_NAME_COUNT, (void*) NUMBER_0_INTEGER_MEMORY_MODEL); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { // Set break flag. *b = *NUMBER_1_INTEGER_MEMORY_MODEL; } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { move_position(p7, p8, (void*) NUMBER_1_INTEGER_MEMORY_MODEL, (void*) WIDE_CHARACTER_INTEGRAL_TYPE_SIZE); } } else { log_terminated_message((void*) ERROR_LEVEL_LOG_MODEL, (void*) L"Could not select no resource http request uri. The break flag is null."); } }
inline iterator operator++(int) { if (move_position()) find_first_pos(); return *this; }
inline void find_first_pos(void) { while (!(*data & ((BITMAP_TYPE)0x1 << (BITMAP_TYPE)pos))) { if (!move_position()) return; } }
/** * Selects the attribute begin or tag end. * * @param p0 the has attribute flag * @param p1 the has content flag * @param p2 the is empty flag * @param p3 the current position (Hand over as reference!) * @param p4 the remaining count */ void select_xml_attribute_begin_or_tag_end(void* p0, void* p1, void* p2, void* p3, void* p4) { if (p4 != *NULL_POINTER_MEMORY_MODEL) { int* rem = (int*) p4; if (p3 != *NULL_POINTER_MEMORY_MODEL) { void** pos = (void**) p3; if (p2 != *NULL_POINTER_MEMORY_MODEL) { int* ie = (int*) p2; if (p1 != *NULL_POINTER_MEMORY_MODEL) { int* hc = (int*) p1; if (p0 != *NULL_POINTER_MEMORY_MODEL) { int* ha = (int*) p0; log_terminated_message((void*) DEBUG_LEVEL_LOG_MODEL, (void*) L"Select xml attribute begin or tag end."); // // CAUTION! The ORDER of the following function calls is IMPORTANT! // The empty tag end "/>" has to be searched BEFORE // the simple tag end ">", because of the slash "/" character. // // CAUTION! The comparison result HAS TO BE ZERO, if a detection is to be taking place! // Many "detect" functions are called in a sequence, below. // If the result of one detection function was positive (r == 1), // then that function increments the current position and decrements the remaining count. // In this case, further detection functions following afterwards might detect // further characters and CHANGE the current position and remaining count, and so forth, // which would have the effect of "jumping" over some characters and produce WRONG RESULTS! // Therefore, the checks for (r == 0) below avoid another detection, // if the result already has a value unequal zero. // // The comparison result. int r = *NUMBER_0_INTEGER_MEMORY_MODEL; if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { detect_array((void*) &r, p3, p4, (void*) EMPTY_TAG_END_XML_NAME, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, (void*) EMPTY_TAG_END_XML_NAME_COUNT, (void*) NUMBER_1_INTEGER_MEMORY_MODEL); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { // The empty tag end was found. // Set is empty flag. *ie = *NUMBER_1_INTEGER_MEMORY_MODEL; } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { detect_array((void*) &r, p3, p4, (void*) TAG_END_XML_NAME, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, (void*) TAG_END_XML_NAME_COUNT, (void*) NUMBER_1_INTEGER_MEMORY_MODEL); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { // The tag end, indicating subsequent element content, was found. // Set has content flag. *hc = *NUMBER_1_INTEGER_MEMORY_MODEL; } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { detect_array((void*) &r, p3, p4, (void*) ATTRIBUTE_BEGIN_XML_NAME, (void*) WIDE_CHARACTER_PRIMITIVE_MEMORY_ABSTRACTION, (void*) ATTRIBUTE_BEGIN_XML_NAME_COUNT, (void*) NUMBER_1_INTEGER_MEMORY_MODEL); if (r != *NUMBER_0_INTEGER_MEMORY_MODEL) { // The tag name end, indicating subsequent attributes, was found. // Set has attribute flag. *ha = *NUMBER_1_INTEGER_MEMORY_MODEL; } } if (r == *NUMBER_0_INTEGER_MEMORY_MODEL) { move_position(p3, p4, (void*) NUMBER_1_INTEGER_MEMORY_MODEL, (void*) WIDE_CHARACTER_INTEGRAL_TYPE_SIZE); } } else { log_terminated_message((void*) ERROR_LEVEL_LOG_MODEL, (void*) L"Could not select xml attribute begin or tag end. The has attribute flag is null."); } } else { log_terminated_message((void*) ERROR_LEVEL_LOG_MODEL, (void*) L"Could not select xml attribute begin or tag end. The has content flag is null."); } } else { log_terminated_message((void*) ERROR_LEVEL_LOG_MODEL, (void*) L"Could not select xml attribute begin or tag end. The is empty flag is null."); } } else { log_terminated_message((void*) ERROR_LEVEL_LOG_MODEL, (void*) L"Could not select xml attribute begin or tag end. The current position is null."); } } else { log_terminated_message((void*) ERROR_LEVEL_LOG_MODEL, (void*) L"Could not select xml attribute begin or tag end. The remaining count is null."); } }
void scrollbar::handle_event(const SDL_Event& event) { gui::widget::handle_event(event); if (mouse_locked() || hidden()) return; STATE new_state = state_; SDL_Rect const &grip = grip_area(); SDL_Rect const &groove = groove_area(); switch (event.type) { case SDL_MOUSEBUTTONUP: { SDL_MouseButtonEvent const &e = event.button; bool on_grip = sdl::point_in_rect(e.x, e.y, grip); new_state = on_grip ? ACTIVE : NORMAL; break; } case SDL_MOUSEBUTTONDOWN: { SDL_MouseButtonEvent const &e = event.button; bool on_grip = sdl::point_in_rect(e.x, e.y, grip); bool on_groove = sdl::point_in_rect(e.x, e.y, groove); #if !SDL_VERSION_ATLEAST(2,0,0) if (on_groove && e.button == SDL_BUTTON_WHEELDOWN) { move_position(scroll_rate_); } else if (on_groove && e.button == SDL_BUTTON_WHEELUP) { move_position(-scroll_rate_); } else #endif if (on_grip && e.button == SDL_BUTTON_LEFT) { mousey_on_grip_ = e.y - grip.y; new_state = DRAGGED; } else if (on_groove && e.button == SDL_BUTTON_LEFT && groove.h != grip.h) { if (e.y < grip.y) move_position(-static_cast<int>(grip_height_)); else move_position(grip_height_); } else if (on_groove && e.button == SDL_BUTTON_MIDDLE) { int y_dep = e.y - grip.y - grip.h/2; int dep = y_dep * int(full_height_ - grip_height_)/ (groove.h - grip.h); move_position(dep); } break; } case SDL_MOUSEMOTION: { SDL_MouseMotionEvent const &e = event.motion; if (state_ == NORMAL || state_ == ACTIVE) { bool on_grip = sdl::point_in_rect(e.x, e.y, grip); new_state = on_grip ? ACTIVE : NORMAL; } else if (state_ == DRAGGED && groove.h != grip.h) { int y_dep = e.y - grip.y - mousey_on_grip_; int dep = y_dep * static_cast<int>(full_height_ - grip_height_) / (groove.h - grip.h); move_position(dep); } break; } #if SDL_VERSION_ATLEAST(2,0,0) case SDL_MOUSEWHEEL: { const SDL_MouseWheelEvent& e = event.wheel; int x, y; SDL_GetMouseState(&x, &y); bool on_groove = sdl::point_in_rect(x, y, groove); if (on_groove && e.y < 0) { move_position(scroll_rate_); } else if (on_groove && e.y > 0) { move_position(-scroll_rate_); } break; } #endif default: break; } if (new_state != state_) { set_dirty(); mid_scaled_.assign(NULL); state_ = new_state; } }
void scrollbar::scroll_up() { move_position(-scroll_rate_); }
void scrollbar::scroll_down() { move_position(scroll_rate_); }
void scrollbar::handle_event(const SDL_Event& event) { if (mouse_locked() || hidden()) return; STATE new_state = state_; SDL_Rect const &grip = grip_area(); SDL_Rect const &groove = groove_area(); switch (event.type) { case SDL_MOUSEBUTTONUP: { SDL_MouseButtonEvent const &e = event.button; bool on_grip = point_in_rect(e.x, e.y, grip); new_state = on_grip ? ACTIVE : NORMAL; break; } case SDL_MOUSEBUTTONDOWN: { SDL_MouseButtonEvent const &e = event.button; bool on_grip = point_in_rect(e.x, e.y, grip); bool on_groove = point_in_rect(e.x, e.y, groove); if (on_groove && e.button == SDL_BUTTON_WHEELDOWN) { move_position(scroll_rate_); } else if (on_groove && e.button == SDL_BUTTON_WHEELUP) { move_position(-scroll_rate_); } else if (on_grip && e.button == SDL_BUTTON_LEFT) { mousey_on_grip_ = e.y - grip.y; new_state = DRAGGED; } else if (on_groove && e.button == SDL_BUTTON_LEFT && groove.h != grip.h) { if (e.y < grip.y) move_position(-static_cast<int>(grip_height_)); else move_position(grip_height_); } else if (on_groove && e.button == SDL_BUTTON_MIDDLE) { int y_dep = e.y - grip.y - grip.h/2; int dep = y_dep * int(full_height_ - grip_height_)/ int(groove.h - grip.h); move_position(dep); } break; } case SDL_MOUSEMOTION: { SDL_MouseMotionEvent const &e = event.motion; if (state_ == NORMAL || state_ == ACTIVE) { bool on_grip = point_in_rect(e.x, e.y, grip); new_state = on_grip ? ACTIVE : NORMAL; } else if (state_ == DRAGGED && groove.h != grip.h) { int y_dep = e.y - grip.y - mousey_on_grip_; int dep = y_dep * static_cast<int>(full_height_ - grip_height_) / static_cast<int>(groove.h - grip.h); move_position(dep); } break; } default: break; } if ((new_state == NORMAL) ^ (state_ == NORMAL)) { set_dirty(); mid_scaled_.assign(NULL); } state_ = new_state; }