static JSValueRef mouseMoveToCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { if (argumentCount < 2) return JSValueMakeUndefined(context); lastMousePosition.x = (int)JSValueToNumber(context, arguments[0], exception); ASSERT(!exception || !*exception); lastMousePosition.y = (int)JSValueToNumber(context, arguments[1], exception); ASSERT(!exception || !*exception); MSG msg = makeMsg(webViewWindow, WM_MOUSEMOVE, down ? MK_LBUTTON : 0, MAKELPARAM(lastMousePosition.x, lastMousePosition.y)); if (dragMode && down && !replayingSavedEvents) { msgQueue[endOfQueue++].msg = msg; return JSValueMakeUndefined(context); } doMouseMove(msg); return JSValueMakeUndefined(context); }
void replaySavedEvents() { replayingSavedEvents = true; MSG emptyMsg = {0}; while (startOfQueue < endOfQueue) { MSG msg = msgQueue[startOfQueue++]; switch (msg.message) { case WM_LBUTTONUP: doMouseUp(msg); break; case WM_MOUSEMOVE: doMouseMove(msg); break; default: // Not reached break; } } startOfQueue = 0; endOfQueue = 0; replayingSavedEvents = false; }
void replaySavedEvents(HRESULT* oleDragAndDropReturnValue) { replayingSavedEvents = true; MSG msg = { 0 }; while (startOfQueue < endOfQueue && !msgQueue[startOfQueue].delay) { msg = msgQueue[startOfQueue++].msg; switch (msg.message) { case WM_LBUTTONUP: case WM_RBUTTONUP: case WM_MBUTTONUP: doMouseUp(msg, oleDragAndDropReturnValue); break; case WM_MOUSEMOVE: doMouseMove(msg); break; case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_MBUTTONDOWN: dispatchMessage(&msg); break; default: // Not reached break; } } int numQueuedMessages = endOfQueue - startOfQueue; if (!numQueuedMessages) { startOfQueue = 0; endOfQueue = 0; replayingSavedEvents = false; ASSERT(!down); return; } if (msgQueue[startOfQueue].delay) { ::Sleep(msgQueue[startOfQueue].delay); msgQueue[startOfQueue].delay = 0; } ::PostMessage(webViewWindow, WM_DRT_SEND_QUEUED_EVENT, 0, 0); while (::GetMessage(&msg, webViewWindow, 0, 0)) { // FIXME: Why do we get a WM_MOUSELEAVE? it breaks tests if (msg.message == WM_MOUSELEAVE) continue; if (msg.message != WM_DRT_SEND_QUEUED_EVENT) { dispatchMessage(&msg); continue; } msg = msgQueue[startOfQueue++].msg; switch (msg.message) { case WM_LBUTTONUP: case WM_RBUTTONUP: case WM_MBUTTONUP: doMouseUp(msg, oleDragAndDropReturnValue); break; case WM_MOUSEMOVE: doMouseMove(msg); break; case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_MBUTTONDOWN: dispatchMessage(&msg); break; default: // Not reached break; } if (startOfQueue >= endOfQueue) break; ::Sleep(msgQueue[startOfQueue].delay); msgQueue[startOfQueue].delay = 0; ::PostMessage(webViewWindow, WM_DRT_SEND_QUEUED_EVENT, 0, 0); } startOfQueue = 0; endOfQueue = 0; replayingSavedEvents = false; }
int main(){ logger.logNoEndl("Setting up window..."); window.create(sf::VideoMode(430,430), "GL"); logger.continueln(" done!"); logger.logNoEndl("Setting up variables..."); rect1.setFillColor(sf::Color(200,200,200)); rect1.setOutlineColor(sf::Color(0,0,0)); rect1.setOutlineThickness(-2); rect1.setPosition(10,10); rect2.setFillColor(sf::Color(200,200,200)); rect2.setOutlineColor(sf::Color(0,0,0)); rect2.setOutlineThickness(-2); rect2.setPosition(220,10); rect3.setFillColor(sf::Color(200,200,200)); rect3.setOutlineColor(sf::Color(0,0,0)); rect3.setOutlineThickness(-2); rect3.setPosition(10,220); rect4.setFillColor(sf::Color(200,200,200)); rect4.setOutlineColor(sf::Color(0,0,0)); rect4.setOutlineThickness(-2); rect4.setPosition(220,220); sf::Font font; if (!font.loadFromFile("arial.ttf")){ logger.log(Logger::LogType::Error, "Arial font not found. Cannot continue..."); return 1; } sf::Text label1("Solid White", font); label1.setColor(sf::Color::Black); label1.setPosition(rect1.getPosition().x + rect1.getSize().x / 2 - label1.getLocalBounds().width / 2, rect1.getPosition().y + rect1.getSize().y / 2 - label1.getLocalBounds().height / 2 - 10); sf::Text label2("Marquee", font); label2.setColor(sf::Color::Black); label2.setPosition(rect2.getPosition().x + rect2.getSize().x / 2 - label2.getLocalBounds().width / 2, rect2.getPosition().y + rect2.getSize().y / 2 - label2.getLocalBounds().height / 2 - 10); sf::Text label3("Color Cycle", font); label3.setColor(sf::Color::Black); label3.setPosition(rect3.getPosition().x + rect3.getSize().x / 2 - label3.getLocalBounds().width / 2, rect3.getPosition().y + rect3.getSize().y / 2 - label3.getLocalBounds().height / 2 - 10); sf::Text label4("Pew", font); label4.setColor(sf::Color::Black); label4.setPosition(rect4.getPosition().x + rect4.getSize().x / 2 - label4.getLocalBounds().width / 2, rect4.getPosition().y + rect4.getSize().y / 2 - label4.getLocalBounds().height / 2 - 10); unsigned short r = 0, g = 0, b = 0; logger.continueln(" done!"); logger.log("Running until told to stop."); bool running = true; while(running){ sf::Event event; while (window.pollEvent(event)){ if (event.type == sf::Event::Closed){ running = false; } else if (event.type == sf::Event::MouseMoved){ doMouseMove(); } else if (event.type == sf::Event::MouseButtonPressed || event.type == sf::Event::MouseButtonReleased){ doMouseButton(event.mouseButton.button); } } window.clear(sf::Color::White); window.draw(rect1); window.draw(rect2); window.draw(rect3); window.draw(rect4); window.draw(label1); window.draw(label2); window.draw(label3); window.draw(label4); window.display(); } logger.log("Closing..."); }