diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2020-12-29 16:09:43 +0100 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2020-12-29 16:39:54 +0100 |
commit | 645250e1cd8ce9bc1faea599df7a1b05836bfeb8 (patch) | |
tree | c6311afab3900d2dd2aecbfbe1ac348d0e48c428 /dggui/window.h | |
parent | dce64999d3325c5b55499d6ba657066efa48fbff (diff) |
Split UI code into application/plugin UI and UI library.
Diffstat (limited to 'dggui/window.h')
-rw-r--r-- | dggui/window.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/dggui/window.h b/dggui/window.h new file mode 100644 index 0000000..6031500 --- /dev/null +++ b/dggui/window.h @@ -0,0 +1,119 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * window.h + * + * Sun Oct 9 13:11:52 CEST 2011 + * Copyright 2011 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DrumGizmo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with DrumGizmo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#pragma once + +#include "widget.h" + +#include "pixelbuffer.h" +#include "nativewindow.h" +#include "image.h" +#include "eventhandler.h" +#include "imagecache.h" + +namespace GUI +{ + +class Window + : public Widget +{ +public: + Window(void* native_window = nullptr); + ~Window(); + + void setFixedSize(int width, int height); + void setAlwaysOnTop(bool always_on_top); + void setCaption(const std::string& caption); + + // From Widget: + void resize(std::size_t width, std::size_t height) override; + void move(int x, int y) override; + void show() override; + void hide() override; + Window* window() override; + Size getNativeSize(); + ImageCache& getImageCache() override; + + EventHandler* eventHandler(); + + Widget* keyboardFocus(); + void setKeyboardFocus(Widget* widget); + + Widget* buttonDownFocus(); + void setButtonDownFocus(Widget* widget); + + Widget* mouseFocus(); + void setMouseFocus(Widget* widget); + + //! Tag the window buffer dirty to be rendered. + void needsRedraw(); + + // \returns the native window handle, it HWND on Win32 or Window id on X11 + void* getNativeWindowHandle() const; + + //! Translate a local window coordinate to a global screen coordinate. + Point translateToScreen(const Point& point); + +protected: + // For the EventHandler + friend class EventHandler; + + // From Widget: + std::size_t translateToWindowX() override; + std::size_t translateToWindowY() override; + void resized(std::size_t width, std::size_t height); + void moved(int x, int y); + + //! Returns true if window pixel buffer changed and needs to be copied to + //! native window. + bool updateBuffer(); + + // For the Painter + friend class Widget; + + // For the NativeWindow implementations: + friend class NativeWindowX11; + friend class NativeWindowWin32; + friend class NativeWindowPugl; + friend class NativeWindowCocoa; + PixelBuffer wpixbuf; + + size_t refcount{0}; + + Widget* _keyboardFocus{nullptr}; + Widget* _buttonDownFocus{nullptr}; + Widget* _mouseFocus{nullptr}; + + NativeWindow* native{nullptr}; + EventHandler* eventhandler{nullptr}; + + size_t maxRefcount{0}; + + bool needs_redraw{false}; + ImageCache image_cache; +}; + +} // GUI:: |