1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
/* ========================================================================= */
/**
* @file titlebar.h
*
* @copyright
* Copyright 2023 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
*
* https://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 __WLMTK_TITLEBAR_H__
#define __WLMTK_TITLEBAR_H__
#include <libbase/libbase.h>
#include <stdbool.h>
#include <stdint.h>
/** Forward declaration: Title bar. */
typedef struct _wlmtk_titlebar_t wlmtk_titlebar_t;
#include "element.h"
#include "style.h"
#include "window.h" // IWYU pragma: keep
/** Properties of the titlebar: Which buttons to show. */
typedef enum {
/** Whether the 'iconify' button is shown. */
WLMTK_TITLEBAR_PROPERTY_ICONIFY = UINT32_C(1) << 0,
/** Whether the 'close' button is shown. */
WLMTK_TITLEBAR_PROPERTY_CLOSE = UINT32_C(1) << 1
} wlmtk_titlebar_property_t;
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/**
* Creates a title bar, suitable as a window title.
*
* @param window_ptr
* @param style_ptr
*
* @return Pointer to the title bar state, or NULL on error. Must be free'd
* by calling @ref wlmtk_titlebar_destroy.
*/
wlmtk_titlebar_t *wlmtk_titlebar2_create(
wlmtk_window_t *window_ptr,
const wlmtk_titlebar_style_t *style_ptr);
/**
* Destroys the title bar.
*
* @param titlebar_ptr
*/
void wlmtk_titlebar_destroy(wlmtk_titlebar_t *titlebar_ptr);
/**
* Sets the width of the title bar.
*
* @param titlebar_ptr
* @param width
*
* @return Whether the operation was successful.
*/
bool wlmtk_titlebar_set_width(
wlmtk_titlebar_t *titlebar_ptr,
unsigned width);
/**
* Sets the properties of the title bar.
*
* @param titlebar_ptr
* @param properties See @ref wlmtk_titlebar_property_t.
*/
void wlmtk_titlebar_set_properties(
wlmtk_titlebar_t *titlebar_ptr,
uint32_t properties);
/**
* Sets whether the title bar is activated.
*
* @param titlebar_ptr
* @param activated
*/
void wlmtk_titlebar_set_activated(
wlmtk_titlebar_t *titlebar_ptr,
bool activated);
/** Returns whether the title bar is activated. */
bool wlmtk_titlebar_is_activated(wlmtk_titlebar_t *titlebar_ptr);
/**
* Updates the title text of the titlebar.
*
* @param titlebar_ptr
* @param title_ptr Expected to remain valid until the next call of
* @ref wlmtk_titlebar_set_title or until the
* `titlebar_ptr` is destroyed.
*/
void wlmtk_titlebar_set_title(
wlmtk_titlebar_t *titlebar_ptr,
const char *title_ptr);
/**
* Returns the super Element of the titlebar.
*
* @param titlebar_ptr
*
* @return Pointer to the @ref wlmtk_element_t base instantiation to
* titlebar_ptr.
*/
wlmtk_element_t *wlmtk_titlebar_element(wlmtk_titlebar_t *titlebar_ptr);
/** Unit test cases. */
extern const bs_test_case_t wlmtk_titlebar_test_cases[];
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif /* __WLMTK_TITLEBAR_H__ */
/* == End of titlebar.h ==================================================== */
|