Exemple #1
0
        private void WindowSizeChanged()
        {
            int width, height;

            SDL.SDL_GetWindowSize(_window, out width, out height);


            _rectangle = FiguresFactory.CreateRectangle(
                width / 2, height / 2, _defaultRotationAngle,
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders,
                width - 300, height - 300
                );
            _trapeze.SetMovementBorders(
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders
                );
            _ellipse.SetMovementBorders(
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders
                );
        }
Exemple #2
0
        private void InitializeFigures()
        {
            int width, height;

            SDL.SDL_GetWindowSize(_window, out width, out height);

            _rectangle = FiguresFactory.CreateRectangle(
                width / 2, height / 2, _defaultRotationAngle,
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders,
                width - 300, height - 300
                );
            _trapeze = FiguresFactory.CreateTrapeze(
                115, height / 2 + 15, _defaultRotationAngle,
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders,
                200, 100
                );
            _ellipse = FiguresFactory.CreateEllipse(
                width - 100, height / 2, _defaultRotationAngle,
                _offsetFromBorders, width - _offsetFromBorders, _offsetFromBorders, height - _offsetFromBorders,
                100, 57
                );
            _currentFigure = _trapeze;
            PerformClipping();
        }
Exemple #3
0
        private void WindowProcedure()
        {
            bool exit = false;

            while (!exit)
            {
                SDL.SDL_Event sdlEvent;
                SDL.SDL_PollEvent(out sdlEvent);
                switch (sdlEvent.type)
                {
                case SDL.SDL_EventType.SDL_QUIT:
                {
                    exit = true;
                    break;
                }

                case SDL.SDL_EventType.SDL_WINDOWEVENT:
                {
                    switch (sdlEvent.window.windowEvent)
                    {
                    case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_SIZE_CHANGED:
                        lock (_workWithFigures)
                        {
                            WindowSizeChanged();
                        }
                        break;
                    }

                    break;
                }

                case SDL.SDL_EventType.SDL_KEYDOWN:
                {
                    var key = sdlEvent.key;

                    if (!_isTimerWork)
                    {
                        switch (key.keysym.sym)
                        {
                        case SDL.SDL_Keycode.SDLK_w:
                            _currentFigure.Move(MoveDirection.Up);
                            break;

                        case SDL.SDL_Keycode.SDLK_a:
                            _currentFigure.Move(MoveDirection.Left);
                            break;

                        case SDL.SDL_Keycode.SDLK_s:
                            _currentFigure.Move(MoveDirection.Down);
                            break;

                        case SDL.SDL_Keycode.SDLK_d:
                            _currentFigure.Move(MoveDirection.Right);
                            break;

                        case SDL.SDL_Keycode.SDLK_q:
                            _currentFigure.Rotate(RotateDirection.Left);
                            break;

                        case SDL.SDL_Keycode.SDLK_e:
                            _currentFigure.Rotate(RotateDirection.Right);
                            break;
                        }
                    }

                    switch (key.keysym.sym)
                    {
                    case SDL.SDL_Keycode.SDLK_SPACE:
                        ChangeTimerState();
                        break;

                    case SDL.SDL_Keycode.SDLK_1:
                        _currentFigure = _trapeze;
                        break;

                    case SDL.SDL_Keycode.SDLK_2:
                        _currentFigure = _ellipse;
                        break;

                    case SDL.SDL_Keycode.SDLK_F1:
                        _rectabgleDrawer = DrawerFactory.SquareDrawer;
                        _trapezeDrawer   = DrawerFactory.SquareDrawer;
                        _ellipseDrawer   = DrawerFactory.RoundDrawer;
                        break;

                    case SDL.SDL_Keycode.SDLK_F2:
                        _rectabgleDrawer = DrawerFactory.UniversalDrawer;
                        _trapezeDrawer   = DrawerFactory.UniversalDrawer;
                        _ellipseDrawer   = DrawerFactory.UniversalDrawer;
                        break;
                    }

                    break;
                }

                case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN:
                {
                    if (sdlEvent.button.button == SDL.SDL_BUTTON_LEFT)
                    {
                        lock (_workWithFigures)
                        {
                            _currentFigure.MoveTo(sdlEvent.button.x, sdlEvent.button.y);
                        }
                    }

                    break;
                }
                }

                _trapeze.CalculateCurrentEdges();
                _ellipse.CalculateCurrentEdges();
                PerformClipping();
                DrawFigures();
                Thread.Sleep(_renderLoopTimeoutMs);
            }
        }