mirror of
https://github.com/google/pebble.git
synced 2025-05-04 17:01:40 -04:00
101 lines
4.4 KiB
C
101 lines
4.4 KiB
C
/*
|
|
* Copyright 2024 Google LLC
|
|
*
|
|
* Licensed 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.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "window.h"
|
|
#include "window_stack.h"
|
|
|
|
#include "util/list.h"
|
|
|
|
//! @addtogroup UI
|
|
//! @{
|
|
//! @addtogroup WindowStack Window Stack
|
|
//! \brief The multiple window manager
|
|
//!
|
|
//! In Pebble OS, the window stack serves as the global manager of what window is presented,
|
|
//! ensuring that input events are forwarded to the topmost window.
|
|
//! The navigation model of Pebble centers on the concept of a vertical “stack” of windows, similar
|
|
//! to mobile app interactions.
|
|
//!
|
|
//! In working with the Window Stack API, the basic operations include push and pop. When an app wants to
|
|
//! display a new window, it pushes a new window onto the stack. This appears like a window sliding in
|
|
//! from the right. As an app is closed, the window is popped off the stack and disappears.
|
|
//!
|
|
//! For more complicated operations, involving multiple windows, you can determine which windows reside
|
|
//! on the stack, using window_stack_contains_window() and remove any specific window, using window_stack_remove().
|
|
//!
|
|
//! Refer to the \htmlinclude UiFramework.html (chapter "Window Stack") for a conceptual overview
|
|
//! of the window stack and relevant code examples.
|
|
//!
|
|
//! Also see the \ref WindowHandlers of a \ref Window for the callbacks that can be added to a window
|
|
//! in order to act upon window stack transitions.
|
|
//!
|
|
//! @{
|
|
|
|
//! Pushes the given window on the window navigation stack,
|
|
//! on top of the current topmost window of the app.
|
|
//! @param window The window to push on top
|
|
//! @param animated Pass in `true` to animate the push using a sliding animation,
|
|
//! or `false` to skip the animation.
|
|
void app_window_stack_push(Window *window, bool animated);
|
|
|
|
//! Inserts the given window below the topmost window on the window
|
|
//! navigation stack. If there is no window on the navigation stack, this is
|
|
//! the same as calling \ref window_stack_push() , otherwise, when the topmost
|
|
//! window is popped, this window will be visible.
|
|
//! @param window The window to insert next
|
|
void app_window_stack_insert_next(Window *window);
|
|
|
|
//! Pops the topmost window on the navigation stack
|
|
//! @param animated See \ref window_stack_remove()
|
|
//! @return The window that is popped, or NULL if there are no windows to pop.
|
|
Window* app_window_stack_pop(bool animated);
|
|
|
|
//! Pops all windows.
|
|
//! See \ref window_stack_remove() for a description of the `animated` parameter and notes.
|
|
void app_window_stack_pop_all(const bool animated);
|
|
|
|
//! Removes a given window from the window stack
|
|
//! that belongs to the app task.
|
|
//! @note If there are no windows for the app left on the stack, the app
|
|
//! will be killed by the system, shortly. To avoid this, make sure
|
|
//! to push another window shortly after or before removing the last window.
|
|
//! @param window The window to remove. If the window is NULL or if it
|
|
//! is not on the stack, this function is a no-op.
|
|
//! @param animated Pass in `true` to animate the removal of the window using
|
|
//! a side-to-side sliding animation to reveal the next window.
|
|
//! This is only used in case the window happens to be on top of the window
|
|
//! stack (thus visible).
|
|
//! @return True if window was successfully removed, false otherwise.
|
|
bool app_window_stack_remove(Window *window, bool animated);
|
|
|
|
//! Gets the topmost window on the stack that belongs to the app.
|
|
//! @return The topmost window on the stack that belongs to the app or
|
|
//! NULL if no app window could be found.
|
|
Window* app_window_stack_get_top_window(void);
|
|
|
|
//! Checks if the window is on the window stack
|
|
//! @param window The window to look for on the window stack
|
|
//! @return true if the window is currently on the window stack.
|
|
bool app_window_stack_contains_window(Window *window);
|
|
|
|
//! @internal
|
|
//! @return count of the number of windows are on the app window stack
|
|
uint32_t app_window_stack_count(void);
|
|
|
|
//! @} // end addtogroup WindowStack
|
|
//! @} // end addtogroup UI
|