/**************************************************************************** * include/nuttx/nx/nxbe.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. The * ASF licenses this file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * ****************************************************************************/ #ifndef __INCLUDE_NUTTX_NX_NXBE_H #define __INCLUDE_NUTTX_NX_NXBE_H /**************************************************************************** * Included Files ****************************************************************************/ #include #include #include #include #include /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ /* Configuration ************************************************************/ #ifndef CONFIG_NX_NPLANES # define CONFIG_NX_NPLANES 1 /* Max number of color planes supported */ #endif #ifndef CONFIG_NX_NCOLORS # define CONFIG_NX_NCOLORS 256 #endif /* NXBE Definitions *********************************************************/ /* Window flags and helper macros: * * NXBE_WINDOW_BLOCKED - Window input is blocked (internal use only) * NXBE_WINDOW_FRAMED - Framed (NxTK) Window * NXBE_WINDOW_RAMBACKED - Window is backed by a framebuffer * NXBE_WINDOW_MODAL - Window is in a focused, modal state * NXBE_WINDOW_HIDDEN - Window is hidden */ #define NXBE_WINDOW_BLOCKED (1 << 0) /* Bit 0: The window is blocked and will * not receive further input. */ #define NXBE_WINDOW_FRAMED (1 << 1) /* Bit 1: Framed (NxTK) Window */ #define NXBE_WINDOW_RAMBACKED (1 << 2) /* Bit 2: Window is backed by a framebuffer */ #define NXBE_WINDOW_MODAL (1 << 3) /* Bit 3: Window is in a focused, modal state */ #define NXBE_WINDOW_HIDDEN (1 << 4) /* Bit 4: Window is hidden */ /* Valid user flags for different window types. This is the subset of flags * that may be passed with nx_openwindow() or nxtk_openwindow. Most of the * flags are controlled internally or must be selected via NX interfaces. * These may be selected by the user when the window is created. * * Exception: NXBE_WINDOW_FRAMED is not user-selectable. It is * automatically set by nxtk_openwindow() but appears to be a user * setting from the point of view of lower layers. */ #ifdef CONFIG_NX_RAMBACKED # define NX_WINDOW_USER (NXBE_WINDOW_RAMBACKED | NXBE_WINDOW_HIDDEN) #else # define NX_WINDOW_USER NXBE_WINDOW_HIDDEN #endif #define NXTK_WINDOW_USER (NXBE_WINDOW_FRAMED | NX_WINDOW_USER) /* This is the set of startup flags that could be received in NXBE. */ #define NXBE_WINDOW_USER (NXBE_WINDOW_FRAMED | NX_WINDOW_USER) /* Helpful flag macros */ #define NXBE_ISBLOCKED(wnd) \ (((wnd)->flags & NXBE_WINDOW_BLOCKED) != 0) #define NXBE_SETBLOCKED(wnd) \ do { (wnd)->flags |= NXBE_WINDOW_BLOCKED; } while (0) #define NXBE_CLRBLOCKED(wnd) \ do { (wnd)->flags &= ~NXBE_WINDOW_BLOCKED; } while (0) #define NXBE_ISFRAMED(wnd) \ (((wnd)->flags & NXBE_WINDOW_FRAMED) != 0) #define NXBE_SETFRAMED(wnd) \ do { (wnd)->flags |= NXBE_WINDOW_FRAMED; } while (0) #define NXBE_CLRFRAMED(wnd) \ do { (wnd)->flags &= ~NXBE_WINDOW_FRAMED; } while (0) #define NXBE_ISRAMBACKED(wnd) \ (((wnd)->flags & NXBE_WINDOW_RAMBACKED) != 0) #define NXBE_SETRAMBACKED(wnd) \ do { (wnd)->flags |= NXBE_WINDOW_RAMBACKED; } while (0) #define NXBE_CLRRAMBACKED(wnd) \ do { (wnd)->flags &= ~NXBE_WINDOW_RAMBACKED; } while (0) #define NXBE_ISMODAL(wnd) \ (((wnd)->flags & NXBE_WINDOW_MODAL) != 0) #define NXBE_SETMODAL(wnd) \ do { (wnd)->flags |= NXBE_WINDOW_MODAL; } while (0) #define NXBE_CLRMODAL(wnd) \ do { (wnd)->flags &= ~NXBE_WINDOW_MODAL; } while (0) #define NXBE_ISHIDDEN(wnd) \ (((wnd)->flags & NXBE_WINDOW_HIDDEN) != 0) #define NXBE_SETHIDDEN(wnd) \ do { (wnd)->flags |= NXBE_WINDOW_HIDDEN; } while (0) #define NXBE_CLRHIDDEN(wnd) \ do { (wnd)->flags &= ~NXBE_WINDOW_HIDDEN; } while (0) /**************************************************************************** * Public Types ****************************************************************************/ /* Windows ******************************************************************/ /* This structure represents one window. This is the "base" form of the * opaque types NXWINDOW and NXTKWINDOW. Any Window implementation must * be described with a structure that is at least cast-compatible with * struct nxbe_window_s. */ struct nxbe_state_s; struct nxmu_conn_s; struct nxbe_window_s { /* State information */ FAR struct nxbe_state_s *be; /* The back-end state structure */ FAR struct nxmu_conn_s *conn; /* Connection to the window client */ FAR const struct nx_callback_s *cb; /* Event handling callbacks */ /* The following links provide the window's vertical position using a * singly linked list. */ FAR struct nxbe_window_s *above; /* The window "above" this window */ FAR struct nxbe_window_s *below; /* The window "below this one */ /* Window geometry. The window is described by a rectangle in the * absolute screen coordinate system (0,0)->(xres,yres) */ struct nxgl_rect_s bounds; /* The bounding rectangle of the window */ /* Window flags (see the NXBE_* bit definitions above) */ uint8_t flags; #ifdef CONFIG_NX_RAMBACKED /* Per-window framebuffer support */ #ifdef CONFIG_BUILD_KERNEL uint16_t npages; /* Number of pages in allocation */ #endif nxgl_coord_t stride; /* Width of framebuffer in bytes */ FAR nxgl_mxpixel_t *fbmem; /* Allocated framebuffer in kernel * address spaced. Must be contiguous. */ #endif /* Client state information this is provide in window callbacks * Set by nx_openwindow, nx_requestbkgd, nxtk_openwindow, or * nxtk_opentoolbar and persists for the life of the window. */ FAR void *arg; }; /**************************************************************************** * Public Data ****************************************************************************/ #undef EXTERN #if defined(__cplusplus) #define EXTERN extern "C" extern "C" { #else #define EXTERN extern #endif /**************************************************************************** * Public Functions Definitions ****************************************************************************/ #undef EXTERN #if defined(__cplusplus) } #endif #endif /* __INCLUDE_NUTTX_NX_NXBE_H */