1cb93a386Sopenharmony_ci// 2cb93a386Sopenharmony_ci// Copyright 2015 The ANGLE Project Authors. All rights reserved. 3cb93a386Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be 4cb93a386Sopenharmony_ci// found in the LICENSE file. 5cb93a386Sopenharmony_ci// 6cb93a386Sopenharmony_ci 7cb93a386Sopenharmony_ci// WindowTest.cpp: Sample used to test various function of OSWindow 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_ci#include <algorithm> 10cb93a386Sopenharmony_ci#include <iostream> 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ci#include "util/OSWindow.h" 13cb93a386Sopenharmony_ci#include "util/test_utils.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ciint main(int argc, char *argv[]) 16cb93a386Sopenharmony_ci{ 17cb93a386Sopenharmony_ci OSWindow *window = OSWindow::New(); 18cb93a386Sopenharmony_ci int width = 400; 19cb93a386Sopenharmony_ci int height = 400; 20cb93a386Sopenharmony_ci int x = 0; 21cb93a386Sopenharmony_ci int y = 0; 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_ci if (!window->initialize("Window Test", width, height)) 24cb93a386Sopenharmony_ci { 25cb93a386Sopenharmony_ci return -1; 26cb93a386Sopenharmony_ci } 27cb93a386Sopenharmony_ci window->setVisible(true); 28cb93a386Sopenharmony_ci window->setPosition(x, y); 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci bool running = true; 31cb93a386Sopenharmony_ci while (running) 32cb93a386Sopenharmony_ci { 33cb93a386Sopenharmony_ci Event event; 34cb93a386Sopenharmony_ci while (window->popEvent(&event)) 35cb93a386Sopenharmony_ci { 36cb93a386Sopenharmony_ci if (event.Type == Event::EVENT_CLOSED) 37cb93a386Sopenharmony_ci { 38cb93a386Sopenharmony_ci running = false; 39cb93a386Sopenharmony_ci break; 40cb93a386Sopenharmony_ci } 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_ci if (event.Type == Event::EVENT_KEY_PRESSED) 43cb93a386Sopenharmony_ci { 44cb93a386Sopenharmony_ci int newWidth = width; 45cb93a386Sopenharmony_ci int newHeight = height; 46cb93a386Sopenharmony_ci int newX = x; 47cb93a386Sopenharmony_ci int newY = y; 48cb93a386Sopenharmony_ci switch (event.Key.Code) 49cb93a386Sopenharmony_ci { 50cb93a386Sopenharmony_ci case KEY_ESCAPE: 51cb93a386Sopenharmony_ci running = false; 52cb93a386Sopenharmony_ci break; 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci case KEY_W: 55cb93a386Sopenharmony_ci newWidth = std::max(0, width + (event.Key.Shift ? -20 : 20)); 56cb93a386Sopenharmony_ci break; 57cb93a386Sopenharmony_ci case KEY_H: 58cb93a386Sopenharmony_ci newHeight = std::max(0, height + (event.Key.Shift ? -20 : 20)); 59cb93a386Sopenharmony_ci break; 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ci case KEY_LEFT: 62cb93a386Sopenharmony_ci newX = x - 20; 63cb93a386Sopenharmony_ci break; 64cb93a386Sopenharmony_ci case KEY_RIGHT: 65cb93a386Sopenharmony_ci newX = x + 20; 66cb93a386Sopenharmony_ci break; 67cb93a386Sopenharmony_ci case KEY_UP: 68cb93a386Sopenharmony_ci newY = y - 20; 69cb93a386Sopenharmony_ci break; 70cb93a386Sopenharmony_ci case KEY_DOWN: 71cb93a386Sopenharmony_ci newY = y + 20; 72cb93a386Sopenharmony_ci break; 73cb93a386Sopenharmony_ci 74cb93a386Sopenharmony_ci case KEY_C: 75cb93a386Sopenharmony_ci window->setMousePosition(width / 2, height / 2); 76cb93a386Sopenharmony_ci break; 77cb93a386Sopenharmony_ci case KEY_T: 78cb93a386Sopenharmony_ci window->signalTestEvent(); 79cb93a386Sopenharmony_ci window->messageLoop(); 80cb93a386Sopenharmony_ci if (window->didTestEventFire()) 81cb93a386Sopenharmony_ci { 82cb93a386Sopenharmony_ci std::cout << "Test event did fire" << std::endl; 83cb93a386Sopenharmony_ci } 84cb93a386Sopenharmony_ci else 85cb93a386Sopenharmony_ci { 86cb93a386Sopenharmony_ci std::cout << "Test event did not fire" << std::endl; 87cb93a386Sopenharmony_ci } 88cb93a386Sopenharmony_ci break; 89cb93a386Sopenharmony_ci case KEY_S: 90cb93a386Sopenharmony_ci window->setVisible(false); 91cb93a386Sopenharmony_ci window->messageLoop(); 92cb93a386Sopenharmony_ci angle::Sleep(1000); 93cb93a386Sopenharmony_ci window->setVisible(true); 94cb93a386Sopenharmony_ci window->messageLoop(); 95cb93a386Sopenharmony_ci break; 96cb93a386Sopenharmony_ci 97cb93a386Sopenharmony_ci default: 98cb93a386Sopenharmony_ci break; 99cb93a386Sopenharmony_ci } 100cb93a386Sopenharmony_ci 101cb93a386Sopenharmony_ci if (newWidth != width || newHeight != height) 102cb93a386Sopenharmony_ci { 103cb93a386Sopenharmony_ci width = newWidth; 104cb93a386Sopenharmony_ci height = newHeight; 105cb93a386Sopenharmony_ci window->resize(width, height); 106cb93a386Sopenharmony_ci } 107cb93a386Sopenharmony_ci if (newX != x || newY != y) 108cb93a386Sopenharmony_ci { 109cb93a386Sopenharmony_ci x = newX; 110cb93a386Sopenharmony_ci y = newY; 111cb93a386Sopenharmony_ci window->setPosition(x, y); 112cb93a386Sopenharmony_ci } 113cb93a386Sopenharmony_ci 114cb93a386Sopenharmony_ci angle::Sleep(0); 115cb93a386Sopenharmony_ci window->messageLoop(); 116cb93a386Sopenharmony_ci if (window->getWidth() != width || window->getHeight() != height) 117cb93a386Sopenharmony_ci { 118cb93a386Sopenharmony_ci std::cout << "Discrepancy between set dimensions and retrieved dimensions" 119cb93a386Sopenharmony_ci << std::endl; 120cb93a386Sopenharmony_ci std::cout << "Width: " << width << " vs. " << window->getWidth() << std::endl; 121cb93a386Sopenharmony_ci std::cout << "Height: " << height << " vs. " << window->getHeight() 122cb93a386Sopenharmony_ci << std::endl; 123cb93a386Sopenharmony_ci } 124cb93a386Sopenharmony_ci if (window->getX() != x || window->getY() != y) 125cb93a386Sopenharmony_ci { 126cb93a386Sopenharmony_ci std::cout << "Discrepancy between set position and retrieved position" 127cb93a386Sopenharmony_ci << std::endl; 128cb93a386Sopenharmony_ci std::cout << "X: " << x << " vs. " << window->getX() << std::endl; 129cb93a386Sopenharmony_ci std::cout << "Y: " << y << " vs. " << window->getY() << std::endl; 130cb93a386Sopenharmony_ci } 131cb93a386Sopenharmony_ci } 132cb93a386Sopenharmony_ci } 133cb93a386Sopenharmony_ci 134cb93a386Sopenharmony_ci angle::Sleep(0); 135cb93a386Sopenharmony_ci window->messageLoop(); 136cb93a386Sopenharmony_ci } 137cb93a386Sopenharmony_ci 138cb93a386Sopenharmony_ci window->destroy(); 139cb93a386Sopenharmony_ci} 140